{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/graphql/module/type/definition.js","webpack:///./node_modules/aurelia-framework/dist/native-modules/aurelia-framework.js","webpack:///./node_modules/aurelia-templating/dist/native-modules/aurelia-templating.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/change-orders/services/change_order_service.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/orders/services/import-orders-service.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/orders/models/import-order-batch.ts","webpack:///./node_modules/crypto-js/hmac-sha256.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/items/models/winery-transfer.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/returns/models/return-record.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/login/models/login-passport.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-ui/screen-size/screen-size-utility.ts","webpack:///./node_modules/aws-sdk/lib/model/shape.js","webpack:///./node_modules/url/url.js","webpack:///./node_modules/graphql/module/language/lexer.js","webpack:///./node_modules/aws-sdk/clients/sts.js","webpack:///./node_modules/aurelia-history/dist/native-modules/aurelia-history.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/orders/models/import-order-setup.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/billing/models/invoice.ts","webpack:///./node_modules/@aws-amplify/core/lib/Facet.js","webpack:///./node_modules/aws-sdk/lib/protocol/rest.js","webpack:///./node_modules/aws-sdk/lib/browserHashUtils.js","webpack:///./node_modules/@aws-amplify/core/lib/Amplify.js","webpack:///./node_modules/@aws-amplify/cache/lib/index.js","webpack:///./node_modules/uuid/index.js","webpack:///./node_modules/graphql/module/jsutils/invariant.js","webpack:///./node_modules/zen-observable/index.js","webpack:///./node_modules/crypto-js/sha256.js","webpack:///./node_modules/graphql/module/utilities/valueFromASTUntyped.js","webpack:///./node_modules/graphql/module/error/printError.js","webpack:///./node_modules/graphql/module/utilities/assertValidName.js","webpack:///./node_modules/graphql/module/error/locatedError.js","webpack:///./node_modules/graphql/module/validation/rules/UniqueOperationNames.js","webpack:///./node_modules/graphql/module/validation/rules/LoneAnonymousOperation.js","webpack:///./node_modules/graphql/module/validation/rules/SingleFieldSubscriptions.js","webpack:///./node_modules/graphql/module/validation/rules/KnownTypeNames.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-models/record-reference.ts","webpack:///./node_modules/graphql/module/validation/rules/FragmentsOnCompositeTypes.js","webpack:///./node_modules/graphql/module/validation/rules/VariablesAreInputTypes.js","webpack:///./node_modules/graphql/module/validation/rules/ScalarLeafs.js","webpack:///./node_modules/graphql/module/validation/rules/FieldsOnCorrectType.js","webpack:///./node_modules/graphql/module/validation/rules/UniqueFragmentNames.js","webpack:///./node_modules/graphql/module/validation/rules/KnownFragmentNames.js","webpack:///./node_modules/graphql/module/validation/rules/NoUnusedFragments.js","webpack:///./node_modules/graphql/module/validation/rules/PossibleFragmentSpreads.js","webpack:///./node_modules/graphql/module/validation/rules/NoFragmentCycles.js","webpack:///./node_modules/graphql/module/validation/rules/UniqueVariableNames.js","webpack:///./node_modules/graphql/module/type/wrappers.js","webpack:///./node_modules/graphql/module/validation/rules/NoUndefinedVariables.js","webpack:///./node_modules/graphql/module/validation/rules/NoUnusedVariables.js","webpack:///./node_modules/graphql/module/validation/rules/KnownDirectives.js","webpack:///./node_modules/graphql/module/validation/rules/UniqueDirectivesPerLocation.js","webpack:///./node_modules/graphql/module/validation/rules/KnownArgumentNames.js","webpack:///./node_modules/graphql/module/validation/rules/UniqueArgumentNames.js","webpack:///./node_modules/graphql/module/validation/rules/ProvidedNonNullArguments.js","webpack:///./node_modules/graphql/module/validation/rules/VariablesDefaultValueAllowed.js","webpack:///./node_modules/graphql/module/validation/rules/VariablesInAllowedPosition.js","webpack:///./node_modules/graphql/module/validation/rules/OverlappingFieldsCanBeMerged.js","webpack:///./node_modules/graphql/module/language/directiveLocation.js","webpack:///./node_modules/graphql/module/validation/rules/UniqueInputFieldNames.js","webpack:///./node_modules/graphql/module/validation/specifiedRules.js","webpack:///./node_modules/graphql/module/validation/rules/ExecutableDefinitions.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-ui/error-message/error-message-utility.ts","webpack:///./node_modules/crypto-js/enc-base64.js","webpack:///./node_modules/graphql/module/language/blockStringValue.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/notifications/services/notification-service.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-service/update-record-service.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-models/update-record-request.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/orders/models/integrated-ship-method.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/billing/models/billing-rate.ts","webpack:///./node_modules/graphql/module/type/introspection.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/billing/models/zones.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/billing/models/credit-memo.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/items/services/winery-transfer-service.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/returns/services/return-service.ts","webpack:///./node_modules/timers-browserify/main.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/aws-sdk/lib/protocol/json.js","webpack:///./node_modules/aws-sdk/lib/json/builder.js","webpack:///./node_modules/aws-sdk/lib/json/parser.js","webpack:///./node_modules/aws-sdk/lib/protocol/helpers.js","webpack:///./node_modules/aws-sdk/lib/core.js","webpack:///./node_modules/jmespath/jmespath.js","webpack:///./node_modules/@aws-amplify/core/lib/StorageHelper/index.js","webpack:///./node_modules/@aws-amplify/cache/lib/Utils/index.js","webpack:///./node_modules/@aws-amplify/analytics/lib/vendor/dom-utils/matches.js","webpack:///./node_modules/graphql/module/graphql.js","webpack:///./node_modules/graphql/module/subscription/subscribe.js","webpack:///./node_modules/graphql/error/GraphQLError.js","webpack:///./node_modules/@aws-amplify/pubsub/lib/Providers/MqttOverWSProvider.js","webpack:///./node_modules/@aws-amplify/xr/lib/Errors.js","webpack:///./node_modules/graphql/module/type/scalars.js","webpack:///./node_modules/aurelia-configuration/dist/native-modules/aurelia-configuration.js","webpack:///./node_modules/aurelia-route-recognizer/dist/native-modules/aurelia-route-recognizer.js","webpack:///./node_modules/aurelia-configuration/dist/native-modules/deep-extend.js","webpack:///./node_modules/moment/locale/af.js","webpack:///./node_modules/moment/locale/ar.js","webpack:///./node_modules/moment/locale/ar-dz.js","webpack:///./node_modules/moment/locale/ar-kw.js","webpack:///./node_modules/moment/locale/ar-ly.js","webpack:///./node_modules/moment/locale/ar-ma.js","webpack:///./node_modules/moment/locale/ar-sa.js","webpack:///./node_modules/@aws-amplify/core/lib/index.js","webpack:///./node_modules/moment/locale/ar-tn.js","webpack:///./node_modules/moment/locale/az.js","webpack:///./node_modules/moment/locale/be.js","webpack:///./node_modules/moment/locale/bg.js","webpack:///./node_modules/moment/locale/bm.js","webpack:///./node_modules/moment/locale/bn.js","webpack:///./node_modules/moment/locale/bo.js","webpack:///./node_modules/moment/locale/br.js","webpack:///./node_modules/moment/locale/bs.js","webpack:///./node_modules/moment/locale/ca.js","webpack:///./node_modules/graphql/module/language/kinds.js","webpack:///./node_modules/jquery/dist/jquery.js?28a1","webpack:///./node_modules/moment/locale/cs.js","webpack:///./node_modules/moment/locale/cv.js","webpack:///./node_modules/moment/locale/cy.js","webpack:///./node_modules/moment/locale/da.js","webpack:///./node_modules/moment/locale/de.js","webpack:///./node_modules/moment/locale/de-at.js","webpack:///./node_modules/moment/locale/de-ch.js","webpack:///./node_modules/moment/locale/dv.js","webpack:///./node_modules/moment/locale/el.js","webpack:///./node_modules/moment/locale/en-SG.js","webpack:///./node_modules/aurelia-dependency-injection/dist/native-modules/aurelia-dependency-injection.js","webpack:///./node_modules/moment/locale/en-au.js","webpack:///./node_modules/moment/locale/en-ca.js","webpack:///./node_modules/moment/locale/en-gb.js","webpack:///./node_modules/moment/locale/en-ie.js","webpack:///./node_modules/moment/locale/en-il.js","webpack:///./node_modules/moment/locale/en-nz.js","webpack:///./node_modules/moment/locale/eo.js","webpack:///./node_modules/moment/locale/es.js","webpack:///./node_modules/moment/locale/es-do.js","webpack:///./node_modules/moment/locale/es-us.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-service/default-service.ts","webpack:///./node_modules/moment/locale/et.js","webpack:///./node_modules/moment/locale/eu.js","webpack:///./node_modules/moment/locale/fa.js","webpack:///./node_modules/moment/locale/fi.js","webpack:///./node_modules/moment/locale/fo.js","webpack:///./node_modules/moment/locale/fr.js","webpack:///./node_modules/moment/locale/fr-ca.js","webpack:///./node_modules/moment/locale/fr-ch.js","webpack:///./node_modules/moment/locale/fy.js","webpack:///./node_modules/moment/locale/ga.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/moment/locale/gd.js","webpack:///./node_modules/moment/locale/gl.js","webpack:///./node_modules/moment/locale/gom-latn.js","webpack:///./node_modules/moment/locale/gu.js","webpack:///./node_modules/moment/locale/he.js","webpack:///./node_modules/moment/locale/hi.js","webpack:///./node_modules/moment/locale/hr.js","webpack:///./node_modules/moment/locale/hu.js","webpack:///./node_modules/moment/locale/hy-am.js","webpack:///./node_modules/moment/locale/id.js","webpack:///./node_modules/aurelia-logging/dist/native-modules/aurelia-logging.js","webpack:///./node_modules/moment/locale/is.js","webpack:///./node_modules/moment/locale/it.js","webpack:///./node_modules/moment/locale/it-ch.js","webpack:///./node_modules/moment/locale/ja.js","webpack:///./node_modules/moment/locale/jv.js","webpack:///./node_modules/moment/locale/ka.js","webpack:///./node_modules/moment/locale/kk.js","webpack:///./node_modules/moment/locale/km.js","webpack:///./node_modules/moment/locale/kn.js","webpack:///./node_modules/moment/locale/ko.js","webpack:///./node_modules/graphql/module/type/directives.js","webpack:///./node_modules/moment/locale/ku.js","webpack:///./node_modules/moment/locale/ky.js","webpack:///./node_modules/moment/locale/lb.js","webpack:///./node_modules/moment/locale/lo.js","webpack:///./node_modules/moment/locale/lt.js","webpack:///./node_modules/moment/locale/lv.js","webpack:///./node_modules/moment/locale/me.js","webpack:///./node_modules/moment/locale/mi.js","webpack:///./node_modules/moment/locale/mk.js","webpack:///./node_modules/moment/locale/ml.js","webpack:///./node_modules/graphql/module/jsutils/isInvalid.js","webpack:///./node_modules/moment/locale/mn.js","webpack:///./node_modules/moment/locale/mr.js","webpack:///./node_modules/moment/locale/ms.js","webpack:///./node_modules/moment/locale/ms-my.js","webpack:///./node_modules/moment/locale/mt.js","webpack:///./node_modules/moment/locale/my.js","webpack:///./node_modules/moment/locale/nb.js","webpack:///./node_modules/moment/locale/ne.js","webpack:///./node_modules/moment/locale/nl.js","webpack:///./node_modules/moment/locale/nl-be.js","webpack:///./node_modules/papaparse/papaparse.min.js","webpack:///./node_modules/moment/locale/nn.js","webpack:///./node_modules/moment/locale/pa-in.js","webpack:///./node_modules/moment/locale/pl.js","webpack:///./node_modules/moment/locale/pt.js","webpack:///./node_modules/moment/locale/pt-br.js","webpack:///./node_modules/moment/locale/ro.js","webpack:///./node_modules/moment/locale/ru.js","webpack:///./node_modules/moment/locale/sd.js","webpack:///./node_modules/moment/locale/se.js","webpack:///./node_modules/moment/locale/si.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/change-orders/models/change-order-request.ts","webpack:///./node_modules/moment/locale/sk.js","webpack:///./node_modules/moment/locale/sl.js","webpack:///./node_modules/moment/locale/sq.js","webpack:///./node_modules/moment/locale/sr.js","webpack:///./node_modules/moment/locale/sr-cyrl.js","webpack:///./node_modules/moment/locale/ss.js","webpack:///./node_modules/moment/locale/sv.js","webpack:///./node_modules/moment/locale/sw.js","webpack:///./node_modules/moment/locale/ta.js","webpack:///./node_modules/moment/locale/te.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-models/search-request.ts","webpack:///./node_modules/moment/locale/tet.js","webpack:///./node_modules/moment/locale/tg.js","webpack:///./node_modules/moment/locale/th.js","webpack:///./node_modules/moment/locale/tl-ph.js","webpack:///./node_modules/moment/locale/tlh.js","webpack:///./node_modules/moment/locale/tr.js","webpack:///./node_modules/moment/locale/tzl.js","webpack:///./node_modules/moment/locale/tzm.js","webpack:///./node_modules/moment/locale/tzm-latn.js","webpack:///./node_modules/moment/locale/ug-cn.js","webpack:///./node_modules/aurelia-binding/dist/native-modules/aurelia-binding.js","webpack:///./node_modules/graphql/module/language/printer.js","webpack:///./node_modules/moment/locale/uk.js","webpack:///./node_modules/moment/locale/ur.js","webpack:///./node_modules/moment/locale/uz.js","webpack:///./node_modules/moment/locale/uz-latn.js","webpack:///./node_modules/moment/locale/vi.js","webpack:///./node_modules/moment/locale/x-pseudo.js","webpack:///./node_modules/moment/locale/yo.js","webpack:///./node_modules/moment/locale/zh-cn.js","webpack:///./node_modules/moment/locale/zh-hk.js","webpack:///./node_modules/moment/locale/zh-tw.js","webpack:///./node_modules/graphql/module/error/GraphQLError.js","webpack:///./node_modules/aws-sdk/lib/protocol/query.js","webpack:///./node_modules/aws-sdk/lib/model/collection.js","webpack:///./node_modules/aws-sdk/lib/protocol/rest_json.js","webpack:///./node_modules/aws-sdk/lib/protocol/rest_xml.js","webpack:///./node_modules/aws-sdk/lib/model/api.js","webpack:///./node_modules/aws-sdk/lib/model/operation.js","webpack:///./node_modules/aws-sdk/lib/model/paginator.js","webpack:///./node_modules/aws-sdk/lib/model/resource_waiter.js","webpack:///./node_modules/aws-sdk/lib/sequential_executor.js","webpack:///./node_modules/aws-sdk/lib/credentials.js","webpack:///./node_modules/aurelia-path/dist/native-modules/aurelia-path.js","webpack:///./node_modules/aws-sdk/lib/credentials/credential_provider_chain.js","webpack:///./node_modules/aws-sdk/lib/http.js","webpack:///./node_modules/aws-sdk/lib/signers/v3.js","webpack:///./node_modules/aws-sdk/lib/signers/v4_credentials.js","webpack:///./node_modules/aws-sdk/node_modules/uuid/lib/rng-browser.js","webpack:///./node_modules/aws-sdk/node_modules/uuid/lib/bytesToUuid.js","webpack:///./node_modules/querystring-es3/index.js","webpack:///./node_modules/@aws-amplify/core/lib/OAuthHelper/index.js","webpack:///./node_modules/@aws-amplify/core/lib/Platform/index.js","webpack:///./node_modules/@aws-amplify/analytics/lib/Providers/AWSPinpointProvider.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/orders/models/country-record.ts","webpack:///./node_modules/@aws-amplify/cache/lib/StorageCache.js","webpack:///./node_modules/uuid/lib/rng-browser.js","webpack:///./node_modules/uuid/lib/bytesToUuid.js","webpack:///./node_modules/@aws-amplify/analytics/lib/vendor/dom-utils/closest.js","webpack:///./node_modules/@aws-amplify/analytics/lib/vendor/dom-utils/parents.js","webpack:///./node_modules/lodash/lodash.js","webpack:///./node_modules/@aws-amplify/auth/lib/index.js","webpack:///./node_modules/@aws-amplify/auth/lib/types/Auth.js","webpack:///./node_modules/crypto-js/lib-typedarrays.js","webpack:///./node_modules/@aws-amplify/storage/lib/Providers/AWSS3Provider.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/orders/models/order.ts","webpack:///./node_modules/graphql/jsutils/invariant.js","webpack:///./node_modules/graphql/error/index.js","webpack:///./node_modules/graphql/error/printError.js","webpack:///./node_modules/graphql/language/location.js","webpack:///./node_modules/axios/lib/helpers/bind.js","webpack:///./node_modules/axios/lib/helpers/buildURL.js","webpack:///./node_modules/axios/lib/cancel/isCancel.js","webpack:///./node_modules/axios/lib/defaults.js","webpack:///./node_modules/axios/lib/adapters/xhr.js","webpack:///./node_modules/axios/lib/core/createError.js","webpack:///./node_modules/graphql/module/type/schema.js","webpack:///./node_modules/axios/lib/core/mergeConfig.js","webpack:///./node_modules/axios/lib/cancel/Cancel.js","webpack:///./node_modules/@aws-amplify/core/lib/constants.js","webpack:///./node_modules/@aws-amplify/pubsub/lib/Providers/PubSubProvider.js","webpack:///./node_modules/@aws-amplify/pubsub/lib/Providers/AWSIotProvider.js","webpack:///./node_modules/@aws-amplify/interactions/lib/Providers/AWSLexProvider.js","webpack:///./node_modules/@aws-amplify/interactions/lib/Providers/InteractionsProvider.js","webpack:///./node_modules/@aws-amplify/xr/lib/Providers/SumerianProvider.js","webpack:///./node_modules/fomantic-ui-css/themes/default/assets/fonts/icons.eot","webpack:///./node_modules/fomantic-ui-css/themes/default/assets/fonts/outline-icons.eot","webpack:///./node_modules/graphql/module/language/visitor.js","webpack:///./node_modules/fomantic-ui-css/themes/default/assets/fonts/brand-icons.eot","webpack:///./node_modules/amazon-cognito-identity-js/es/AuthenticationDetails.js","webpack:///./node_modules/amazon-cognito-identity-js/es/BigInteger.js","webpack:///./node_modules/amazon-cognito-identity-js/es/AuthenticationHelper.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoJwtToken.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoAccessToken.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoIdToken.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoRefreshToken.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoUserSession.js","webpack:///./node_modules/amazon-cognito-identity-js/es/DateHelper.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoUserAttribute.js","webpack:///./node_modules/amazon-cognito-identity-js/es/StorageHelper.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoUser.js","webpack:///./node_modules/amazon-cognito-identity-js/es/UserAgent.js","webpack:///./node_modules/amazon-cognito-identity-js/es/Client.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoUserPool.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CookieStorage.js","webpack:///./node_modules/amazon-cognito-identity-js/es/index.js","webpack:///./node_modules/aurelia-configuration/dist/native-modules/window-info.js","webpack:///./node_modules/graphql/module/jsutils/memoize3.js","webpack:///./node_modules/graphql/module/jsutils/promiseForObject.js","webpack:///./node_modules/graphql/module/jsutils/promiseReduce.js","webpack:///./node_modules/graphql/module/subscription/mapAsyncIterator.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-models/search-result.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-models/get-record-response.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-models/get-records-response.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-models/get-record-request.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/cold-chain/models/cold-chain-zip.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/user/service/user-service.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/user/models/user.ts","webpack:///./node_modules/bluebird/js/browser/bluebird.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///./node_modules/jquery/dist/jquery.js?460a","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/orders/models/carrier-record.ts","webpack:///./extra_modules/semantic.js","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/@aws-amplify/analytics/lib/index.js","webpack:///./node_modules/@aws-amplify/analytics/lib/Analytics.js","webpack:///./node_modules/aws-sdk/browser.js","webpack:///./node_modules/aws-sdk/lib/query/query_param_serializer.js","webpack:///./node_modules/aws-sdk/lib/util.js","webpack:///./node_modules/aws-sdk/lib/xml/builder.js","webpack:///./node_modules/aws-sdk/lib/xml/xml-node.js","webpack:///./node_modules/aws-sdk/lib/xml/escape-attribute.js","webpack:///./node_modules/aws-sdk/lib/xml/xml-text.js","webpack:///./node_modules/aws-sdk/lib/xml/escape-element.js","webpack:///./node_modules/aws-sdk/lib/api_loader.js","webpack:///./node_modules/aws-sdk/vendor/endpoint-cache/index.js","webpack:///./node_modules/aws-sdk/vendor/endpoint-cache/utils/LRU.js","webpack:///./node_modules/aws-sdk/lib/service.js","webpack:///./node_modules/aws-sdk/lib/region_config.js","webpack:///./node_modules/moment/moment.js","webpack:///./node_modules/graphql/module/utilities/typeFromAST.js","webpack:///./node_modules/aws-sdk/lib/config.js","webpack:///./node_modules/aws-sdk/lib/event_listeners.js","webpack:///./node_modules/aws-sdk/lib/discover_endpoint.js","webpack:///./node_modules/util/util.js","webpack:///./node_modules/util/support/isBufferBrowser.js","webpack:///./node_modules/inherits/inherits_browser.js","webpack:///./node_modules/aws-sdk/lib/request.js","webpack:///./node_modules/aws-sdk/lib/state_machine.js","webpack:///./node_modules/aws-sdk/lib/response.js","webpack:///./node_modules/graphql/module/jsutils/objectValues.js","webpack:///./node_modules/aws-sdk/lib/resource_waiter.js","webpack:///./node_modules/aws-sdk/lib/signers/request_signer.js","webpack:///./node_modules/aws-sdk/lib/signers/v2.js","webpack:///./node_modules/aws-sdk/lib/signers/v3https.js","webpack:///./node_modules/aws-sdk/lib/signers/v4.js","webpack:///./node_modules/aws-sdk/lib/signers/s3.js","webpack:///./node_modules/aws-sdk/lib/signers/presign.js","webpack:///./node_modules/aws-sdk/lib/param_validator.js","webpack:///./node_modules/aws-sdk/node_modules/uuid/index.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-service/search-service.ts","webpack:///./node_modules/aws-sdk/node_modules/uuid/v1.js","webpack:///./node_modules/aws-sdk/node_modules/uuid/v4.js","webpack:///./node_modules/aws-sdk/lib/browserCryptoLib.js","webpack:///./node_modules/aws-sdk/lib/browserHmac.js","webpack:///./node_modules/aws-sdk/lib/browserMd5.js","webpack:///./node_modules/aws-sdk/lib/browserSha1.js","webpack:///./node_modules/aws-sdk/lib/browserSha256.js","webpack:///./node_modules/punycode/punycode.js","webpack:///./node_modules/url/util.js","webpack:///./node_modules/querystring-es3/decode.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-service/get-record-service.ts","webpack:///./node_modules/querystring-es3/encode.js","webpack:///./node_modules/aws-sdk/lib/realclock/browserClock.js","webpack:///./node_modules/aws-sdk/lib/event-stream/buffered-create-event-stream.js","webpack:///./node_modules/aws-sdk/lib/event-stream/event-message-chunker.js","webpack:///./node_modules/aws-sdk/lib/event-stream/parse-event.js","webpack:///./node_modules/aws-sdk/lib/event-stream/parse-message.js","webpack:///./node_modules/aws-sdk/lib/event-stream/int64.js","webpack:///./node_modules/aws-sdk/lib/event-stream/split-message.js","webpack:///./node_modules/aws-sdk/lib/credentials/temporary_credentials.js","webpack:///./node_modules/aws-sdk/lib/services/sts.js","webpack:///./node_modules/graphql/module/jsutils/keyMap.js","webpack:///./node_modules/aws-sdk/lib/credentials/chainable_temporary_credentials.js","webpack:///./node_modules/aws-sdk/lib/credentials/web_identity_credentials.js","webpack:///./node_modules/aws-sdk/lib/credentials/cognito_identity_credentials.js","webpack:///./node_modules/aws-sdk/clients/cognitoidentity.js","webpack:///./node_modules/aws-sdk/lib/services/cognitoidentity.js","webpack:///./node_modules/aws-sdk/lib/credentials/saml_credentials.js","webpack:///./node_modules/graphql/module/execution/execute.js","webpack:///./node_modules/aws-sdk/lib/xml/browser_parser.js","webpack:///./node_modules/aws-sdk/lib/http/xhr.js","webpack:///./node_modules/node-libs-browser/node_modules/events/events.js","webpack:///./node_modules/@aws-amplify/core/lib/Logger/ConsoleLogger.js","webpack:///./node_modules/@aws-amplify/core/lib/ClientDevice/index.js","webpack:///./node_modules/@aws-amplify/core/lib/ClientDevice/browser.js","webpack:///./node_modules/@aws-amplify/core/lib/Errors.js","webpack:///./node_modules/@aws-amplify/core/lib/Hub.js","webpack:///./node_modules/@aws-amplify/core/lib/I18n/index.js","webpack:///./node_modules/@aws-amplify/core/lib/I18n/I18n.js","webpack:///./node_modules/aurelia-router/dist/native-modules/aurelia-router.js","webpack:///./node_modules/@aws-amplify/core/lib/Signer.js","webpack:///./node_modules/@aws-amplify/core/lib/Parser.js","webpack:///./node_modules/@aws-amplify/core/lib/OAuthHelper/GoogleOAuth.js","webpack:///./node_modules/@aws-amplify/core/lib/OAuthHelper/FacebookOAuth.js","webpack:///./node_modules/@aws-amplify/core/lib/RNComponents/index.js","webpack:///./node_modules/@aws-amplify/core/lib/Credentials.js","webpack:///./node_modules/@aws-amplify/core/lib/ServiceWorker/index.js","webpack:///./node_modules/@aws-amplify/core/lib/ServiceWorker/ServiceWorker.js","webpack:///./node_modules/aws-sdk/clients/mobileanalytics.js","webpack:///./node_modules/aws-amplify/lib/index.js","webpack:///./node_modules/aws-sdk/clients/pinpoint.js","webpack:///./node_modules/@aws-amplify/cache/lib/BrowserStorageCache.js","webpack:///./node_modules/@aws-amplify/cache/lib/Utils/CacheUtils.js","webpack:///./node_modules/@aws-amplify/cache/lib/Utils/CacheList.js","webpack:///./node_modules/@aws-amplify/cache/lib/InMemoryCache.js","webpack:///./node_modules/uuid/v1.js","webpack:///./node_modules/uuid/v4.js","webpack:///./node_modules/@aws-amplify/analytics/lib/trackers/index.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-ui/utility/screen-view-utility.ts","webpack:///./node_modules/@aws-amplify/analytics/lib/trackers/PageViewTracker.js","webpack:///./node_modules/@aws-amplify/analytics/lib/utils/MethodEmbed.js","webpack:///./node_modules/@aws-amplify/analytics/lib/trackers/EventTracker.js","webpack:///./node_modules/@aws-amplify/analytics/lib/vendor/dom-utils/index.js","webpack:///./node_modules/@aws-amplify/analytics/lib/vendor/dom-utils/delegate.js","webpack:///./node_modules/@aws-amplify/analytics/lib/vendor/dom-utils/dispatch.js","webpack:///./node_modules/@aws-amplify/analytics/lib/vendor/dom-utils/get-attributes.js","webpack:///./node_modules/@aws-amplify/analytics/lib/vendor/dom-utils/parse-url.js","webpack:///./node_modules/@aws-amplify/analytics/lib/trackers/SessionTracker.js","webpack:///./node_modules/@aws-amplify/analytics/lib/Providers/index.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/items/services/item_service.ts","webpack:///./node_modules/@aws-amplify/analytics/lib/Providers/AWSKinesisProvider.js","webpack:///./node_modules/aws-sdk/clients/kinesis.js","webpack:///./node_modules/@aws-amplify/analytics/lib/Providers/AmazonPersonalizeProvider.js","webpack:///./node_modules/aws-sdk/clients/personalizeevents.js","webpack:///./node_modules/@aws-amplify/analytics/lib/Providers/AmazonPersonalizeHelper/index.js","webpack:///./node_modules/bluebird/js/browser/bluebird.js?fa89","webpack:///./node_modules/aurelia-loader/dist/native-modules/aurelia-loader.js","webpack:///./node_modules/@aws-amplify/analytics/lib/Providers/AmazonPersonalizeHelper/SessionInfoManager.js","webpack:///./node_modules/@aws-amplify/analytics/lib/Providers/AmazonPersonalizeHelper/MediaAutoTrack.js","webpack:///./node_modules/@aws-amplify/auth/lib/Auth.js","webpack:///./node_modules/@aws-amplify/auth/lib/types/index.js","webpack:///./node_modules/crypto-js/hmac.js","webpack:///./node_modules/@aws-amplify/auth/lib/OAuth/OAuth.js","webpack:///./node_modules/@aws-amplify/auth/lib/OAuth/urlOpener.js","webpack:///./node_modules/@aws-amplify/auth/lib/OAuth/oauthStorage.js","webpack:///./node_modules/@aws-amplify/auth/lib/urlListener.js","webpack:///./node_modules/@aws-amplify/storage/lib/index.js","webpack:///./node_modules/crypto-js/core.js","webpack:///./node_modules/@aws-amplify/storage/lib/Storage.js","webpack:///./node_modules/aws-sdk/clients/s3.js","webpack:///./node_modules/aws-sdk/lib/services/s3.js","webpack:///./node_modules/aws-sdk/lib/s3/managed_upload.js","webpack:///./node_modules/@aws-amplify/storage/lib/Providers/index.js","webpack:///./node_modules/@aws-amplify/api/lib/index.js","webpack:///./node_modules/@aws-amplify/api/lib/API.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/items/models/item-record.ts","webpack:///./node_modules/graphql/language/printer.js","webpack:///./node_modules/graphql/language/visitor.js","webpack:///./node_modules/graphql/language/parser.js","webpack:///./node_modules/graphql/language/source.js","webpack:///./node_modules/graphql/error/syntaxError.js","webpack:///./node_modules/graphql/error/locatedError.js","webpack:///./node_modules/graphql/error/formatError.js","webpack:///./node_modules/graphql/language/lexer.js","webpack:///./node_modules/graphql/language/blockStringValue.js","webpack:///./node_modules/graphql/language/kinds.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-models/get-records-request.ts","webpack:///./node_modules/graphql/language/directiveLocation.js","webpack:///./node_modules/zen-observable/lib/Observable.js","webpack:///./node_modules/@aws-amplify/api/lib/RestClient.js","webpack:///./node_modules/axios/index.js","webpack:///./node_modules/axios/lib/axios.js","webpack:///./node_modules/axios/node_modules/is-buffer/index.js","webpack:///./node_modules/axios/lib/core/Axios.js","webpack:///./node_modules/axios/lib/core/InterceptorManager.js","webpack:///./node_modules/axios/lib/core/dispatchRequest.js","webpack:///./node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/iterall/index.js","webpack:///./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///./node_modules/axios/lib/core/settle.js","webpack:///./node_modules/axios/lib/core/enhanceError.js","webpack:///./node_modules/axios/lib/helpers/parseHeaders.js","webpack:///./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///./node_modules/axios/lib/helpers/cookies.js","webpack:///./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/axios/lib/helpers/combineURLs.js","webpack:///./node_modules/axios/lib/cancel/CancelToken.js","webpack:///./node_modules/axios/lib/helpers/spread.js","webpack:///./node_modules/graphql/module/jsutils/getPromise.js","webpack:///./node_modules/@aws-amplify/pubsub/lib/index.js","webpack:///./node_modules/@aws-amplify/pubsub/lib/PubSub.js","webpack:///./node_modules/@aws-amplify/pubsub/lib/Providers/index.js","webpack:///./node_modules/@aws-amplify/pubsub/lib/Providers/AWSAppSyncProvider.js","webpack:///./node_modules/@aws-amplify/pubsub/lib/vendor/paho-mqtt.js","webpack:///./node_modules/@aws-amplify/interactions/lib/index.js","webpack:///./node_modules/@aws-amplify/interactions/lib/Interactions.js","webpack:///./node_modules/@aws-amplify/interactions/lib/Providers/index.js","webpack:///./node_modules/aws-sdk/clients/lexruntime.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-service/get-records-service.ts","webpack:///./node_modules/@aws-amplify/ui/dist/aws-amplify-ui.js","webpack:///./node_modules/@aws-amplify/xr/lib/index.js","webpack:///./node_modules/@aws-amplify/xr/lib/XR.js","webpack:///./node_modules/@aws-amplify/xr/lib/Providers/XRProvider.js","webpack:///./node_modules/css-loader/dist/runtime/api.js","webpack:///./node_modules/css-loader/dist/runtime/getUrl.js","webpack:///./node_modules/fomantic-ui-css/themes/default/assets/images/flags.png","webpack:///./node_modules/fomantic-ui-css/themes/default/assets/fonts/icons.woff2","webpack:///./node_modules/fomantic-ui-css/themes/default/assets/fonts/icons.woff","webpack:///./node_modules/@aws-amplify/core/lib/Logger/index.js","webpack:///./node_modules/fomantic-ui-css/themes/default/assets/fonts/icons.ttf","webpack:///./node_modules/fomantic-ui-css/themes/default/assets/fonts/icons.svg","webpack:///./node_modules/fomantic-ui-css/themes/default/assets/fonts/outline-icons.woff2","webpack:///./node_modules/fomantic-ui-css/themes/default/assets/fonts/outline-icons.woff","webpack:///./node_modules/fomantic-ui-css/themes/default/assets/fonts/outline-icons.ttf","webpack:///./node_modules/fomantic-ui-css/themes/default/assets/fonts/outline-icons.svg","webpack:///./node_modules/fomantic-ui-css/themes/default/assets/fonts/brand-icons.woff2","webpack:///./node_modules/fomantic-ui-css/themes/default/assets/fonts/brand-icons.woff","webpack:///./node_modules/fomantic-ui-css/themes/default/assets/fonts/brand-icons.ttf","webpack:///./node_modules/fomantic-ui-css/themes/default/assets/fonts/brand-icons.svg","webpack:///./node_modules/axios/lib/utils.js","webpack:///./node_modules/aurelia-webpack-plugin/runtime/pal-loader-entry.js","webpack:///./node_modules/aurelia-loader-webpack/dist/native-modules/aurelia-loader-webpack.js","webpack:///(webpack)/buildin/harmony-module.js","webpack:///./node_modules/graphql/module/utilities/introspectionQuery.js","webpack:///./node_modules/graphql/module/utilities/getOperationAST.js","webpack:///./node_modules/graphql/module/utilities/introspectionFromSchema.js","webpack:///./node_modules/graphql/module/utilities/buildClientSchema.js","webpack:///./node_modules/graphql/module/utilities/buildASTSchema.js","webpack:///./node_modules/graphql/module/utilities/extendSchema.js","webpack:///./node_modules/graphql/module/utilities/lexicographicSortSchema.js","webpack:///./node_modules/graphql/module/utilities/schemaPrinter.js","webpack:///./node_modules/graphql/module/utilities/isValidJSValue.js","webpack:///./node_modules/graphql/module/utilities/isValidLiteralValue.js","webpack:///./node_modules/graphql/module/utilities/concatAST.js","webpack:///./node_modules/graphql/module/utilities/separateOperations.js","webpack:///./node_modules/graphql/module/utilities/findBreakingChanges.js","webpack:///./node_modules/graphql/module/utilities/findDeprecatedUsages.js","webpack:///./node_modules/graphql/module/jsutils/find.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/routes.ts","webpack:///./node_modules/graphql/module/jsutils/suggestionList.js","webpack:///./node_modules/graphql/module/jsutils/keyValMap.js","webpack:///./node_modules/graphql/module/jsutils/instanceOf.js","webpack:///./node_modules/graphql/module/language/parser.js","webpack:///./node_modules/graphql/module/utilities/typeComparators.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/orders/services/order_service.ts","webpack:///./node_modules/process/browser.js","webpack:///(webpack)/buildin/global.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/login/models/login-response.ts","webpack:///./node_modules/aurelia-task-queue/dist/native-modules/aurelia-task-queue.js","webpack:///./node_modules/aurelia-pal/dist/native-modules/aurelia-pal.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/login/services/login-service.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/billing/services/billing-service.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shipping-addresses/models/shipping-address-record.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/billing/models/rate-calculator.ts","webpack:///./node_modules/aws-sdk/lib/browser_loader.js","webpack:///./node_modules/graphql/module/type/validate.js","webpack:///./node_modules/graphql/module/utilities/TypeInfo.js","webpack:///./node_modules/graphql/module/utilities/valueFromAST.js","webpack:///./node_modules/graphql/module/jsutils/isNullish.js","webpack:///./node_modules/graphql/module/execution/values.js","webpack:///./node_modules/aurelia-metadata/dist/native-modules/aurelia-metadata.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-service/create-record-service.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-models/create-record-request.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shipping-addresses/services/shipping_address_service.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/orders/services/country_service.ts","webpack:///./node_modules/graphql/module/jsutils/quotedOrList.js","webpack:///./node_modules/graphql/module/jsutils/orList.js","webpack:///./node_modules/graphql/module/validation/validate.js","webpack:///./node_modules/graphql/module/utilities/astFromValue.js","webpack:///./node_modules/graphql/module/language/location.js","webpack:///./node_modules/graphql/module/language/source.js","webpack:///./node_modules/graphql/module/error/syntaxError.js","webpack:///./node_modules/graphql/module/error/formatError.js","webpack:///./node_modules/graphql/module/error/index.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/items/models/activity-detail-report.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/change-orders/models/change-order.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/notifications/models/alert-notification.ts","webpack:///./node_modules/js-cookie/src/js.cookie.js","webpack:///./node_modules/@aws-amplify/core/lib/JS.js","webpack:///./node_modules/graphql/module/validation/rules/ValuesOfCorrectType.js","webpack:///./node_modules/graphql/module/utilities/coerceValue.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/user/models/user-session.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/orders/services/carrier_service.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/cold-chain/services/cold-chain-service.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/app.ts","webpack:///./src/app.html","webpack:///./node_modules/aurelia-configuration/dist/native-modules/index.js","webpack:///./node_modules/aurelia-event-aggregator/dist/native-modules/aurelia-event-aggregator.js","webpack:///./node_modules/aurelia-history-browser/dist/native-modules/aurelia-history-browser.js","webpack:///./node_modules/aurelia-logging-console/dist/native-modules/aurelia-logging-console.js","webpack:///./node_modules/aurelia-templating-binding/dist/native-modules/aurelia-templating-binding.js","webpack:///./node_modules/aurelia-templating-resources/dist/native-modules/aurelia-templating-resources.js","webpack:///./node_modules/aurelia-templating-router/dist/native-modules/aurelia-templating-router.js","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/billing/views/billing-dashboard.ts","webpack:///./src/billing/views/billing-dashboard.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/billing/views/credit-memo-list-view.ts","webpack:///./src/billing/views/credit-memo-list-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/billing/views/credit-memo-view.ts","webpack:///./src/billing/views/credit-memo-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/billing/views/invoice-list-view.ts","webpack:///./src/billing/views/invoice-list-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/billing/views/invoice-view.ts","webpack:///./src/billing/views/invoice-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/billing/views/rate-calculator.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/billing/views/rate-calculator-item-view.ts","webpack:///./src/billing/views/rate-calculator-item-view.html","webpack:///./src/billing/views/rate-calculator.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/change-orders/views/change-order-address.ts","webpack:///./src/change-orders/views/change-order-address.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/change-orders/views/change-order-email.ts","webpack:///./src/change-orders/views/change-order-email.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/change-orders/views/change-order-gift-message.ts","webpack:///./src/change-orders/views/change-order-gift-message.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/change-orders/views/change-order-items.ts","webpack:///./src/change-orders/views/change-order-items.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/change-orders/views/change-order-list-view.ts","webpack:///./src/change-orders/views/change-order-list-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/change-orders/views/change-order-ship-date.ts","webpack:///./src/change-orders/views/change-order-ship-date.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/change-orders/views/change-order-ship-instructions.ts","webpack:///./src/change-orders/views/change-order-ship-instructions.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/change-orders/views/change-order-ship-method.ts","webpack:///./src/change-orders/views/change-order-ship-method.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/change-orders/views/change-order-standard-task.ts","webpack:///./src/change-orders/views/change-order-standard-task.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/change-orders/views/change-order-view.ts","webpack:///./src/change-orders/views/change-order-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/cold-chain/views/cold-chain-dashboard.ts","webpack:///./src/cold-chain/views/cold-chain-dashboard.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/cold-chain/views/cold-chain-zips-view.ts","webpack:///./src/cold-chain/views/cold-chain-zips-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/dashboard/dashboard.ts","webpack:///./src/dashboard/dashboard.html","webpack:///./node_modules/fomantic-ui-css/semantic.css","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/items/views/activity-detail-line-view.ts","webpack:///./src/items/views/activity-detail-line-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/items/views/activity-detail-report.ts","webpack:///./src/items/views/activity-detail-report.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/items/views/item-view.ts","webpack:///./src/items/views/item-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/items/views/items-dashboard.ts","webpack:///./src/items/views/items-dashboard.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/items/views/list-items-view.ts","webpack:///./src/items/views/list-items-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/items/views/winery-transfer-list-view.ts","webpack:///./src/items/views/winery-transfer-list-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/items/views/winery-transfer-view.ts","webpack:///./src/items/views/winery-transfer-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/loader.ts","webpack:///./src/loader.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/login/views/forgot-password/enter-code-view.ts","webpack:///./src/login/views/forgot-password/enter-code-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/login/views/forgot-password/send-code-view.ts","webpack:///./src/login/views/forgot-password/send-code-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/login/views/login-form-view.ts","webpack:///./src/login/views/login-form-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/login/views/login-view.ts","webpack:///./src/login/views/login-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/login/views/new-password/new-password-view.ts","webpack:///./src/login/views/new-password/new-password-view.html","webpack:///./src/login/views/shared/button-field-view.html","webpack:///./src/login/views/shared/input-field-view.html","webpack:///./src/login/views/shared/large-button-field-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/main.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/navigation/bottom-nav-bar/bottom-nav-bar.ts","webpack:///./src/navigation/bottom-nav-bar/bottom-nav-bar.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/navigation/side-nav-bar/side-nav-bar.ts","webpack:///./src/navigation/side-nav-bar/side-nav-bar.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/navigation/top-nav-bar/top-nav-bar.ts","webpack:///./src/navigation/top-nav-bar/top-nav-bar.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/notifications/views/alert-notifications-book-view.ts","webpack:///./src/notifications/views/alert-notifications-book-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/notifications/views/alert-notifications-current-view.ts","webpack:///./src/notifications/views/alert-notifications-current-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/notifications/views/alert-notifications-read-view.ts","webpack:///./src/notifications/views/alert-notifications-read-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/orders/views/import-orders-view.ts","webpack:///./src/orders/views/import-orders-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/orders/views/order-batch-list-view.ts","webpack:///./src/orders/views/order-batch-list-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/orders/views/order-batch-view.ts","webpack:///./src/orders/views/order-batch-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/orders/views/order-create-item-view.ts","webpack:///./src/orders/views/order-create-item-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/orders/views/order-create-view.ts","webpack:///./src/orders/views/order-create-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/orders/views/order-list-dashboard.ts","webpack:///./src/orders/views/order-list-dashboard.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/orders/views/order-list-view.ts","webpack:///./src/orders/views/order-list-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/orders/views/order-view.ts","webpack:///./src/orders/views/order-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/returns/views/list-returns-view.ts","webpack:///./src/returns/views/list-returns-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/returns/views/return-view.ts","webpack:///./src/returns/views/return-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/returns/views/returns-dashboard.ts","webpack:///./src/returns/views/returns-dashboard.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-ui/converters/boolean-format.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-ui/converters/currency-format.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-ui/converters/lowercase-format.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-ui/converters/simple-date-format.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-ui/converters/simple-datetime-format.ts","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-ui/error-message/error-message-view.ts","webpack:///./src/shared-ui/error-message/error-message-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-ui/screen-size/screen-size-view.ts","webpack:///./src/shared-ui/screen-size/screen-size-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-ui/views/disable-view.ts","webpack:///./src/shared-ui/views/disable-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shared-ui/views/standard-view.ts","webpack:///./src/shared-ui/views/standard-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shipping-addresses/views/shipping-address-list-view.ts","webpack:///./src/shipping-addresses/views/shipping-address-list-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shipping-addresses/views/shipping-address-view.ts","webpack:///./src/shipping-addresses/views/shipping-address-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shipping/views/shipping-dashboard.ts","webpack:///./src/shipping/views/shipping-dashboard.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/shipping/views/shipping-list-view.ts","webpack:///./src/shipping/views/shipping-list-view.html","webpack:///src/C:/GitRepos/VinFillment/vinfillment-customer-portal/src/user/views/user-session-alert-view.ts","webpack:///./src/user/views/user-session-alert-view.html"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_typeof","iterator","obj","constructor","_extends","assign","target","arguments","length","source","_classCallCheck","instance","Constructor","TypeError","isType","type","isScalarType","isObjectType","isInterfaceType","isUnionType","isEnumType","isInputObjectType","isListType","isNonNullType","assertType","String","GraphQLScalarType","assertScalarType","GraphQLObjectType","assertObjectType","GraphQLInterfaceType","assertInterfaceType","GraphQLUnionType","assertUnionType","GraphQLEnumType","assertEnumType","GraphQLInputObjectType","assertInputObjectType","assertListType","assertNonNullType","isInputType","isWrappingType","ofType","assertInputType","isOutputType","assertOutputType","isLeafType","assertLeafType","isCompositeType","assertCompositeType","isAbstractType","assertAbstractType","assertWrappingType","isNullableType","assertNullableType","getNullableType","isNamedType","assertNamedType","getNamedType","unwrappedType","resolveThunk","thunk","config","this","description","astNode","_scalarConfig","serialize","parseValue","parseLiteral","serializer","parser","valueNode","variables","toString","toJSON","inspect","extensionASTNodes","isTypeOf","_typeConfig","getFields","_fields","defineFieldMap","fields","getInterfaces","_interfaces","interfacesThunk","interfaces","Array","isArray","fieldsThunk","fieldMap","isPlainObj","resultFieldMap","keys","forEach","fieldName","fieldConfig","resolver","field","isDeprecated","Boolean","deprecationReason","resolve","argsConfig","args","map","argName","arg","undefined","defaultValue","resolveType","getTypes","_types","unionType","typesThunk","types","_enumConfig","getValues","_values","valueMap","values","valueName","getValue","_getNameLookup","enumValue","_getValueLookup","_variables","kind","ENUM","_valueLookup","lookup","Map","set","_nameLookup","_defineFieldMap","_this","Aurelia","loader","container","resources","Loader","makeGlobal","use","FrameworkConfiguration","logger","hostConfigured","host","start","_started","info","apply","then","addEventListener","evt","action","tagName","toLowerCase","preventDefault","hasResolver","message","error","Error","createCustomEvent","bubbles","cancelable","dispatchEvent","enhance","_this2","bindingContext","applicationHost","_configureHost","querySelectorAll","Promise","engine","root","element","attached","_onAureliaComposed","setRoot","_this3","instruction","viewModel","router","deactivate","reset","transaction","initialComposition","configModuleId","childContainer","viewSlot","hostSlot","compose","getElementById","aurelia","transformChildNodesIntoView","registerInstance","boundary","setTimeout","extPattern","runTasks","tasks","current","next","shift","loadResources","resourcesToLoad","appResources","viewEngine","all","load","ext","getExt","isOtherResource","removeExt","normalize","relativeTo","normalized","importId","addOriginalExt","_normalize","loads","names","importIds","push","importViewResources","replace","match","split","loadBehaviors","behaviorsToLoad","assertProcessed","plugins","processed","invalidConfigMsg","cfg","_this4","preTasks","postTasks","configuredPlugins","preTask","bootstrapperName","postTask","_instance","singleton","implementation","registerSingleton","transient","registerTransient","task","feature","plugin","hasIndex","test","_moduleId","substr","resourcesRelativeTo","configure","globalResources","_this5","toAdd","resource","ii","parent","grandParent","startsWith","meta","autoRegister","elementName","globalName","resourcePath","newName","_plugin","pluginConfig","_addNormalizedPlugin","_this6","defaultBindingLanguage","history","defaultResources","eventAggregator","basicConfiguration","standardConfiguration","developmentLogging","level","_this7","logLevel","debug","loadModule","ConsoleAppender","_this8","fwConfig","id","normalizedId","_loadPlugin","indexOf","loadPlugin","LogManager","_class","_temp","_class2","_temp2","_class3","_class4","_class5","_class6","_class7","_class8","_class9","_temp3","_class10","_temp4","_class12","_class14","_class15","_class16","_temp5","_class17","_class18","_class19","_createClass","defineProperties","props","descriptor","configurable","writable","protoProps","staticProps","Animator","enter","leave","removeClass","className","classList","remove","addClass","add","animate","runSequence","animations","registerEffect","effectName","properties","unregisterEffect","CompositionTransactionNotifier","owner","_compositionCount","done","_tryCompleteTransaction","CompositionTransactionOwnershipToken","_ownershipToken","thenable","_createThenable","waitForCompositionComplete","_resolveCallback","reject","CompositionTransaction","tryCapture","enlist","token","capitalMatcher","addHyphenAndLower","char","_hyphenate","charAt","slice","_isAllWhitespace","node","auInterpolationTarget","textContent","ViewEngineHooksResource","initialize","register","registry","registerViewEngineHooks","convention","endsWith","ElementEvents","subscriptions","_enqueueHandler","handler","eventName","_dequeueHandler","index","splice","publish","detail","event","subscribe","captureOrOptions","defaultListenerOptions","EventHandlerImpl","subscribeOnce","dispose","subscription","pop","disposeAll","_key","once","capture","handleEvent","e","fn","removeEventListener","ResourceLoadContext","dependencies","addDependency","url","hasDependency","ViewCompileInstruction","targetShadowDOM","compileSurrogate","associatedModuleId","normal","BehaviorInstruction","unitTest","attributes","anchorIsContainer","hasAttribute","containerless","initiatedByBehavior","attribute","attrName","dynamic","viewFactory","inheritBindingContext","biProto","partReplacements","originalAttrName","skipContentProcessing","contentFactory","TargetInstruction","shadowSlot","parentInjectorId","contentExpression","expression","letElement","expressions","lifting","liftingInstruction","noExpressions","behaviorInstructions","providers","injectorId","elementInstruction","surrogate","freeze","tiProto","slotName","slotFallbackFactory","viewStrategy","validate","loadViewFactory","makeRelativeTo","noop","RelativeViewStrategy","_dec","path","absolutePath","compileInstruction","loadContext","file","ConventionalViewStrategy","_dec2","viewLocator","origin","viewUrl","convertOriginToViewUrl","NoViewStrategy","_dec3","dependencyBaseUrl","entry","factoryIsReady","templateIsLoaded","from","as","TemplateRegistryViewStrategy","_dec4","factory","InlineViewStrategy","_dec5","markup","template","createTemplateFromMarkup","StaticViewStrategy","_dec6","Element","onReady","deps","viewCompiler","viewResources","ViewResources","elDeps","_iterator","_isArray","_i","_ref","dep","_key2","exported","el","compile","ViewLocator","getViewStrategy","_origin","assert","$view","_view","define","viewStrategyMetadataKey","strategy","createFallbackViewStrategy","substring","mi","BindingLanguage","inspectAttribute","attrValue","createAttributeInstruction","existingInstruction","createLetExpressions","inspectTextContent","noNodes","SlotCustomAttribute","auSlotAttribute","inject","valueChanged","newValue","oldValue","PassThroughSlot","anchor","destinationName","fallbackFactory","destinationSlot","projections","contentView","renderFallbackContent","view","nodes","projectionSource","ownerView","overrideContext","slots","ShadowDOM","distributeView","passThroughTo","addNode","removeNodes","detached","unbind","removeView","needsFallbackRendering","removeAll","projectFrom","created","ShadowSlot","isContentProjectionSource","children","projectFromAnchors","destinationSlots","destination","distributeNodes","auOwnerView","auProjectionSource","auAssignedSlot","_findAnchor","parentNode","insertBefore","undistributeView","hasSlots","found","find","x","auSlotProjectFrom","_children","auProjectionChildren","_child","fragment","appendChild","undistributeAll","_children2","_child2","_children3","viewIndex","lastView","projectTo","createComment","insertNodesBefore","slot","fallbackSlots","getSlotName","defaultSlotKey","destinationOverride","childNodes","currentNode","nodeType","_slotName","existing","validateBehaviorName","warn","bindingLanguage","hasParent","lookupFunctions","valueConverters","getValueConverter","bindingBehaviors","getBindingBehavior","elements","attributeMap","beforeCompile","afterCompile","beforeCreate","afterCreate","beforeBind","beforeUnbind","$resource","HtmlBehaviorResource","resourceType","_name","attributeName","liftsContent","templateController","attributeDefaultBindingMode","defaultBindingMode","_bindables","bindables","currentProps","prop","newProp","BindableProperty","existed","j","jj","registerWith","_tryAddHook","func","counter","callbackName","_invokeHook","one","two","three","four","hooks","getBindingLanguage","bindingLanguageFallback","patchInParent","newParent","originalParent","relativeToView","registerElement","behavior","getElement","mapAttribute","registerAttribute","knownAttribute","getAttribute","registerValueConverter","valueConverter","registerBindingBehavior","bindingBehavior","registerValue","impl","resourceTypeMeta","getOwn","View","controllers","bindings","_key3","firstChild","lastChild","fromCache","isBound","isAttached","controller","viewModelScope","animatableElement","_isUserControlled","returnToCache","returnViewToCache","_systemUpdate","addBinding","binding","refNode","appendNodesTo","end","nextSibling","getAnimatableElement","contains","ViewSlot","animator","contentSelectors","animateView","direction","last","removeChild","_children4","insert","move","sourceIndex","targetIndex","skipAnimation","removeAt","removeMany","viewsToRemove","rmPromises","child","animation","removeAction","_child3","projectToSlots","_projectionAdd","_projectionInsert","_projectionMove","_projectionRemove","_projectionRemoveAt","_projectionRemoveMany","_projectionRemoveAll","providerResolverInstance","ProviderResolver","__providerId__","invoke","elementContainerGet","BoundViewFactory","boundViewFactory","_partReplacements","part","elementEvents","compositionTransaction","superGet","_element","setAttribute","applyInstructions","containers","shadowSlots","elementContainer","createBinding","commentAnchor","slotDestination","replaceNode","contentElement","makeElementIntoAnchor","createChild","_resolvers","createElementContainer","styleStringToObject","style","firstIndexOfColon","trim","styleObjectToString","result","_key4","parentContainer","factoryCreateInstruction","setCacheSize","size","doNotOverrideIfAlreadySet","getCachedView","isCaching","ViewFactory","instructions","cacheSize","cache","Number","MAX_VALUE","parseInt","createInstruction","cachedView","cloneNode","instructables","instructable","surrogateInstruction","currentAttributeValue","_key5","styleObject","applySurrogateInstruction","nextInjectorId","lastAUTargetID","makeIntoInstructionTarget","auTargetID","defaultLetHandler","ViewCompiler","_dec7","content","adoptNode","shadowDOM","_compileNode","targetId","ins","_compileSurrogate","targetLightDOM","_compileElement","wholeText","marker","createElement","currentChild","attr","hasValues","command","hasOptions","primaryProperty","_primaryProperty","alteredAttr","discrete","_configureProperties","attrToRemove","removeAttribute","elementProperty","compiler","auShadowSlot","innerHTML","createDocumentFragment","_child4","makeShadowSlot","namespaceURI","processAttributes","_primaryProperty2","targetProperty","ResourceModule","moduleInstance","mainResource","isInitialized","onLoaded","vs","metadata","main","_i2","_ii","ResourceDescription","exportedValue","ModuleAnalyzer","getAnalysis","analyze","mainResourceKey","fallbackValue","fallbackKey","conventional","resourceModule","decorates","ProxyViewFactory","promise","auSlotBehavior","ViewEngine","_dec8","moduleAnalyzer","_pluginMap","addResourcePlugin","extension","addPlugin","urlOrRegistryEntry","_this9","loadTemplate","ensureRegistryEntry","registryEntry","address","loadTemplateResources","src","viewModelRequires","viewModelRequireMetadataKey","templateImportCount","req","importViewModelResource","moduleImport","moduleMember","_this10","viewModelModule","moduleIds","_this11","_applyLoaderPlugin","loadAllModules","imports","analysis","associatedModule","allAnalysis","lastIndexOf","pluginName","applyPluginToUrl","Controller","scope","observerLookup","observerLocator","getOrCreateObserversLookup","handlesBind","boundProperties","_ensurePropertiesDefined","_initialize","owningView","handlesCreated","automate","skipSelfSubscriber","observer","selfSubscriber","publishing","__parentOverrideContext","parentOverrideContext","_ii2","_boundProperties","_i3","handlesUnbind","handlesAttached","handlesDetached","BehaviorPropertyObserver","_dec9","taskQueue","propertyName","initialValue","notqueued","currentValue","setValue","is","flushing","queueMicroTask","callSubscribers","context","callable","addSubscriber","unsubscribe","removeSubscriber","getObserver","__observers__","ctor","getPrototypeOf","_behavior","nameOrConfig","oneWay","changeHandler","_configureDescriptor","initializer","defineOn","handlerName","createObserver","changeHandlerName","propertyChanged","behaviorHandlesBind","isDynamic","_key6","_createDynamicProperty","lastProviderId","doProcessContent","doProcessAttributes","shadowDOMOptions","processContent","usesShadowDOM","childBindings","hasDynamicOptions","addChildBinding","proto","htmlName","_copyInheritedProperties","_this12","aliases","alias","transientView","_this13","options","_template","_partReplacements2","hasChildNodes","toReplace","removeNode","viewHost","au","attachShadow","_i4","_ii3","_i5","_ii4","_i6","_ii5","_i7","_ii6","_i8","_ii7","__propertiesDefined__","_this14","derived","_loop","_i9","_ii8","some","ChildObserver","selector","ChildObserverBinder","noMutations","trackMutation","groupedMutations","binder","record","mutations","onChildChange","binders","bindersLength","_i10","_ii9","added","addedNodes","removed","removedNodes","_node","k","onRemove","_j","_jj","_node2","_k","_binder","onAdd","matches","assignedSlot","anchors","_i11","_ii10","__childObserver__","createMutationObserver","childList","subtree","observe","firstElementChild","items","nextElementSibling","_value","_value2","_value3","prev","previousElementSibling","disconnect","previous","SwapStrategies","before","callback","with","after","tryActivateViewModel","skipActivation","activate","model","CompositionEngine","_dec10","_swap","swapStrategy","swapOrder","previousViews","currentController","compositionTransactionNotifier","_createControllerAndSwap","_this15","createController","compositionTransactionOwnershipToken","_this16","viewModelResource","ensureViewModel","isClass","getOrCreateOwn","_this17","ElementConfigResource","registerElementConfig","instanceOrConfig","customElement","customAttribute","deco","bindable","nameOrConfigOrTarget","key2","descriptor2","actualTarget","_target","defaultShadowDOMOptions","useShadowDOM","targetOrOptions","useViewStrategy","useView","inlineView","noView","targetOrDependencies","TemplatingEngine","_dec11","compositionEngine","_container","_moduleAnalyzer","_viewCompiler","_compositionEngine","configureAnimator","unregister","compilerInstructions","letExpressions","searchService","getRecordService","getRecordsService","updateRecordService","createRecordService","ChangeOrderService","getChangeOrdersByOrder","orderId","getRecordsRequest","recordType","CHANGE_ORDER_RECORD_TYPE","fieldReference","fieldReferenceValue","getRecords","_convertResponseToChangeOrder","getRecordsResponse","records","sort","changeOrder1","changeOrder2","createDate","getTime","searchRecords","page","filter","searchRequest","pageSize","searchResponse","getAllRecords","getRecord","changeOrderId","getRecordRequest","recordId","createRecord","changeOrderRecord","createRecordRequest","recordData","convertToData","cancelChangeOrder","changeOrderData","updateRecordRequest","updateRecord","getChangeOrderTypes","CHANGE_ORDER_TYPE_RECORD_TYPE","_convertResponseToChangeOrderType","type1","type2","localeCompare","response","changeOrder","createdBy","lastUpdatedByUser","_convertValueToDateTime","status","wineryOrderNumber","order","vinfillmentNotes","deniedReasons","changeRequestsTypes","changeRequests","changeRequest","_convertResponseToChangeOrderRequest","changeOrderTypeData","changeOrderType","doNotAllowOtherChanges","statusesNotAllowed","_isChangeGiftMessage","_convertToGiftMessageRequest","_isChangeShipInstructions","_convertToShipInstRequest","_isChangeShipMethod","_convertToShipMethodRequest","_isChangeShipDate","_convertToShipDateRequest","_isChangeEmail","_convertToEmailRequest","_isChangeAddress","_convertToAddressRequest","_isChangeItems","_convertToItemRequest","currentGiftMessage","newGiftMessage","currentInstructions","newInstructions","currentCarrier","currentShipMethod","newCarrier","newShipMethod","currentShipDate","_convertValueToDate","newShipDate","currentEmail","newEmail","currentAddress","_convertResponseToAddress","newAddress","currentItem","orderItem","newQuantity","removeItem","newItems","item","quantity","addressee","attention","address1","address2","city","state","zip","country","phone","ImportOrderService","getSetupRecords","SETUP_RECORD_TYPE","_convertResponseToImportOrderSetup","searchIntegratedShipMethods","searchRequestData","INT_SHIP_METHOD_RECORD_TYPE","fieldFilters","_convertResponseToIntegratedShipMethod","getAllIntegratedShipMethods","allRecords","initialSearch","concat","totalPageCount","pageCount","nextSearch","getBatchRecords","BATCH_RECORD_TYPE","_convertResponseToBatchOrders","getBatchRecord","orderBatchId","searchBatchRecords","submitImportOrderBatch","importOrderBatch","createBatchRequest","csvFileData","csvFileName","importOrdersSetup","integrationType","isDefault","atob","columns","column","isMandatory","columnNameRegExpString","dataRegExpString","winery","shippingMethod","integrationPartner","shipmentDetailNumber","numberOfOrders","numberOfOrdersPending","numberOfOrdersUploaded","numberOfOrdersCancelled","errorMessage","data","createdByUser","CryptoJS","HmacSHA256","transferLocation","reference","receiptDate","totalCharges","WineryTransferItem","WineryTransfer","WineryTransferReference","itemName","itemId","sku","STATUSES","statusName","orderNumber","recipientName","shipDate","Date","returnDate","shippingCarrier","returnShippingCarrier","returnShippingMethod","returnReason","isWillCall","returnCharge","notes","ReturnItemRecord","ReturnReference","shippedQuantity","returnedQuantity","toInventoryQuantity","reshipQuantity","willCallQuantity","remainingQuantity","email","password","SCREEN_SIZE","currentSize","DESKTOP","isMedium","isLarge","isSmall","isTiny","LARGE","IPAD","MOBILE","Collection","util","memoizedProperty","Shape","shape","memberName","api","enum","min","max","pattern","location","xmlName","queryName","locationName","streaming","isStreaming","requiresLength","isComposite","idempotencyToken","jsonvalue","sensitive","eventstream","eventpayload","eventheader","timestampFormat","isTimestampFormatSet","endpointdiscoveryid","hostLabel","documentation","documentationUrl","xmlAttribute","toWireFormat","toType","CompositeShape","flattened","StructureShape","self","requiredMap","firstInit","isShape","members","member","xmlOrder","memberNames","iLen","isEventPayload","eventHeaderMemberNames","isEventHeader","required","resultWrapper","payload","xmlNamespace","prefix","uri","ListShape","oldName","MapShape","StringShape","nullLessProtocols","protocol","isJsonValue","JSON","parse","stringify","BinaryShape","buf","base64","decode","isSensitive","isNode","Buffer","alloc","secureBuf","fill","encode","Base64Shape","BooleanShape","normalizedTypes","character","double","long","short","biginteger","bigdecimal","blob","toUTCString","date","parseTimestamp","format","parseFloat","refShape","shapes","filteredKeys","InlineShape","origType","punycode","Url","slashes","auth","port","hostname","hash","search","query","pathname","href","urlParse","relative","resolveObject","isString","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","unsafeProtocol","hostlessProtocol","slashedProtocol","querystring","parseQueryString","slashesDenoteHost","isObject","u","queryIndex","splitter","uSplit","rest","join","simplePath","exec","lowerProto","atSign","hostEnd","hec","decodeURIComponent","parseHost","ipv6Hostname","hostparts","newpart","charCodeAt","validParts","notHost","bit","unshift","toASCII","h","ae","esc","encodeURIComponent","escape","qm","rel","tkeys","tk","tkey","rkeys","rk","rkey","v","relPath","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","isNullOrUndefined","authInHost","isNull","hasTrailingSlash","up","isAbsolute","createLexer","startOfFileToken","Tok","TokenKind","SOF","lastToken","line","lineStart","advance","advanceLexer","lookahead","EOF","readToken","COMMENT","BANG","DOLLAR","AMP","PAREN_L","PAREN_R","SPREAD","COLON","EQUALS","AT","BRACKET_L","BRACKET_R","BRACE_L","PIPE","BRACE_R","NAME","INT","FLOAT","STRING","BLOCK_STRING","getTokenDesc","printCharCode","code","isNaN","fromCharCode","toUpperCase","lexer","body","bodyLength","pos","startPosition","position","positionAfterWhitespace","col","readComment","readName","firstCode","isFloat","readDigits","readNumber","chunkStart","rawValue","readBlockString","charCode","a","b","char2hex","readString","unexpectedCharacterMessage","AWS","Service","apiLoader","services","STS","defineService","paginators","pagination","History","getAbsoluteRoot","navigate","navigateBack","setTitle","title","setState","getState","getHistoryIndex","go","movement","ORDER_COLUMN_TYPES","ImportOrderColumn","columnNameRegExp","RegExp","dataRegExp","isColumnMatched","columnName","isDataMatched","ORDER_NUMBER","STATE","COUNTRY","SHIP_METHOD","EMAIL","SHIP_DATE","ITEM_SKU","ITEM_QUANTITY","dueDate","amountTotal","amountDue","paymentState","term","inboundFileName","inboundFile","outboundFileName","outboundFile","storageFileName","storageFile","addressCorrFileName","addressCorrFile","returnsFileName","returnsFile","InvoiceItem","populateHostPrefix","generateURI","endpointPath","operationPath","input","params","queryString","queryStringSet","each","paramValue","regex","_","plus","uriEscapePath","uriEscape","val","parts","arrayEach","buildRequest","httpRequest","method","service","operations","operation","httpMethod","populateMethod","endpoint","httpPath","populateURI","memberValue","headers","populateHeaders","extractError","extractData","resp","request","httpResponse","output","header","isLocationName","statusCode","ArrayBuffer","isView","viewStrings","isEmptyData","byteLength","convertToBuffer","Uint8Array","buffer","byteOffset","BYTES_PER_ELEMENT","Logger_1","ConsoleLogger","Amplify","comp","_components","getModuleName","_config","addPluggable","pluggable","Auth","Analytics","API","Storage","I18n","Cache","PubSub","Interactions","Pushnotification","UI","XR","Logger","ServiceWorker","default","core_1","BrowserStorageCache_1","BrowserStorageCache","InMemoryCache_1","InMemoryCache","v1","v4","uuid","invariant","condition","Observable","Math","C","C_lib","lib","WordArray","Hasher","C_algo","algo","H","K","isPrime","sqrtN","sqrt","factor","getFractionalBits","nPrime","pow","W","SHA256","extend","_doReset","_hash","init","_doProcessBlock","M","offset","words","f","g","gamma0x","gamma0","gamma1x","gamma1","maj","sigma0","t1","_doFinalize","_data","dataWords","nBitsTotal","_nDataBytes","nBitsLeft","sigBytes","floor","_process","clone","_createHelper","_createHmacHelper","valueFromASTUntyped","NULL","BOOLEAN","LIST","OBJECT","VARIABLE","variableName","printError","printedLocations","loc","highlightSourceAtLocation","locations","lineOffset","locationOffset","columnOffset","getColumnOffset","contextLine","contextColumn","prevLineNum","lineNum","nextLineNum","padLen","lines","whitespace","lpad","len","str","NAME_RX","assertValidName","isValidNameError","locatedError","originalError","positions","UniqueOperationNames","knownOperationNames","OperationDefinition","operationName","reportError","duplicateOperationNameMessage","FragmentDefinition","LoneAnonymousOperation","operationCount","Document","definitions","definition","OPERATION_DEFINITION","SingleFieldSubscriptions","selectionSet","selections","KnownTypeNames","ObjectTypeDefinition","InterfaceTypeDefinition","UnionTypeDefinition","InputObjectTypeDefinition","NamedType","schema","getSchema","typeName","getType","suggestedTypes","unknownTypeMessage","getTypeMap","FragmentsOnCompositeTypes","InlineFragment","typeCondition","inlineFragmentOnNonCompositeErrorMessage","fragName","fragmentOnNonCompositeErrorMessage","VariablesAreInputTypes","VariableDefinition","variable","nonInputTypeOnVarMessage","ScalarLeafs","Field","noSubselectionAllowedMessage","requiredSubselectionMessage","FieldsOnCorrectType","getParentType","getFieldDef","suggestedTypeNames","suggestedObjectTypes","interfaceUsageCount","getPossibleTypes","possibleType","possibleInterface","getSuggestedTypeNames","suggestedFieldNames","possibleFieldNames","getSuggestedFieldNames","undefinedFieldMessage","UniqueFragmentNames","knownFragmentNames","fragmentName","KnownFragmentNames","FragmentSpread","getFragment","NoUnusedFragments","operationDefs","fragmentDefs","fragmentNameUsed","getRecursivelyReferencedFragments","fragmentDef","unusedFragMessage","PossibleFragmentSpreads","fragType","parentType","typeIncompatibleAnonSpreadMessage","frag","getFragmentType","typeIncompatibleSpreadMessage","NoFragmentCycles","visitedFrags","spreadPath","spreadPathIndexByName","detectCycleRecursive","spreadNodes","getFragmentSpreads","spreadNode","spreadName","cycleIndex","spreadFragment","cyclePath","spreadNames","UniqueVariableNames","knownVariableNames","duplicateVariableMessage","GraphQLList","listProto","GraphQLNonNull","nonNullProto","NoUndefinedVariables","variableNameDefined","getRecursiveVariableUsages","varName","opName","undefinedVarMessage","NoUnusedVariables","variableDefs","variableNameUsed","usages","variableDef","unusedVariableMessage","def","KnownDirectives","Directive","ancestors","directiveDef","getDirectives","candidateLocation","appliedTo","QUERY","MUTATION","SUBSCRIPTION","FIELD","FRAGMENT_SPREAD","INLINE_FRAGMENT","FRAGMENT_DEFINITION","SCHEMA_DEFINITION","SCHEMA","SCALAR_TYPE_DEFINITION","SCALAR_TYPE_EXTENSION","SCALAR","OBJECT_TYPE_DEFINITION","OBJECT_TYPE_EXTENSION","FIELD_DEFINITION","INTERFACE_TYPE_DEFINITION","INTERFACE_TYPE_EXTENSION","INTERFACE","UNION_TYPE_DEFINITION","UNION_TYPE_EXTENSION","UNION","ENUM_TYPE_DEFINITION","ENUM_TYPE_EXTENSION","ENUM_VALUE_DEFINITION","ENUM_VALUE","INPUT_OBJECT_TYPE_DEFINITION","INPUT_OBJECT_TYPE_EXTENSION","INPUT_OBJECT","INPUT_VALUE_DEFINITION","INPUT_FIELD_DEFINITION","ARGUMENT_DEFINITION","getDirectiveLocationForASTPath","directiveName","misplacedDirectiveMessage","UniqueDirectivesPerLocation","directives","knownDirectives","directive","duplicateDirectiveMessage","KnownArgumentNames","Argument","suggestedArgs","getArgument","argumentOf","fieldDef","DIRECTIVE","getDirective","unknownDirectiveArgMessage","UniqueArgumentNames","knownArgNames","duplicateArgMessage","ProvidedNonNullArguments","argNodes","argNodeMap","argDef","VariablesDefaultValueAllowed","getInputType","guessType","defaultForRequiredVarMessage","SelectionSet","VariablesInAllowedPosition","varDefMap","varDef","varType","effectiveType","expectedType","badVarPosMessage","fieldsConflictMessage","responseName","reason","reasonMessage","subreason","OverlappingFieldsCanBeMerged","comparedFragmentPairs","PairSet","cachedFieldsAndFragmentNames","conflicts","_getFieldsAndFragment","getFieldsAndFragmentNames","fragmentNames","conflict","findConflict","collectConflictsWithin","comparedFragments","collectConflictsBetweenFieldsAndFragment","collectConflictsBetweenFragments","findConflictsWithinSelectionSet","_ref2","_ref2$","fields1","fields2","areMutuallyExclusive","_getReferencedFieldsA","getReferencedFieldsAndFragmentNames","fieldMap2","fragmentNames2","collectConflictsBetween","fragmentName1","fragmentName2","has","fragment1","fragment2","_getReferencedFieldsA2","fieldMap1","fragmentNames1","_getReferencedFieldsA3","parentFieldsAreMutuallyExclusive","field1","field2","parentType1","node1","def1","parentType2","node2","def2","name1","name2","arguments1","arguments2","every","argument1","value1","value2","argument2","argument","sameArguments","doTypesConflict","selectionSet1","selectionSet2","_ref3","reduce","allFields","_ref4","_ref5","subfieldConflicts","_getFieldsAndFragment2","_getFieldsAndFragment3","_comparedFragments","findConflictsBetweenSubSelectionSets","cached","nodeAndDefs","_collectFieldsAndFragmentNames","selection","inlineFragmentType","fragmentType","first","_pairSetAdd","DirectiveLocation","UniqueInputFieldNames","knownNameStack","knownNames","ObjectValue","ObjectField","duplicateInputFieldMessage","specifiedRules","ValuesOfCorrectType","getLogger","ErrorMessageUtility","showErrorMessage","errorHeader","errorMessageView","showError","errorToDisplay","enc","Base64","wordArray","_map","clamp","base64Chars","triplet","paddingChar","base64Str","base64StrLength","reverseMap","_reverseMap","paddingIndex","nBytes","bits1","bits2","parseLoop","blockStringValue","rawString","commonIndent","indent","leadingWhitespace","isBlank","NotificationService","getAlertNotifications","URI","alertNotification","UpdateRecordService","post","isDefaultRate","startDate","endDate","bottleSizeIds","bottleSizeId","bottleSizeNames","wineryIds","wineryId","wineryNames","zone","shippingMethodIds","shippingMethodId","shippingMethodNames","charge","__Schema","isIntrospection","__Type","queryType","getQueryType","mutationType","getMutationType","subscriptionType","getSubscriptionType","__Directive","__DirectiveLocation","__InputValue","onOperation","onFragment","onField","__TypeKind","TypeKind","NON_NULL","__Field","includeDeprecated","possibleTypes","enumValues","__EnumValue","inputFields","inputVal","SchemaMetaFieldDef","TypeMetaFieldDef","_ref6","TypeNameMetaFieldDef","_ref7","introspectionTypes","isIntrospectionType","billingZone","carriers","carrier","zipStart","zipEnd","getMatchingZone","zoneRanges","zipcode","filteredCountryZoneRanges","zoneRange","filteredCarrierZoneRanges","filteredStateZoneRanges","filteredZoneRanges","createdDate","approvedDate","deniedDate","refundType","wineryOrder","vfOrderNumber","trackingNumbers","checkOrInvoiceNumber","vfInvoiceNumber","creditAmount","WineryTransferService","RECORD_TYPE","_convertResponseToWineryTransferReference","_convertResponseToWineryTransfer","wineryTransfer","ReturnService","_convertResponseToReturnReference","allItems","_convertResponseToReturn","returnResponse","returnRecord","itemLine","_convertResponseToReturnItemReference","returnRefResponse","window","Function","Timeout","clearFn","_id","_clearFn","clearTimeout","setInterval","clearInterval","timeout","close","unref","ref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","setImmediate","global","clearImmediate","webpackPolyfill","deprecate","paths","JsonBuilder","JsonParser","targetPrefix","version","jsonVersion","builder","build","__type","Message","statusMessage","convertResponseTypes","translate","structure","struct","memberShape","translateStructure","out","translateMap","list","translateList","translateScalar","shapeMembers","hostPrefixEnabled","labels","hostPattern","operationModel","isEndpointOperation","endpointOperation","string","lowerFirst","endpointDiscoveryRequired","hasEndpointDiscover","hostPrefix","hostPrefixNotation","expandHostPrefix","prependEndpointPrefix","label","update","VERSION","Signers","Protocol","Json","Query","Rest","RestJson","RestXml","XML","Builder","Parser","Model","Api","Operation","Paginator","ResourceWaiter","EndpointCache","events","SequentialExecutor","endpointCacheSize","strictDeepEqual","second","keysSeen","isFalse","trimLeft","TYPE_NUMBER","TYPE_ANY","TYPE_STRING","TYPE_ARRAY","TYPE_OBJECT","TYPE_EXPREF","TYPE_ARRAY_NUMBER","TYPE_ARRAY_STRING","basicTokens","operatorStartToken","skipChars","isNum","ch","Lexer","tokenize","stream","identifier","tokens","_current","_consumeUnquotedIdentifier","_consumeNumber","_consumeLBracket","_consumeQuotedIdentifier","_consumeRawStringLiteral","literal","_consumeLiteral","_consumeOperator","maxLength","startingChar","literalString","_looksLikeJSON","ex","bindingPower","TreeInterpreter","runtime","Runtime","interpreter","_interpreter","functionTable","abs","_func","_functionAbs","_signature","avg","_functionAvg","ceil","_functionCeil","_functionContains","_functionEndsWith","_functionFloor","_functionLength","_functionMap","_functionMax","_functionMerge","variadic","_functionMaxBy","sum","_functionSum","_functionStartsWith","_functionMin","_functionMinBy","_functionType","_functionKeys","_functionValues","_functionSort","_functionSortBy","_functionJoin","reverse","_functionReverse","_functionToArray","_functionToString","_functionToNumber","_functionNotNull","_loadTokens","ast","_lookahead","_lookaheadToken","rbp","leftToken","_advance","left","nud","currentToken","led","number","right","Not","_parseProjectionRHS","Star","_parseMultiselectHash","Flatten","_parseIndexExpression","_projectIfSlice","_parseMultiselectList","Expref","_match","_errorToken","tokenName","Dot","_parseDotRHS","Pipe","Or","And","Filter","_parseComparator","tokenType","_parseSliceExpression","indexExpr","comparator","keyToken","keyName","pairs","identifierTypes","visit","matched","collected","sliceParams","computed","computeSliceParams","stop","step","base","objValues","filtered","finalResults","original","merged","resolvedArgs","callFunction","jmespathType","arrayLength","stepValueNegative","capSliceRange","actualValue","functionEntry","_validateArgs","signature","pluralized","currentSpec","actualType","typeMatched","_getTypeName","_typeMatches","actual","expected","argValue","subtype","searchStr","suffix","originalStr","reversedStr","reversedArray","inputArray","mapped","exprefNode","maxElement","minElement","listToSum","joinChar","convertedValue","sortedArray","requiredType","that","decorated","exprA","exprB","maxRecord","resolvedArray","keyFunction","createKeyFunction","maxNumber","Infinity","minRecord","minNumber","allowedTypes","msg","dataMemory","MemoryStorage","setItem","getItem","clear","StorageHelper","storageWindow","localStorage","exception","getStorage","__export","CacheList_1","CacheList","JS","browserOrNode","isBrowser","nativeMatches","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","graphql","argsOrSchema","rootValue","contextValue","variableValues","fieldResolver","_arguments","graphqlImpl","graphqlSync","schemaValidationErrors","errors","document","syntaxError","validationErrors","subscribeFieldResolver","subscribeImpl","reportGraphQLError","sourcePromise","createSourceEventStream","mapSourceToResponse","resultOrStream","exeContext","fieldNodes","resolveFn","eventStream","GraphQLError","_printError","_location","extensions","_nodes","_source","_positions","_locations","providedSource","getLocation","stack","captureStackTrace","extendStatics","__extends","setPrototypeOf","__proto__","__","__assign","__awaiter","thisArg","P","generator","fulfilled","rejected","__generator","y","sent","trys","ops","verb","op","__rest","getOwnPropertySymbols","Paho","uuid_1","PubSubProvider_1","mqttTopicMatch","topic","filterArray","topicArray","ClientsQueue","promises","clientId","clientFactory","_a","delete","topicSymbol","MqttOverWSProvider","_super","_clientsQueue","_topicObservers","aws_pubsub_endpoint","getTopicForValue","getProviderName","onDisconnect","errorCode","newClient","client","_b","Client","onMessageArrived","payloadString","_onMessage","onConnectionLost","connect","useSSL","mqttVersion","onSuccess","onFailure","clientsQueue","isConnected","topics","targetTopics","send","matchedTopicObservers_1","observerForTopic","observerTopic","parsedMessage_1","observersForTopic","Set","e_1","_c","complete","AbstractPubSubProvider","XRError","XRNoSceneConfiguredError","XRSceneNotFoundError","XRSceneNotLoadedError","XRNoDomElement","XRSceneLoadFailure","XRProviderNotConfigured","MAX_INT","MIN_INT","coerceInt","num","int","GraphQLInt","coerceFloat","GraphQLFloat","coerceString","GraphQLString","GraphQLBoolean","GraphQLID","specifiedScalarTypes","isSpecifiedScalarType","AureliaConfiguration","environment","environments","directory","config_file","cascade_mode","base_path_mode","_config_object","_config_merge_object","hostName","pathName","setDirectory","setConfig","setEnvironment","setEnvironments","check","setCascadeMode","bool","setWindow","setBasePathMode","env","hostnames","hostnames_1","environmentEnabled","environmentExists","getDictValue","baseObject","splitKey","currentObject","returnVal","parent_1","merge","currentConfig","lazyMerge","currentMergeConfig","setAll","getAll","loadConfig","loadConfigFile","pathClosure","xhr","XMLHttpRequest","overrideMimeType","open","onreadystatechange","readyState","responseText","onloadend","onerror","mergeConfigFile","optional","catch","State","charSpec","nextStates","validChars","invalidChars","put","repeat","results","escapeRegex","StaticSegment","caseSensitive","eachChar","generate","DynamicSegment","consumed","StarSegment","EpsilonSegment","RouteRecognizer","rootState","routes","route","currentState","skippableStates","statics","dynamics","stars","routeName","isEmpty","segments","normalizedRoute","splitRoute","segment","_addSegment","addSegment","firstState","nextState","handlers","routeNames","getRoute","nameOrRoute","handlersFor","hasRoute","generationUsesHref","routeParams","segmentValue","param","recognize","states","queryParams","isSlashDropped","normalizedPath","queryStart","decodeURI","pathLen","recognizeChar","solutions","_l","sortSolutions","captures","currentCapture","RecognizeResults","_handler","_names","_params","findHandler","isSpecificValue","cloneSpecificValue","copy","deepCloneArray","arr","deepExtend","moment","defineLocale","months","monthsShort","weekdays","weekdaysShort","weekdaysMin","meridiemParse","isPM","meridiem","hours","minutes","isLower","longDateFormat","LT","LTS","L","LL","LLL","LLLL","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","relativeTime","future","past","ss","mm","hh","dd","MM","yy","dayOfMonthOrdinalParse","ordinal","week","dow","doy","symbolMap","numberMap","pluralForm","plurals","pluralize","withoutSuffix","isFuture","weekdaysParseExact","hour","minute","preparse","postformat","Facet_1","Amplify_1","ClientDevice_1","ClientDevice","Logger_2","Hub_1","Hub","I18n_1","JS_1","Signer_1","Signer","Parser_1","OAuthHelper_1","FacebookOAuth","GoogleOAuth","Credentials_1","Credentials","ServiceWorker_1","StorageHelper_1","Platform_1","Platform","Platform_2","Constants","userAgent","suffixes","1","5","8","70","80","2","7","20","50","3","4","100","6","9","10","30","60","90","relativeTimeWithPlural","forms","standalone","isFormat","day","period","lastDigit","last2Digits","meridiemHour","relativeTimeWithMutation","text","mutationTable","softMutation","mutation","lastNumber","monthsParseExact","ll","lll","llll","Kind","DOCUMENT","VARIABLE_DEFINITION","SELECTION_SET","ARGUMENT","OBJECT_FIELD","NAMED_TYPE","LIST_TYPE","NON_NULL_TYPE","OPERATION_TYPE_DEFINITION","DIRECTIVE_DEFINITION","monthsParse","monthsRegex","plural","monthsShortRegex","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","processRelativeTime","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","month","_monthsNominativeEl","calendarEl","mom","_calendarEl","_class11","_class13","_classInvokers","Optional","Lazy","of","All","checkParent","_checkParent","StrategyResolver","Parent","Factory","_len","NewInstance","asKey","_len2","dynamicDependencies","dependency","_len3","FactoryInvoker","invokeWithDynamicDependencies","staticDependencies","TransientRegistration","registerResolver","existingResolver","getResolver","SingletonRegistration","keyOrRegisterInChild","registerInChild","_registerInChild","targetContainer","validateKey","_emptyParameters","registration","invoker","resolverDecorates","InvocationHandler","Reflect","construct","classInvokers","Type","fallback","Container","configuration","_configuration","_onHandlerCreated","onHandlerCreated","_handlers","setHandlerCreatedCallback","registerHandler","registerAlias","originalKey","aliasKey","allResolvers","_registration","autoRegisterAll","fns","_registration2","_get","_createInvocationHandler","paramTypes","_dependencies","autoinject","potentialTarget","previousInject","autoInject","prevIndex","_len5","monthsShortDot","userSession","DefaultService","getBearerToken","currentSession","getIdToken","getJwtToken","API_NAME","Authorization","currentWinery","requestData","getRecordArrayFieldValue","dateValue","toDate","dateTimeValue","utc","numbersPast","numbersFuture","verbalNumber","monthsShortWithDots","monthsShortWithoutDots","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","RangeError","encodingOrOffset","allocUnsafe","array","fromArrayLike","fromArrayBuffer","encoding","isEncoding","write","fromString","isBuffer","checked","fromObject","assertSize","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","dir","arrayIndexOf","indexSize","arrLength","valLength","read","readUInt16BE","foundIndex","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","fromByteArray","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","SlowBuffer","INSPECT_MAX_BYTES","foo","subarray","typedArraySupport","poolSize","_augment","species","allocUnsafeSlow","_isBuffer","compare","swap16","swap32","swap64","equals","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","_arr","ret","toHex","bytes","checkOffset","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","leadSurrogate","toByteArray","stringtrim","base64clean","dst","weekEndings","none","loggers","appenders","globalDefaultLevel","standardLevels","isStandardLevel","appendArgs","logFactory","threshold","_appenders$i","logFactoryCustom","appender","connectLoggers","_level","addAppender","removeAppender","getAppenders","clearAppenders","_level2","disconnectLoggers","addCustomLevel","removeCustomLevel","setLevel","getLevel","now","0","40","isUpper","isDirective","GraphQLDirective","GraphQLIncludeDirective","if","GraphQLSkipDirective","DEFAULT_DEPRECATION_REASON","GraphQLDeprecatedDirective","specifiedDirectives","isSpecifiedDirective","specifiedDirective","eifelerRegelAppliesToNumber","translateSingular","special","relativeTimeWithSingular","translator","correctGrammaticalCase","wordKey","isInvalid","relativeTimeMr","postMessage","dynamicTyping","U","dynamicTypingFunction","transform","worker","WORKERS_SUPPORTED","URL","webkitURL","BLOB_URL","createObjectURL","Blob","Worker","onmessage","userStep","userChunk","chunk","userComplete","userError","workerId","NODE_STREAM_INPUT","download","readable","on","File","unparse","delimiter","BAD_DELIMITERS","quotes","skipEmptyLines","newline","quoteChar","escapeChar","escapeFormulae","q","RECORD_SEP","UNIT_SEP","BYTE_ORDER_MARK","LocalChunkSize","RemoteChunkSize","DefaultDelimiter","w","ParserHandle","NetworkStreamer","FileStreamer","StringStreamer","ReadableStreamStreamer","jQuery","FileReader","files","inputElem","instanceConfig","_handle","_finished","_completed","_halted","_input","_baseIndex","_partialLine","_rowCount","_start","_nextChunk","isFirstChunk","_completeResults","E","chunkSize","streamer","parseChunk","beforeFirstChunk","paused","aborted","cursor","preview","WORKER_ID","finished","_sendError","_readChunk","_chunkLoaded","withCredentials","onload","_chunkError","downloadRequestBody","downloadRequestHeaders","setRequestHeader","getResponseHeader","statusText","webkitSlice","mozSlice","FileReaderSync","readAsText","pause","resume","_streamData","_streamEnd","_streamError","_checkIsFinished","_streamCleanUp","removeListener","abort","transformHeader","row","comments","successful","bestDelimiter","delimitersToGuess","getCharIndex","O","D","I","T","A","F","fastMode","z","R","S","nextDelim","quoteSearch","linebreak","truncated","terminate","monthsNominative","monthsSubjective","separator","days","CHANGE_ORDER_TYPES","isAllowedForOrder","_isStatusAllowed","_isWeatherHoldValid","_isIceValid","_isAddIce","includeIce","_isRemoveIce","_isPlaceWeatherHold","weatherHold","_isRemoveWeatherHold","ADD_ICE","REMOVE_ICE","PLACE_WEATHER_HOLD","REMOVE_WEATHER_HOLD","CHANGE_ADDRESS","CHANGE_SHIP_METHOD","CHANGE_SHIP_INST","CHANGE_SHIP_DATE","CHANGE_EMAIL","CHANGE_GIFT_MESSAGE","CHANGE_ITEMS","getNewRequest","ChangeOrderAddressRequest","shippingAddress","ChangeOrderShipMethodRequest","ChangeOrderShipInstructionsRequest","shippingInstructions","ChangeOrderShipDateRequest","futureShipDate","ChangeOrderEmailRequest","ChangeOrderGiftMsgRequest","giftMessage","ChangeOrderItemsRequest","ChangeOrderItemLine","ChangeOrderRequest","viewModelPath","ChangeOrderType","getValidationErrors","ChangeOrderNewItem","newItem","lineNumber","removeItemChanged","newQuantityChanged","12","13","numbersNouns","numberNoun","hundred","ten","word","numberAsNoun","time","hm","_possibleConstructorReturn","ReferenceError","_inherits","subClass","superClass","targetContext","sourceContext","camelCase","createOverrideContext","getContextFor","ancestor","oc","slotNames","versionSlotNames","addObserver","observerSlots","_observerSlots","_version","observeProperty","observeArray","getArrayObserver","unobserve","connectable","queue","queued","nextId","minimumImmediate","frameBudget","isFlushRequested","immediate","flush","animationFrameStart","__connectQueueId","performance","requestAnimationFrame","enqueueBindingConnect","hasSubscriber","_context0","_context1","_context2","_contextsRest","_callablesRest","_callable2","_callable1","_callable0","callables","contexts","arrayPool1","arrayPool2","poolUtilization","context0","callable0","context1","callable1","context2","callable2","contextsRest","callablesRest","poolIndex","hasSubscribers","subscriberCollection","ExpressionObserver","evaluate","toNumber","newSplice","addedCount","ArraySplice","calcEditDistances","currentStart","currentEnd","old","oldStart","oldEnd","rowCount","columnCount","distances","north","west","spliceOperationsFromEditDistances","edits","northWest","calcSplices","prefixCount","suffixCount","minLength","sharedPrefix","sharedSuffix","_splice","splices","oldIndex","searchLength","index1","index2","count","calculateSplices","previousValue","arraySplice","mergeSplice","start1","end1","start2","end2","inserted","insertionOffset","intersectCount","deleteCount","currentRemoved","prepend","append","projectArraySplices","changeRecords","console","createInitialSplices","ModifyCollectionObserver","collection","oldCollection","lengthPropertyName","addChangeRecord","changeRecord","lengthObserver","flushChangeRecords","getLengthObserver","CollectionLengthObserver","entries","newRecord","getChangeRecords","notEmpty","methodCallResult","__array_observer__","oldArray","ModifyArrayObserver","_ModifyCollectionObse","for","Expression","isChain","isAssignable","FEATURE_NO_UNPARSER","_Unparser","Chain","_Expression","accept","visitor","visitChain","BindingBehavior","_Expression2","visitBindingBehavior","behaviorKey","evalList","ValueConverter","_Expression3","allArgs","converter","toView","fromView","visitValueConverter","signals","connectBindingToSignal","Assign","_Expression4","vistor","visitAssign","Conditional","_Expression5","yes","no","visitConditional","AccessThis","_Expression6","visitAccessThis","AccessScope","_Expression7","visitAccessScope","AccessMember","_Expression8","visitAccessMember","AccessKeyed","_Expression9","getKeyed","setKeyed","visitAccessKeyed","CallScope","_Expression10","mustEvaluate","getFunction","visitCallScope","CallMember","_Expression11","visitCallMember","CallFunction","_Expression12","visitCallFunction","Binary","_Expression13","autoConvertAdd","visitBinary","PrefixNot","_Expression14","visitPrefix","LiteralPrimitive","_Expression15","visitLiteralPrimitive","LiteralString","_Expression16","_this18","visitLiteralString","LiteralArray","_Expression17","_this19","visitLiteralArray","LiteralObject","_Expression18","_this20","_i12","visitLiteralObject","_i13","_i14","mustExist","Unparser","writeArgs","_i15","chain","_i16","_i17","_i18","conditional","access","binary","_i19","_i20","escaped","ExpressionCloner","cloneExpressionArray","clonedArray","bindingMode","oneTime","twoWay","Token","withOp","opKey","withGetterSetter","withValue","lex","scanner","Scanner","scanToken","peek","$SPACE","$EOF","isIdentifierStart","scanIdentifier","isDigit","scanNumber","$PERIOD","$LPAREN","$RPAREN","$LBRACE","$RBRACE","$LBRACKET","$RBRACKET","$COMMA","$COLON","$SEMICOLON","scanCharacter","$SQ","$DQ","scanString","$PLUS","$MINUS","$STAR","$SLASH","$PERCENT","$CARET","$QUESTION","scanOperator","$LT","$GT","$BANG","$EQ","scanComplexOperator","$AMPERSAND","$BAR","$NBSP","$TAB","OPERATORS","$a","$z","$A","$Z","$0","$9","$_","$$","simple","$e","$E","isExponentSign","quote","$BACKSLASH","_unescaped","$u","hex","_i21","unescape","unescaped","$LF","$VTAB","$FF","$CR","$f","$n","$r","$t","$v","ParserImplementation","parseChain","expr","parseBindingBehavior","parseValueConverter","parseExpression","parseConditional","expect","parseLogicalOr","parseLogicalAnd","parseEquality","parseRelational","parseAdditive","parseMultiplicative","parsePrefix","parseAccessOrCallMember","parsePrimary","parseExpressionList","_args","_elements","parseObject","parseAccessOrCallScope","terminator","mapProto","ModifyMapObserver","_ModifyCollectionObse2","__map_observer__","hasValue","findOriginalEventTarget","deepPath","stopPropagation","standardStopPropagation","propagationStopped","handleCapturedEvent","orderedCallbacks","capturedCallbacks","_i22","orderedCallback","CapturedHandlerEntry","increment","decrement","handleDelegatedEvent","delegatedCallbacks","DelegateHandlerEntry","DelegationEntryHandler","targetEvent","EventHandler","DefaultEventStrategy","delegatedHandlers","capturedHandlers","disposable","handlerEntry","delegationStrategy","bubbling","capturing","EventManager","elementHandlerLookup","eventStrategyLookup","scrollTop","scrollLeft","defaultEventStrategy","registerEventStrategy","getElementHandler","EventSubscriber","callbackOrListener","delegate","_i23","_i24","DirtyChecker","tracked","checkDelay","addProperty","scheduleDirtyCheck","removeProperty","_this22","isDirty","DirtyCheckProperty","dirtyChecker","propertyAccessor","PrimitiveObserver","primitive","doNotCache","SetterObserver","observing","getterValue","setterValue","convertProperty","propertyIsEnumerable","XLinkAttributeObserver","getAttributeNS","setAttributeNS","nodeName","dataAttributeAccessor","DataAttributeObserver","StyleObserver","styles","cssText","_setProperty","priority","setProperty","rx","pair","ValueAttributeObserver","notify","CheckedObserver","initialSync","arrayObserver","synchronizeElement","valueObserver","elementValue","isRadio","matcher","findIndex","synchronizeValue","SelectValueObserver","multiple","synchronizeOptions","option","optionValue","selected","_this23","_i25","_option","_ret2","_loop2","_loop3","_this24","domObserver","ClassObserver","nameIndex","_i26","computedFrom","ComputedExpression","_Expression19","_this25","svgElements","svgPresentationElements","svgPresentationAttributes","svgAnalyzer","FEATURE_NO_SVG","altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","circle","clipPath","defs","desc","ellipse","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","font","foreignObject","glyph","glyphRef","hkern","image","linearGradient","mask","mpath","polygon","polyline","radialGradient","rect","script","svg","switch","symbol","textPath","tref","tspan","vkern","html","div","SVGAnalyzer","altglyph","altglyphdef","altglyphitem","glyphref","isStandardSvgAttribute","presentationElements","presentationAttributes","ObserverLocator","eventManager","adapters","observersLookup","createPropertyObserver","createObserversLookup","addAdapter","adapter","getAdapterObserver","_i28","xlinkResult","SVGElement","hasDeclaredDependencies","getPropertyDescriptor","_i27","createComputedObserver","existingGetterOrSetter","adapterObserver","getMapObserver","getSetObserver","getAccessor","_getArrayObserver","_getMapObserver","ModifySetObserver","_getSetObserver","BindingExpression","ObjectObservationAdapter","sourceExpression","Binding","updateTarget","targetObserver","updateSource","CallExpression","Call","callSource","$event","_this26","ValueConverterResource","nameOrTarget","BindingBehaviorResource","ListenerExpression","Listener","getAU","NameExpression","apiName","NameBinder","locateAPI","LookupFunctions","BindingEngine","createBindingExpression","propertyObserver","_this27","collectionObserver","_this28","expressionObserver","registerAdapter","setProto","_ModifyCollectionObse3","__set_observer__","oldSize","observable","targetOrConfig","isClassDecorator","innerPropertyName","innerPropertyDescriptor","print","printDocASTReducer","Name","Variable","varDefs","wrap","variableDefinitions","block","IntValue","_ref8","FloatValue","_ref9","StringValue","_ref10","isDescription","printBlockString","BooleanValue","_ref11","NullValue","EnumValue","_ref12","ListValue","_ref13","_ref14","_ref15","_ref16","_ref17","ListType","_ref18","NonNullType","_ref19","SchemaDefinition","_ref20","operationTypes","OperationTypeDefinition","_ref21","ScalarTypeDefinition","addDescription","_ref22","_ref23","FieldDefinition","_ref24","InputValueDefinition","_ref25","_ref26","_ref27","EnumTypeDefinition","_ref28","EnumValueDefinition","_ref29","_ref30","ScalarTypeExtension","_ref31","ObjectTypeExtension","_ref32","InterfaceTypeExtension","_ref33","UnionTypeExtension","_ref34","EnumTypeExtension","_ref35","InputObjectTypeExtension","_ref36","DirectiveDefinition","_ref37","cb","maybeArray","maybeString","processHoursFunction","QueryParamSerializer","Version","apiVersion","Action","queryParamsToString","Code","requestId","Errors","origRules","tmp","_XAMZRequestId","requestIdShape","memoize","nameTr","iterable","applyContentTypeHeader","isBinary","payloadShape","populateBody","rules","hasEventOutput","payloadMember","isEventStream","createEventStream","HttpClient","streamsApiVersion","rootElement","toXML","upperFirst","endpointPrefix","signingName","globalEndpoint","signatureVersion","serviceAbbreviation","serviceFullName","serviceId","endpointoperation","paginator","waiters","waiter","http","requestUri","authtype","endpointdiscovery","idempotentMembers","isIdempotent","topLevelShape","hasEventStream","input_token","limit_key","more_results","output_token","result_key","inherit","_events","listeners","listener","toHead","onAsync","_isAsync","removeAllListeners","emit","eventArgs","doneCallback","callListeners","prevError","callNextListener","err","_haltHandlersOnError","addListeners","callbacks","addNamedListener","addListener","addNamedAsyncListener","addNamedListeners","hideProperties","expired","expireTime","refreshCallbacks","creds","credentials","accessKeyId","secretAccessKey","sessionToken","expiryWindow","needsRefresh","currentTime","getDate","adjustedTime","refresh","coalesceRefresh","sync","defer","addPromisesToClass","PromiseDependency","getPromise","promisifyMethod","refreshPromise","deletePromisesFromClass","addPromises","relativeToFile","fileParts","nameParts","normalizedBaseParts","ary","trimDots","path1","path2","schemeMatch","scheme","urlPrefix","trailingSlash","url1","url2","url3","encodeKey","buildParam","traditional","arrayKey","buildQueryString","processScalarParam","existedParam","parseComplexParam","currentParams","keysLastIndex","prevValue","CredentialProviderChain","defaultProviders","resolveCallbacks","resolveNext","provider","getErr","resolvePromise","Endpoint","sslEnabled","HttpRequest","region","_userAgent","setUserAgent","getUserAgentHeaderName","appendToUserAgent","agentPartial","getUserAgent","queryStringParse","updateEndpoint","endpointStr","newEndpoint","HttpResponse","createUnbufferedStream","getInstance","V3","RequestSigner","addAuthorization","datetime","rfc822","authorization","signedHeaders","headersToSign","canonicalHeaders","crypto","hmac","stringToSign","sha256","cachedSecret","cacheQueue","v4Identifier","createScope","serviceName","getSigningKey","shouldCache","cacheKey","kDate","kRegion","kService","signingKey","emptyCache","getRandomValues","msCrypto","rnds8","rnds","random","byteToHex","bth","GoogleOAuth_1","FacebookOAuth_1","packageInfo","navigator","product","isReactNative","MobileAnalytics","Pinpoint","cache_1","AMPLIFY_SYMBOL","dispatchAnalyticsEvent","dispatch","RETRYABLE_CODES","ACCEPTED_CODES","BUFFER_SIZE","FLUSH_SIZE","FLUSH_INTERVAL","RESEND_LIMIT","AWSPinpointProvider","_endpointGenerating","_buffer","bufferSize","flushSize","flushInterval","resendLimit","_clientInfo","clientInfo","_setupTimer","_timer","_send","_putToBuffer","getCategory","category","providerName","conf","_getEndpointId","endpointId","timestamp","_getCredentials","_generateSession","eventId","_sessionId","_sessionStartTimestamp","session","Id","StartTimestamp","toISOString","stopTimestamp","Duration","StopTimestamp","_updateEndpoint","_record","_generateBatchItemContext","metrics","appId","eventParams","ApplicationId","EventsRequest","BatchItem","endpointObj","EventType","Timestamp","Attributes","Metrics","Session","_pinpointPutEvents","pinpointClient","putEvents","EventsResponse","Results","EventsItemResponse","StatusCode","_retry","_initClients","update_params","_endpointRequest","transferKeyToLowerCase","EndpointId","EndpointRequest","_removeUnusedEndpoints","User","UserId","userId","rej","getUserEndpoints","endpoints","EndpointsResponse","Item","endpointToBeDeleted","timeStamp1","timeStamp2","mobileAnalytics","identityId","customizeRequests","clientContext","defaultEndpointConfig","demographicByClientInfo","appVersion","make","modelVersion","platform","demographicByClientContext","appTitle","appVersionName","appVersionCode","appPackageName","channelType","effectiveDate","demographic","user","userAttributes","transferKeyToUpperCase","shear","doNotShip","StateReference","CountryReference","Utils_1","StorageCache","cacheCurSizeKey","keyPrefix","checkConfig","isInteger","capacityInBytes","defaultConfig","itemMaxSize","defaultTTL","defaultPriority","warningThreshold","fillCacheItem","getCurrTime","visitedTime","expires","byteSize","getByteLength","matches_1","parents_1","shouldCheckSelf","parentElements","ele","LARGE_ARRAY_SIZE","CORE_ERROR_TEXT","FUNC_ERROR_TEXT","HASH_UNDEFINED","MAX_MEMOIZE_SIZE","PLACEHOLDER","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","WRAP_BIND_FLAG","WRAP_BIND_KEY_FLAG","WRAP_CURRY_BOUND_FLAG","WRAP_CURRY_FLAG","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","WRAP_FLIP_FLAG","DEFAULT_TRUNC_LENGTH","DEFAULT_TRUNC_OMISSION","HOT_COUNT","HOT_SPAN","LAZY_FILTER_FLAG","LAZY_MAP_FLAG","INFINITY","MAX_SAFE_INTEGER","MAX_INTEGER","NAN","MAX_ARRAY_LENGTH","MAX_ARRAY_INDEX","HALF_MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","asyncTag","boolTag","dateTag","domExcTag","errorTag","funcTag","genTag","mapTag","numberTag","nullTag","objectTag","proxyTag","regexpTag","setTag","stringTag","symbolTag","undefinedTag","weakMapTag","weakSetTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrim","reTrimStart","reTrimEnd","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsComboRange","rsComboMarksRange","rsBreakRange","rsMathOpRange","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","reOptMod","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","freeParseInt","freeGlobal","freeSelf","freeExports","freeModule","moduleExports","freeProcess","process","nodeUtil","require","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","arrayAggregator","setter","iteratee","accumulator","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","arrayMap","arrayPush","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","baseTimes","baseUnary","baseValues","cacheHas","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","mapToArray","overArg","replaceHolders","placeholder","setToArray","setToPairs","stringSize","lastIndex","unicodeSize","stringToArray","unicodeToArray","asciiToArray","unescapeHtmlChar","runInContext","uid","defaults","pick","arrayProto","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","getPrototype","objectCreate","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","nativeIsBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","DataView","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","valueOf","symbolToString","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","ListCache","MapCache","SetCache","__data__","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","eq","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","skip","lower","upper","baseClone","bitmask","customizer","isDeep","isFlat","isFull","initCloneArray","tag","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","Ctor","cloneArrayBuffer","dataView","cloneDataView","cloneTypedArray","regexp","cloneRegExp","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","wait","baseDifference","isCommon","valuesLength","outer","valuesIndex","templateSettings","getMapData","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","isFunction","baseGet","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","other","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","seen","baseInvoke","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","objStacked","othStacked","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","baseIsNative","baseIteratee","identity","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","isTyped","isArrayLikeObject","isPlainObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","comparer","baseSortBy","objCriteria","criteria","othCriteria","ordersLength","compareAscending","compareMultiple","basePickBy","baseSet","basePullAll","basePullAt","indexes","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","high","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","createAssigner","assigner","sources","guard","isIterateeCall","createCaseFirst","methodName","trailing","createCompounder","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","wrapper","getFuncName","funcName","getData","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","countHolders","newHolders","createRecurry","reorder","createInverter","toIteratee","baseInverter","createMathOperation","operator","createOver","arrayFunc","createPadding","chars","charsLength","createRange","toFinite","baseRange","createRelationalOperation","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","toInteger","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrStacked","arrValue","flatten","otherFunc","stubArray","hasPath","hasFunc","isLength","ctorString","isMaskable","stubFalse","otherArgs","shortOut","details","insertWrapDetails","updateWrapDetails","getWrapDetails","lastCalled","stamp","rand","memoizeCapped","subString","difference","differenceBy","differenceWith","findLastIndex","head","intersection","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","group","unzipWith","without","xor","xorBy","xorWith","zipWith","interceptor","wrapperAt","countBy","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","bindKey","debounce","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","leadingEdge","cancel","delay","memoized","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","gt","gte","isError","isNumber","lt","lte","toArray","iteratorToArray","remainder","toLength","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invert","invertBy","omit","basePick","pickBy","toPairs","toPairsIn","capitalize","kebabCase","lowerCase","snakeCase","startCase","upperCase","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","range","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","round","subtract","minuend","subtrahend","castArray","compact","cond","conforms","baseConforms","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","baseFill","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functions","functionsIn","initial","mapKeys","mapValues","matchesProperty","nthArg","omitBy","orderBy","propertyOf","pullAllBy","pullAllWith","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","updateWith","valuesIn","zipObject","zipObjectDeep","entriesIn","extendWith","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","escapeRegExp","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isElement","isEqual","isEqualWith","isMatch","isMatchWith","isNative","isNil","isSafeInteger","isUndefined","isWeakMap","isWeakSet","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","noConflict","pad","strLength","padEnd","padStart","radix","floating","temp","reduceRight","sample","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","sumBy","settings","isEscaping","isEvaluating","importsKeys","importsValues","interpolate","reDelimiters","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","times","toLower","toSafeInteger","toUpper","trimEnd","trimStart","truncate","omission","newEnd","uniqueId","eachRight","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","isRight","getView","iterLength","takeCount","iterIndex","commit","wrapped","Auth_1","AuthClass","CognitoHostedUIIdentityProvider","amazon_cognito_identity_js_1","CognitoUser","CookieStorage","isFederatedSignInOptions","isFederatedSignInOptionsCustom","isCognitoHostedOpts","oauth","redirectSignIn","isUsernamePasswordOpts","username","superInit","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","typedArrayByteLength","S3","dispatchStorageEvent","track","attrs","AWSS3Provider","CATEGORY","PROVIDER_NAME","amplifyConfig","parseMobilehubConfig","bucket","opt","final_key","s3","_ensureCredentials","_prefix","_createS3","Bucket","Key","getObject","fileSize","Body","Expires","getSignedUrl","progressCallback","contentType","contentDisposition","cacheControl","tagging","serverSideEncryption","SSECustomerAlgorithm","SSECustomerKey","SSECustomerKeyMD5","SSEKMSKeyId","ContentType","CacheControl","ContentDisposition","Metadata","Tagging","ServerSideEncryption","upload","progress","deleteObject","final_path","Prefix","listObjects","Contents","eTag","ETag","lastModified","LastModified","Size","cred","customPrefix","privatePath","private","protectedPath","protected","publicPath","public","convertResponseToOrderReference","orderResponse","OrderReference","vinfillmentOrderNumber","declaredValue","trackingLink","trackingNumberList","isColdChainCompatible","coldChainDeliveryDay","coldChainDeliveryTime","coldChainZone","convertResponseToOrderLine","orderLineResponse","OrderItem","committed","backordered","available","shipped","convertResponseToOrder","orderReference","Order","trackingNumber","carrierTrackingLink","currentCarrierStatus","numberOfAttempts","estimatedDelivery","actualDelivery","isReturnTracking","returnTrackingNumber","Address","isPendingApproval","isPendingFulfillment","isVoided","isShippingColdChain","TrackingNumber","isInternational","_addNewLine","_addBankSpaceAfter","stateName","countryName","addedLine","_GraphQLError","_syntaxError","_locatedError","_formatError","formatError","lineRegexp","utils","paramsSerializer","serializedParams","isURLSearchParams","hashmarkIndex","__CANCEL__","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","transformRequest","isFormData","isStream","isFile","isBlob","isArrayBufferView","transformResponse","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","common","settle","buildURL","parseHeaders","isURLSameOrigin","createError","requestHeaders","btoa","responseURL","responseHeaders","getAllResponseHeaders","responseType","onabort","ontimeout","isStandardBrowserEnv","cookies","xsrfValue","onDownloadProgress","onUploadProgress","cancelToken","enhanceError","isSchema","GraphQLSchema","assumeValid","__validationErrors","allowedLegacyNames","__allowedLegacyNames","_queryType","_mutationType","_subscriptionType","_directives","initialTypes","typeMap","typeMapReducer","typeMapDirectiveReducer","_typeMap","_implementations","iface","impls","abstractType","isPossibleType","possibleTypeMap","_possibleTypeMap","reducedMap","fieldArgTypes","config1","config2","deepMerge","Cancel","hasSymbol","INTERNAL_AWS_APPSYNC_PUBSUB_PROVIDER","MqttOverWSProvider_1","AWSIoTProvider","aws_pubsub_region","serviceInfo","access_key","secret_key","session_token","signUrl","InteractionsProvider_1","LexRuntime","AWSLexProvider","aws_lex","_botsCompleteCallback","responseCallback","botname","dialogState","onComplete","sendMessage","postText","postContent","ErrorEvent","AbstractInteractionsProvider","XRProvider_1","Errors_1","SumerianProvider","loadScript","scriptElement","loadScene","sceneName","domElementId","sceneOptions","scene","sceneUrl","sceneId","sceneRegion","errorMsg","awsSDKConfigOverride","fetchOptions","accessInfo","apiResponse","apiResponseJson","sceneBundleData","sceneBundleJson","error_1","publishParamOverrides","sceneLoadParams","sceneController","warning","getScene","sceneConfig","customUserAgent","sign","fetch","json","bundleData","bootstrapperUrl","sceneBundle","SumerianBootstrapper","isLoaded","sceneLoadWarnings","isSceneLoaded","scenes","getSceneController","isVRCapable","vrCapable","isVRPresentationActive","vrPresentationActive","enterVR","exitVR","isMuted","muted","setMuted","onSceneEvent","eventHandler","enableAudio","AbstractXRProvider","QueryDocumentKeys","BREAK","visitorKeys","inArray","newRoot","isLeaving","isEdited","editOffset","editKey","editValue","visitFn","getVisitFn","maybeNode","visitInParallel","visitors","skipping","visitWithTypeInfo","typeInfo","kindVisitor","kindSpecificVisitor","specificVisitor","specificKindVisitor","dbits","AuthenticationDetails","ValidationData","Username","Password","AuthParameters","validationData","authParameters","getUsername","getPassword","getValidationData","getAuthParameters","BigInteger","nbi","inBrowser","appName","am","xl","xh","DB","DM","DV","FV","F1","F2","rr","vv","BI_RM","BI_RC","int2char","intAt","nbv","fromInt","nbits","Montgomery","mp","invDigit","mpl","mph","um","mt2","dlShiftTo","divRemTo","compareTo","ZERO","subTo","revert","copyTo","u0","drShiftTo","mulTo","multiplyTo","sqrTo","squareTo","sh","lShiftTo","bs","cbs","bm","ds","rShiftTo","pm","pt","ts","ms","nsh","ys","y0","yt","d1","d2","ONE","qd","addTo","km","bitLength","mod","modPow","k1","g2","is1","r2","initN","AuthenticationHelper","PoolName","N","hexHash","smallAValue","generateRandomSmallA","getLargeAValue","infoBits","poolName","getSmallAValue","largeAValue","calculateA","hexRandom","generateRandomString","getRandomPassword","randomPassword","getSaltDevices","SaltToHashDevices","getVerifierDevices","verifierDevices","generateHashDevice","deviceGroupKey","combinedString","hashedString","padHex","verifierDevicesNotPadded","calculateU","B","UHexHash","hashHex","hexStr","computehkdf","ikm","salt","infoBitsWordArray","ikmWordArray","saltWordArray","prk","getPasswordAuthenticationKey","serverBValue","UValue","usernamePassword","usernamePasswordHash","xValue","calculateS","sValue","hkdf","gModPowXN","err2","getNewPasswordRequiredChallengeUserAttributePrefix","bigInt","hashStr","CognitoJwtToken","jwtToken","decodePayload","getExpiration","exp","getIssuedAt","iat","_CognitoJwtToken","CognitoAccessToken","AccessToken","CognitoIdToken","IdToken","CognitoRefreshToken","RefreshToken","getToken","CognitoUserSession","ClockDrift","idToken","refreshToken","accessToken","clockDrift","calculateClockDrift","getRefreshToken","getAccessToken","getClockDrift","isValid","adjusted","monthNames","weekNames","DateHelper","getNowString","weekDay","getUTCDay","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","seconds","getUTCSeconds","getUTCFullYear","CognitoUserAttribute","Value","getName","setName","Pool","pool","signInUserSession","authenticationFlowType","storage","getClientId","userDataKey","setSignInUserSession","clearCachedUserData","cacheTokens","getSignInUserSession","getAuthenticationFlowType","setAuthenticationFlowType","initiateAuth","authDetails","USERNAME","jsonReq","AuthFlow","ClientId","ClientMetadata","getUserContextData","UserContextData","challengeName","ChallengeName","challengeParameters","ChallengeParameters","customChallenge","getCognitoUserSession","AuthenticationResult","authenticateUser","authenticateUserPlainUsernamePassword","authenticateUserDefaultAuth","authenticationHelper","getUserPoolId","dateHelper","deviceKey","DEVICE_KEY","errOnAValue","aValue","SRP_A","CHALLENGE_NAME","USER_ID_FOR_SRP","SRP_B","SALT","getCachedDeviceKeyAndPassword","errOnHkdf","dateNow","SECRET_BLOCK","signatureString","challengeResponses","PASSWORD_CLAIM_SECRET_BLOCK","TIMESTAMP","PASSWORD_CLAIM_SIGNATURE","jsonReqResp","ChallengeResponses","respondToAuthChallenge","challenge","challengeCallback","errChallenge","dataChallenge","clearCachedDeviceKeyAndPassword","errAuthenticate","dataAuthenticate","authenticateUserInternal","PASSWORD","authResult","mfaRequired","selectMFAType","mfaSetup","totpRequired","rawRequiredAttributes","requiredAttributes","userAttributesPrefix","newPasswordRequired","newDeviceMetadata","NewDeviceMetadata","DeviceGroupKey","DeviceKey","errGenHash","deviceSecretVerifierConfig","Salt","PasswordVerifier","DeviceSecretVerifierConfig","DeviceName","errConfirm","dataConfirm","cacheDeviceKeyAndPassword","UserConfirmationNecessary","getDeviceResponse","completeNewPasswordChallenge","newPassword","requiredAttributeData","finalUserAttributes","NEW_PASSWORD","errAValue","errHkdf","confirmRegistration","confirmationCode","forceAliasCreation","ConfirmationCode","ForceAliasCreation","sendCustomChallengeAnswer","answerChallenge","ANSWER","sendMFACode","mfaType","SMS_MFA_CODE","mfaTypeSelection","SOFTWARE_TOKEN_MFA_CODE","changePassword","oldUserPassword","newUserPassword","PreviousPassword","ProposedPassword","enableMFA","mfaOptions","DeliveryMedium","AttributeName","MFAOptions","setUserMfaPreference","smsMfaSettings","softwareTokenMfaSettings","SMSMfaSettings","SoftwareTokenMfaSettings","disableMFA","deleteUser","clearCachedUser","updateAttributes","UserAttributes","getUserAttributes","userData","attributeList","userAttribute","getMFAOptions","getUserData","bypassCache","latestUserData","cacheUserData","refreshSession","refreshError","deleteAttributes","UserAttributeNames","resendConfirmationCode","getSession","idTokenKey","accessTokenKey","refreshTokenKey","clockDriftKey","cachedSession","REFRESH_TOKEN","lastUserKey","deviceKeyKey","authenticationResult","clearCachedTokens","randomPasswordKey","deviceGroupKeyKey","forgotPassword","inputVerificationCode","confirmPassword","getAttributeVerificationCode","verifyAttribute","getDevice","forgetSpecificDevice","forgetDevice","setDeviceStatusRemembered","DeviceRememberedStatus","setDeviceStatusNotRemembered","listDevices","paginationToken","Limit","PaginationToken","globalSignOut","signOut","sendMFASelectionAnswer","associateSoftwareToken","associateSecretCode","SecretCode","verifySoftwareToken","totpCode","friendlyDeviceName","UserCode","FriendlyDeviceName","errRespond","dataRespond","UserAgent","ok","_error","CognitoUserPool","UserPoolId","AdvancedSecurityDataCollectionFlag","userPoolId","advancedSecurityDataCollectionFlag","signUp","cognitoUser","returnData","userConfirmed","UserConfirmed","userSub","UserSub","codeDeliveryDetails","CodeDeliveryDetails","getCurrentUser","lastAuthUser","AmazonCognitoAdvancedSecurityData","amazonCognitoAdvancedSecurityDataConst","advancedSecurityData","EncodedData","domain","secure","WindowInfo","memoize3","cache0","a1","a2","a3","cache1","cache2","cachedValue","promiseForObject","valuesAndPromises","resolvedObject","promiseReduce","resolved","mapAsyncIterator","rejectCallback","$return","abruptClose","mapResult","asyncMapValue","iteratorResult","return","rethrow","mapReject","throw","totalRecords","additionalFields","deliveryDay","deliveryTime","hub","zoneNumber","zoneSplit","UserService","userResponse","defaultWinery","availableWineries","wineryName","wineryImage","Winery","_dereq_","SomePromiseArray","_SomePromiseArray","any","setHowMany","setUnwrap","firstLineError","schedule","Queue","Async","_customScheduler","_isTickUsed","_lateQueue","_normalQueue","_haveDrainedQueues","_trampolineEnabled","drainQueues","_drainQueues","_schedule","AsyncInvokeLater","receiver","_queueTick","AsyncInvoke","AsyncSettlePromises","_pushOne","setScheduler","hasCustomScheduler","enableTrampoline","disableTrampolineIfNecessary","hasDevTools","haveItemsQueued","fatalError","stderr","exit","throwLater","invokeLater","settlePromises","_settlePromises","_drainQueue","_reset","INTERNAL","tryConvertToPromise","calledBind","rejectThis","_reject","targetRejected","promiseRejectionQueued","bindingPromise","_then","bindingResolved","_bitField","bindingRejected","_propagateFrom","propagateFromFunction","_boundValue","boundValueFunction","maybePromise","_setBoundTo","_setOnCancel","_boundTo","_isBound","bluebird","cr","callerCache","getterCache","canEvaluate","caller","classString","ensureMethod","namedGetter","indexedGetter","isIdentifier","maybeGetter","getGetter","PromiseArray","apiRejection","tryCatch","errorObj","async","_async","cancellation","_warn","_isCancellable","_cancelBy","_isFollowing","_followee","_cancelBranched","_cancellationParent","_setWillBeCancelled","_branchHasCancelled","_branchesRemainingToCancel","_enoughBranchesHaveCancelled","canceller","_invokeOnCancel","_cancel","_setCancelled","_cancelPromises","_length","_unsetOnCancel","_onCancelField","isPending","_isCancelled","isCancellable","isCancelled","_doInvokeOnCancel","onCancelCallback","internalOnly","_attachExtraTrace","_resultCancelled","_onCancel","_invokeInternalOnCancel","NEXT_FILTER","getKeys","instances","boundTo","predicateLoop","matchesPredicate","longStackTraces","contextStack","Context","_trace","CapturedTrace","peekContext","_promiseCreated","_pushContext","_popContext","_peekContext","trace","deactivateLongStackTraces","activateLongStackTraces","Promise_pushContext","Promise_popContext","Promise_PeekContext","Promise_peekContext","Promise_promiseCreated","ctx","unhandledRejectionHandled","possiblyUnhandledRejection","printWarning","getDomain","_getDomain","Warning","canAttachTrace","bluebirdFramePattern","nodeFramePattern","parseLinePattern","stackFramePattern","formatStack","indentStackFrames","debugging","warnings","wForgottenReturn","suppressUnhandledRejections","_ensurePossibleRejectionHandled","_setRejectionIsUnhandled","_notifyUnhandledRejection","_notifyUnhandledRejectionIsHandled","fireRejectionEvent","_setReturnedNonUndefined","_returnedNonUndefined","_isRejectionUnhandled","_settledValue","_setUnhandledRejectionIsNotified","_unsetUnhandledRejectionIsNotified","_isUnhandledRejectionNotified","_unsetRejectionIsUnhandled","shouldUseOwnTrace","onPossiblyUnhandledRejection","domainBind","onUnhandledRejectionHandled","disableLongStackTraces","longStackTracesIsSupported","Promise_captureStackTrace","_captureStackTrace","Promise_attachExtraTrace","longStackTracesCaptureStackTrace","longStackTracesAttachExtraTrace","hasLongStackTraces","fireDomEvent","CustomEvent","domEvent","Event","createEvent","initCustomEvent","fireGlobalEvent","generatePromiseLifecycleEventObject","eventToObjectGenerator","promiseCreated","promiseFulfilled","promiseRejected","promiseResolved","promiseCancelled","promiseChained","unhandledRejection","rejectionHandled","activeFireEvent","globalEventFired","domEventFired","defaultFireEvent","cancellationExecute","executor","onCancel","_attachCancellationCallback","cancellationAttachCancellationCallback","previousOnCancel","cancellationOnCancel","cancellationSetOnCancel","cancellationClearCancellationData","cancellationPropagateFrom","flags","branchesRemainingToCancel","opts","warningsOption","_clearCancellationData","_execute","monitoring","_fireEvent","isFulfilled","ignoreSelf","_parent","attachExtraTrace","__stackCleaned__","parseStackAndMessage","notEnumerableProp","formatAndLogError","cleanStack","isTraceLine","isInternalFrame","shouldIgnore","stackFramesAsArray","isSoft","log","localHandler","localEventFired","formatNonError","maxChars","snip","parseLineInfoRegex","parseLineInfo","fileName","_promisesCreated","uncycle","inherits","stackToIndex","cycleEdgeNode","currentChildLength","stacks","currentLastIndex","currentLastLine","commonRootMeetPoint","removeCommonRoots","removeDuplicateOrEmptyJumps","reconstructStack","v8stackFramePattern","v8stackFormatter","stackTraceLimit","ignoreUntil","hasStackAfterThrow","isTTY","color","checkForgottenReturns","returnValue","handlerLine","creatorLine","traceLines","lineMatches","firstUserLine","setBounds","lastLineError","firstFileName","lastFileName","firstStackLines","lastStackLines","firstIndex","deprecated","replacement","returner","thrower","thenReturn","thenThrow","catchThrow","_reason","caught","catchReturn","11","PromiseReduce","PromiseAll","promiseAllThis","mapSeries","_TypeError","_RangeError","es5","Objectfreeze","subError","nameProperty","defaultMessage","SubError","CancellationError","TimeoutError","AggregateError","methods","OperationalError","cause","errorTypes","RejectionError","isES5","getDescriptor","getOwnPropertyDescriptor","getOwnPropertyNames","propertyIsWritable","ObjectKeys","14","PromiseMap","15","catchFilter","PassThroughHandlerContext","called","cancelPromise","FinallyHandlerCancelReaction","finallyHandler","checkCancel","succeed","fail","reasonOrValue","isFinallyHandler","isRejected","_passThrough","success","lastly","tapCatch","handlerOrPredicate","catchInstances","16","Proxyable","yieldHandlers","PromiseSpawn","generatorFunction","yieldHandler","internal","_finallyPromise","_promise","_stack","_generatorFunction","_receiver","_generator","_yieldHandlers","_yieldedPromise","_cancellationPhase","_isResolved","_cleanup","_fulfill","_promiseCancelled","coroutine","returnSentinel","_continue","_promiseFulfilled","_promiseRejected","_run","_rejectCallback","traceParent","promiseFromYieldHandler","bitField","_proxy","PromiseSpawn$","spawn","addYieldHandler","17","18","MappingPromiseArray","_filter","constructor$","_callback","_preservedValues","_limit","_inFlight","_queue","_asyncInit","concurrency","_init$","_init","preservedValues","_totalResolved","_resolve","booleans","19","_resolveFromSyncValue","maybeWrapAsError","rErrorKey","wrapAsOperationalError","isUntypedError","markAsOriginatingFromRejection","multiArgs","21","spreadAdapter","nodeback","successAdapter","errorAdapter","newReason","asCallback","nodeify","22","makeSelfResolutionError","reflectHandler","PromiseInspection","UNDEFINED_BINDING","APPLY","createContext","nodebackForPromise","_fulfillmentHandler0","_rejectionHandler0","_promise0","_receiver0","_resolveFromExecutor","deferResolve","deferReject","fillTypes","reflect","didFulfill","didReject","_setIsFinal","fulfillmentValue","rejectionReason","originatesFromRejection","getNewLibraryCopy","fromNode","fromCallback","_isFateSealed","_setAsyncGuaranteed","cast","_setFulfilled","internalData","haveInternalData","settler","_settlePromiseCtx","_settlePromiseLateCancellationObserver","_addCallbacks","_setLength","_setRejected","_setFollowing","_isFinal","_unsetCancelled","_receiverAt","_promiseAt","_fulfillmentHandlerAt","_rejectionHandlerAt","_migrateCallback0","follower","fulfill","_migrateCallbackAt","proxyable","shouldBind","_setFollowee","synchronous","ignoreNonErrorWarnings","ensureErrorObject","hasStack","_settlePromiseFromHandler","_settlePromise","isPromise","asyncGuaranteed","_settlePromise0","_clearCallbackDataAtIndex","_fulfillPromises","_rejectPromises","pending","toFastProperties","23","resolveValueIfEmpty","asArray","_iterate","_resolveEmptyArray","toResolutionValue","getActualLength","shouldCopyValues","isResolved","24","THIS","withAppended","defaultPromisified","__isPromisified__","noCopyPropsPattern","defaultFilter","propsFilter","isPromisified","hasPromisified","getDataPropertyOrDefault","promisifiableMethods","suffixRegexp","inheritedDataKeys","passesDefaultFilter","keyWithoutAsyncSuffix","checkValid","escapeIdentRegex","makeNodePromisified","makeNodePromisifiedEval","defaultThis","promisified","promisifyAll","promisifier","promisifiedKey","promisify","copyDescriptors","25","Es6Map","mapToEntries","extractEntry","PropertiesPromiseArray","_isMap","castValue","entriesToMap","keyOffset","26","capacity","_capacity","_front","_willBeOverCapacity","_checkCapacity","wrapMask","front","_resizeTo","oldCapacity","dstIndex","arrayMove","27","raceLater","race","28","ReductionPromiseArray","_each","_fn","_initialValue","_currentCancellable","_eachValues","completed","valueOrReason","gotAccum","accum","_gotAccum","gotValue","_eachComplete","sender","_resultCancelled$","29","toggleScheduled","div2","NativePromise","getNativePromise","MutationObserver","GlobalSetImmediate","ProcessNextTick","nextTick","isRecentNode","nativePromise","cordova","toggle","SettledPromiseArray","_promiseResolved","inspection","_settledValueField","31","CANCELLATION","_howMany","_unwrap","_initialized","howMany","isArrayResolved","_canPossiblyFulfill","_getRangeError","_addFulfilled","_fulfilled","_addRejected","_checkOutcome","_rejected","32","__isCancelled","33","hasProp","doGetThen","getThen","isAnyBluebirdPromise","doThenable","34","HandleWrapper","handle","afterValue","successClear","failureClear","handleWrapper","afterTimeout","35","_isDisposable","_getDisposer","_setDisposable","castPreservingDisposable","tryDispose","Disposer","_context","FunctionDisposer","maybeUnwrapDisposer","isDisposer","ResourceList","doDispose","_unsetDisposable","using","spreadArgs","disposer","reflectedResources","resultPromise","inspections","_disposer","36","tryCatchTarget","globalObject","tryCatcher","Child","isPrimitive","maybeError","safeToString","appendee","excludedPrototypes","isExcludedProto","visitedKeys","enumeration","thisAssignmentPattern","hasMethods","hasMethodsOtherThanConstructor","hasThisAssignmentAndStaticMethods","FakeConstructor","rident","filledRange","ignore","to","ArrayFrom","itResult","it","hasEnvVariables","chrome","loadTimes","versions","registerImmediate","channel","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","doc","attachTo","runIfPresent","importScripts","postMessageIsAsynchronous","oldOnMessage","canUsePostMessage","MessageChannel","port1","port2","documentElement","attachEvent","run","noGlobal","getProto","flat","class2type","hasOwn","fnToString","ObjectFunctionString","support","isWindow","preservedScriptAttributes","nonce","noModule","DOMEval","jquery","pushStack","elems","prevObject","elem","even","grep","_elem","odd","copyIsArray","deep","expando","isReady","isEmptyObject","globalEval","makeArray","callbackExpect","guid","Sizzle","Expr","getText","isXML","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","pushNative","pseudos","rwhitespace","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","nonHex","rcssescape","fcssescape","asCodePoint","unloadHandler","inDisabledFieldset","addCombinator","disabled","els","seed","nid","groups","newSelector","newContext","ownerDocument","getElementsByTagName","getElementsByClassName","qsa","testContext","toSelector","qsaError","cacheLength","markFunction","addHandle","attrHandle","siblingCheck","cur","diff","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","matchIndexes","namespace","hasCompare","subWindow","defaultView","top","getById","getElementsByName","attrId","getAttributeNode","disconnectedMatch","compareDocumentPosition","adown","bup","sortDetached","aup","ap","bp","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","nodeValue","selectors","createPseudo","preFilter","excess","unquoted","nodeNameSelector","what","_argument","forward","xml","uniqueCache","outerCache","nodeIndex","useCache","uniqueID","pseudo","setFilters","idx","unmatched","lang","elemLang","activeElement","hasFocus","tabIndex","selectedIndex","_matchIndexes","radio","checkbox","submit","combinator","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","setMatcher","postFilter","postFinder","postSelector","preMap","postMap","preexisting","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","compiled","unique","isXMLDoc","escapeSelector","until","siblings","rneedsContext","needsContext","rsingleTag","winnow","qualifier","not","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","contents","sibling","targets","closest","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","rnothtmlwhite","Identity","Thrower","adoptValue","noValue","Callbacks","flag","createOptions","firing","memory","fired","locked","firingIndex","fire","stopOnFalse","empty","disable","lock","fireWith","Deferred","tuples","always","deferred","pipe","newDefer","tuple","returned","onFulfilled","onRejected","onProgress","maxDepth","mightThrow","notifyWith","resolveWith","exceptionHook","stackTrace","rejectWith","getStackHook","stateString","when","singleValue","resolveContexts","resolveValues","master","updateFunc","rerrorNames","readyException","readyList","readyWait","doScroll","chainable","emptyGet","raw","bulk","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","acceptData","Data","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","removeData","_removeData","dequeue","startLength","_queueHooks","clearQueue","pnum","rcssNum","cssExpand","composed","getRootNode","isHiddenWithinTree","display","css","adjustCSS","valueParts","tween","scale","maxIterations","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","showHide","show","hide","rcheckableType","rtagName","rscriptType","checkClone","noCloneChecked","wrapMap","thead","tr","td","_default","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","buildFragment","scripts","ignored","htmlPrefilter","createTextNode","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","expectSync","safeActiveElement","origFn","off","leverageNative","notAsync","saved","isTrigger","delegateType","stopImmediatePropagation","trigger","handleObjIn","eventHandle","handleObj","namespaces","elemData","triggered","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","button","addProp","hook","originalEvent","noBubble","click","beforeunload","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","isSimulated","altKey","changedTouches","ctrlKey","eventPhase","metaKey","pageX","pageY","shiftKey","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","focus","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","hasScripts","iNoClone","valueIsFunction","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","rnumnonpx","getStyles","opener","getComputedStyle","rboxStyle","curCSS","width","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","offsetWidth","measure","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","height","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","boxModelAdjustment","dimension","box","isBorderBox","computedVal","extra","delta","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","origName","isCustomProp","getBoundingClientRect","scrollboxSizeBuggy","margin","padding","border","expand","expanded","propHooks","percent","eased","duration","fx","linear","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","hidden","interval","tick","createFxNow","genFx","includeWidth","createTween","Animation","tweeners","stopped","prefilters","startTime","tweens","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","speeds","fadeTo","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","classes","curValue","clazz","finalValue","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","valueOrFunction","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","etag","isLocal","processData","accepts","responseFields","converters","ajaxSetup","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","requestHeadersNames","strAbort","mimeType","finalText","crossDomain","hasContent","ifModified","beforeSend","nativeStatusText","responses","isSuccess","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","wrapInner","htmlIsFunction","unwrap","visible","offsetHeight","xhrSuccessStatus","1223","xhrSupported","cors","errorCallback","xhrFields","scriptAttrs","charset","scriptCharset","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","overwritten","responseContainer","jsonProp","createHTMLDocument","keepScripts","animated","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","undelegate","hover","fnOver","fnOut","proxy","holdReady","hold","parseJSON","isNumeric","_jQuery","_$","$","shippingMethods","ShippingMethodReference","hasColdChainShipMethod","getColdChainShipMethod","shipMethod","isColdChain","site","parameters","returnedValue","methodInvoked","queryArguments","moduleNamespace","$document","$module","instantiate","verbose","groupEnd","groupCollapsed","markTimeline","consoleClear","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","moduleExists","enabled","enabledModules","disabledModules","change","setting","modifyExisting","$existingModules","newSettings","enable","destroy","executionTime","totalTime","passedArguments","camelCaseValue","siteNamespace","namespaceStub","sections","section","utilities","dataName","form","$allModules","moduleSelector","legacyParameters","$field","$group","$message","$submit","validation","regExp","eventNamespace","formErrors","keyHeldDown","submitting","dirty","bindEvents","removeEvents","prompt","attachEvents","keyboardShortcuts","keydown","$input","inputEvent","changeEvent","preventLeaving","beforeUnload","determine","onDirty","onClean","$element","$fieldGroup","$prompt","$calendar","uiCalendar","isCheckbox","uiCheckbox","isDropdown","uiDropdown","isCalendar","dropdown","isErrored","allValid","formIsDirty","$el","checkboxDirty","fieldDirty","clean","bracketedRule","rule","bracket","shorthandFields","firstRule","shorthandRules","blank","valid","boolRegex","justDirty","justClean","isInput","isInDropdown","keyup","validationRules","revalidate","leavingMessage","ancillaryValue","ruleName","oninput","onpropertychange","fieldsFromShorthand","fullFields","$label","ancillary","unspecifiedRule","requiresValue","requiresName","unspecifiedField","oldSyntax","$fields","fieldValidation","groupField","isMultiple","isChecked","dateHandling","formatter","year","dirtyFields","newValidation","promptExists","inline","templates","transition","$parent","$multipleField","asClean","asDirty","ignoreCallbacks","showErrors","$dependsField","depends","fieldValid","fieldErrors","invalidFields","onValid","onInvalid","ruleFunction","noRule","silent","shouldTrim","htmlID","decimal","integer","isExactly","notExactly","contain","containExactly","doesntContain","doesntContainExactly","exactLength","different","creditCard","minCount","exactCount","maxCount","pressed","Intl","DateTimeFormat","regExpParts","intRegExp","notValue","containsExactly","requiredLength","matchingValue","matchingElement","cardNumber","cardTypes","unionPay","cards","visa","amex","mastercard","discover","jcb","maestro","dinersClub","laser","visaElectron","validCard","requiredTypes","producedValue","accordion","$title","$content","observeChanges","$activeTitle","$activeContent","isAnimating","animating","isActive","isOpen","isOpening","collapsible","onOpening","onChanging","exclusive","closeOthers","animateChildren","useFailSafe","skipInlineHidden","resetOpacity","onOpen","onChange","onClosing","onClose","$openTitles","$nestedTitles","$openContents","$parentTitles","$activeAccordion","activeSelector","activeContent","closeNested","easeOutQuad","timeGapTable","isTouch","timeGap","minTimeGap","$container","popup","$activator","activator","isTouchDown","focusDateUsedForRange","minDate","maxDate","$activatorParent","domPositionFunction","onVisible","onHidden","popupOptions","hoverable","onShow","focusDate","startMode","onHide","touchReadonly","initialDate","formatInput","cell","pageGrid","today","helper","dateInRange","isYear","isMonth","isDay","isHour","isMinute","isTimeOnly","multiMonth","monthOffset","getMinutes","getHours","startMonth","getMonth","getFullYear","showWeekNumbers","rows","pages","tooltipPosition","grid","firstMonthDayColumn","getDay","firstDayOfWeek","constantHeight","requiredCells","yearChange","monthChange","dayChange","prevNextDay","prevDate","nextDate","prevLast","nextFirst","tempMode","textColumns","headerDate","headerText","link","newMode","disableYear","disableMonth","disabledCell","isDateInRange","prevIcon","nextIcon","weekNo","weekCell","dayColumnHeader","weekOfYear","cellDate","cellText","adjacent","selectAdjacentDays","isEnabled","disabledDate","findDayAsObject","disabledDates","eventDate","eventDates","class","eventClass","dateEqual","isToday","adjacentCell","activeCell","todayCell","cellOptions","todayRow","todayButton","updateRange","rangeDate","focused","focusCell","rangeCell","mousedown","mouseup","mouseover","inputChange","inputFocus","inputBlur","inputClick","onSelect","forceSet","selectDate","bigIncrement","newFocusDate","mergeDateTime","weekYear","weekMonth","DC3","AWN","Wyr","UTC","sanitiseDate","inputDate","startModule","calendarModule","startCalendar","endModule","endCalendar","validModes","disableMinute","updateInput","fireChange","dataKeyValue","refreshCalendar","updateFocus","oldFocusDate","monthDelta","changed","equal","closable","changeDate","disabledDaysOfWeek","enabledDates","dates","il","dateObject","dateDiff","date1","date2","isYearOrMonth","isHourOrMinute","monthFirst","ampm","centuryBreak","currentCentury","lastResort","prefer","hideOnScroll","yearHeader","monthHeader","dayHeader","hourHeader","minuteHeader","decadeYear","forCalendar","textDate","isAm","isDateOnly","dateWords","numbers","dateNumbers","monthString","initialLoad","shortcutPressed","tabbable","indeterminate","uncheck","notFound","preventDefaultOnInputTarget","should","$target","radios","rIndex","rLen","checkIndex","beforeUnchecked","beforeChecked","allowCheck","onChecked","allowUncheck","unchecked","onUnchecked","allowIndeterminate","onIndeterminate","determinate","allowDeterminate","onDeterminate","onEnable","onEnabled","onDisable","onDisabled","otherRadios","beforeIndeterminate","beforeDeterminate","fireOnInit","can","readOnly","uncheckable","uncheckOthers","inputElement","initEvent","$radios","dimmer","$dimmer","$dimmable","clickEvent","preinitialize","dimmerName","dimmable","variation","pageDimmer","addContent","dimmed","useCSS","useFlex","legacy","displayType","onStart","colorArray","isRGB","isRGBA","displayLoader","loaderText","loaderVariation","hasTouch","elementIndex","pageLostFocus","willRefocus","elementNamespace","selectObserver","menuObserver","$context","$text","$search","$sizer","sizer","$icon","icon","$clear","clearIcon","$combo","$menu","menu","$item","$divider","hideDividers","divider","activated","itemActivated","internalChange","iconClicked","alreadySetup","ignoreDiacritics","noNormalize","layout","refreshData","save","restore","userChoice","$userChoices","$userChoice","userValues","addition","addResult","hideAdditions","userLabels","minCharacters","firstUnfiltered","selectedItem","unselectable","nextAvailable","$selected","$nextAvailable","$prevAvailable","apiSettings","urlData","returnedObject","clearable","clearItem","searchSelection","allowTab","selectValues","preserveHTML","missingMultiple","$firstModules","$lastModules","refreshSelectors","refreshItems","clearData","defaultText","placeholderText","remote","queryRemote","maxSelections","allResultsFiltered","allFiltered","intent","focusSearch","animatingOutward","focusedOnSearch","hideOthers","hideMenu","hideSubMenus","$subMenus","touchEvents","keyboardEvents","inputEvents","mouseEvents","single","menuSearch","touch","searchTerm","afterFiltered","filterActive","activeItem","onNoResults","allowAdditions","noResults","userSuggestion","htmlEntities","useLabels","useAPI","filterRemoteData","filterItems","preSelected","noAPI","errorDuration","onError","serverError","remoteValues","diacritics","escapedTerm","beginsWithRegExp","$choice","choiceText","fullTextSearch","exactSearch","fuzzySearch","choiceValue","filteredItem","lastDivider","termLength","queryLength","characterIndex","nextCharacterIndex","queryCharacter","skipHandler","blurSearch","forceSelection","$currentlySelected","$activeItem","$selectedItem","showOnFocus","activeLabel","$labels","$activeLabels","$nextActive","$prevActive","$range","onLabelSelect","activeLabels","toggleBehavior","bubbledLabelClick","bubbledIconClick","eventOnElement","eventInModule","selectMutation","$addedNode","$removedNode","$changedNodes","isUserAddition","isMessage","$subMenu","$otherMenus","hasSubMenu","itemTimer","skipRefocus","isBubbledEvent","isEqualNode","allowCategorySelection","userAddition","scrollPosition","selectAction","pressedKey","inObject","$activeLabel","labelIndex","labelCount","hasActiveLabel","hasMultipleActive","isFirstLabel","isLastLabel","isSearch","isFocusedOnSearch","isFocused","caretAtStart","caretPosition","isSelectedSearch","leftArrow","siblingLabel","rightArrow","deleteKey","backspace","$nextItem","$visibleItems","$parentMenu","inVisibleMenu","hasSelectedItem","selectedIsSelectable","delimiterPressed","upArrow","selectOnKeydown","downArrow","pageUp","scrollPage","pageDown","selectedLetter","inDocument","inModule","inVisibleDOM","notOnLabel","notInMenu","nothing","hideAndClear","combo","searchWidth","selectionCount","upward","uniqueArray","returnEndPos","selectionEnd","selectionStart","moveStart","isEmptyMultiselect","selectInput","remoteData","menuIcon","$option","sortSelect","itemWithAdditions","$items","$userItems","strict","shouldSearch","optionText","saveRemoteData","noselection","sessionStorage","noStorage","clearValue","$nextSelectedItem","$currentItem","menuHeight","outerHeight","currentScroll","itemHeight","itemsPerPage","newScroll","$selectableItem","isSearchMultiple","searchValue","hasSearchValue","valueIsSet","glyphWidth","loading","partialSearch","forceScroll","hasActive","menuScroll","abovePage","belowPage","searchText","alreadySelectedLetter","firstLetter","$nextValue","openDownward","leftward","openRightward","$currentMenu","escapedValue","hasInput","stringValue","allowReselection","extendSelect","exactly","selectedText","selectedValue","isFiltered","isUserValue","shouldAnimate","$next","ignoreCase","onLabelCreate","$addition","$existingItem","alreadyHasValue","hasUserSuggestion","hasCount","hasMaxCount","hasTerm","addedValue","addedText","removedValue","removedText","$removedItem","arrayValue","$removedLabel","userValue","onLabelRemove","$normalResults","valueIgnoringCase","valueMatchingCase","existingValue","animatingInward","needle","selectChanged","verticallyScrollableContext","horizontallyScrollableContext","onScreen","calculations","canOpenDownward","above","below","isOffscreenRight","canOpenRightward","outerWidth","noTransition","multipleValues","isUnparsable","hasQuotes","keepOnScreen","$selectedLabels","itemType","maybeText","maybeDisabled","choice","embed","$embed","autoplay","createAndShow","createPlaceholder","createEmbed","onCreate","changeEmbed","showPlaceholder","onReset","onDisplay","onPlaceholderDisplay","matchedSource","urlString","iframe","noURL","extraParameters","onEmbed","video","hd","brandedUI","youtube","autohide","hq","jsapi","modestbranding","vimeo","byline","portrait","onPause","onPlay","onStop","modal","$window","$body","$allModals","$otherModals","$focusedElement","initialMouseDownInModal","initialMouseDownInScrollbar","elementEventNamespace","$close","ignoreRepeatedEvents","initialBodyMargin","allowMultiple","innerDimmer","centered","refreshModals","defaultSettings","dimmerSettings","detachable","undetached","scrolling","cacheSizes","modalOffset","screenHeight","$toggle","approve","deny","resize","scrollLock","preventScroll","passive","onApprove","onDeny","scrollbarWidth","isInModal","isInDOM","hideAll","clickaway","keyboard","dimmerStyles","showModal","hideModal","showDimmer","others","autofocus","keepDimmed","hideOthersToo","$previousModal","hideDimmer","bodyMargin","$visibleModals","hideOk","diffPos","innerWidth","clientWidth","bodyFixed","restoreFocus","inverted","blurring","bodyStyle","scrollHeight","modalWidth","modalHeight","pageHeight","contextHeight","topOffset","ie","fit","verticalCenter","paddingHeight","modernBrowser","ActiveXObject","$inputs","$autofocus","marginTop","nag","dismiss","displayTime","storageMethod","persist","storageOptions","cookie","noCookieStorage","storedValue","removeCookie","bottom","fixed","$popup","$offsetParent","documentObserver","$scrollContext","scrollContext","$boundary","searchDepth","triedPositions","openedWithTouch","createID","exists","preserve","documentChanged","movePopup","reposition","removePopup","hideTimer","showTimer","addTouchEvents","touchstart","hideGracefully","inPopup","conditions","popupVisible","supports","SVGGraphicsElement","popupOffset","screen","$popupOffsetParent","targetElement","targetPosition","screenPosition","scroll","setFluidWidth","fluid","rtl","startEvent","scrollEvent","endEvent","distanceFromBoundary","$node","is2D","isStatic","isBody","nextPosition","verticalPosition","horizontalPosition","adjacentsAvailable","oppositeTried","adjacentTried","center","distanceAway","positioning","centerArrow","arrowPixelsFromEdge","maxSearchDepth","invalidPosition","offstage","cannotPlace","attempts","onUnplaceable","fluidWidth","closeOnScroll","touchClose","basic","distance","jitter","$bars","bar","$progresses","nums","derivePrecision","total","precisionPower","ratio","forceArray","transitionEvent","nextValue","progressPoll","transitionEnd","failSafeTimer","failSafeDelay","incrementValue","startValue","randomValue","normalizedValue","decrementValue","templateText","index_","displayPercent","bars","updateInterval","numericValue","transitions","$bar","barWidth","totalWidth","toNextValue","firstNonZeroIndex","lastNonZeroIndex","valuesSum","barCounts","percents","allZero","borderTopLeftRadius","borderBottomLeftRadius","borderTopRightRadius","borderBottomRightRadius","hasTotal","totalPecent","isMultpleValues","sumTotal","sumExceedsTotal","tooHigh","tooLow","autoPrecision","limitValues","labelInterval","framerate","barLabel","autoSuccess","$progress","showActivity","onLabelUpdate","onActive","onWarning","totalValue","percentCompletes","percentComplete","nonNumeric","slider","alphabet","SINGLE_STEP","BIG_STEP","NO_STEP","SINGLE_BACKSTEP","BIG_BACKSTEP","currentRange","$currThumb","$thumb","$secondThumb","$track","$trackFill","documentEventID","secondPos","interpretLabel","isHover","testOutTouch","slidingEvents","labeled","customLabel","autoLabel","showLabelTicks","ticked","$children","numChildren","labelPosition","numLabels","labelText","globalKeyboardEvents","activateFocus","down","eventPos","newPos","closestThumb","valueFromEvent","smooth","thumbVal","secondThumbVal","thumbSmoothVal","smoothValueFromEvent","onMove","keyMovement","takeStep","backStep","resync","currValue","currentThumbValue","reversed","vertical","trackOffset","trackLength","trackLeft","trackStartPos","trackEndPos","trackStartMargin","trackEndMargin","decimalPlaces","quotient","labelType","labelTypes","thumbValue","notrange","pageMultiplier","thumbPosition","pagePos","thumbPos","thumbDelta","secondThumbPos","closestThumbPos","positionFromValue","positionFromRatio","touchY","touchX","clickY","clickX","startPos","handleNewValuePosition","rangeValue","$targetThumb","trackPosValue","thumbPosValue","thumbPosPercent","trackStartPosPercent","trackEndPosPercent","startMargin","endMargin","posDir","startMarginMod","goto","rating","interactive","initialRating","maxRating","$activeIcon","currentRating","clearRating","ratingIndex","onRate","noMaximum","iconClass","$searchButton","searchButton","$results","$result","disabledBubbled","resultsDismissed","searchFields","refreshResults","automatic","handleKeyboard","searchDelay","searchOnFocus","minimumCharacters","showResults","hideResults","hideDelay","resultsClicked","inMessage","$link","newIndex","$category","$activeResult","currentIndex","resultSize","hasActiveResult","buttonPressed","buttonFocus","displayMessage","onAbort","searchFullText","oldSearchSyntax","lookupFields","firstResult","addResults","local","onSearchQuery","searchHTML","maxResults","categoryResults","generateResults","exactResults","fuzzyResults","searchExp","matchRegExp","beginsWith","notResult","notFuzzyResult","notExactResults","resultIndex","categoryIndex","resultID","$selectedResult","onResultsAdd","selectFirstResult","onResultsOpen","onResultsClose","isProperObject","isProperArray","noTemplate","showNoResults","noResultsHeader","onResults","displayField","logging","noEndpoint","categories","categoryName","price","actionText","actionURL","standard","$activeSide","$nextSide","$sides","sides","$side","side","nextIndex","defaultSide","repaint","propertyObject","beforeChange","currentStageSize","stageSize","$clone","newWidth","newHeight","nextSide","stage","allowRepeats","back","translateZ","behind","sidebar","$html","$head","$style","$sidebars","$pusher","pusher","delaySetup","ios","clickedInPusher","clickedContext","containScroll","inlineCSS","isRTL","refreshSidebars","omitted","movedSidebar","pushable","overlay","othersActive","pushPage","pullPage","othersAnimating","othersVisible","$otherSidebars","sidebarCount","callbackCount","dim","$transition","scrollToTop","dimPage","returnScroll","mobile","scrollBack","pushed","mobileTransition","defaultTransition","computer","isIOS","isMobileChrome","mobileChrome","closed","sticky","$scroll","determineContainer","determineContext","checkErrors","scrollchange","invalidContext","elementSize","stick","onScroll","hardRefresh","onReposition","supported","lastScroll","elementScroll","standardScroll","fits","sameHeight","containerSize","scrollChange","currentElementScroll","maxScroll","possibleScroll","minimumSize","initialPosition","bound","cachedPosition","pushing","bottomOffset","doesntFit","bindBottom","fixTop","setInitialPosition","fixBottom","bindTop","marginBottom","onTop","onUnstick","onBottom","unfix","setSize","onStick","resetCSS","tab","initializedHistory","$tabs","activeTabPath","parameterArray","historyEvent","firstLoad","recursionDepth","determineTabs","auto","initializeHistory","$reference","ui","childrenOnly","tabs","onTabLoad","onTabInit","onLoad","legacyLoad","onFirstLoad","legacyInit","historyType","tabPath","changeTab","pathNames","initialPath","pageTitle","determineTitle","$tab","tabElement","onRequest","shouldIgnoreLoad","pushState","ignoreFirstLoad","remoteContent","pathArray","pathToArray","defaultPathArray","arrayToPath","$anchor","nextPathArray","nextPath","isLastTab","currentPathArray","currentPath","isTab","isLastIndex","navigation","missingTab","scrollOffset","evaluateScripts","cacheType","fullTabPath","requestSettings","cachedContent","encodeParameters","alwaysRefresh","loadOnce","existingRequest","$deactiveTabs","$navigation","navElement","$deactiveNavigation","tabName","defaultPath","defaultTab","recursion","$fullPathTab","$simplePathTab","tabPathArray","lastTab","keepArray","removeArray","keepValue","tabArray","noContent","loaded","toast","$toastBox","$toast","$progressBar","showProgress","closeTimer","closeIcon","showIcon","icons","progressUp","newestOnTop","showMethod","showDuration","hideMethod","hideDuration","onBeforeHide","closeEasing","helpers","toClass","onClick","easeOutBounce","moduleArguments","animationEnd","animationEndEvent","forceRepaint","$parentElement","$nextElement","animationDirection","outward","overrideSettings","occurring","queuing","noAnimation","animationCallbacks","completeCallback","failSafe","looping","inward","force","userStyle","overrideStyle","inlineDisplay","hasDirection","animationClass","animationName","transitionExists","currentAnimation","queueCallback","directionClass","currentDirection","shouldDetermine","currentDisplay","animationStartEvent","forced","elementClass","inAnimation","directionExists","hideNow","stopAll","repeated","requestStartTime","$form","stateContext","triggerEvent","cachedResponse","interruptRequests","defaultData","serializeForm","formData","cancelled","templatedURL","mocked","beforeXHR","failure","throttleFirstRequest","missingURL","removeError","hideError","expectingJSON","mockResponse","mockResponseAsync","responseAsync","abortedRequest","validResponse","successTest","was","succesful","requiredVariables","optionalVariables","templatedString","requiredParameter","urlEncodedValue","canSerialize","serializeObject","missingSerialize","mockedXHR","textStatus","elapsedTime","timeLeft","loadingDuration","translatedResponse","onResponse","rawResponse","httpMessage","firstParameter","secondParameter","responseFromXHR","errorFromRequest","asyncCallback","responder","asyncResponder","runSettings","noReturnedValue","decodedValue","encodedValue","missingAction","exitConditions","JSONParse","parseError","userStates","typeStates","inactive","textEnabled","allow","disallow","allows","removeState","apiRequest","activateTest","deactivateTest","listenTo","onActivate","onDeactivate","textFor","flash","previousText","flashDuration","activeText","storedText","inactiveText","currentText","moduleCount","loadedCount","$placeholder","contextObserver","trackChanges","initialCheck","checkVisibility","resetFixed","contextChanged","refreshOnLoad","refreshOnResize","precache","images","imagesLength","loadedCounter","cacheImage","handleLoad","enableCallbacks","disableCallbacks","occurred","onOnScreen","onAllLoaded","onTopPassed","onTopPassedReverse","zIndex","onFixed","elementCalculations","offScreen","checkOnRefresh","onRefresh","passed","passingReverse","topVisibleReverse","bottomVisibleReverse","topPassedReverse","bottomPassedReverse","passing","topVisible","bottomVisible","topPassed","bottomPassed","onUpdate","amount","newCallback","onPassed","pixelsPassed","execute","onOffScreen","onPassing","onTopVisible","onBottomVisible","onBottomPassed","onPassingReverse","onTopVisibleReverse","onBottomVisibleReverse","onBottomPassedReverse","screenCalculations","continuous","onUnfixed","elementPosition","screenSize","includeMargin","percentagePassed","webpackContext","webpackContextResolve","b64","placeHoldersCount","placeHolders","Arr","revLookup","uint8","extraBytes","len2","encodeChunk","isLE","mLen","eLen","eMax","eBias","nBits","NaN","rt","LN2","Analytics_1","AnalyticsClass","endpointUpdated","authConfigured","analyticsConfigured","capsule","authEvent","storageEvent","analyticsEvent","sendEvents","autoTrack","listen","AWSPinpointProvider_1","trackers_1","trackers","PageViewTracker","EventTracker","SessionTracker","_pluggables","_disabled","_trackers","providerConfig","getPluggable","removePluggable","startSession","_sendEvent","stopSession","errMsg","isAnalyticsConfigured","trackerType","tracker","ucfirst","isQueryName","serializeStructure","serializeMember","memberRules","serializeList","serializeMap","AWS_EXECUTION_ENV","agent","urlFormat","qs","sortedKeys","ename","vals","readFileSync","toBuffer","toStream","_read","buffers","lstatSync","ini","currentSection","makeAsync","expectedArgs","systemClockOffset","iso8601","unixTimestamp","crc32Table","crc32","tbl","crc","digest","createHmac","md5","algorithm","createHash","sliceFn","arraySliceFn","reader","_continueReading","readAsArrayBuffer","iterFunction","obj1","obj2","dupe","klass","features","newObject","__super__","isValue","hoistPayloadMember","responsePayload","computeSha256","Stream","fs","createReadStream","sha","isClockSkewed","serverTime","applyClockOffset","extractRequestId","ResponseMetadata","RequestId","constructors","deletePromises","getPromisesDependency","ind","isDualstackAvailable","serviceIdentifier","dualstackAvailable","calculateRetryDelay","retryCount","retryDelayOptions","customBackoff","handleRequestWithRetries","httpOptions","errCallback","maxRetries","retryable","sendRequest","retryAfter","handleRequest","convertPayloadToString","getRequestPayloadShape","defaultProfile","configOptInEnv","sharedCredentialsFileEnv","sharedConfigFileEnv","imdsDisabledEnv","XmlNode","XmlText","XmlBuilder","isXmlAttribute","addAttribute","addChildNode","applyNamespaces","xmlKey","xmlValue","entryKey","entryValue","serializeScalar","isRoot","xmlNamespaceUri","xmlNamespacePrefix","noEmpty","escapeAttribute","hasChildren","xmlText","attributeNames","escapeElement","svc","LRU_1","CACHE_SIZE","maxSize","LRUCache","keyString","getKeyString","endpointRecord","populateValue","Expire","identifiers","identifierNames","identifierName","CachePeriodInMinutes","LinkedListNode","nodeMap","sizeLimit","prependToList","headerNode","tailNode","removeFromTail","prevNode","detachFromList","key_1","newNode","regionConfig","clientCount","loadServiceClass","ServiceClass","originalConfig","_clientId","svcConfig","Config","validateService","endpointFromTemplate","setEndpoint","addDefaultMonitoringListeners","clientSideMonitoring","_clientSideMonitoring","publisher","serviceConfig","apiConfig","defineServiceApi","apiVersions","getLatestServiceClass","getLatestServiceVersion","selectedVersion","defaultRetryCount","customRequestHandler","makeRequest","Request","addAllRequestListeners","attachMonitoringEmitter","makeUnauthenticatedRequest","toUnauthenticated","waitFor","EventListeners","Core","serviceInterface","CorePost","paramValidation","VALIDATE_PARAMETERS","setupRequestListeners","apiCallEvent","monitoringEvent","Region","MaxRetriesExceeded","FinalHttpStatusCode","FinalAwsException","FinalAwsExceptionMessage","FinalSdkException","FinalSdkExceptionMessage","apiAttemptEvent","Fqdn","HttpStatusCode","_unAuthenticated","AccessKey","SessionToken","XAmznRequestId","XAmzRequestId","XAmzId2","attemptFailEvent","AwsException","AwsExceptionMessage","SdkException","SdkExceptionMessage","attemptTimestamp","attemptStartRealTime","attemptLatency","callStartRealTime","callTimestamp","attemptCount","realClock","AttemptLatency","AttemptCount","latency","Latency","getSignerClass","getVersion","successfulResponse","numRetries","retryDelays","retryableError","timeoutError","networkingError","expiredCredentialsError","throttledError","clockSkewError","getSkewCorrectedDate","newServerTime","paginationConfig","throwException","defineMethods","_serviceMap","addVersions","Publisher","publisherConfig","configProvider","superclass","setApi","isApi","hasService","attachOn","baseClass","applyConfig","regionPrefix","generateRegionPrefix","derivedKeys","patterns","useDualstack","isGlobalEndpoint","hookCallback","hasOwnProp","createUTC","locale","createLocalOrUTC","getParsingFlags","_pf","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","rfc2822","weekdayMismatch","_isValid","parsedParts","isNowValid","_d","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","fun","momentProperties","copyConfig","_isAMomentObject","_f","_tzm","_isUTC","_offset","_locale","updateInProgress","Moment","updateOffset","isMoment","absFloor","toInt","argumentForCoercion","coercedNumber","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","suppressDeprecationWarnings","firstTime","deprecationHandler","deprecations","deprecateSimple","mergeConfigs","parentConfig","childConfig","Locale","addUnitAlias","shorthand","normalizeUnits","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","zeroFill","targetLength","forceSign","absNumber","zerosToFill","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","localeData","formatMoment","expandFormat","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","regexes","addRegexToken","strictRegex","getParseRegexForToken","regexEscape","p1","p2","p3","p4","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","isLeapYear","parseTwoDigitYear","getSetYear","makeGetSet","keepTime","set$1","daysInMonth","modMonth","MONTHS_IN_FORMAT","defaultLocaleMonths","defaultLocaleMonthsShort","handleStrictParse","monthName","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","dayOfMonth","getSetMonth","defaultMonthsShortRegex","defaultMonthsRegex","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","setFullYear","createUTCDate","setUTCFullYear","firstWeekOffset","fwd","dayOfYearFromWeeks","weekday","resYear","resDayOfYear","dayOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","lowercase","matchMeridiem","_meridiemParse","kInput","_isPm","_meridiem","pos1","pos2","globalLocale","getSetHour","baseConfig","locales","localeFamilies","normalizeLocale","loadLocale","oldLocale","_abbr","getSetGlobalLocale","getLocale","abbr","parentLocale","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","_useUTC","currentDateArray","weekdayOverflow","GG","createLocal","_week","curWeek","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","setUTCMinutes","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","configFromStringAndFormat","untruncateYear","yearStr","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromRFC2822","monthStr","dayStr","hourStr","minuteStr","secondStr","parsedArray","weekdayStr","parsedInput","checkWeekday","obsOffset","militaryOffset","numOffset","calculateOffset","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","isPm","meridiemFixWrap","prepareConfig","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromStringAndArray","createFromInputFallback","configFromString","millisecond","configFromObject","configFromInput","isUTC","isObjectEmpty","prototypeMin","prototypeMax","moments","ordering","years","quarters","quarter","weeks","isoWeek","milliseconds","unitHasDecimal","isDurationValid","_milliseconds","_days","_months","_bubble","isDuration","absRound","utcOffset","offsetFromString","chunkOffset","cloneWithOffset","setTime","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","diffRes","parseIso","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","addSubtract","isAdding","invalid","monthDiff","wholeMonthDiff","newLocaleData","defaultFormat","defaultFormatUtc","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","localStartOfDate","utcStartOfDate","addWeekYearFormatToken","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetSecond","parseMs","getSetMillisecond","preParsePostFormat","formats","sod","startOf","calendarFormat","asFloat","zoneDelta","endOf","startOfDate","isoWeekday","inputString","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","getPrioritizedUnits","toObject","keepOffset","unix","creationData","isoWeeks","weekInfo","isoWeeksInYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","isDSTShifted","_isDSTShifted","proto$1","get$1","listMonthsImpl","listWeekdaysImpl","localeSorted","_calendar","_longDateFormat","formatUpper","_invalidDate","_ordinal","_relativeTime","pastFuture","_monthsShort","_monthsParseExact","firstDayOfYear","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","Y","toFixed","totalSign","ymSign","daysSign","hmsSign","proto$2","monthsFromDays","withSuffix","posNegDuration","relativeTime$1","toIsoString","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","typeFromAST","typeNode","innerType","PromisesDependency","extractCredentials","getCredentials","credError","credentialProvider","allowUnknownKeys","loadFromPath","fileSystemCreds","FileSystemCredentials","maxRedirects","s3ForcePathStyle","s3BucketEndpoint","s3DisableBodySigning","computeChecksums","correctClockSkew","dynamoDbCrc32","signatureCache","useAccelerateEndpoint","endpointDiscoveryEnabled","setPromisesDependency","ManagedUpload","DISCOVER_ENDPOINT","discoverEndpoint","addAsync","ParamValidator","haltHandlersOnError","V4","getOperationAuthtype","signer","setServiceClientId","signedAt","httpResp","didCallback","errCode","executeSend","_abortCallback","numBytes","dateHeader","redirect","redirectCount","retryDelay","willRetry","errno","ansi","censoredParams","filterSensitiveLog","inputShape","subShapeName","subShape","buildMessage","endpointDiscoveryEnabledEnvs","getCacheKey","marshallCustomIdentifiers","marshallCustomIdentifiersHelper","endpointDiscoveryId","optionalDiscoverEndpoint","endpointCache","endpointRequest","Identifiers","addApiVersionHeader","RETRY_CHECK","Endpoints","requestQueue","requiredDiscoverEndpoint","cacheKeyStr","errorParams","pendingRequests","requestContext","invalidateCachedEndpoints","isFalsy","_originalConfig","hasCustomEndpoint","isPresigned","configFile","iniLoader","loadFrom","isConfig","filename","sharedFileConfig","AWS_PROFILE","endpoint_discovery_enabled","isEndpointDiscoveryApplicable","invalidateCachedEndpoint","getOwnPropertyDescriptors","descriptors","formatRegExp","objects","noDeprecation","warned","throwDeprecation","traceDeprecation","debugEnviron","debugs","stylize","stylizeNoColor","colors","showHidden","_extend","customInspect","stylizeWithColor","formatValue","styleType","recurseTimes","formatPrimitive","visibleKeys","arrayToHash","braces","formatProperty","formatArray","numLinesEst","reduceToSingleString","ar","re","debuglog","NODE_DEBUG","pid","getSeconds","kCustomPromisifiedSymbol","callbackifyOnRejected","promiseResolve","promiseReject","custom","callbackify","callbackified","maybeCb","superCtor","super_","TempCtor","AcceptorStateMachine","jmespath","hardErrorStates","fsm","setupStates","_asm","machine","Domain","domainEmitter","domainThrown","addState","Response","emitEvent","runTo","eachPage","wrappedCallback","hasNextPage","nextPage","eachItem","resultKey","continueIteration","isPageable","streams","PassThrough","HTTP_DATA","HTTP_ERROR","expectedLen","shouldCheckContentLength","receivedLen","checkContentLengthAndEmit","httpStream","lengthAccumulator","_write","unpipe","eventParameters","presign","Presign","toGet","VALIDATE_CREDENTIALS","SIGN","buildAsGet","finalState","bindObject","inputError","acceptState","failState","nextPageTokens","inputTokens","inputToken","cacheNextPageTokens","moreResults","exprs","outputToken","objectValues","CHECK_ACCEPTORS","_waiter","acceptors","acceptorMatched","acceptor","setSuccess","setError","loadWaiterConfig","pathAll","numResults","pathAny","$waiter","maxAttempts","serviceClientId","getServiceClientId","V2","V3Https","SignatureVersion","SignatureMethod","AWSAccessKeyId","SecurityToken","Signature","v4Credentials","updateForPresigned","addHeaders","credString","credentialString","isSignableHeader","lowerKey","sep","hexEncodedHash","canonicalString","hexEncodedBodyHash","canonicalHeaderValues","unsignableHeaders","subResources","canonicalizedAmzHeaders","canonicalizedResource","amzHeaders","virtualHostedBucket","subresource","secret","expiresHeader","signedUrlBuilder","signerClass","signedUrlSigner","parsedUrl","SET_CONTENT_LENGTH","COMPUTE_SHA256","validateMember","validateStructure","paramName","validateType","memberContext","validateList","validateMap","validateScalar","validateRange","mapCount","validateString","validatePayload","validateNumber","validTypes","validateEnum","validatePattern","validateUri","acceptedTypes","foundInvalidType","acceptedType","vowel","castedValue","SearchService","recordConverter","searchResult","_nodeId","_clockseq","rng","bytesToUuid","_lastMSecs","_lastNSecs","clockseq","seedBytes","nsecs","dt","tl","tmh","Hmac","Md5","Sha1","Sha256","alg","createSign","hashUtils","hashCtor","inner","BLOCK_SIZE","bufferHash","bufferFromSecret","toHash","bufferLength","bytesHashed","cmn","ff","sourceData","setUint8","hashBuffer","undecoratedLength","bitsHashed","setUint32","buff","getUint32","h0","h1","h2","h3","h4","totalLength","byte","processBlock","outView","KEY","MAX_HASHABLE_LENGTH","bufferView","state0","state1","state2","state3","state4","state5","state6","state7","t1_1","t2_1","t2","maxInt","tMin","tMax","skew","damp","initialBias","initialN","regexPunycode","regexNonASCII","regexSeparators","baseMinusTMin","stringFromCharCode","mapDomain","ucs2decode","ucs2encode","digitToBasic","digit","adapt","numPoints","oldi","baseMinusT","inputLength","bias","handledCPCount","basicLength","handledCPCountPlusOne","qMinusT","maxKeys","kstr","vstr","xs","GetRecordService","getRecordResult","stringifyPrimitive","objectKeys","ks","eventMessageChunker","parseEvent","eventMessages","messages","parseMessage","parsedMessage","messageType","eventType","eventModel","eventPayloadMemberName","eventHeaderNames","Int64","splitMessage","BOOLEAN_TAG","BYTE_TAG","SHORT_TAG","INT_TAG","LONG_TAG","BINARY_TAG","STRING_TAG","TIMESTAMP_TAG","UUID_TAG","nameLength","binaryLength","uuidChars","fromNumber","negative","PRELUDE_MEMBER_LENGTH","PRELUDE_LENGTH","CHECKSUM_LENGTH","MINIMUM_MESSAGE_LENGTH","expectedPreludeChecksum","expectedMessageChecksum","headersStart","headersEnd","TemporaryCredentials","masterCredentials","loadMasterCredentials","RoleArn","RoleSessionName","createClients","assumeRole","getSessionToken","credentialsFrom","AccessKeyId","SecretAccessKey","Expiration","assumeRoleWithWebIdentity","assumeRoleWithSAML","keyMap","keyFn","ChainableTemporaryCredentials","tokenCodeFn","SerialNumber","getTokenCode","tokenCode","TokenCode","WebIdentityCredentials","clientConfig","_clientConfig","stsConfig","CognitoIdentity","CognitoIdentityCredentials","localStorageKey","_identityId","loadCachedId","IdentityId","getId","clearIdOnNotAuthorized","getCredentialsFromSTS","getCredentialsForIdentity","clearCachedId","poolId","IdentityPoolId","loginId","LoginId","cognito","loadCredentials","SecretKey","cacheId","getOpenIdToken","WebIdentityToken","webIdentityCredentials","webErr","sts","Logins","actualProviders","cognitoConfig","setStorage","SAMLCredentials","executeImpl","assertValidExecutionArguments","buildExecutionContext","buildResponse","getOperationRootType","collectFields","sourceValue","fieldPath","addPath","resolveField","resolvedResult","executeFieldsSerially","executeFields","executeOperation","responsePathAsArray","curr","rawVariableValues","hasMultipleAssumedOperations","fragments","coercedVariableValues","coerced","defaultFieldResolver","containsPromise","runtimeType","visitedFragmentNames","shouldIncludeNode","doesFragmentConditionMatch","include","typeConditionNode","conditionalType","buildResolveInfo","resolveFieldValueOrError","completeValueCatchingError","returnType","asErrorInstance","completeValueWithLocatedError","completeValue","completedResults","completedItem","completeListValue","serializedResult","completeLeafValue","__typename","promisedIsTypeOfResults","isTypeOfResult","isTypeOfResults","defaultResolveTypeFn","resolvedRuntimeType","completeObjectValue","ensureValidRuntimeType","completeAbstractValue","runtimeTypeOrName","invalidReturnTypeError","collectAndExecuteSubfields","collectSubfields","subFieldNodes","DomXmlParser","getElementByTagName","parseXml","parseStructure","parseMap","parseList","parseUnknown","parseScalar","xmlChild","errorElement","loadXML","EventEmitter","XHRClient","emitter","headersEmitted","HEADERS_RECEIVED","DONE","finishRequest","xhrAsync","xhrWithCredentials","rawHeaders","ab","ReflectOwnKeys","ReflectApply","ownKeys","NumberIsNaN","_eventsCount","_maxListeners","defaultMaxListeners","$getMaxListeners","_addListener","newListener","onceWrapper","wrapFn","_onceWrap","_listeners","evlistener","unwrapListeners","arrayClone","listenerCount","setMaxListeners","getMaxListeners","doError","er","prependListener","prependOnceListener","originalListener","spliceOne","rawListeners","eventNames","LOG_LEVELS","VERBOSE","DEBUG","INFO","WARN","ERROR","_padding","_ts","getMilliseconds","_log","logger_level_name","LOG_LEVEL","logger_level","type_level","Browser","nav","vendor","language","operaMatch","cfMatch","ieMatch","sMatch","awkMatch","anyMatch","browserType","timezone","tzMatch","browserClientInfo","innerHeight","missingConfig","invalidParameter","HubClass","protectedChannels","pattern_1","holder","ampSymbol","patternInfo","_toListeners","listenerName","onHubCapsule","isLegacyCallback","payloadStr_1","dispatchingCapsule","_i18n","createInstance","setLanguage","defVal","putVocabulariesForLanguage","vocabularies","putVocabularies","_options","_lang","_dict","getByLanguage","lang_dict","NavigationInstruction","plan","viewPortInstructions","ancestorParams","hasChildRouter","getWildCardName","parentInstruction","allParams","lifecycleArgs","getAllInstructions","childInstruction","childNavigationInstruction","getAllPreviousInstructions","previousInstruction","addViewPortInstruction","nameOrInitOptions","component","viewPortInstruction","viewPortName","currentViewPort","childRouter","configRoute","wildcardIndex","getWildcardPath","wildcardName","getBaseUrl","$encodeURI","encodeURI","nonEmptyRoute","_commitChanges","waitToSwap","currentInstruction","navModel","refreshNavigation","delaySwaps","_loop_1","viewPort","viewPorts","childNavInstruction","parentCatchHandler","prune","_updateTitle","_buildTitle","titleSeparator","childTitles","navModelTitle","instructionRouter","transformTitle","child_nav_instruction","childTitle","NavModel","relativeHref","updateTitle","_normalizeAbsolutePath","hasPushState","absolute","_createRootedPath","baseUrl","isAbsoluteUrl","_ensureArrayWithSingleRoutePerConfig","routeConfigs","isRootedPath","RouterConfiguration","pipelineSteps","addPipelineStep","addAuthorizeStep","addPreActivateStep","addPreRenderStep","addPostRenderStep","fallbackRoute","_fallbackRoute","mapRoute","useViewPortDefaults","viewPortConfig","viewPortDefaults","routeConfig","createNavModel","addRoute","mapUnknownRoutes","unknownRouteConfig","exportToRouter","handleUnknownRoutes","pipelineStepCount","pipelineProvider","name_1","addStep","Router","isConfigured","isNavigating","isExplicitNavigation","isExplicitNavigationBack","isNavigatingFirst","isNavigatingNew","isNavigatingRefresh","isNavigatingForward","isNavigatingBack","couldDeactivate","_fallbackOrder","_recognizer","_childRecognizer","_configuredPromise","_resolveConfiguredPromise","registerViewPort","ensureConfigured","callbackOrConfig","_resolveUrl","_hasPushState","navigateToRoute","recognizer","rootedPath","validateRouteConfig","navigationStrategy","withChild","hasOwnRoute","catchAllHandler","_createRouteConfig","parentRouter","length_1","$viewPortDefaults","_refreshBaseUrl","generateBaseUrl","_createNavigationInstruction","urlRecognizationResults","instructionInit","compareQueryParams","evaluateNavigationStrategy","_parentCatchAllHandler","newParentInstruction","_findParentInstructionFromRouter","evaluator","createCompletionHandler","Pipeline","steps","getSteps","currentStep","createNextFn","nextFn","isNavigationCommand","Redirect","shouldContinueProcessing","setRouter","appRouter","useAppRouter","RedirectToRoute","_buildNavigationPlan","forceLifecycleMinimum","buildRedirectPlan","prevInstruction","defaultViewPortConfigs","buildTransitionPlans","viewPortPlans","viewPortConfigs","InternalActivationStrategy","redirectInstruction","originalInstructionParams","redirectInstructionParams","redirectLocation","newInstructionConfig","hasNewParams","hasDifferentParameterValues","previousViewPortInstructions","prevViewPortInstruction","prevViewPortComponent","newInstructionViewPortConfigs","nextViewPortConfig","viewPortActivationStrategy","determineActivationStrategy","viewPortPlan","prevComponent","prevModuleId","childPlan","currentNavInstruction","newViewPortConfig","prevViewPortViewModel","activationStrategy","prevParams","nextParams","nextWildCardName","prevQueryParams","nextQueryParams","BuildNavigationPlanStep","navigationInstruction","loadNewRoute","routeLoader","loadPromises","determineLoadingPlans","loadingPlan","loadRoute","loadingPlans","planConfig","loadComponent","childRouter_1","getChildRouter","configureRouter","RouteLoader","LoadRouteStep","CommitChangesStep","PipelineStatus","RouterEvent","PipelineSlotName","noChange","invokeLifecycle","processDeactivatable","ignoreResult","infos","findDeactivatable","shouldContinue","iterate","processPotential","addPreviousDeactivatable","prevViewModel","processActivatable","findActivatable","current_1","viewPortComponent","SafeSubscription","subscriptionFunc","_subscribed","_subscription","obs_1","subscribed","CanDeactivatePreviousStep","CanActivateNextStep","DeactivatePreviousStep","ActivateNextStep","PipelineSlot","slotAlias","PipelineProvider","createPipelineSlot","createPipeline","useCanDeactivateStep","pipeline","_findStep","slotSteps","removeStep","_clearSteps","AppRouter","maxInstructionCount","loadUrl","_queueInstruction","restorePreviousLocation","$viewPort","_dequeueInstruction","viewModel_1","_findViewModel","resolveConfiguredPromise_1","routeHandler","instructionCount","navtracker","currentNavTracker","currentNavigationTracker","processResult","resolveInstruction","finalResult","navigationCommandResult","innerResult","isInnerInstruction","previousLocation","encrypt","signed_headers","canonical_request","url_info","key_val","reencoded_val","parse_service_info","credential_scope","d_str","string_to_sign","dt_str","get_signing_key","service_info","k_date","k_region","k_service","get_signature","signing_key","str_to_sign","access_info","request_str","authorization_header","get_authorization_header","urlToSign","expiration","credentialScope","sessionTokenRequired","canonicalRequest","additionalQueryParams","storageConfig","AWSPinpoint","userPoolWebClientId","identityPoolId","mandatorySignIn","AWSS3","waitForInit","auth2","initialized","refreshGoogleToken","_refreshGoogleTokenImpl","ga","getAuthInstance","googleAuth","googleUser","currentUser","isSignedIn","reloadAuthResponse","authResponse","id_token","expires_at","profile","getBasicProfile","getEmail","refreshFacebookToken","_refreshFacebookTokenImpl","fb","getLoginStatus","fbResponse","expiresIn","Linking","AppState","AsyncStorage","_gettingCredPromise","_refreshHandlers","getCredSource","_credentials_source","refreshHandlers","_storage","_storageSync","_pickupCredentials","makeQuerablePromise","_setCredentialsFromAWS","_keepAlive","_credentials","_isExpired","currentUserCredentials","refreshFederatedToken","federatedInfo","identity_id","_setCredentialsFromFederation","_setCredentialsForGuest","attempted","_loadCredentials","newCredentials","logins","_setCredentialsFromSession","authenticated","e_2","ServiceWorkerClass","_logger","_serviceWorker","filePath","serviceWorker","installing","waiting","_setupListeners","enablePush","publicKey","_publicKey","pushManager","getSubscription","_urlB64ToUint8Array","base64String","rawData","outputArray","analytics_1","AWSKinesisProvider","AmazonPersonalizeProvider","auth_1","storage_1","StorageClass","api_1","APIClass","graphqlOperation","pubsub_1","PubSubClass","interactions_1","InteractionsClass","xr_1","XRClass","StorageCache_1","cacheConfig","_decreaseCurSizeInBytes","curSize","getCacheCurSize","_increaseCurSizeInBytes","_refreshItem","prefixedKey","_removeItem","itemSize","_setItem","setItemErr","_sizeToPop","spaceItemNeed","cacheThresholdSpace","_isCacheFull","_findValidKeys","keyInCache","_popOutItems","sizeToPop","remainedSize","cacheItemOptions","validKeys","keysToRemove","_isInteger","store","CacheObject","DoubleLinkedNode","keyVal","nextNode","hashtable","insertNodeToHead","insertItem","getLastItem","removedItem","getSize","containsKey","clearList","isHeadNode","isTailNode","cacheList","curSizeInBytes","maxPriority","listIdx","presentKeyPrio","cacheListIdx","popedItemKey","PageViewTracker_1","EventTracker_1","SessionTracker_1","disableView","viewName","MethodEmbed_1","PREV_URL_KEY","defaultOpts","getUrl","_tracker","_hasEnabled","_trackFunc","_pageViewTrackSPA","_pageViewTrackDefault","_isSameUrl","customAttrs","lists","MethodEmbed","_originalMethod","methodOverride","dom_utils_1","selectorPrefix","_delegates","selector_1","useCapture","defaultAttrs","localName","closest_1","delegate_1","dispatch_1","get_attributes_1","getAttributes","parse_url_1","parseUrl","composedPath","evtName","init_dict","isCustom","initDict","HTTP_PORT","HTTPS_PORT","DEFAULT_PORT","initialEventSent","_trackBeforeUnload","_envCheck","_hidden","_visibilityChange","_sendInitialEvent","AWSKinesisProvider_1","AmazonPersonalizeProvider_1","ItemService","getActivityDetailResponse","ACTIVITY_DETAIL_RECORD_TYPE","_convertResponseToActivityDetailReport","_convertResponseToItemReference","_convertResponseToItem","fileDataBase64","itemResponse","productId","winerySku","isInventoryItem","isKitItem","onHand","itemRefResponse","Kinesis","_sendFromBuffer","eventsGroups","preCred","evts","_sendEvents","streamName","PartitionKey","partitionKey","_kinesis","putRecords","Records","StreamName","PersonalizeEvents","AmazonPersonalizeHelper_1","lodash_1","FLUSH_SIZE_THRESHHOLD","_sessionManager","SessionInfoManager","trackingId","_sessionInfo","retrieveSessionInfo","_isBrowser","requestParams","sentAt","updateSessionInfo","generateRequestParams","isElementFullyLoaded","loadElement","eventData","MediaAutoTrack","putToBuffer","domId","clientHeight","sessionInfo","groupLen","eventPayload","_generateSingleRecordPayload","sessionId","eventList","_personalize","currRequestParams","trackPayload","getTimerKey","TemplateDependency","TemplateRegistryEntry","_factory","finalSrc","requires","templateRegistry","normalizeSync","ids","loadText","getOrCreateTemplateRegistryEntry","prefixKey","_timerKey","_refreshTimer","storeValue","expire","_getCachePrefix","retrieveValue","existUserId","existSessionId","_isRequireNewSession","newSessionId","_isRequireUpdateSessionInfo","cachedSessionUserId","cachedSessionSessionId","isNoCachedSession","isSignoutCase","isSwitchUserCase","HTML5_MEDIA_EVENT","MEDIA_TYPE","EVENT_TYPE","eventActionMapping","ENDED","endedEventAction","PLAY","playEventAction","PAUSE","pauseEventAction","_mediaElement","_provider","IFRAME","_iframeMediaTracker","VIDEO","_html5MediaTracker","AUDIO","mediaTrackFunMapping","_initYoutubeFrame","_youTubeIframeLoader","recordEvent","TIME_WATCHED","YT","_iframePlayer","Player","_onPlayerStateChange","mediaType","newParams","_financial","getCurrentTime","getDuration","percentage","eventValue","types_1","url_1","OAuth_1","urlListener_1","dispatchAuthEvent","userPool","cookieStorage","identityPoolRegion","_isValidAuthStorage","userPoolData","cognitoHostedUIConfig","awsCognito","cognitoAuthParams","cognitoClientId","scopes","redirectSignOut","urlOpener","_oAuthHandler","_handleAuthResponse","restOfAttrs","phone_number","attrs_1","confirmSignUp","createCognitoUser","resendSignUp","signIn","usernameOrSignInOpts","pw","signInWithPassword","signInWithoutPassword","authCallbacks","currentUserPoolUser","challengeParam","getPreferredMFA","_getMfaTypeFromUserData","preferredMFA","PreferredMfaSetting","mfaList","UserMFASettingList","_getUserData","setPreferredMFA","mfaMethod","totpMfaSettings","currentMFAType","PreferredMfa","Enabled","disableSMS","enableSMS","setupTOTP","secretCode","verifyTotpToken","challengeAnswer","confirmSignIn","e_3","completeNewPassword","e_4","updateUserAttributes","verifiedContact","attributesToObject","unverified","verified","currentAuthenticatedUser","federatedUser","e_5","e_6","e_7","currentCredentials","verifyUserAttribute","verifyUserAttributeSubmit","verifyCurrentUserAttribute","verifyCurrentUserAttributeSubmit","cognitoIdentitySignOut","e_8","isSignedInHostedUI","cleanCachedItems","oldPassword","forgotPasswordSubmit","currentUserInfo","userAttrs","e_10","err_1","federatedSignIn","providerOrOptions","client_id","redirect_uri","loggedInUser","Cognito","customProvider","clientID","redirectUri","oauthSignIn","currentUrl","hasCodeOrError","hasTokenOrError","err_2","handleAuthResponse","replaceState","essentialCredentials","Base","Utf8","HMAC","hasher","_hasher","hasherBlockSize","blockSize","hasherBlockSizeBytes","finalize","oKey","_oKey","iKey","_iKey","oKeyWords","iKeyWords","messageUpdate","innerHash","urlOpener_1","oAuthStorage","OAuth","_urlOpener","launchUri","_cognitoClientId","_scopes","_generateState","pkce_key","_generateRandom","setPKCE","code_challenge","_generateChallenge","response_type","identity_provider","code_challenge_method","_handleCodeFlow","oAuthTokenEndpoint","code_verifier","oAuthTokenBody","access_token","refresh_token","pairings","getPKCE","grant_type","URLSearchParams","_handleImplicitFlow","urlParams","error_description","acc","_validateState","savedState","returnedState","oAuthLogoutEndpoint","signout_uri","returnTo","logout_uri","oAuth","_base64URL","_bufferToString","CHARSET","windowProxy","oauth_state","private_key","ouath_pkce_key","clearAll","Storage_1","vault","old_configure_1","vaultConfig","overrides","mixIn","$super","encoder","Hex","thisWords","thatWords","thisSigBytes","thatSigBytes","thatByte","rcache","m_w","m_z","_r","C_enc","hexChars","bite","hexStrLength","Latin1","latin1Chars","latin1Str","latin1StrLength","utf8Str","BufferedBlockAlgorithm","_append","doFlush","dataSigBytes","nBlocksReady","nWordsReady","_minBufferSize","nBytesReady","processedWords","AWSS3Provider_1","prov","operationsWith200StatusCodeError","regionRedirectErrorCodes","getSignatureVersion","defaultApiVersion","userDefinedVersion","regionDefinedVersion","shouldDisableBodySigning","validateScheme","validateBucketEndpoint","correctBucketRegionFromCache","validateBucketName","addContentType","computeContentMd5","computeSseCustomerKeyMd5","addExpect100Continue","VALIDATE_REGION","requestBucketRegion","prepareSignedUrl","reqRegionForNetworkingError","disableBodySigning","CopySourceSSECustomerKey","slashIndex","isValidAccelerateOperation","pathStyleBucketName","removeVirtualHostedBucketFromPath","encodedS3Key","charsetName","computableChecksumOperations","putBucketCors","putBucketLifecycle","putBucketLifecycleConfiguration","putBucketTagging","deleteObjects","putBucketReplication","putObjectLegalHold","putObjectRetention","putObjectLockConfiguration","willComputeChecksums","ContentMD5","bucketName","dnsCompatibleBucketName","ipAddress","dots","_requestRegionForBucket","bucketRegionCache","updateReqBucketRegion","s3Config","newConfig","Host","LocationConstraint","createBucketConfiguration","CreateBucketConfiguration","clearBucketRegionCache","extractRequestIds","cachedRegion","codes","304","403","400","404","reqOperation","reqParams","MaxKeys","regionReq","getRegionReq","buckets","requestRegion","extendedRequestId","cfId","createPresignedPost","boundParams","finalizePost","preparePostFields","Fields","Conditions","expiresInSeconds","signingDate","shortDate","credential","Policy","preparePostPolicy","noPresignedContentLength","ContentLength","createBucket","uploader","completeInfo","fillQueue","partSize","minPartSize","queueSize","leavePartsOnError","tags","bindServiceObject","validateBody","adjustTotalBytes","maxTotalParts","failed","runFill","fillBuffer","fillStream","partBuffers","cleanup","isDoneChunking","numParts","totalPartNumbers","doneParts","finishMultiPart","singlePart","totalBytes","newPartSize","partPos","totalChunkedBytes","totalUploadedBytes","activeParts","multipartReq","partBufferLength","bodyLen","nextChunk","endPos","pbuf","isDoneSending","partNumber","getTaggingHeader","putObject","_managedUpload","finishSinglePart","UploadId","uploadPart","queueChunks","createMultipartUpload","kvPairStrings","partParams","PartNumber","partInfo","_lastUploadedBytes","abortMultipartUpload","completeParams","MultipartUpload","Parts","completeMultipartUpload","Location","putObjectTagging","TagSet","httpReq","API_1","graphql_1","printer_1","parser_1","RestClient_1","constants_1","_api","_pubSub","clientIdentifier","otherOptions","custom_header","graphql_headers","RestClient","error_2","error_3","patch","error_4","del","error_5","error_6","error_7","_headerBasedAuth","defaultAuthenticationType","aws_appsync_authenticationType","apiKey","aws_appsync_apiKey","getGraphqlOperationType","paramQuery","authMode","operationType","_graphql","_graphqlSubscribe","additionalHeaders","appSyncGraphqlEndpoint","customGraphqlEndpoint","customEndpointRegion","_e","_g","_h","aws_appsync_region","aws_appsync_graphqlEndpoint","graphql_endpoint","graphql_endpoint_iam_region","signerServiceInfo","additionalheaders","newSubscriptions_1","newTopics","error_8","newSubscriptions","ItemReference","_visitor","sourceObj","Source","_lexer","parseDefinition","_kinds","parseDocument","parseValueLiteral","parseType","parseTypeReference","parseConstValue","parseNamedType","_directiveLocation","parseName","parseExecutableDefinition","parseTypeSystemDefinition","peekDescription","unexpected","parseOperationDefinition","expectKeyword","experimentalFragmentVariables","parseFragmentName","parseVariableDefinitions","parseDirectives","parseSelectionSet","parseFragmentDefinition","parseOperationType","operationToken","many","parseVariableDefinition","parseVariable","parseSelection","parseFragment","nameOrAlias","parseArguments","parseField","isConst","parseConstArgument","parseArgument","parseValueValue","parseObjectField","parseStringLiteral","parseDirective","keywordToken","parseOperationTypeDefinition","parseSchemaDefinition","parseDescription","parseScalarTypeDefinition","parseImplementsInterfaces","parseFieldsDefinition","parseObjectTypeDefinition","parseInterfaceTypeDefinition","parseUnionMemberTypes","parseUnionTypeDefinition","parseEnumValuesDefinition","parseEnumTypeDefinition","parseInputFieldsDefinition","parseInputObjectTypeDefinition","parseScalarTypeExtension","parseObjectTypeExtension","parseInterfaceTypeExtension","parseUnionTypeExtension","parseEnumTypeExtension","parseInputObjectTypeExtension","parseTypeExtension","parseArgumentDefs","parseDirectiveLocation","parseDirectiveLocations","parseDirectiveDefinition","allowLegacySDLImplementsInterfaces","allowLegacySDLEmptyFields","parseFieldDefinition","parseInputValueDef","parseEnumValueDefinition","startToken","noLocation","Loc","endToken","atToken","openKind","parseFn","closeKind","_invariant","_invariant2","_blockStringValue","_blockStringValue2","hasSymbols","getSymbol","SymbolIterator","SymbolObservable","SymbolSpecies","getMethod","getSpecies","isObservable","hostReportError","enqueue","cleanupSubscription","closeSubscription","_observer","_state","notifySubscription","onNotify","flushSubscription","Subscription","subscriber","subscriptionObserver","SubscriptionObserver","_subscriber","hasSeed","startNext","completeIfDone","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","axios_1","urlLib","_region","_service","_custom_header","parsed_url","libraryHeaders","initParams","isAllResponse","_parseUrl","queryStringParameters","_request","_signed","cloud_logic_array","signerServiceInfoParams","otherParams","endpoint_region","endpoint_service","endpointInfo","signed_params","Axios","mergeConfig","axios","CancelToken","isCancel","InterceptorManager","dispatchRequest","interceptors","getUri","eject","transformData","isAbsoluteURL","combineURLs","throwIfCancellationRequested","throwIfRequested","baseURL","SYMBOL_ITERATOR","$$iterator","isIterable","getIteratorMethod","getIterator","createIterator","ArrayLikeIterator","_o","isCollection","SYMBOL_ASYNC_ITERATOR","asyncIterator","$$asyncIterator","getAsyncIterator","asyncIterable","getAsyncIteratorMethod","createAsyncIterator","AsyncFromSyncIterator","isAsyncIterable","forAwaitEach","normalizedName","isAxiosError","columnNumber","ignoreDuplicateOf","originURL","msie","urlParsingNode","resolveURL","requestURL","toGMTString","relativeURL","PubSub_1","Providers_1","_awsAppSyncProvider","AWSAppSyncProvider","getProviderByName","awsAppSyncProvider","getProviders","_topicClient","_topicAlias","_cleanUp","_cleanUpForTopic","obs","mqttConnections","newAliases","connectionInfoForTopic","origKey","PahoMQTT","MESSAGE_TYPE","CONNECT","CONNACK","PUBLISH","PUBACK","PUBREC","PUBREL","PUBCOMP","SUBSCRIBE","SUBACK","UNSUBSCRIBE","UNSUBACK","PINGREQ","PINGRESP","DISCONNECT","errorStr","validKey","INVALID_TYPE","OK","CONNECT_TIMEOUT","SUBSCRIBE_TIMEOUT","UNSUBSCRIBE_TIMEOUT","PING_TIMEOUT","INTERNAL_ERROR","CONNACK_RETURNCODE","SOCKET_ERROR","SOCKET_CLOSE","MALFORMED_UTF","UNSUPPORTED","INVALID_STATE","INVALID_ARGUMENT","UNSUPPORTED_OPERATION","INVALID_STORED_DATA","INVALID_MQTT_MESSAGE_TYPE","MALFORMED_UNICODE","BUFFER_FULL","CONNACK_RC","substitutions","part1","part2","MqttProtoIdentifierv3","MqttProtoIdentifierv4","WireMessage","decodeMessage","startingPos","messageInfo","remLength","wireMessage","sessionPresent","returnCode","qos","readUint16","topicName","parseUTF8","messageIdentifier","retained","duplicate","payloadMessage","writeUint16","writeString","utf8Length","stringToUTF8","UTF8Length","lowCharCode","utf16","byte1","byte2","byte3","byte4","willMessagePayloadBytes","topicStrLength","destinationNameLength","willMessage","payloadBytes","userName","requestedQos","mbi","encodeMBI","byteStream","connectFlags","cleanSession","keepAliveInterval","Pinger","_client","_keepAliveInterval","isReset","pingReq","doTimeout","pinger","doPing","socket","_disconnected","timeoutSeconds","ClientImpl","WebSocket","_wsuri","_localKey","_msg_queue","_buffered_msg_queue","_sentMessages","_receivedMessages","_notify_msg_sent","_message_identifier","_sequence","connected","maxMessageIdentifier","connectOptions","hostIndex","onConnected","onMessageDelivered","traceFunction","_connectTimeout","sendPinger","receivePinger","_reconnectInterval","_reconnecting","_reconnectTimeout","disconnectedPublishing","disconnectedBufferSize","receiveBuffer","_traceBuffer","_MAX_TRACE_ENTRIES","connectOptionsMasked","_traceMask","uris","_doConnect","subscribeOptions","grantedQos","invocationContext","timeOut","_requires_ack","_schedule_message","unsubscribeOptions","sequence","getTraceLog","startTrace","stopTrace","wsurl","uriParts","binaryType","onopen","_on_socket_open","_on_socket_message","_on_socket_error","onclose","_on_socket_close","_process_queue","storedMessage","pubRecReceived","messageBytes","payloadHex","_socket_send","messageCount","_deframeMessages","_handleMessage","errorStack","sentMessage","receivedMessage","sequencedMessages","msgId","pubRelMessage","reconnected","_connected","_receivePublish","_receiveMessage","pubCompMessage","wireMessageMasked","pubAckMessage","pubRecMessage","reconnect","_reconnect","errorText","mqttVersionExplicit","severity","traceObject","masked","traceObjectMasked","newPayload","newDestinationName","newQos","newRetained","newTopic","newDuplicate","ipv6AddSBracket","clientIdLength","newOnConnected","newDisconnectedPublishing","newDisconnectedBufferSize","newOnConnectionLost","newOnMessageDelivered","newOnMessageArrived","hosts","ports","stringPayload","usingURIs","ipv6","Interactions_1","bots","aws_bots_config","bots_config","bot","botProvider","GetRecordsService","getRecordsResult","signInButton","googleSignInButton","signInButtonIcon","auth0SignInButton","facebookSignInButton","amazonSignInButton","oAuthSignInButton","signInButtonContent","formContainer","formSection","formField","formRow","hint","inputLabel","navBar","navRight","navItem","photoPickerButton","photoPlaceholder","photoPlaceholderIcon","actionRow","sectionHeader","sectionHeaderHint","sectionBody","sectionFooter","sectionFooterPrimaryContent","sectionFooterSecondaryContent","strike","strikeContent","toastClose","totpQrcode","sumerianSceneContainer","sumerianScene","loadingOverlay","loadingContainer","loadingLogo","loadingSceneName","loadingBar","loadingBarFill","sceneErrorText","sceneBar","sceneActions","actionButton","tooltip","actionIcon","autoShowTooltip","XR_1","SumerianProvider_1","DEFAULT_PROVIDER_NAME","_defaultProvider","useSourceMap","cssMapping","sourceMapping","sourceMap","sourceURLs","sourceRoot","cssWithMappingToString","mediaQuery","alreadyImportedModules","needQuotes","FormData","WebpackLoader","TextTemplateLoader","ensureOriginOnExports","__useDefault","moduleRegistry","loaderPlugins","modulesBeingLoaded","useTemplateLoader","templateLoader","eachModule","_import","defaultHMR","addressParts","loaderPlugin","plugin_1","asyncModuleId","hot","hmrContext","handleModuleChange","beingLoaded","originalModule","getIntrospectionQuery","descriptions","introspectionQuery","getOperationAST","documentAST","introspectionFromSchema","queryAST","buildClientSchema","introspection","schemaIntrospection","__schema","typeIntrospectionMap","typeDefCache","typeRef","itemRef","nullableRef","nullableType","typeIntrospection","typeDef","scalarIntrospection","objectIntrospection","getInterfaceType","buildFieldDefMap","buildObjectDef","interfaceIntrospection","unionIntrospection","getObjectType","buildUnionDef","enumIntrospection","keyValMap","valueIntrospection","buildEnumDef","inputObjectIntrospection","buildInputValueDefMap","buildInputObjectDef","buildType","fieldIntrospection","inputValueIntrospections","inputValue","buildInputValue","inputValueIntrospection","valueFromAST","directiveIntrospection","buildASTSchema","schemaDef","typeDefs","directiveDefs","_typeName","opTypes","Mutation","definitionBuilder","buildDirective","ASTDefinitionBuilder","typeDefinitionsMap","_typeDefinitionsMap","_resolveType","_cache","_buildType","defNode","_makeSchemaDef","_buildWrappedType","buildWrappedType","inputTypeNode","wrappedType","namedType","getNamedTypeNode","directiveNode","getDescription","_makeInputValues","buildField","getDeprecationReason","_makeTypeDef","_makeInterfaceDef","_makeEnumDef","_makeUnionDef","_makeScalarDef","_makeInputObjectDef","_makeFieldDefMap","_makeImplementedInterfaces","commentDescriptions","getLeadingCommentBlock","buildSchema","extendSchema","typeDefinitionMap","typeExtensionsMap","directiveDefinitions","extendedTypeName","existingType","getTypeFromDef","extendImplementedInterfaces","extendFieldMap","extendObjectType","extendInterfaceType","extendUnionType","extendType","existingQueryType","existingMutationType","existingSubscriptionType","existingDirectives","newDirectives","getMergedDirectives","newFieldMap","oldFieldMap","extendFieldType","lexicographicSortSchema","sortMaybeType","maybeType","sortNamedType","sortByName","sortArgs","sortType","sortFields","fieldsMap","sortObjMap","sortTypes","sortedType","sortNamedTypeImpl","sortValueFn","sortedMap","mapToKey","key1","printSchema","printFilteredSchema","isDefinedType","printIntrospectionSchema","directiveFilter","typeFilter","printSchemaDefinition","printDescription","printArgs","printDirective","printType","isSchemaOfCommonNames","printScalar","implementedInterfaces","printFields","printObject","printInterface","printUnion","printDeprecated","printEnumValues","printEnum","printInputValue","printInputObject","indentation","argDecl","astFromValue","fieldOrEnumVal","isNullish","firstInBlock","maxLen","rawLines","sublines","breakLine","descriptionLines","printDescriptionWithComments","escapeQuote","hasLeadingSpace","isValidJSValue","coerceValue","isValidLiteralValue","emptySchema","emptyDoc","TypeInfo","getErrors","concatAST","asts","batchDefinitions","separateOperations","depGraph","fromName","toName","separatedDocumentASTs","collectTransitiveDependencies","immediateDeps","n1","n2","BreakingChangeType","FIELD_CHANGED_KIND","FIELD_REMOVED","TYPE_CHANGED_KIND","TYPE_REMOVED","TYPE_REMOVED_FROM_UNION","VALUE_REMOVED_FROM_ENUM","ARG_REMOVED","ARG_CHANGED_KIND","NON_NULL_ARG_ADDED","NON_NULL_INPUT_FIELD_ADDED","INTERFACE_REMOVED_FROM_OBJECT","DIRECTIVE_REMOVED","DIRECTIVE_ARG_REMOVED","DIRECTIVE_LOCATION_REMOVED","NON_NULL_DIRECTIVE_ARG_ADDED","DangerousChangeType","ARG_DEFAULT_VALUE_CHANGE","VALUE_ADDED_TO_ENUM","INTERFACE_ADDED_TO_OBJECT","TYPE_ADDED_TO_UNION","NULLABLE_INPUT_FIELD_ADDED","NULLABLE_ARG_ADDED","findBreakingChanges","oldSchema","newSchema","oldTypeMap","newTypeMap","breakingChanges","findRemovedTypes","oldType","newType","typeKindName","findTypesThatChangedKind","oldTypeFieldsDef","newTypeFieldsDef","oldFieldType","newFieldType","isChangeSafeForObjectOrInterfaceField","oldFieldTypeString","newFieldTypeString","findFieldsThatChangedTypeOnObjectOrInterfaceTypes","findFieldsThatChangedTypeOnInputObjectTypes","typesRemovedFromUnion","typeNamesInNewUnion","findTypesRemovedFromUnions","valuesRemovedFromEnums","valuesInNewEnum","findValuesRemovedFromEnums","findArgChanges","oldInterfaces","newInterfaces","oldInterface","findInterfacesRemovedFromObjectTypes","removedDirectives","newSchemaDirectiveMap","getDirectiveMapForSchema","findRemovedDirectives","removedDirectiveArgs","oldSchemaDirectiveMap","newDirective","oldDirective","removedArgs","newArgMap","getArgumentMapForDirective","findRemovedArgsForDirective","findRemovedDirectiveArgs","addedNonNullableArgs","addedArgs","oldArgMap","findAddedArgsForDirective","findAddedNonNullDirectiveArgs","removedLocations","newLocationSet","oldLocation","findRemovedLocationsForDirective","findRemovedDirectiveLocations","findDangerousChanges","dangerousChanges","valuesAddedToEnums","valuesInOldEnum","findValuesAddedToEnums","interfacesAddedToObjectTypes","newInterface","findInterfacesAddedToObjectTypes","typesAddedToUnion","typeNamesInOldUnion","findTypesAddedToUnions","oldTypeFields","newTypeFields","oldArgDef","newArgDef","isChangeSafeForInputObjectFieldOrFieldArg","findDeprecatedUsages","enumVal","getEnumValue","ROUTES","DASHBOARD","NAVIGATION","CREATE_ORDER","VIEW_ORDER","LIST_ORDERS","LIST_SHIPPING_ADDRESSES","VIEW_SHIPPING_ADDRESS","VIEW_IMPORT_ORDERS","ORDER_LIST_DASHBOARD","LIST_ORDER_BATCHES","VIEW_ORDER_BATCH","LIST_CHANGE_ORDER","VIEW_CHANGE_ORDER","CREATE_CHANGE_ORDER","ITEMS_DASHBOARD","LIST_ITEMS","VIEW_ITEM","COLD_CHAIN_DASHBOARD","COLD_CHAIN_ZIPS","BILLING_DASHBOARD","RATE_CALCULATOR","SHIPPING_DASHBOARD","SHIPPING_LIST","ACTIVITY_DETAIL_REPORT","LIST_WINERY_TRANSFERS","VIEW_WINERY_TRANSFER","LIST_INVOICES","VIEW_INVOICE","LIST_CREDIT_MEMOS","VIEW_CREDIT_MEMO","RETURNS_DASHBOARD","LIST_RETURNS","VIEW_RETURN","suggestionList","optionsByDistance","oLength","inputThreshold","lexicalDistance","aStr","bStr","aLength","bLength","cost","valFn","isEqualType","typeA","typeB","isTypeSubTypeOf","maybeSubType","superType","doTypesOverlap","_typeB","OrderService","createOrderRequest","searchByLineRecords","ITEM_RECORD_TYPE","getAllLineRecords","allOrderLines","orderReferences","getRecordsByOrderNumber","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","runClearTimeout","browser","argv","cwd","chdir","umask","LOGIN_STATUS","NONE","SUCCESS","NEWPASSWORD","hasSetImmediate","makeRequestFlushFromTimer","timeoutHandle","handleFlushTimer","intervalHandle","TaskQueue","longStacks","microTaskQueue","microTaskQueueCapacity","mutationObserver","requestFlushMicroTaskQueue","flushMicroTaskQueue","characterData","requestFlushTaskQueue","flushTaskQueue","_flushQueue","scan","newLength","filterFlushStack","prepareQueueStack","queueTask","filterQueueStack","captureStack","innerError","skipIfAlreadyAggregate","FEATURE","PLATFORM","moduleName","_moduleName","_x","DOM","initializePAL","subject","pd","LoginService","setNewPassword","loginPassport","FAILED","sendForgotPasswordCode","sendNewPasswordWithCode","login","logout","BillingService","searchInvoices","INVOICE_RECORD_TYPE","_convertResponseToInvoice","getAllInvoices","getInvoice","searchCreditMemos","CREDIT_MEMO_RECORD_TYPE","_convertResponseToCreditmemo","getAllCreditMemos","getCreditMemo","getRateCalculatorResponse","RATE_CALCULATOR_TYPE","_convertResponseToRateCalculator","searchBillingRates","BILLING_RATE_TYPE","_convertResponseToBillingRate","searchZoneRanges","ZONE_RANGE_TYPE","_convertResponseToZoneRange","getAllBillingRates","allBillingRates","getAllZoneRanges","matchedRates","matchedRate","billingRate","totalCharge","invoice","isResidential","street","street2","emails","shipmethodid","zoneid","RateCalculatorRequestItem","itemReference","MatchedRate","validateSchema","SchemaValidationContext","getOperationTypeNode","validateRootTypes","validateName","argNames","getAllDirectiveArgNodes","argNode","getDirectiveArgTypeNode","validateDirectives","validateFields","implementedTypeNames","getAllImplementsInterfaceNodes","getImplementsInterfaceNode","objectFieldMap","ifaceFieldMap","objectField","ifaceField","getFieldTypeNode","ifaceArg","objectArg","getFieldArgTypeNode","getFieldArgNode","getFieldNode","validateObjectImplementsInterface","validateObjectInterfaces","memberTypes","includedTypeNames","memberType","getUnionMemberTypeNodes","validateUnionMembers","enumType","allNodes","getEnumValueNodes","validateEnumValues","inputObj","validateInputFields","validateTypes","assertValidSchema","_errors","addError","operationTypeNode","getAllObjectOrInterfaceNodes","getAllFieldNodes","getAllFieldArgNodes","implementsNodes","astNodes","getAllObjectNodes","_astNode","_astNode2","fieldNode","fieldArgNode","getFieldDefFn","initialType","_schema","_typeStack","_parentTypeStack","_inputTypeStack","_fieldDefStack","_directive","_enumValue","_getFieldDef","getParentInputType","fieldType","typeConditionAST","outputType","inputType","argType","fieldOrDirective","listType","objectType","inputFieldType","inputField","coercedValues","itemNodes","isMissingVariable","itemValue","coercedValue","coercedObj","fieldValue","getVariableValues","varDefNodes","inputs","varDefNode","_coerced","coercionErrors","messagePrelude","getArgumentValues","argDefs","argumentNode","getDirectiveValues","propertyType","metadataKey","targetKey","getOwnMetadata","metadataValue","defineMetadata","originStorage","unknownOrigin","Origin","instanceKeys","possible","decorator","resolvedTarget","alwaysValid","noCompose","ensureProtocolOptions","createProtocolValidator","createProtocolAsserter","CreateRecordService","ShippingAddressService","sortAddress","addressId","addressRecord","shippingAddressResponse","CountryService","searchCountryRecords","COUNTRY_RECORD_TYPE","_convertResponseToCountry","getCountryRecord","countryId","getAllCountryRecords","countryResponse","_convertResponseToState","stateResponse","quotedOrList","MAX_LENGTH","orList","quoted","ValidationContext","visitUsingRules","_ast","_typeInfo","_fragmentSpreads","_recursivelyReferencedFragments","_variableUsages","_recursiveVariableUsages","getDocument","_fragments","frags","statement","spreads","setsToVisit","collectedNames","nodesToVisit","getVariableUsages","newUsages","astValue","valuesNodes","itemNode","serialized","stringNum","integerStringRegExp","allTimeInventory","dateFrom","dateTo","itemIds","isDenied","isApproved","changeRequestsData","dateRead","contact","contactsRead","contactRead","AlertNotificationRead","AlertNotification","buildFromNotifications","notification","AlertNotificationSelection","changeIsChecked","isRead","OldCookies","Cookies","setMilliseconds","stringifiedAttributes","rdecode","withConverter","MIME_MAP","sortByField","dirX","a_val","b_val","objectLessAttributes","less","filenameToContentType","mime","isTextFile","isFullfilled","whiteListForItself","whiteListForChildren","isStrictObject","badValueMessage","isValidScalar","fieldNodeMap","fieldTypeName","requiredFieldMessage","suggestions","didYouMean","enumTypeSuggestion","locationType","parseResult","blameNode","ofErrors","coercionError","ofValue","coercedItem","atPath","_errors2","_coercedValue","printPath","coercedField","_fieldName","_suggestions","_didYouMean","moreErrors","subMessage","pathStr","loginService","UserSession","reload","getTimeLeftInSeconds","getCognitoSession","cognitoSession","getTimeLeftInMinutes","timeLeftSeconds","getCognitoUser","isValidSession","ADDITIONAL_ELAPSED_SECONDS","CarrierService","_convertResponseToCarrier","carrierResponse","ColdChainService","searchColdChainZips","COLD_CHAIN_ZIP_RECORD_TYPE","_convertResponseToColdChainZip","getColdChainZip","coldChainZipId","getAllColdChainZips","allColdChainZips","coldChainResponse","userService","App","routeData","errorMessageUtil","enableView","newWineryIds","showSideBar","configCallback","Handler","invokeCallback","invokeHandler","EventAggregator","eventLookup","messageHandlers","subscribers","ea","LinkHandler","DefaultLinkHandler","getEventInfo","shouldHandleEvent","findClosestAnchor","targetIsThisWindow","leftButtonClicked","isRelative","targetWindow","BrowserHistory","linkHandler","_isActive","_checkUrlCallback","_checkUrl","$history","wantsPushState","normalizedOptions","rootUrl","rootStripper","wantsHashChange","_wantsHashChange","hashChange","$location","atRoot","_getFragment","_getHash","routeStripper","_loadUrl","absoluteUrl","updateHash","historyIndex","forcePushState","location_1","fragmentOverride","$config","_console","_console2","_console3","_console4","_len4","AttributeMap","allElements","registerUniversal","InterpolationBindingExpression","ChildInterpolationBinding","InterpolationBinding","validateTarget","parentElement","targetAccessor","updateOneTimeBindings","LetExpression","toBindingContext","LetBinding","LetInterpolationBindingExpression","LetInterpolationBinding","interpolationBinding","createInterpolationBinding","SyntaxInterpreter","interpret","handleUnknownCommand","determineDefaultBindingMode","contentEditable","inString","inEscape","foundName","_getPrimaryPropertyName","isDestructuring","keyValue","TemplatingBindingLanguage","_BindingLanguage","syntaxInterpreter","emptyStringExpression","toBindingContextAttr","interpolationParts","parseInterpolation","theInfo","interpolationStart","partIndex","ActivationStrategy","__decorate","decorators","decorate","Compose","InvokeLifecycle","currentViewModel","changes","pendingTask","processChanges","modelChanged","requestUpdate","viewChanged","viewModelChanged","composer","vm","Replace","needsReInitialization","completeCompositionTask","updateRequested","IfCore","showing","_show","_hide","_unbindView","If","conditionChanged","_update","elseVm","Else","_registerInIf","ifVm","previousSibling","With","updateOverrideContexts","views","startIndex","updateOverrideContext","createFullOverrideContext","$index","$first","$last","$middle","$odd","$even","updateOneTimeBinding","ArrayRepeatStrategy","getCollectionObserver","instanceChanged","$repeat","itemsLength","viewsLength","viewsRequireLifecycle","childrenSnapshot","itemNameInBindingContext","matcher_1","itemsPreviouslyInViews_1","oldItem","updateViews","removePromise","removeViews","indexOfView","insertView","moveView","_inPlaceProcessItems","removeAllViews","_standardProcessInstanceChanged","addView","viewCount","middle","updateBindings","instanceMutated","__queuedSplices","__array","_runSplices","queuedSplices_1","runQueuedSplices_1","nextPromise","removeDelta","viewOrPromise","spliceIndexLow","_handleAddedSplices","spliceIndex","addIndex","MapRepeatStrategy","_standardProcessItems","removeIndex","_getViewIndexByKey","NullRepeatStrategy","NumberRepeatStrategy","childrenLength","SetRepeatStrategy","_getViewIndexByValue","RepeatStrategyLocator","strategies","addStrategy","getStrategy","lifecycleOptionalBehaviors","behaviorRequiresLifecycle","targetRequiresLifecycle","behaviors","_viewsRequireLifecycle","querySelector","Repeat","strategyLocator","ignoreMutation","bi","getItemsSourceExpression","isOneTime","Repeat_1","matcherBinding","_captureAndRemoveMatcherBinding","itemsChanged","_unsubscribeCollection","callContext","_observeInnerCollection","_observeCollection","_getInnerCollection","unwrapped","unwrapExpression","handleCollectionMutated","handleInnerCollectionMutated","useInnerMatcher","extractMatcherBindingExpression","repeatedElement","repeatedElementTargetId","AbstractRepeater","targetedElementId","instructionIds","instructionId","matcherBindingExpression","aureliaHideClass","injectAureliaHideStyleAtBoundary","domBoundary","hasAureliaHideStyle","injectStyles","Show","Hide","SCRIPT_REGEX","needsToWarn","HTMLSanitizer","sanitize","SanitizeHTMLValueConverter","sanitizer","untrustedMarkup","Replaceable","Focus","needsApply","_apply","cssUrlMatcher","CSSResource","_scoped","_global","_alreadyGloballyInjected","Target","fixupCSSUrls","CSSViewEngineHooks","scopedCSS","AttrBindingBehavior","modeBindingBehavior","originalMode","OneTimeBindingBehavior","OneWayBindingBehavior","ToViewBindingBehavior","FromViewBindingBehavior","TwoWayBindingBehavior","throttleState","elapsed","timeoutId","throttledMethod","ThrottleBindingBehavior","methodToThrottle","originalName","debounceCallSource","debounceState","debouncedMethod","debounceCall","callContextToDebounce","_oldValue","DebounceBindingBehavior","isCallSource","methodToDebounce","debouncer","handleSelfEvent","selfEventCallSource","SelfBindingBehavior","BindingSignaler","signal","SignalBindingBehavior","bindingSignaler","signalName","name_2","eventNamesRequired","notApplicableMessage","UpdateTriggerBindingBehavior","originalHandler","bindableNames","useShadowDOMmode","DynamicElement","_createDynamicElement","configure$1","styleResourcePlugin","ViewCSS","_createCSSResource","EmptyLayoutViewModel","RouterView","$viewPortInstruction","RouterViewLocator","_notify","layoutInstruction","layoutViewModel","layoutView","layoutModel","viewPortComponentBehaviorInstruction","viewPortController","previousView","work","owningView_or_layoutView","transactionOwnerShipToken","layoutController","newView","notifier","findNearest","routerView","EmptyClass","TemplatingRouteLoader","resolveViewModel","DynamicClass","createDynamicClass","createChildContainer","_navInstruction","RouteHref","processChange","attributeChanged","alertNotificationsLoading","kpisLoading","screenViewUtility","BillingDashboard","onClickRateCalculator","billingService","simpleDateFormat","currentPage","listDisabled","searchInput","CreditMemoListView","_getResults","routeToView","currentSearchResult","creditMemos","searchInputChanged","disableList","enableList","clickPrevious","clickNext","exportCreditMemos","csvData","convertToCsv","$exportLink","creditMemo","CreditMemoView","creditMemoId","requestResponses","VIEW_TYPES","InvoiceListView","_getOpenFilters","isPaid","_getPaidFilters","invoices","PAID","OPEN","exportInvoices","InvoiceView","invoiceId","_setupFields","$inboundFileLink","$outboundFileLink","$storageFileLink","$returnsFileLink","$addrCorrFileLink","countryService","itemService","carrierService","coldChainService","shippingAddressService","formDisabled","rateCalculatorRequest","coldChainZip","countries","rateCalculatorResponses","currentItemLineId","RateCalculator","promiseResponse","addItem","checkRates","$countryDropdown","$stateDropdown","$zoneDropdown","billingZones","$carrierDropdown","$shipMethodDropdown","$shippingAddressDropdown","addresses","selectedShippingAddress","unitedStates","zones","zoneIds","selectedShippingAddressChanged","zipChanged","_setZone","$showColdChainInfo","_setColdChainCompaitible","$coldChainView","$coldChainLoading","searchResults","coldChainZipRecord","carrierChanged","countryChanged","stateChanged","zoneChanged","lineId","RateCalculatorItemView","alert","disableForm","enableForm","$itemDropdown","requestItem","ChangeOrderAddress","_setupForms","currentCountry","ChangeOrderEmailView","ChangeOrderGiftMessageView","currentOrderLineNumber","ChangeOrderAddItemsView","itemRecord","currentItemReference","$itemForm","addNewOrderItem","currentItemQuantity","$addItemModal","clickAddNewOrderItem","removeOrderItem","orderLineToRemove","orderLine","changeOrderService","dateTimeConverter","ChangeOrderListView","filteredRecords","export","recordsCSV","onClickOpenOrder","viewRecord","ChangeOrderShipDateView","$futureShipDateCalendar","ChangeOrderShipInstructionsView","ChangeOrderShipMethodView","ChangeOrderStandardTaskView","orderService","changeTypes","pendingChangeOrder","isCreating","ChangeOrderView","$orderDropdown","orderRecord","_disableForm","$changesDropdown","orderChangeOrders","_getPendingChangeOrder","_enableForm","newChangeType","newChangeTypeId","changeTypeId","changeType","changeOrders","_showCreateForm","_showViewForm","$viewForm","$createForm","_getValidationErrors","changeTypeAllowed","singleChangeItem","getSingleChangeItem","singleChargeRequest","createChangeOrder","viewOrder","ColdChainDashboard","COLD_CHAIN_COMP","COLD_CHAIN_ORDERS","ColdChainZipsView","coldChainZips","exportZips","coldChainZipsCSV","convertColdChainZipsToCsv","Dashboard","onClickShippingStatus","___CSS_LOADER_URL___0___","___CSS_LOADER_URL___1___","___CSS_LOADER_URL___2___","___CSS_LOADER_URL___3___","___CSS_LOADER_URL___4___","___CSS_LOADER_URL___5___","___CSS_LOADER_URL___6___","___CSS_LOADER_URL___7___","___CSS_LOADER_URL___8___","___CSS_LOADER_URL___9___","___CSS_LOADER_URL___10___","___CSS_LOADER_URL___11___","___CSS_LOADER_URL___12___","___CSS_LOADER_URL___13___","___CSS_LOADER_URL___14___","___CSS_LOADER_URL___15___","___CSS_LOADER_URL___16___","___CSS_LOADER_URL___17___","___CSS_LOADER_URL___18___","ActivityDetailLineView","includeAllItems","itemLines","currentLineNumber","ActivityDetailReport","itemRec","addNewItemLine","$dateFromCalendar","$dateToCalendar","removeItemLine","lineToRemove","getReport","activityDetailRequest","activityDetailResponse","ItemView","_getLineCount","totalCommittedOrders","totalBackorderedOrders","orderLines","orderIds","clickExportCommitted","_getOrdersByLines","orderLinesCSV","convertOrderLinesToCsv","$exportCommittedLink","clickExportBackordered","$exportBackorderedLink","orderRefs","orderRef","orderData","shippingMethodName","ItemsDashboard","ALL","BACKORDERED","COMMITTED","ON_HAND","filteredItems","itemListDisabled","ListItemsView","_getItems","_getFilters","_getBackorderedFilters","_getOnHandFilters","_getCommittedFilters","disableItemList","enableItemList","exportItems","itemsCSV","convertItemsToCsv","wineryTransferService","WineryTransferListView","wineryTransfers","exportTransfers","WineryTransferView","wineryTransferId","aureliaConfig","isLoggedIn","setupAWS","preActivateStep","routeObj","screenViewUtil","EnterCodeView","resetPassword","clickGoBack","formType","FORGOT_PASSWORD_SEND_CODE","LOGIN","SendCodeView","emailCode","FORGOT_PASSWORD_ENTER_CODE","LoginFormView","clickForgotPassword","loggedIn","loginResponse","isSuccessful","needNewPassword","LOGIN_FORM_TYPE","LoginView","NewPasswordView","staging","live","BottomNavBar","onClickUserIcon","onClickHomeIcon","notificationService","alertNotifications","SideNavBar","$sideBar","hasActiveNotifications","$notificationIcon","onClickHome","onClickNotifications","onClickNewOrder","onClickImportOrders","onClickViewOrders","onClickOrderBatches","onClickChangeOrders","onClickRates","onClickItems","onClickReports","onClickColdChain","onClickReturns","onClickAddressBook","onClickLogout","TopNavBar","$wineryDropdown","showInputBox","onClickSearchIcon","VIEW_TYPE","currentAlertNotifications","readAlertNotifications","selectAll","AlertNotificationsBookView","viewType","CURRENT_ALERTS","allNotifications","currentItemClicked","readItemClicked","READ_ALERTS","$readItem","checkboxClicked","isCurrentItems","markAsRead","markAsUnRead","readContact","AlertNotificationsCurrentView","AlertNotificationsReadView","dataRow","matchedColumn","integratedShipMethods","dataAtRow","orderRow","OrderError","isItemSku","isShipMethod","intShipMethod","errorsAtRow","allErrors","orderError","importOrdersService","creatingOrders","currentOrderRow","currentOrderErrorRow","ImportOrdersView","promiseRecords","setupRecords","_setShipMethodCSV","_setItemCSV","$setupDropdown","setupRecord","$sampleTemplateLink","defaultSetupRecord","csvObj","$shippingMethodsLink","$itemsLink","csvFile","csvFileObject","uniqueOrderLines","orderErrors","uniqueMessages","numberOfErrors","MatchedColumn","createOrders","batch","batchId","csvFileChanged","getFileCSVData","csvFileDataChanged","parseResponse","trimHeaders","chooseFile","$hiddenFileInput","fileChosen","fileList","clickPreviousError","clickNextError","numberOfOrderErrors","importOrderService","OrderBatchListView","orderBatch","OrderBatchView","$csvFileLink","OrderCreateItemView","bindingEngine","orderFormDisabled","newAddresslabelName","isDuplicateOrder","duplicateOrder","allAddresses","OrderCreateView","changedZipcode","disableOrderForm","enableOrderForm","$createOrderForm","createOrder","scrollToBottom","$addressForm","saveNewAddress","$useBusinessAddress","$shelterInPlace","stateMatch","countryMatch","orderNumberChanged","foundRecords","showNewAddressModal","$addAddressModal","updateAddress","newShippingAddress","clickSaveNewAddress","clickSaveOrder","OrderListDashboard","onClickAllOrders","onClickOpenOrders","onClickWeatherHolds","WEATHER_HOLDS","onClickBackorders","BACKORDERS","booleanFormat","orderListDisabled","OrderListView","_getOrders","_getWhFilters","_getColdChainCompFilters","_getColdChainFilters","allFilters","disableAddressList","enableAddressList","exportOrders","ordersToExport","ordersCSV","convertOrdersToCsv","orderToExport","carrierName","newOrder","currentOrder","orderid","OrderView","viewChangeOrder","clickChangeOrder","returnService","ListReturnsView","_getRecords","PENDING","_getPendingFilters","exportRecords","convertRecordsToCsv","ReturnView","returnId","clickHandleReturn","ReturnsDashboard","errorMessageUtility","errorHeaderMessage","ErrorMessageView","errorheader","$errorModal","screenSizeUtil","ScreenSizeView","DisableView","StandardView","addressListDisabled","ShippingAddressListView","_getAddresses","filteredAddresses","exportAddresses","addressCSV","convertAddressesToCsv","editAddress","addressid","editParam","isEditing","isViewing","ShippingAddressView","setupViewFields","_setAsEdit","_setAsView","_setAsCreate","$editAddressForm","$viewAddressForm","cancelUpdate","cancelCreate","createAddress","ShippingDashboard","IN_TRANSIT","EXCEPTIONS","RETURNS","DELIVERED","ShippingListViews","_getInTransitFilters","_getExceptionsFilters","_getReturnsFilters","_getDeliveredFilters","checkValidSession","SECONDS_INTERVAL_TO_CHECK","UserSessionAlertView","$alertmodal","minutesRemaining","MINUTES_REMAINING_TO_CHECK"],"mappings":"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","file":"vendor.962263856e448c4fc4bb.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 587);\n","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport instanceOf from '../jsutils/instanceOf';\nimport invariant from '../jsutils/invariant';\nimport isInvalid from '../jsutils/isInvalid';\n\nimport { Kind } from '../language/kinds';\nimport { valueFromASTUntyped } from '../utilities/valueFromASTUntyped';\n\nimport { GraphQLList, GraphQLNonNull } from './wrappers';\n\n// Predicates & Assertions\n\n/**\n * These are all of the possible kinds of types.\n */\n\n\nexport function isType(type) {\n  return isScalarType(type) || isObjectType(type) || isInterfaceType(type) || isUnionType(type) || isEnumType(type) || isInputObjectType(type) || isListType(type) || isNonNullType(type);\n}\n\nexport function assertType(type) {\n  !isType(type) ? invariant(0, 'Expected ' + String(type) + ' to be a GraphQL type.') : void 0;\n  return type;\n}\n\n/**\n * There are predicates for each kind of GraphQL type.\n */\n\n// eslint-disable-next-line no-redeclare\nexport function isScalarType(type) {\n  return instanceOf(type, GraphQLScalarType);\n}\n\nexport function assertScalarType(type) {\n  !isScalarType(type) ? invariant(0, 'Expected ' + String(type) + ' to be a GraphQL Scalar type.') : void 0;\n  return type;\n}\n\n// eslint-disable-next-line no-redeclare\nexport function isObjectType(type) {\n  return instanceOf(type, GraphQLObjectType);\n}\n\nexport function assertObjectType(type) {\n  !isObjectType(type) ? invariant(0, 'Expected ' + String(type) + ' to be a GraphQL Object type.') : void 0;\n  return type;\n}\n\n// eslint-disable-next-line no-redeclare\nexport function isInterfaceType(type) {\n  return instanceOf(type, GraphQLInterfaceType);\n}\n\nexport function assertInterfaceType(type) {\n  !isInterfaceType(type) ? invariant(0, 'Expected ' + String(type) + ' to be a GraphQL Interface type.') : void 0;\n  return type;\n}\n\n// eslint-disable-next-line no-redeclare\nexport function isUnionType(type) {\n  return instanceOf(type, GraphQLUnionType);\n}\n\nexport function assertUnionType(type) {\n  !isUnionType(type) ? invariant(0, 'Expected ' + String(type) + ' to be a GraphQL Union type.') : void 0;\n  return type;\n}\n\n// eslint-disable-next-line no-redeclare\nexport function isEnumType(type) {\n  return instanceOf(type, GraphQLEnumType);\n}\n\nexport function assertEnumType(type) {\n  !isEnumType(type) ? invariant(0, 'Expected ' + String(type) + ' to be a GraphQL Enum type.') : void 0;\n  return type;\n}\n\n// eslint-disable-next-line no-redeclare\nexport function isInputObjectType(type) {\n  return instanceOf(type, GraphQLInputObjectType);\n}\n\nexport function assertInputObjectType(type) {\n  !isInputObjectType(type) ? invariant(0, 'Expected ' + String(type) + ' to be a GraphQL Input Object type.') : void 0;\n  return type;\n}\n\n// eslint-disable-next-line no-redeclare\nexport function isListType(type) {\n  return instanceOf(type, GraphQLList);\n}\n\nexport function assertListType(type) {\n  !isListType(type) ? invariant(0, 'Expected ' + String(type) + ' to be a GraphQL List type.') : void 0;\n  return type;\n}\n\n// eslint-disable-next-line no-redeclare\nexport function isNonNullType(type) {\n  return instanceOf(type, GraphQLNonNull);\n}\n\nexport function assertNonNullType(type) {\n  !isNonNullType(type) ? invariant(0, 'Expected ' + String(type) + ' to be a GraphQL Non-Null type.') : void 0;\n  return type;\n}\n\n/**\n * These types may be used as input types for arguments and directives.\n */\n\n\nexport function isInputType(type) {\n  return isScalarType(type) || isEnumType(type) || isInputObjectType(type) || isWrappingType(type) && isInputType(type.ofType);\n}\n\nexport function assertInputType(type) {\n  !isInputType(type) ? invariant(0, 'Expected ' + String(type) + ' to be a GraphQL input type.') : void 0;\n  return type;\n}\n\n/**\n * These types may be used as output types as the result of fields.\n */\n\n\nexport function isOutputType(type) {\n  return isScalarType(type) || isObjectType(type) || isInterfaceType(type) || isUnionType(type) || isEnumType(type) || isWrappingType(type) && isOutputType(type.ofType);\n}\n\nexport function assertOutputType(type) {\n  !isOutputType(type) ? invariant(0, 'Expected ' + String(type) + ' to be a GraphQL output type.') : void 0;\n  return type;\n}\n\n/**\n * These types may describe types which may be leaf values.\n */\n\n\nexport function isLeafType(type) {\n  return isScalarType(type) || isEnumType(type);\n}\n\nexport function assertLeafType(type) {\n  !isLeafType(type) ? invariant(0, 'Expected ' + String(type) + ' to be a GraphQL leaf type.') : void 0;\n  return type;\n}\n\n/**\n * These types may describe the parent context of a selection set.\n */\n\n\nexport function isCompositeType(type) {\n  return isObjectType(type) || isInterfaceType(type) || isUnionType(type);\n}\n\nexport function assertCompositeType(type) {\n  !isCompositeType(type) ? invariant(0, 'Expected ' + String(type) + ' to be a GraphQL composite type.') : void 0;\n  return type;\n}\n\n/**\n * These types may describe the parent context of a selection set.\n */\n\n\nexport function isAbstractType(type) {\n  return isInterfaceType(type) || isUnionType(type);\n}\n\nexport function assertAbstractType(type) {\n  !isAbstractType(type) ? invariant(0, 'Expected ' + String(type) + ' to be a GraphQL abstract type.') : void 0;\n  return type;\n}\n\n/**\n * These types wrap and modify other types\n */\n\nexport function isWrappingType(type) {\n  return isListType(type) || isNonNullType(type);\n}\n\nexport function assertWrappingType(type) {\n  !isWrappingType(type) ? invariant(0, 'Expected ' + String(type) + ' to be a GraphQL wrapping type.') : void 0;\n  return type;\n}\n\n/**\n * These types can all accept null as a value.\n */\n\n\nexport function isNullableType(type) {\n  return isType(type) && !isNonNullType(type);\n}\n\nexport function assertNullableType(type) {\n  !isNullableType(type) ? invariant(0, 'Expected ' + String(type) + ' to be a GraphQL nullable type.') : void 0;\n  return type;\n}\n\n/* eslint-disable no-redeclare */\n\nexport function getNullableType(type) {\n  /* eslint-enable no-redeclare */\n  if (type) {\n    return isNonNullType(type) ? type.ofType : type;\n  }\n}\n\n/**\n * These named types do not include modifiers like List or NonNull.\n */\n\n\nexport function isNamedType(type) {\n  return isScalarType(type) || isObjectType(type) || isInterfaceType(type) || isUnionType(type) || isEnumType(type) || isInputObjectType(type);\n}\n\nexport function assertNamedType(type) {\n  !isNamedType(type) ? invariant(0, 'Expected ' + String(type) + ' to be a GraphQL named type.') : void 0;\n  return type;\n}\n\n/* eslint-disable no-redeclare */\n\nexport function getNamedType(type) {\n  /* eslint-enable no-redeclare */\n  if (type) {\n    var unwrappedType = type;\n    while (isWrappingType(unwrappedType)) {\n      unwrappedType = unwrappedType.ofType;\n    }\n    return unwrappedType;\n  }\n}\n\n/**\n * Used while defining GraphQL types to allow for circular references in\n * otherwise immutable type definitions.\n */\n\n\nfunction resolveThunk(thunk) {\n  return typeof thunk === 'function' ? thunk() : thunk;\n}\n\n/**\n * Scalar Type Definition\n *\n * The leaf values of any request and input values to arguments are\n * Scalars (or Enums) and are defined with a name and a series of functions\n * used to parse input from ast or variables and to ensure validity.\n *\n * If a type's serialize function does not return a value (i.e. it returns\n * `undefined`) then an error will be raised and a `null` value will be returned\n * in the response. If the serialize function returns `null`, then no error will\n * be included in the response.\n *\n * Example:\n *\n *     const OddType = new GraphQLScalarType({\n *       name: 'Odd',\n *       serialize(value) {\n *         if (value % 2 === 1) {\n *           return value;\n *         }\n *       }\n *     });\n *\n */\nexport var GraphQLScalarType = function () {\n  function GraphQLScalarType(config) {\n    _classCallCheck(this, GraphQLScalarType);\n\n    this.name = config.name;\n    this.description = config.description;\n    this.astNode = config.astNode;\n    this._scalarConfig = config;\n    !(typeof config.name === 'string') ? invariant(0, 'Must provide name.') : void 0;\n    !(typeof config.serialize === 'function') ? invariant(0, this.name + ' must provide \"serialize\" function. If this custom Scalar ' + 'is also used as an input type, ensure \"parseValue\" and \"parseLiteral\" ' + 'functions are also provided.') : void 0;\n    if (config.parseValue || config.parseLiteral) {\n      !(typeof config.parseValue === 'function' && typeof config.parseLiteral === 'function') ? invariant(0, this.name + ' must provide both \"parseValue\" and \"parseLiteral\" ' + 'functions.') : void 0;\n    }\n  }\n\n  // Serializes an internal value to include in a response.\n\n\n  GraphQLScalarType.prototype.serialize = function serialize(value) {\n    var serializer = this._scalarConfig.serialize;\n    return serializer(value);\n  };\n\n  // Parses an externally provided value to use as an input.\n\n\n  GraphQLScalarType.prototype.parseValue = function parseValue(value) {\n    var parser = this._scalarConfig.parseValue;\n    if (isInvalid(value)) {\n      return undefined;\n    }\n    return parser ? parser(value) : value;\n  };\n\n  // Parses an externally provided literal value to use as an input.\n\n\n  GraphQLScalarType.prototype.parseLiteral = function parseLiteral(valueNode, variables) {\n    var parser = this._scalarConfig.parseLiteral;\n    return parser ? parser(valueNode, variables) : valueFromASTUntyped(valueNode, variables);\n  };\n\n  GraphQLScalarType.prototype.toString = function toString() {\n    return this.name;\n  };\n\n  return GraphQLScalarType;\n}();\n\n// Also provide toJSON and inspect aliases for toString.\nGraphQLScalarType.prototype.toJSON = GraphQLScalarType.prototype.inspect = GraphQLScalarType.prototype.toString;\n\n/**\n * Object Type Definition\n *\n * Almost all of the GraphQL types you define will be object types. Object types\n * have a name, but most importantly describe their fields.\n *\n * Example:\n *\n *     const AddressType = new GraphQLObjectType({\n *       name: 'Address',\n *       fields: {\n *         street: { type: GraphQLString },\n *         number: { type: GraphQLInt },\n *         formatted: {\n *           type: GraphQLString,\n *           resolve(obj) {\n *             return obj.number + ' ' + obj.street\n *           }\n *         }\n *       }\n *     });\n *\n * When two types need to refer to each other, or a type needs to refer to\n * itself in a field, you can use a function expression (aka a closure or a\n * thunk) to supply the fields lazily.\n *\n * Example:\n *\n *     const PersonType = new GraphQLObjectType({\n *       name: 'Person',\n *       fields: () => ({\n *         name: { type: GraphQLString },\n *         bestFriend: { type: PersonType },\n *       })\n *     });\n *\n */\nexport var GraphQLObjectType = function () {\n  function GraphQLObjectType(config) {\n    _classCallCheck(this, GraphQLObjectType);\n\n    this.name = config.name;\n    this.description = config.description;\n    this.astNode = config.astNode;\n    this.extensionASTNodes = config.extensionASTNodes;\n    this.isTypeOf = config.isTypeOf;\n    this._typeConfig = config;\n    !(typeof config.name === 'string') ? invariant(0, 'Must provide name.') : void 0;\n    if (config.isTypeOf) {\n      !(typeof config.isTypeOf === 'function') ? invariant(0, this.name + ' must provide \"isTypeOf\" as a function.') : void 0;\n    }\n  }\n\n  GraphQLObjectType.prototype.getFields = function getFields() {\n    return this._fields || (this._fields = defineFieldMap(this, this._typeConfig.fields));\n  };\n\n  GraphQLObjectType.prototype.getInterfaces = function getInterfaces() {\n    return this._interfaces || (this._interfaces = defineInterfaces(this, this._typeConfig.interfaces));\n  };\n\n  GraphQLObjectType.prototype.toString = function toString() {\n    return this.name;\n  };\n\n  return GraphQLObjectType;\n}();\n\n// Also provide toJSON and inspect aliases for toString.\nGraphQLObjectType.prototype.toJSON = GraphQLObjectType.prototype.inspect = GraphQLObjectType.prototype.toString;\n\nfunction defineInterfaces(type, interfacesThunk) {\n  var interfaces = resolveThunk(interfacesThunk) || [];\n  !Array.isArray(interfaces) ? invariant(0, type.name + ' interfaces must be an Array or a function which returns ' + 'an Array.') : void 0;\n  return interfaces;\n}\n\nfunction defineFieldMap(type, fieldsThunk) {\n  var fieldMap = resolveThunk(fieldsThunk) || {};\n  !isPlainObj(fieldMap) ? invariant(0, type.name + ' fields must be an object with field names as keys or a ' + 'function which returns such an object.') : void 0;\n\n  var resultFieldMap = Object.create(null);\n  Object.keys(fieldMap).forEach(function (fieldName) {\n    var fieldConfig = fieldMap[fieldName];\n    !isPlainObj(fieldConfig) ? invariant(0, type.name + '.' + fieldName + ' field config must be an object') : void 0;\n    !!fieldConfig.hasOwnProperty('isDeprecated') ? invariant(0, type.name + '.' + fieldName + ' should provide \"deprecationReason\" instead ' + 'of \"isDeprecated\".') : void 0;\n    var field = _extends({}, fieldConfig, {\n      isDeprecated: Boolean(fieldConfig.deprecationReason),\n      name: fieldName\n    });\n    !isValidResolver(field.resolve) ? invariant(0, type.name + '.' + fieldName + ' field resolver must be a function if ' + ('provided, but got: ' + String(field.resolve) + '.')) : void 0;\n    var argsConfig = fieldConfig.args;\n    if (!argsConfig) {\n      field.args = [];\n    } else {\n      !isPlainObj(argsConfig) ? invariant(0, type.name + '.' + fieldName + ' args must be an object with argument ' + 'names as keys.') : void 0;\n      field.args = Object.keys(argsConfig).map(function (argName) {\n        var arg = argsConfig[argName];\n        return {\n          name: argName,\n          description: arg.description === undefined ? null : arg.description,\n          type: arg.type,\n          defaultValue: arg.defaultValue,\n          astNode: arg.astNode\n        };\n      });\n    }\n    resultFieldMap[fieldName] = field;\n  });\n  return resultFieldMap;\n}\n\nfunction isPlainObj(obj) {\n  return obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && !Array.isArray(obj);\n}\n\n// If a resolver is defined, it must be a function.\nfunction isValidResolver(resolver) {\n  return resolver == null || typeof resolver === 'function';\n}\n\n/**\n * Interface Type Definition\n *\n * When a field can return one of a heterogeneous set of types, a Interface type\n * is used to describe what types are possible, what fields are in common across\n * all types, as well as a function to determine which type is actually used\n * when the field is resolved.\n *\n * Example:\n *\n *     const EntityType = new GraphQLInterfaceType({\n *       name: 'Entity',\n *       fields: {\n *         name: { type: GraphQLString }\n *       }\n *     });\n *\n */\nexport var GraphQLInterfaceType = function () {\n  function GraphQLInterfaceType(config) {\n    _classCallCheck(this, GraphQLInterfaceType);\n\n    this.name = config.name;\n    this.description = config.description;\n    this.astNode = config.astNode;\n    this.extensionASTNodes = config.extensionASTNodes;\n    this.resolveType = config.resolveType;\n    this._typeConfig = config;\n    !(typeof config.name === 'string') ? invariant(0, 'Must provide name.') : void 0;\n    if (config.resolveType) {\n      !(typeof config.resolveType === 'function') ? invariant(0, this.name + ' must provide \"resolveType\" as a function.') : void 0;\n    }\n  }\n\n  GraphQLInterfaceType.prototype.getFields = function getFields() {\n    return this._fields || (this._fields = defineFieldMap(this, this._typeConfig.fields));\n  };\n\n  GraphQLInterfaceType.prototype.toString = function toString() {\n    return this.name;\n  };\n\n  return GraphQLInterfaceType;\n}();\n\n// Also provide toJSON and inspect aliases for toString.\nGraphQLInterfaceType.prototype.toJSON = GraphQLInterfaceType.prototype.inspect = GraphQLInterfaceType.prototype.toString;\n\n/**\n * Union Type Definition\n *\n * When a field can return one of a heterogeneous set of types, a Union type\n * is used to describe what types are possible as well as providing a function\n * to determine which type is actually used when the field is resolved.\n *\n * Example:\n *\n *     const PetType = new GraphQLUnionType({\n *       name: 'Pet',\n *       types: [ DogType, CatType ],\n *       resolveType(value) {\n *         if (value instanceof Dog) {\n *           return DogType;\n *         }\n *         if (value instanceof Cat) {\n *           return CatType;\n *         }\n *       }\n *     });\n *\n */\nexport var GraphQLUnionType = function () {\n  function GraphQLUnionType(config) {\n    _classCallCheck(this, GraphQLUnionType);\n\n    this.name = config.name;\n    this.description = config.description;\n    this.astNode = config.astNode;\n    this.resolveType = config.resolveType;\n    this._typeConfig = config;\n    !(typeof config.name === 'string') ? invariant(0, 'Must provide name.') : void 0;\n    if (config.resolveType) {\n      !(typeof config.resolveType === 'function') ? invariant(0, this.name + ' must provide \"resolveType\" as a function.') : void 0;\n    }\n  }\n\n  GraphQLUnionType.prototype.getTypes = function getTypes() {\n    return this._types || (this._types = defineTypes(this, this._typeConfig.types));\n  };\n\n  GraphQLUnionType.prototype.toString = function toString() {\n    return this.name;\n  };\n\n  return GraphQLUnionType;\n}();\n\n// Also provide toJSON and inspect aliases for toString.\nGraphQLUnionType.prototype.toJSON = GraphQLUnionType.prototype.inspect = GraphQLUnionType.prototype.toString;\n\nfunction defineTypes(unionType, typesThunk) {\n  var types = resolveThunk(typesThunk) || [];\n  !Array.isArray(types) ? invariant(0, 'Must provide Array of types or a function which returns ' + ('such an array for Union ' + unionType.name + '.')) : void 0;\n  return types;\n}\n\n/**\n * Enum Type Definition\n *\n * Some leaf values of requests and input values are Enums. GraphQL serializes\n * Enum values as strings, however internally Enums can be represented by any\n * kind of type, often integers.\n *\n * Example:\n *\n *     const RGBType = new GraphQLEnumType({\n *       name: 'RGB',\n *       values: {\n *         RED: { value: 0 },\n *         GREEN: { value: 1 },\n *         BLUE: { value: 2 }\n *       }\n *     });\n *\n * Note: If a value is not provided in a definition, the name of the enum value\n * will be used as its internal value.\n */\nexport var GraphQLEnumType /* <T> */ = function () {\n  function GraphQLEnumType(config /* <T> */) {\n    _classCallCheck(this, GraphQLEnumType);\n\n    this.name = config.name;\n    this.description = config.description;\n    this.astNode = config.astNode;\n    this._enumConfig = config;\n    !(typeof config.name === 'string') ? invariant(0, 'Must provide name.') : void 0;\n  }\n\n  GraphQLEnumType.prototype.getValues = function getValues() {\n    return this._values || (this._values = defineEnumValues(this, this._enumConfig.values));\n  };\n\n  GraphQLEnumType.prototype.getValue = function getValue(name) {\n    return this._getNameLookup()[name];\n  };\n\n  GraphQLEnumType.prototype.serialize = function serialize(value /* T */) {\n    var enumValue = this._getValueLookup().get(value);\n    if (enumValue) {\n      return enumValue.name;\n    }\n  };\n\n  GraphQLEnumType.prototype.parseValue = function parseValue(value) /* T */{\n    if (typeof value === 'string') {\n      var enumValue = this._getNameLookup()[value];\n      if (enumValue) {\n        return enumValue.value;\n      }\n    }\n  };\n\n  GraphQLEnumType.prototype.parseLiteral = function parseLiteral(valueNode, _variables) /* T */{\n    // Note: variables will be resolved to a value before calling this function.\n    if (valueNode.kind === Kind.ENUM) {\n      var enumValue = this._getNameLookup()[valueNode.value];\n      if (enumValue) {\n        return enumValue.value;\n      }\n    }\n  };\n\n  GraphQLEnumType.prototype._getValueLookup = function _getValueLookup() {\n    if (!this._valueLookup) {\n      var lookup = new Map();\n      this.getValues().forEach(function (value) {\n        lookup.set(value.value, value);\n      });\n      this._valueLookup = lookup;\n    }\n    return this._valueLookup;\n  };\n\n  GraphQLEnumType.prototype._getNameLookup = function _getNameLookup() {\n    if (!this._nameLookup) {\n      var lookup = Object.create(null);\n      this.getValues().forEach(function (value) {\n        lookup[value.name] = value;\n      });\n      this._nameLookup = lookup;\n    }\n    return this._nameLookup;\n  };\n\n  GraphQLEnumType.prototype.toString = function toString() {\n    return this.name;\n  };\n\n  return GraphQLEnumType;\n}();\n\n// Also provide toJSON and inspect aliases for toString.\nGraphQLEnumType.prototype.toJSON = GraphQLEnumType.prototype.inspect = GraphQLEnumType.prototype.toString;\n\nfunction defineEnumValues(type, valueMap /* <T> */\n) {\n  !isPlainObj(valueMap) ? invariant(0, type.name + ' values must be an object with value names as keys.') : void 0;\n  return Object.keys(valueMap).map(function (valueName) {\n    var value = valueMap[valueName];\n    !isPlainObj(value) ? invariant(0, type.name + '.' + valueName + ' must refer to an object with a \"value\" key ' + ('representing an internal value but got: ' + String(value) + '.')) : void 0;\n    !!value.hasOwnProperty('isDeprecated') ? invariant(0, type.name + '.' + valueName + ' should provide \"deprecationReason\" instead ' + 'of \"isDeprecated\".') : void 0;\n    return {\n      name: valueName,\n      description: value.description,\n      isDeprecated: Boolean(value.deprecationReason),\n      deprecationReason: value.deprecationReason,\n      astNode: value.astNode,\n      value: value.hasOwnProperty('value') ? value.value : valueName\n    };\n  });\n} /* <T> */\n\n\n/**\n * Input Object Type Definition\n *\n * An input object defines a structured collection of fields which may be\n * supplied to a field argument.\n *\n * Using `NonNull` will ensure that a value must be provided by the query\n *\n * Example:\n *\n *     const GeoPoint = new GraphQLInputObjectType({\n *       name: 'GeoPoint',\n *       fields: {\n *         lat: { type: GraphQLNonNull(GraphQLFloat) },\n *         lon: { type: GraphQLNonNull(GraphQLFloat) },\n *         alt: { type: GraphQLFloat, defaultValue: 0 },\n *       }\n *     });\n *\n */\nexport var GraphQLInputObjectType = function () {\n  function GraphQLInputObjectType(config) {\n    _classCallCheck(this, GraphQLInputObjectType);\n\n    this.name = config.name;\n    this.description = config.description;\n    this.astNode = config.astNode;\n    this._typeConfig = config;\n    !(typeof config.name === 'string') ? invariant(0, 'Must provide name.') : void 0;\n  }\n\n  GraphQLInputObjectType.prototype.getFields = function getFields() {\n    return this._fields || (this._fields = this._defineFieldMap());\n  };\n\n  GraphQLInputObjectType.prototype._defineFieldMap = function _defineFieldMap() {\n    var _this = this;\n\n    var fieldMap = resolveThunk(this._typeConfig.fields) || {};\n    !isPlainObj(fieldMap) ? invariant(0, this.name + ' fields must be an object with field names as keys or a ' + 'function which returns such an object.') : void 0;\n    var resultFieldMap = Object.create(null);\n    Object.keys(fieldMap).forEach(function (fieldName) {\n      var field = _extends({}, fieldMap[fieldName], {\n        name: fieldName\n      });\n      !!field.hasOwnProperty('resolve') ? invariant(0, _this.name + '.' + fieldName + ' field type has a resolve property, but ' + 'Input Types cannot define resolvers.') : void 0;\n      resultFieldMap[fieldName] = field;\n    });\n    return resultFieldMap;\n  };\n\n  GraphQLInputObjectType.prototype.toString = function toString() {\n    return this.name;\n  };\n\n  return GraphQLInputObjectType;\n}();\n\n// Also provide toJSON and inspect aliases for toString.\nGraphQLInputObjectType.prototype.toJSON = GraphQLInputObjectType.prototype.toString;\nGraphQLInputObjectType.prototype.inspect = GraphQLInputObjectType.prototype.toString;","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\n\nimport * as TheLogManager from 'aurelia-logging';\nimport { Container } from 'aurelia-dependency-injection';\nimport { Loader } from 'aurelia-loader';\nimport { BindingLanguage, ViewSlot, ViewResources, TemplatingEngine, CompositionTransaction, ViewEngine, HtmlBehaviorResource } from 'aurelia-templating';\nimport { DOM, PLATFORM } from 'aurelia-pal';\nimport { relativeToFile, join } from 'aurelia-path';\n\nfunction preventActionlessFormSubmit() {\n  DOM.addEventListener('submit', function (evt) {\n    var target = evt.target;\n    var action = target.action;\n\n    if (target.tagName.toLowerCase() === 'form' && !action) {\n      evt.preventDefault();\n    }\n  });\n}\n\nexport var Aurelia = function () {\n  function Aurelia(loader, container, resources) {\n    \n\n    this.loader = loader || new PLATFORM.Loader();\n    this.container = container || new Container().makeGlobal();\n    this.resources = resources || new ViewResources();\n    this.use = new FrameworkConfiguration(this);\n    this.logger = TheLogManager.getLogger('aurelia');\n    this.hostConfigured = false;\n    this.host = null;\n\n    this.use.instance(Aurelia, this);\n    this.use.instance(Loader, this.loader);\n    this.use.instance(ViewResources, this.resources);\n  }\n\n  Aurelia.prototype.start = function start() {\n    var _this = this;\n\n    if (this._started) {\n      return this._started;\n    }\n\n    this.logger.info('Aurelia Starting');\n    return this._started = this.use.apply().then(function () {\n      preventActionlessFormSubmit();\n\n      if (!_this.container.hasResolver(BindingLanguage)) {\n        var message = 'You must configure Aurelia with a BindingLanguage implementation.';\n        _this.logger.error(message);\n        throw new Error(message);\n      }\n\n      _this.logger.info('Aurelia Started');\n      var evt = DOM.createCustomEvent('aurelia-started', { bubbles: true, cancelable: true });\n      DOM.dispatchEvent(evt);\n      return _this;\n    });\n  };\n\n  Aurelia.prototype.enhance = function enhance() {\n    var _this2 = this;\n\n    var bindingContext = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var applicationHost = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n    this._configureHost(applicationHost || DOM.querySelectorAll('body')[0]);\n\n    return new Promise(function (resolve) {\n      var engine = _this2.container.get(TemplatingEngine);\n      _this2.root = engine.enhance({ container: _this2.container, element: _this2.host, resources: _this2.resources, bindingContext: bindingContext });\n      _this2.root.attached();\n      _this2._onAureliaComposed();\n      resolve(_this2);\n    });\n  };\n\n  Aurelia.prototype.setRoot = function setRoot() {\n    var _this3 = this;\n\n    var root = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n    var applicationHost = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n    var instruction = {};\n\n    if (this.root && this.root.viewModel && this.root.viewModel.router) {\n      this.root.viewModel.router.deactivate();\n      this.root.viewModel.router.reset();\n    }\n\n    this._configureHost(applicationHost);\n\n    var engine = this.container.get(TemplatingEngine);\n    var transaction = this.container.get(CompositionTransaction);\n    delete transaction.initialComposition;\n\n    if (!root) {\n      if (this.configModuleId) {\n        root = relativeToFile('./app', this.configModuleId);\n      } else {\n        root = 'app';\n      }\n    }\n\n    instruction.viewModel = root;\n    instruction.container = instruction.childContainer = this.container;\n    instruction.viewSlot = this.hostSlot;\n    instruction.host = this.host;\n\n    return engine.compose(instruction).then(function (r) {\n      _this3.root = r;\n      instruction.viewSlot.attached();\n      _this3._onAureliaComposed();\n      return _this3;\n    });\n  };\n\n  Aurelia.prototype._configureHost = function _configureHost(applicationHost) {\n    if (this.hostConfigured) {\n      return;\n    }\n    applicationHost = applicationHost || this.host;\n\n    if (!applicationHost || typeof applicationHost === 'string') {\n      this.host = DOM.getElementById(applicationHost || 'applicationHost');\n    } else {\n      this.host = applicationHost;\n    }\n\n    if (!this.host) {\n      throw new Error('No applicationHost was specified.');\n    }\n\n    this.hostConfigured = true;\n    this.host.aurelia = this;\n    this.hostSlot = new ViewSlot(this.host, true);\n    this.hostSlot.transformChildNodesIntoView();\n    this.container.registerInstance(DOM.boundary, this.host);\n  };\n\n  Aurelia.prototype._onAureliaComposed = function _onAureliaComposed() {\n    var evt = DOM.createCustomEvent('aurelia-composed', { bubbles: true, cancelable: true });\n    setTimeout(function () {\n      return DOM.dispatchEvent(evt);\n    }, 1);\n  };\n\n  return Aurelia;\n}();\n\nvar logger = TheLogManager.getLogger('aurelia');\nvar extPattern = /\\.[^/.]+$/;\n\nfunction runTasks(config, tasks) {\n  var current = void 0;\n  var next = function next() {\n    current = tasks.shift();\n    if (current) {\n      return Promise.resolve(current(config)).then(next);\n    }\n\n    return Promise.resolve();\n  };\n\n  return next();\n}\n\nfunction loadPlugin(fwConfig, loader, info) {\n  logger.debug('Loading plugin ' + info.moduleId + '.');\n  if (typeof info.moduleId === 'string') {\n    fwConfig.resourcesRelativeTo = info.resourcesRelativeTo;\n\n    var id = info.moduleId;\n\n    if (info.resourcesRelativeTo.length > 1) {\n      return loader.normalize(info.moduleId, info.resourcesRelativeTo[1]).then(function (normalizedId) {\n        return _loadPlugin(normalizedId);\n      });\n    }\n\n    return _loadPlugin(id);\n  } else if (typeof info.configure === 'function') {\n    if (fwConfig.configuredPlugins.indexOf(info.configure) !== -1) {\n      return Promise.resolve();\n    }\n    fwConfig.configuredPlugins.push(info.configure);\n\n    return Promise.resolve(info.configure.call(null, fwConfig, info.config || {}));\n  }\n  throw new Error(invalidConfigMsg(info.moduleId || info.configure, 'plugin'));\n\n  function _loadPlugin(moduleId) {\n    return loader.loadModule(moduleId).then(function (m) {\n      if ('configure' in m) {\n        if (fwConfig.configuredPlugins.indexOf(m.configure) !== -1) {\n          return Promise.resolve();\n        }\n        return Promise.resolve(m.configure(fwConfig, info.config || {})).then(function () {\n          fwConfig.configuredPlugins.push(m.configure);\n          fwConfig.resourcesRelativeTo = null;\n          logger.debug('Configured plugin ' + info.moduleId + '.');\n        });\n      }\n\n      fwConfig.resourcesRelativeTo = null;\n      logger.debug('Loaded plugin ' + info.moduleId + '.');\n    });\n  }\n}\n\nfunction loadResources(aurelia, resourcesToLoad, appResources) {\n  if (Object.keys(resourcesToLoad).length === 0) {\n    return Promise.resolve();\n  }\n  var viewEngine = aurelia.container.get(ViewEngine);\n\n  return Promise.all(Object.keys(resourcesToLoad).map(function (n) {\n    return _normalize(resourcesToLoad[n]);\n  })).then(function (loads) {\n    var names = [];\n    var importIds = [];\n\n    loads.forEach(function (l) {\n      names.push(undefined);\n      importIds.push(l.importId);\n    });\n\n    return viewEngine.importViewResources(importIds, names, appResources);\n  });\n\n  function _normalize(load) {\n    var moduleId = load.moduleId;\n    var ext = getExt(moduleId);\n\n    if (isOtherResource(moduleId)) {\n      moduleId = removeExt(moduleId);\n    }\n\n    return aurelia.loader.normalize(moduleId, load.relativeTo).then(function (normalized) {\n      return {\n        name: load.moduleId,\n        importId: isOtherResource(load.moduleId) ? addOriginalExt(normalized, ext) : normalized\n      };\n    });\n  }\n\n  function isOtherResource(name) {\n    var ext = getExt(name);\n    if (!ext) return false;\n    if (ext === '') return false;\n    if (ext === '.js' || ext === '.ts') return false;\n    return true;\n  }\n\n  function removeExt(name) {\n    return name.replace(extPattern, '');\n  }\n\n  function addOriginalExt(normalized, ext) {\n    return removeExt(normalized) + '.' + ext;\n  }\n}\n\nfunction getExt(name) {\n  var match = name.match(extPattern);\n  if (match && match.length > 0) {\n    return match[0].split('.')[1];\n  }\n}\n\nfunction loadBehaviors(config) {\n  return Promise.all(config.behaviorsToLoad.map(function (m) {\n    return m.load(config.container, m.target);\n  })).then(function () {\n    config.behaviorsToLoad = null;\n  });\n}\n\nfunction assertProcessed(plugins) {\n  if (plugins.processed) {\n    throw new Error('This config instance has already been applied. To load more plugins or global resources, create a new FrameworkConfiguration instance.');\n  }\n}\n\nfunction invalidConfigMsg(cfg, type) {\n  return 'Invalid ' + type + ' [' + cfg + '], ' + type + ' must be specified as functions or relative module IDs.';\n}\n\nvar FrameworkConfiguration = function () {\n  function FrameworkConfiguration(aurelia) {\n    var _this4 = this;\n\n    \n\n    this.aurelia = aurelia;\n    this.container = aurelia.container;\n\n    this.info = [];\n    this.processed = false;\n    this.preTasks = [];\n    this.postTasks = [];\n\n    this.behaviorsToLoad = [];\n\n    this.configuredPlugins = [];\n    this.resourcesToLoad = {};\n    this.preTask(function () {\n      return aurelia.loader.normalize('aurelia-bootstrapper').then(function (name) {\n        return _this4.bootstrapperName = name;\n      });\n    });\n    this.postTask(function () {\n      return loadResources(aurelia, _this4.resourcesToLoad, aurelia.resources);\n    });\n  }\n\n  FrameworkConfiguration.prototype.instance = function instance(type, _instance) {\n    this.container.registerInstance(type, _instance);\n    return this;\n  };\n\n  FrameworkConfiguration.prototype.singleton = function singleton(type, implementation) {\n    this.container.registerSingleton(type, implementation);\n    return this;\n  };\n\n  FrameworkConfiguration.prototype.transient = function transient(type, implementation) {\n    this.container.registerTransient(type, implementation);\n    return this;\n  };\n\n  FrameworkConfiguration.prototype.preTask = function preTask(task) {\n    assertProcessed(this);\n    this.preTasks.push(task);\n    return this;\n  };\n\n  FrameworkConfiguration.prototype.postTask = function postTask(task) {\n    assertProcessed(this);\n    this.postTasks.push(task);\n    return this;\n  };\n\n  FrameworkConfiguration.prototype.feature = function feature(plugin) {\n    var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    switch (typeof plugin === 'undefined' ? 'undefined' : _typeof(plugin)) {\n      case 'string':\n        var hasIndex = /\\/index$/i.test(plugin);\n        var _moduleId = hasIndex || getExt(plugin) ? plugin : plugin + '/index';\n        var root = hasIndex ? plugin.substr(0, plugin.length - 6) : plugin;\n        this.info.push({ moduleId: _moduleId, resourcesRelativeTo: [root, ''], config: config });\n        break;\n\n      case 'function':\n        this.info.push({ configure: plugin, config: config || {} });\n        break;\n      default:\n        throw new Error(invalidConfigMsg(plugin, 'feature'));\n    }\n    return this;\n  };\n\n  FrameworkConfiguration.prototype.globalResources = function globalResources(resources) {\n    var _this5 = this;\n\n    assertProcessed(this);\n\n    var toAdd = Array.isArray(resources) ? resources : arguments;\n    var resource = void 0;\n    var resourcesRelativeTo = this.resourcesRelativeTo || ['', ''];\n\n    for (var i = 0, ii = toAdd.length; i < ii; ++i) {\n      resource = toAdd[i];\n      switch (typeof resource === 'undefined' ? 'undefined' : _typeof(resource)) {\n        case 'string':\n          var parent = resourcesRelativeTo[0];\n          var grandParent = resourcesRelativeTo[1];\n          var name = resource;\n\n          if ((resource.startsWith('./') || resource.startsWith('../')) && parent !== '') {\n            name = join(parent, resource);\n          }\n\n          this.resourcesToLoad[name] = { moduleId: name, relativeTo: grandParent };\n          break;\n        case 'function':\n          var meta = this.aurelia.resources.autoRegister(this.container, resource);\n          if (meta instanceof HtmlBehaviorResource && meta.elementName !== null) {\n            if (this.behaviorsToLoad.push(meta) === 1) {\n              this.postTask(function () {\n                return loadBehaviors(_this5);\n              });\n            }\n          }\n          break;\n        default:\n          throw new Error(invalidConfigMsg(resource, 'resource'));\n      }\n    }\n\n    return this;\n  };\n\n  FrameworkConfiguration.prototype.globalName = function globalName(resourcePath, newName) {\n    assertProcessed(this);\n    this.resourcesToLoad[resourcePath] = { moduleId: newName, relativeTo: '' };\n    return this;\n  };\n\n  FrameworkConfiguration.prototype.plugin = function plugin(_plugin, pluginConfig) {\n    assertProcessed(this);\n\n    var info = void 0;\n    switch (typeof _plugin === 'undefined' ? 'undefined' : _typeof(_plugin)) {\n      case 'string':\n        info = { moduleId: _plugin, resourcesRelativeTo: [_plugin, ''], config: pluginConfig || {} };\n        break;\n      case 'function':\n        info = { configure: _plugin, config: pluginConfig || {} };\n        break;\n      default:\n        throw new Error(invalidConfigMsg(_plugin, 'plugin'));\n    }\n    this.info.push(info);\n    return this;\n  };\n\n  FrameworkConfiguration.prototype._addNormalizedPlugin = function _addNormalizedPlugin(name, config) {\n    var _this6 = this;\n\n    var plugin = { moduleId: name, resourcesRelativeTo: [name, ''], config: config || {} };\n    this.info.push(plugin);\n\n    this.preTask(function () {\n      var relativeTo = [name, _this6.bootstrapperName];\n      plugin.moduleId = name;\n      plugin.resourcesRelativeTo = relativeTo;\n      return Promise.resolve();\n    });\n\n    return this;\n  };\n\n  FrameworkConfiguration.prototype.defaultBindingLanguage = function defaultBindingLanguage() {\n    return this._addNormalizedPlugin('aurelia-templating-binding');\n  };\n\n  FrameworkConfiguration.prototype.router = function router() {\n    return this._addNormalizedPlugin('aurelia-templating-router');\n  };\n\n  FrameworkConfiguration.prototype.history = function history() {\n    return this._addNormalizedPlugin('aurelia-history-browser');\n  };\n\n  FrameworkConfiguration.prototype.defaultResources = function defaultResources() {\n    return this._addNormalizedPlugin('aurelia-templating-resources');\n  };\n\n  FrameworkConfiguration.prototype.eventAggregator = function eventAggregator() {\n    return this._addNormalizedPlugin('aurelia-event-aggregator');\n  };\n\n  FrameworkConfiguration.prototype.basicConfiguration = function basicConfiguration() {\n    return this.defaultBindingLanguage().defaultResources().eventAggregator();\n  };\n\n  FrameworkConfiguration.prototype.standardConfiguration = function standardConfiguration() {\n    return this.basicConfiguration().history().router();\n  };\n\n  FrameworkConfiguration.prototype.developmentLogging = function developmentLogging(level) {\n    var _this7 = this;\n\n    var logLevel = level ? TheLogManager.logLevel[level] : undefined;\n\n    if (logLevel === undefined) {\n      logLevel = TheLogManager.logLevel.debug;\n    }\n\n    this.preTask(function () {\n      return _this7.aurelia.loader.normalize('aurelia-logging-console', _this7.bootstrapperName).then(function (name) {\n        return _this7.aurelia.loader.loadModule(name).then(function (m) {\n          TheLogManager.addAppender(new m.ConsoleAppender());\n          TheLogManager.setLevel(logLevel);\n        });\n      });\n    });\n\n    return this;\n  };\n\n  FrameworkConfiguration.prototype.apply = function apply() {\n    var _this8 = this;\n\n    if (this.processed) {\n      return Promise.resolve();\n    }\n\n    return runTasks(this, this.preTasks).then(function () {\n      var loader = _this8.aurelia.loader;\n      var info = _this8.info;\n      var current = void 0;\n\n      var next = function next() {\n        current = info.shift();\n        if (current) {\n          return loadPlugin(_this8, loader, current).then(next);\n        }\n\n        _this8.processed = true;\n        _this8.configuredPlugins = null;\n        return Promise.resolve();\n      };\n\n      return next().then(function () {\n        return runTasks(_this8, _this8.postTasks);\n      });\n    });\n  };\n\n  return FrameworkConfiguration;\n}();\n\nexport { FrameworkConfiguration };\n\n\nexport * from 'aurelia-dependency-injection';\nexport * from 'aurelia-binding';\nexport * from 'aurelia-metadata';\nexport * from 'aurelia-templating';\nexport * from 'aurelia-loader';\nexport * from 'aurelia-task-queue';\nexport * from 'aurelia-path';\nexport * from 'aurelia-pal';\n\nexport var LogManager = TheLogManager;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _class, _temp, _class2, _temp2, _dec, _class3, _dec2, _class4, _dec3, _class5, _dec4, _class6, _dec5, _class7, _dec6, _class8, _class9, _temp3, _class10, _temp4, _class12, _dec7, _class14, _dec8, _class15, _class16, _temp5, _dec9, _class17, _dec10, _class18, _dec11, _class19;\n\n\n\nimport * as LogManager from 'aurelia-logging';\nimport { metadata, Origin, protocol } from 'aurelia-metadata';\nimport { DOM, PLATFORM, FEATURE } from 'aurelia-pal';\nimport { TemplateRegistryEntry, Loader } from 'aurelia-loader';\nimport { relativeToFile } from 'aurelia-path';\nimport { Scope, Expression, ValueConverterResource, BindingBehaviorResource, camelCase, Binding, createOverrideContext, subscriberCollection, bindingMode, ObserverLocator, EventManager } from 'aurelia-binding';\nimport { Container, resolver, inject } from 'aurelia-dependency-injection';\nimport { TaskQueue } from 'aurelia-task-queue';\n\nexport var animationEvent = {\n  enterBegin: 'animation:enter:begin',\n  enterActive: 'animation:enter:active',\n  enterDone: 'animation:enter:done',\n  enterTimeout: 'animation:enter:timeout',\n\n  leaveBegin: 'animation:leave:begin',\n  leaveActive: 'animation:leave:active',\n  leaveDone: 'animation:leave:done',\n  leaveTimeout: 'animation:leave:timeout',\n\n  staggerNext: 'animation:stagger:next',\n\n  removeClassBegin: 'animation:remove-class:begin',\n  removeClassActive: 'animation:remove-class:active',\n  removeClassDone: 'animation:remove-class:done',\n  removeClassTimeout: 'animation:remove-class:timeout',\n\n  addClassBegin: 'animation:add-class:begin',\n  addClassActive: 'animation:add-class:active',\n  addClassDone: 'animation:add-class:done',\n  addClassTimeout: 'animation:add-class:timeout',\n\n  animateBegin: 'animation:animate:begin',\n  animateActive: 'animation:animate:active',\n  animateDone: 'animation:animate:done',\n  animateTimeout: 'animation:animate:timeout',\n\n  sequenceBegin: 'animation:sequence:begin',\n  sequenceDone: 'animation:sequence:done'\n};\n\nexport var Animator = function () {\n  function Animator() {\n    \n  }\n\n  Animator.prototype.enter = function enter(element) {\n    return Promise.resolve(false);\n  };\n\n  Animator.prototype.leave = function leave(element) {\n    return Promise.resolve(false);\n  };\n\n  Animator.prototype.removeClass = function removeClass(element, className) {\n    element.classList.remove(className);\n    return Promise.resolve(false);\n  };\n\n  Animator.prototype.addClass = function addClass(element, className) {\n    element.classList.add(className);\n    return Promise.resolve(false);\n  };\n\n  Animator.prototype.animate = function animate(element, className) {\n    return Promise.resolve(false);\n  };\n\n  Animator.prototype.runSequence = function runSequence(animations) {};\n\n  Animator.prototype.registerEffect = function registerEffect(effectName, properties) {};\n\n  Animator.prototype.unregisterEffect = function unregisterEffect(effectName) {};\n\n  return Animator;\n}();\n\nexport var CompositionTransactionNotifier = function () {\n  function CompositionTransactionNotifier(owner) {\n    \n\n    this.owner = owner;\n    this.owner._compositionCount++;\n  }\n\n  CompositionTransactionNotifier.prototype.done = function done() {\n    this.owner._compositionCount--;\n    this.owner._tryCompleteTransaction();\n  };\n\n  return CompositionTransactionNotifier;\n}();\n\nexport var CompositionTransactionOwnershipToken = function () {\n  function CompositionTransactionOwnershipToken(owner) {\n    \n\n    this.owner = owner;\n    this.owner._ownershipToken = this;\n    this.thenable = this._createThenable();\n  }\n\n  CompositionTransactionOwnershipToken.prototype.waitForCompositionComplete = function waitForCompositionComplete() {\n    this.owner._tryCompleteTransaction();\n    return this.thenable;\n  };\n\n  CompositionTransactionOwnershipToken.prototype.resolve = function resolve() {\n    this._resolveCallback();\n  };\n\n  CompositionTransactionOwnershipToken.prototype._createThenable = function _createThenable() {\n    var _this = this;\n\n    return new Promise(function (resolve, reject) {\n      _this._resolveCallback = resolve;\n    });\n  };\n\n  return CompositionTransactionOwnershipToken;\n}();\n\nexport var CompositionTransaction = function () {\n  function CompositionTransaction() {\n    \n\n    this._ownershipToken = null;\n    this._compositionCount = 0;\n  }\n\n  CompositionTransaction.prototype.tryCapture = function tryCapture() {\n    return this._ownershipToken === null ? new CompositionTransactionOwnershipToken(this) : null;\n  };\n\n  CompositionTransaction.prototype.enlist = function enlist() {\n    return new CompositionTransactionNotifier(this);\n  };\n\n  CompositionTransaction.prototype._tryCompleteTransaction = function _tryCompleteTransaction() {\n    if (this._compositionCount <= 0) {\n      this._compositionCount = 0;\n\n      if (this._ownershipToken !== null) {\n        var token = this._ownershipToken;\n        this._ownershipToken = null;\n        token.resolve();\n      }\n    }\n  };\n\n  return CompositionTransaction;\n}();\n\nvar capitalMatcher = /([A-Z])/g;\n\nfunction addHyphenAndLower(char) {\n  return '-' + char.toLowerCase();\n}\n\nexport function _hyphenate(name) {\n  return (name.charAt(0).toLowerCase() + name.slice(1)).replace(capitalMatcher, addHyphenAndLower);\n}\n\nexport function _isAllWhitespace(node) {\n  return !(node.auInterpolationTarget || /[^\\t\\n\\r ]/.test(node.textContent));\n}\n\nexport var ViewEngineHooksResource = function () {\n  function ViewEngineHooksResource() {\n    \n  }\n\n  ViewEngineHooksResource.prototype.initialize = function initialize(container, target) {\n    this.instance = container.get(target);\n  };\n\n  ViewEngineHooksResource.prototype.register = function register(registry, name) {\n    registry.registerViewEngineHooks(this.instance);\n  };\n\n  ViewEngineHooksResource.prototype.load = function load(container, target) {};\n\n  ViewEngineHooksResource.convention = function convention(name) {\n    if (name.endsWith('ViewEngineHooks')) {\n      return new ViewEngineHooksResource();\n    }\n  };\n\n  return ViewEngineHooksResource;\n}();\n\nexport function viewEngineHooks(target) {\n  var deco = function deco(t) {\n    metadata.define(metadata.resource, new ViewEngineHooksResource(), t);\n  };\n\n  return target ? deco(target) : deco;\n}\n\nexport var ElementEvents = (_temp = _class = function () {\n  function ElementEvents(element) {\n    \n\n    this.element = element;\n    this.subscriptions = {};\n  }\n\n  ElementEvents.prototype._enqueueHandler = function _enqueueHandler(handler) {\n    this.subscriptions[handler.eventName] = this.subscriptions[handler.eventName] || [];\n    this.subscriptions[handler.eventName].push(handler);\n  };\n\n  ElementEvents.prototype._dequeueHandler = function _dequeueHandler(handler) {\n    var index = void 0;\n    var subscriptions = this.subscriptions[handler.eventName];\n    if (subscriptions) {\n      index = subscriptions.indexOf(handler);\n      if (index > -1) {\n        subscriptions.splice(index, 1);\n      }\n    }\n    return handler;\n  };\n\n  ElementEvents.prototype.publish = function publish(eventName) {\n    var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var bubbles = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n    var cancelable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n\n    var event = DOM.createCustomEvent(eventName, { cancelable: cancelable, bubbles: bubbles, detail: detail });\n    this.element.dispatchEvent(event);\n  };\n\n  ElementEvents.prototype.subscribe = function subscribe(eventName, handler, captureOrOptions) {\n    if (typeof handler === 'function') {\n      if (captureOrOptions === undefined) {\n        captureOrOptions = ElementEvents.defaultListenerOptions;\n      }\n      var eventHandler = new EventHandlerImpl(this, eventName, handler, captureOrOptions, false);\n      return eventHandler;\n    }\n\n    return undefined;\n  };\n\n  ElementEvents.prototype.subscribeOnce = function subscribeOnce(eventName, handler, captureOrOptions) {\n    if (typeof handler === 'function') {\n      if (captureOrOptions === undefined) {\n        captureOrOptions = ElementEvents.defaultListenerOptions;\n      }\n      var eventHandler = new EventHandlerImpl(this, eventName, handler, captureOrOptions, true);\n      return eventHandler;\n    }\n\n    return undefined;\n  };\n\n  ElementEvents.prototype.dispose = function dispose(eventName) {\n    if (eventName && typeof eventName === 'string') {\n      var subscriptions = this.subscriptions[eventName];\n      if (subscriptions) {\n        while (subscriptions.length) {\n          var subscription = subscriptions.pop();\n          if (subscription) {\n            subscription.dispose();\n          }\n        }\n      }\n    } else {\n      this.disposeAll();\n    }\n  };\n\n  ElementEvents.prototype.disposeAll = function disposeAll() {\n    for (var _key in this.subscriptions) {\n      this.dispose(_key);\n    }\n  };\n\n  return ElementEvents;\n}(), _class.defaultListenerOptions = true, _temp);\n\nvar EventHandlerImpl = function () {\n  function EventHandlerImpl(owner, eventName, handler, captureOrOptions, once) {\n    \n\n    this.owner = owner;\n    this.eventName = eventName;\n    this.handler = handler;\n\n    this.capture = typeof captureOrOptions === 'boolean' ? captureOrOptions : captureOrOptions.capture;\n    this.bubbles = !this.capture;\n    this.captureOrOptions = captureOrOptions;\n    this.once = once;\n    owner.element.addEventListener(eventName, this, captureOrOptions);\n    owner._enqueueHandler(this);\n  }\n\n  EventHandlerImpl.prototype.handleEvent = function handleEvent(e) {\n    var fn = this.handler;\n    fn(e);\n    if (this.once) {\n      this.dispose();\n    }\n  };\n\n  EventHandlerImpl.prototype.dispose = function dispose() {\n    this.owner.element.removeEventListener(this.eventName, this, this.captureOrOptions);\n    this.owner._dequeueHandler(this);\n    this.owner = this.handler = null;\n  };\n\n  return EventHandlerImpl;\n}();\n\nexport var ResourceLoadContext = function () {\n  function ResourceLoadContext() {\n    \n\n    this.dependencies = {};\n  }\n\n  ResourceLoadContext.prototype.addDependency = function addDependency(url) {\n    this.dependencies[url] = true;\n  };\n\n  ResourceLoadContext.prototype.hasDependency = function hasDependency(url) {\n    return url in this.dependencies;\n  };\n\n  return ResourceLoadContext;\n}();\n\nexport var ViewCompileInstruction = function ViewCompileInstruction() {\n  var targetShadowDOM = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n  var compileSurrogate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  \n\n  this.targetShadowDOM = targetShadowDOM;\n  this.compileSurrogate = compileSurrogate;\n  this.associatedModuleId = null;\n};\n\nViewCompileInstruction.normal = new ViewCompileInstruction();\n\nexport var BehaviorInstruction = function () {\n  function BehaviorInstruction() {\n    \n  }\n\n  BehaviorInstruction.enhance = function enhance() {\n    var instruction = new BehaviorInstruction();\n    instruction.enhance = true;\n    return instruction;\n  };\n\n  BehaviorInstruction.unitTest = function unitTest(type, attributes) {\n    var instruction = new BehaviorInstruction();\n    instruction.type = type;\n    instruction.attributes = attributes || {};\n    return instruction;\n  };\n\n  BehaviorInstruction.element = function element(node, type) {\n    var instruction = new BehaviorInstruction();\n    instruction.type = type;\n    instruction.attributes = {};\n    instruction.anchorIsContainer = !(node.hasAttribute('containerless') || type.containerless);\n    instruction.initiatedByBehavior = true;\n    return instruction;\n  };\n\n  BehaviorInstruction.attribute = function attribute(attrName, type) {\n    var instruction = new BehaviorInstruction();\n    instruction.attrName = attrName;\n    instruction.type = type || null;\n    instruction.attributes = {};\n    return instruction;\n  };\n\n  BehaviorInstruction.dynamic = function dynamic(host, viewModel, viewFactory) {\n    var instruction = new BehaviorInstruction();\n    instruction.host = host;\n    instruction.viewModel = viewModel;\n    instruction.viewFactory = viewFactory;\n    instruction.inheritBindingContext = true;\n    return instruction;\n  };\n\n  return BehaviorInstruction;\n}();\n\nvar biProto = BehaviorInstruction.prototype;\nbiProto.initiatedByBehavior = false;\nbiProto.enhance = false;\nbiProto.partReplacements = null;\nbiProto.viewFactory = null;\nbiProto.originalAttrName = null;\nbiProto.skipContentProcessing = false;\nbiProto.contentFactory = null;\nbiProto.viewModel = null;\nbiProto.anchorIsContainer = false;\nbiProto.host = null;\nbiProto.attributes = null;\nbiProto.type = null;\nbiProto.attrName = null;\nbiProto.inheritBindingContext = false;\n\nBehaviorInstruction.normal = new BehaviorInstruction();\n\nexport var TargetInstruction = (_temp2 = _class2 = function () {\n  function TargetInstruction() {\n    \n  }\n\n  TargetInstruction.shadowSlot = function shadowSlot(parentInjectorId) {\n    var instruction = new TargetInstruction();\n    instruction.parentInjectorId = parentInjectorId;\n    instruction.shadowSlot = true;\n    return instruction;\n  };\n\n  TargetInstruction.contentExpression = function contentExpression(expression) {\n    var instruction = new TargetInstruction();\n    instruction.contentExpression = expression;\n    return instruction;\n  };\n\n  TargetInstruction.letElement = function letElement(expressions) {\n    var instruction = new TargetInstruction();\n    instruction.expressions = expressions;\n    instruction.letElement = true;\n    return instruction;\n  };\n\n  TargetInstruction.lifting = function lifting(parentInjectorId, liftingInstruction) {\n    var instruction = new TargetInstruction();\n    instruction.parentInjectorId = parentInjectorId;\n    instruction.expressions = TargetInstruction.noExpressions;\n    instruction.behaviorInstructions = [liftingInstruction];\n    instruction.viewFactory = liftingInstruction.viewFactory;\n    instruction.providers = [liftingInstruction.type.target];\n    instruction.lifting = true;\n    return instruction;\n  };\n\n  TargetInstruction.normal = function normal(injectorId, parentInjectorId, providers, behaviorInstructions, expressions, elementInstruction) {\n    var instruction = new TargetInstruction();\n    instruction.injectorId = injectorId;\n    instruction.parentInjectorId = parentInjectorId;\n    instruction.providers = providers;\n    instruction.behaviorInstructions = behaviorInstructions;\n    instruction.expressions = expressions;\n    instruction.anchorIsContainer = elementInstruction ? elementInstruction.anchorIsContainer : true;\n    instruction.elementInstruction = elementInstruction;\n    return instruction;\n  };\n\n  TargetInstruction.surrogate = function surrogate(providers, behaviorInstructions, expressions, values) {\n    var instruction = new TargetInstruction();\n    instruction.expressions = expressions;\n    instruction.behaviorInstructions = behaviorInstructions;\n    instruction.providers = providers;\n    instruction.values = values;\n    return instruction;\n  };\n\n  return TargetInstruction;\n}(), _class2.noExpressions = Object.freeze([]), _temp2);\n\nvar tiProto = TargetInstruction.prototype;\n\ntiProto.injectorId = null;\ntiProto.parentInjectorId = null;\n\ntiProto.shadowSlot = false;\ntiProto.slotName = null;\ntiProto.slotFallbackFactory = null;\n\ntiProto.contentExpression = null;\ntiProto.letElement = false;\n\ntiProto.expressions = null;\ntiProto.expressions = null;\ntiProto.providers = null;\n\ntiProto.viewFactory = null;\n\ntiProto.anchorIsContainer = false;\ntiProto.elementInstruction = null;\ntiProto.lifting = false;\n\ntiProto.values = null;\n\nexport var viewStrategy = protocol.create('aurelia:view-strategy', {\n  validate: function validate(target) {\n    if (!(typeof target.loadViewFactory === 'function')) {\n      return 'View strategies must implement: loadViewFactory(viewEngine: ViewEngine, compileInstruction: ViewCompileInstruction, loadContext?: ResourceLoadContext): Promise<ViewFactory>';\n    }\n\n    return true;\n  },\n  compose: function compose(target) {\n    if (!(typeof target.makeRelativeTo === 'function')) {\n      target.makeRelativeTo = PLATFORM.noop;\n    }\n  }\n});\n\nexport var RelativeViewStrategy = (_dec = viewStrategy(), _dec(_class3 = function () {\n  function RelativeViewStrategy(path) {\n    \n\n    this.path = path;\n    this.absolutePath = null;\n  }\n\n  RelativeViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {\n    if (this.absolutePath === null && this.moduleId) {\n      this.absolutePath = relativeToFile(this.path, this.moduleId);\n    }\n\n    compileInstruction.associatedModuleId = this.moduleId;\n    return viewEngine.loadViewFactory(this.absolutePath || this.path, compileInstruction, loadContext, target);\n  };\n\n  RelativeViewStrategy.prototype.makeRelativeTo = function makeRelativeTo(file) {\n    if (this.absolutePath === null) {\n      this.absolutePath = relativeToFile(this.path, file);\n    }\n  };\n\n  return RelativeViewStrategy;\n}()) || _class3);\n\nexport var ConventionalViewStrategy = (_dec2 = viewStrategy(), _dec2(_class4 = function () {\n  function ConventionalViewStrategy(viewLocator, origin) {\n    \n\n    this.moduleId = origin.moduleId;\n    this.viewUrl = viewLocator.convertOriginToViewUrl(origin);\n  }\n\n  ConventionalViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {\n    compileInstruction.associatedModuleId = this.moduleId;\n    return viewEngine.loadViewFactory(this.viewUrl, compileInstruction, loadContext, target);\n  };\n\n  return ConventionalViewStrategy;\n}()) || _class4);\n\nexport var NoViewStrategy = (_dec3 = viewStrategy(), _dec3(_class5 = function () {\n  function NoViewStrategy(dependencies, dependencyBaseUrl) {\n    \n\n    this.dependencies = dependencies || null;\n    this.dependencyBaseUrl = dependencyBaseUrl || '';\n  }\n\n  NoViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {\n    var entry = this.entry;\n    var dependencies = this.dependencies;\n\n    if (entry && entry.factoryIsReady) {\n      return Promise.resolve(null);\n    }\n\n    this.entry = entry = new TemplateRegistryEntry(this.moduleId || this.dependencyBaseUrl);\n\n    entry.dependencies = [];\n    entry.templateIsLoaded = true;\n\n    if (dependencies !== null) {\n      for (var i = 0, ii = dependencies.length; i < ii; ++i) {\n        var current = dependencies[i];\n\n        if (typeof current === 'string' || typeof current === 'function') {\n          entry.addDependency(current);\n        } else {\n          entry.addDependency(current.from, current.as);\n        }\n      }\n    }\n\n    compileInstruction.associatedModuleId = this.moduleId;\n\n    return viewEngine.loadViewFactory(entry, compileInstruction, loadContext, target);\n  };\n\n  return NoViewStrategy;\n}()) || _class5);\n\nexport var TemplateRegistryViewStrategy = (_dec4 = viewStrategy(), _dec4(_class6 = function () {\n  function TemplateRegistryViewStrategy(moduleId, entry) {\n    \n\n    this.moduleId = moduleId;\n    this.entry = entry;\n  }\n\n  TemplateRegistryViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {\n    var entry = this.entry;\n\n    if (entry.factoryIsReady) {\n      return Promise.resolve(entry.factory);\n    }\n\n    compileInstruction.associatedModuleId = this.moduleId;\n    return viewEngine.loadViewFactory(entry, compileInstruction, loadContext, target);\n  };\n\n  return TemplateRegistryViewStrategy;\n}()) || _class6);\n\nexport var InlineViewStrategy = (_dec5 = viewStrategy(), _dec5(_class7 = function () {\n  function InlineViewStrategy(markup, dependencies, dependencyBaseUrl) {\n    \n\n    this.markup = markup;\n    this.dependencies = dependencies || null;\n    this.dependencyBaseUrl = dependencyBaseUrl || '';\n  }\n\n  InlineViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {\n    var entry = this.entry;\n    var dependencies = this.dependencies;\n\n    if (entry && entry.factoryIsReady) {\n      return Promise.resolve(entry.factory);\n    }\n\n    this.entry = entry = new TemplateRegistryEntry(this.moduleId || this.dependencyBaseUrl);\n    entry.template = DOM.createTemplateFromMarkup(this.markup);\n\n    if (dependencies !== null) {\n      for (var i = 0, ii = dependencies.length; i < ii; ++i) {\n        var current = dependencies[i];\n\n        if (typeof current === 'string' || typeof current === 'function') {\n          entry.addDependency(current);\n        } else {\n          entry.addDependency(current.from, current.as);\n        }\n      }\n    }\n\n    compileInstruction.associatedModuleId = this.moduleId;\n    return viewEngine.loadViewFactory(entry, compileInstruction, loadContext, target);\n  };\n\n  return InlineViewStrategy;\n}()) || _class7);\n\nexport var StaticViewStrategy = (_dec6 = viewStrategy(), _dec6(_class8 = function () {\n  function StaticViewStrategy(config) {\n    \n\n    if (typeof config === 'string' || config instanceof DOM.Element && config.tagName === 'TEMPLATE') {\n      config = {\n        template: config\n      };\n    }\n    this.template = config.template;\n    this.dependencies = config.dependencies || [];\n    this.factoryIsReady = false;\n    this.onReady = null;\n    this.moduleId = 'undefined';\n  }\n\n  StaticViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {\n    var _this2 = this;\n\n    if (this.factoryIsReady) {\n      return Promise.resolve(this.factory);\n    }\n    var deps = this.dependencies;\n    deps = typeof deps === 'function' ? deps() : deps;\n    deps = deps ? deps : [];\n    deps = Array.isArray(deps) ? deps : [deps];\n\n    return Promise.all(deps).then(function (dependencies) {\n      var container = viewEngine.container;\n      var appResources = viewEngine.appResources;\n      var viewCompiler = viewEngine.viewCompiler;\n      var viewResources = new ViewResources(appResources);\n\n      var resource = void 0;\n      var elDeps = [];\n\n      if (target) {\n        viewResources.autoRegister(container, target);\n      }\n\n      for (var _iterator = dependencies, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n        var _ref;\n\n        if (_isArray) {\n          if (_i >= _iterator.length) break;\n          _ref = _iterator[_i++];\n        } else {\n          _i = _iterator.next();\n          if (_i.done) break;\n          _ref = _i.value;\n        }\n\n        var dep = _ref;\n\n        if (typeof dep === 'function') {\n          resource = viewResources.autoRegister(container, dep);\n          if (resource.elementName !== null) {\n            elDeps.push(resource);\n          }\n        } else if (dep && (typeof dep === 'undefined' ? 'undefined' : _typeof(dep)) === 'object') {\n          for (var _key2 in dep) {\n            var exported = dep[_key2];\n            if (typeof exported === 'function') {\n              resource = viewResources.autoRegister(container, exported);\n              if (resource.elementName !== null) {\n                elDeps.push(resource);\n              }\n            }\n          }\n        } else {\n          throw new Error('dependency neither function nor object. Received: \"' + (typeof dep === 'undefined' ? 'undefined' : _typeof(dep)) + '\"');\n        }\n      }\n\n      return Promise.all(elDeps.map(function (el) {\n        return el.load(container, el.target);\n      })).then(function () {\n        var factory = _this2.template !== null ? viewCompiler.compile(_this2.template, viewResources, compileInstruction) : null;\n        _this2.factoryIsReady = true;\n        _this2.factory = factory;\n        return factory;\n      });\n    });\n  };\n\n  return StaticViewStrategy;\n}()) || _class8);\n\nexport var ViewLocator = (_temp3 = _class9 = function () {\n  function ViewLocator() {\n    \n  }\n\n  ViewLocator.prototype.getViewStrategy = function getViewStrategy(value) {\n    if (!value) {\n      return null;\n    }\n\n    if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && 'getViewStrategy' in value) {\n      var _origin = Origin.get(value.constructor);\n\n      value = value.getViewStrategy();\n\n      if (typeof value === 'string') {\n        value = new RelativeViewStrategy(value);\n      }\n\n      viewStrategy.assert(value);\n\n      if (_origin.moduleId) {\n        value.makeRelativeTo(_origin.moduleId);\n      }\n\n      return value;\n    }\n\n    if (typeof value === 'string') {\n      value = new RelativeViewStrategy(value);\n    }\n\n    if (viewStrategy.validate(value)) {\n      return value;\n    }\n\n    if (typeof value !== 'function') {\n      value = value.constructor;\n    }\n\n    if ('$view' in value) {\n      var c = value.$view;\n      var _view = void 0;\n      c = typeof c === 'function' ? c.call(value) : c;\n      if (c === null) {\n        _view = new NoViewStrategy();\n      } else {\n        _view = c instanceof StaticViewStrategy ? c : new StaticViewStrategy(c);\n      }\n      metadata.define(ViewLocator.viewStrategyMetadataKey, _view, value);\n      return _view;\n    }\n\n    var origin = Origin.get(value);\n    var strategy = metadata.get(ViewLocator.viewStrategyMetadataKey, value);\n\n    if (!strategy) {\n      if (!origin.moduleId) {\n        throw new Error('Cannot determine default view strategy for object.', value);\n      }\n\n      strategy = this.createFallbackViewStrategy(origin);\n    } else if (origin.moduleId) {\n      strategy.moduleId = origin.moduleId;\n    }\n\n    return strategy;\n  };\n\n  ViewLocator.prototype.createFallbackViewStrategy = function createFallbackViewStrategy(origin) {\n    return new ConventionalViewStrategy(this, origin);\n  };\n\n  ViewLocator.prototype.convertOriginToViewUrl = function convertOriginToViewUrl(origin) {\n    var moduleId = origin.moduleId;\n    var id = moduleId.endsWith('.js') || moduleId.endsWith('.ts') ? moduleId.substring(0, moduleId.length - 3) : moduleId;\n    return id + '.html';\n  };\n\n  return ViewLocator;\n}(), _class9.viewStrategyMetadataKey = 'aurelia:view-strategy', _temp3);\n\nfunction mi(name) {\n  throw new Error('BindingLanguage must implement ' + name + '().');\n}\n\nexport var BindingLanguage = function () {\n  function BindingLanguage() {\n    \n  }\n\n  BindingLanguage.prototype.inspectAttribute = function inspectAttribute(resources, elementName, attrName, attrValue) {\n    mi('inspectAttribute');\n  };\n\n  BindingLanguage.prototype.createAttributeInstruction = function createAttributeInstruction(resources, element, info, existingInstruction) {\n    mi('createAttributeInstruction');\n  };\n\n  BindingLanguage.prototype.createLetExpressions = function createLetExpressions(resources, element) {\n    mi('createLetExpressions');\n  };\n\n  BindingLanguage.prototype.inspectTextContent = function inspectTextContent(resources, value) {\n    mi('inspectTextContent');\n  };\n\n  return BindingLanguage;\n}();\n\nvar noNodes = Object.freeze([]);\n\nexport var SlotCustomAttribute = function () {\n  SlotCustomAttribute.inject = function inject() {\n    return [DOM.Element];\n  };\n\n  function SlotCustomAttribute(element) {\n    \n\n    this.element = element;\n    this.element.auSlotAttribute = this;\n  }\n\n  SlotCustomAttribute.prototype.valueChanged = function valueChanged(newValue, oldValue) {};\n\n  return SlotCustomAttribute;\n}();\n\nexport var PassThroughSlot = function () {\n  function PassThroughSlot(anchor, name, destinationName, fallbackFactory) {\n    \n\n    this.anchor = anchor;\n    this.anchor.viewSlot = this;\n    this.name = name;\n    this.destinationName = destinationName;\n    this.fallbackFactory = fallbackFactory;\n    this.destinationSlot = null;\n    this.projections = 0;\n    this.contentView = null;\n\n    var attr = new SlotCustomAttribute(this.anchor);\n    attr.value = this.destinationName;\n  }\n\n  PassThroughSlot.prototype.renderFallbackContent = function renderFallbackContent(view, nodes, projectionSource, index) {\n    if (this.contentView === null) {\n      this.contentView = this.fallbackFactory.create(this.ownerView.container);\n      this.contentView.bind(this.ownerView.bindingContext, this.ownerView.overrideContext);\n\n      var slots = Object.create(null);\n      slots[this.destinationSlot.name] = this.destinationSlot;\n\n      ShadowDOM.distributeView(this.contentView, slots, projectionSource, index, this.destinationSlot.name);\n    }\n  };\n\n  PassThroughSlot.prototype.passThroughTo = function passThroughTo(destinationSlot) {\n    this.destinationSlot = destinationSlot;\n  };\n\n  PassThroughSlot.prototype.addNode = function addNode(view, node, projectionSource, index) {\n    if (this.contentView !== null) {\n      this.contentView.removeNodes();\n      this.contentView.detached();\n      this.contentView.unbind();\n      this.contentView = null;\n    }\n\n    if (node.viewSlot instanceof PassThroughSlot) {\n      node.viewSlot.passThroughTo(this);\n      return;\n    }\n\n    this.projections++;\n    this.destinationSlot.addNode(view, node, projectionSource, index);\n  };\n\n  PassThroughSlot.prototype.removeView = function removeView(view, projectionSource) {\n    this.projections--;\n    this.destinationSlot.removeView(view, projectionSource);\n\n    if (this.needsFallbackRendering) {\n      this.renderFallbackContent(null, noNodes, projectionSource);\n    }\n  };\n\n  PassThroughSlot.prototype.removeAll = function removeAll(projectionSource) {\n    this.projections = 0;\n    this.destinationSlot.removeAll(projectionSource);\n\n    if (this.needsFallbackRendering) {\n      this.renderFallbackContent(null, noNodes, projectionSource);\n    }\n  };\n\n  PassThroughSlot.prototype.projectFrom = function projectFrom(view, projectionSource) {\n    this.destinationSlot.projectFrom(view, projectionSource);\n  };\n\n  PassThroughSlot.prototype.created = function created(ownerView) {\n    this.ownerView = ownerView;\n  };\n\n  PassThroughSlot.prototype.bind = function bind(view) {\n    if (this.contentView) {\n      this.contentView.bind(view.bindingContext, view.overrideContext);\n    }\n  };\n\n  PassThroughSlot.prototype.attached = function attached() {\n    if (this.contentView) {\n      this.contentView.attached();\n    }\n  };\n\n  PassThroughSlot.prototype.detached = function detached() {\n    if (this.contentView) {\n      this.contentView.detached();\n    }\n  };\n\n  PassThroughSlot.prototype.unbind = function unbind() {\n    if (this.contentView) {\n      this.contentView.unbind();\n    }\n  };\n\n  _createClass(PassThroughSlot, [{\n    key: 'needsFallbackRendering',\n    get: function get() {\n      return this.fallbackFactory && this.projections === 0;\n    }\n  }]);\n\n  return PassThroughSlot;\n}();\n\nexport var ShadowSlot = function () {\n  function ShadowSlot(anchor, name, fallbackFactory) {\n    \n\n    this.anchor = anchor;\n    this.anchor.isContentProjectionSource = true;\n    this.anchor.viewSlot = this;\n    this.name = name;\n    this.fallbackFactory = fallbackFactory;\n    this.contentView = null;\n    this.projections = 0;\n    this.children = [];\n    this.projectFromAnchors = null;\n    this.destinationSlots = null;\n  }\n\n  ShadowSlot.prototype.addNode = function addNode(view, node, projectionSource, index, destination) {\n    if (this.contentView !== null) {\n      this.contentView.removeNodes();\n      this.contentView.detached();\n      this.contentView.unbind();\n      this.contentView = null;\n    }\n\n    if (node.viewSlot instanceof PassThroughSlot) {\n      node.viewSlot.passThroughTo(this);\n      return;\n    }\n\n    if (this.destinationSlots !== null) {\n      ShadowDOM.distributeNodes(view, [node], this.destinationSlots, this, index);\n    } else {\n      node.auOwnerView = view;\n      node.auProjectionSource = projectionSource;\n      node.auAssignedSlot = this;\n\n      var anchor = this._findAnchor(view, node, projectionSource, index);\n      var parent = anchor.parentNode;\n\n      parent.insertBefore(node, anchor);\n      this.children.push(node);\n      this.projections++;\n    }\n  };\n\n  ShadowSlot.prototype.removeView = function removeView(view, projectionSource) {\n    if (this.destinationSlots !== null) {\n      ShadowDOM.undistributeView(view, this.destinationSlots, this);\n    } else if (this.contentView && this.contentView.hasSlots) {\n      ShadowDOM.undistributeView(view, this.contentView.slots, projectionSource);\n    } else {\n      var found = this.children.find(function (x) {\n        return x.auSlotProjectFrom === projectionSource;\n      });\n      if (found) {\n        var _children = found.auProjectionChildren;\n\n        for (var i = 0, ii = _children.length; i < ii; ++i) {\n          var _child = _children[i];\n\n          if (_child.auOwnerView === view) {\n            _children.splice(i, 1);\n            view.fragment.appendChild(_child);\n            i--;ii--;\n            this.projections--;\n          }\n        }\n\n        if (this.needsFallbackRendering) {\n          this.renderFallbackContent(view, noNodes, projectionSource);\n        }\n      }\n    }\n  };\n\n  ShadowSlot.prototype.removeAll = function removeAll(projectionSource) {\n    if (this.destinationSlots !== null) {\n      ShadowDOM.undistributeAll(this.destinationSlots, this);\n    } else if (this.contentView && this.contentView.hasSlots) {\n      ShadowDOM.undistributeAll(this.contentView.slots, projectionSource);\n    } else {\n      var found = this.children.find(function (x) {\n        return x.auSlotProjectFrom === projectionSource;\n      });\n\n      if (found) {\n        var _children2 = found.auProjectionChildren;\n        for (var i = 0, ii = _children2.length; i < ii; ++i) {\n          var _child2 = _children2[i];\n          _child2.auOwnerView.fragment.appendChild(_child2);\n          this.projections--;\n        }\n\n        found.auProjectionChildren = [];\n\n        if (this.needsFallbackRendering) {\n          this.renderFallbackContent(null, noNodes, projectionSource);\n        }\n      }\n    }\n  };\n\n  ShadowSlot.prototype._findAnchor = function _findAnchor(view, node, projectionSource, index) {\n    if (projectionSource) {\n      var found = this.children.find(function (x) {\n        return x.auSlotProjectFrom === projectionSource;\n      });\n      if (found) {\n        if (index !== undefined) {\n          var _children3 = found.auProjectionChildren;\n          var viewIndex = -1;\n          var lastView = void 0;\n\n          for (var i = 0, ii = _children3.length; i < ii; ++i) {\n            var current = _children3[i];\n\n            if (current.auOwnerView !== lastView) {\n              viewIndex++;\n              lastView = current.auOwnerView;\n\n              if (viewIndex >= index && lastView !== view) {\n                _children3.splice(i, 0, node);\n                return current;\n              }\n            }\n          }\n        }\n\n        found.auProjectionChildren.push(node);\n        return found;\n      }\n    }\n\n    return this.anchor;\n  };\n\n  ShadowSlot.prototype.projectTo = function projectTo(slots) {\n    this.destinationSlots = slots;\n  };\n\n  ShadowSlot.prototype.projectFrom = function projectFrom(view, projectionSource) {\n    var anchor = DOM.createComment('anchor');\n    var parent = this.anchor.parentNode;\n    anchor.auSlotProjectFrom = projectionSource;\n    anchor.auOwnerView = view;\n    anchor.auProjectionChildren = [];\n    parent.insertBefore(anchor, this.anchor);\n    this.children.push(anchor);\n\n    if (this.projectFromAnchors === null) {\n      this.projectFromAnchors = [];\n    }\n\n    this.projectFromAnchors.push(anchor);\n  };\n\n  ShadowSlot.prototype.renderFallbackContent = function renderFallbackContent(view, nodes, projectionSource, index) {\n    if (this.contentView === null) {\n      this.contentView = this.fallbackFactory.create(this.ownerView.container);\n      this.contentView.bind(this.ownerView.bindingContext, this.ownerView.overrideContext);\n      this.contentView.insertNodesBefore(this.anchor);\n    }\n\n    if (this.contentView.hasSlots) {\n      var slots = this.contentView.slots;\n      var projectFromAnchors = this.projectFromAnchors;\n\n      if (projectFromAnchors !== null) {\n        for (var slotName in slots) {\n          var slot = slots[slotName];\n\n          for (var i = 0, ii = projectFromAnchors.length; i < ii; ++i) {\n            var anchor = projectFromAnchors[i];\n            slot.projectFrom(anchor.auOwnerView, anchor.auSlotProjectFrom);\n          }\n        }\n      }\n\n      this.fallbackSlots = slots;\n      ShadowDOM.distributeNodes(view, nodes, slots, projectionSource, index);\n    }\n  };\n\n  ShadowSlot.prototype.created = function created(ownerView) {\n    this.ownerView = ownerView;\n  };\n\n  ShadowSlot.prototype.bind = function bind(view) {\n    if (this.contentView) {\n      this.contentView.bind(view.bindingContext, view.overrideContext);\n    }\n  };\n\n  ShadowSlot.prototype.attached = function attached() {\n    if (this.contentView) {\n      this.contentView.attached();\n    }\n  };\n\n  ShadowSlot.prototype.detached = function detached() {\n    if (this.contentView) {\n      this.contentView.detached();\n    }\n  };\n\n  ShadowSlot.prototype.unbind = function unbind() {\n    if (this.contentView) {\n      this.contentView.unbind();\n    }\n  };\n\n  _createClass(ShadowSlot, [{\n    key: 'needsFallbackRendering',\n    get: function get() {\n      return this.fallbackFactory && this.projections === 0;\n    }\n  }]);\n\n  return ShadowSlot;\n}();\n\nexport var ShadowDOM = (_temp4 = _class10 = function () {\n  function ShadowDOM() {\n    \n  }\n\n  ShadowDOM.getSlotName = function getSlotName(node) {\n    if (node.auSlotAttribute === undefined) {\n      return ShadowDOM.defaultSlotKey;\n    }\n\n    return node.auSlotAttribute.value;\n  };\n\n  ShadowDOM.distributeView = function distributeView(view, slots, projectionSource, index, destinationOverride) {\n    var nodes = void 0;\n\n    if (view === null) {\n      nodes = noNodes;\n    } else {\n      var childNodes = view.fragment.childNodes;\n      var ii = childNodes.length;\n      nodes = new Array(ii);\n\n      for (var i = 0; i < ii; ++i) {\n        nodes[i] = childNodes[i];\n      }\n    }\n\n    ShadowDOM.distributeNodes(view, nodes, slots, projectionSource, index, destinationOverride);\n  };\n\n  ShadowDOM.undistributeView = function undistributeView(view, slots, projectionSource) {\n    for (var slotName in slots) {\n      slots[slotName].removeView(view, projectionSource);\n    }\n  };\n\n  ShadowDOM.undistributeAll = function undistributeAll(slots, projectionSource) {\n    for (var slotName in slots) {\n      slots[slotName].removeAll(projectionSource);\n    }\n  };\n\n  ShadowDOM.distributeNodes = function distributeNodes(view, nodes, slots, projectionSource, index, destinationOverride) {\n    for (var i = 0, ii = nodes.length; i < ii; ++i) {\n      var currentNode = nodes[i];\n      var nodeType = currentNode.nodeType;\n\n      if (currentNode.isContentProjectionSource) {\n        currentNode.viewSlot.projectTo(slots);\n\n        for (var slotName in slots) {\n          slots[slotName].projectFrom(view, currentNode.viewSlot);\n        }\n\n        nodes.splice(i, 1);\n        ii--;i--;\n      } else if (nodeType === 1 || nodeType === 3 || currentNode.viewSlot instanceof PassThroughSlot) {\n        if (nodeType === 3 && _isAllWhitespace(currentNode)) {\n          nodes.splice(i, 1);\n          ii--;i--;\n        } else {\n          var found = slots[destinationOverride || ShadowDOM.getSlotName(currentNode)];\n\n          if (found) {\n            found.addNode(view, currentNode, projectionSource, index);\n            nodes.splice(i, 1);\n            ii--;i--;\n          }\n        }\n      } else {\n        nodes.splice(i, 1);\n        ii--;i--;\n      }\n    }\n\n    for (var _slotName in slots) {\n      var slot = slots[_slotName];\n\n      if (slot.needsFallbackRendering) {\n        slot.renderFallbackContent(view, nodes, projectionSource, index);\n      }\n    }\n  };\n\n  return ShadowDOM;\n}(), _class10.defaultSlotKey = '__au-default-slot-key__', _temp4);\n\nfunction register(lookup, name, resource, type) {\n  if (!name) {\n    return;\n  }\n\n  var existing = lookup[name];\n  if (existing) {\n    if (existing !== resource) {\n      throw new Error('Attempted to register ' + type + ' when one with the same name already exists. Name: ' + name + '.');\n    }\n\n    return;\n  }\n\n  lookup[name] = resource;\n}\n\nexport function validateBehaviorName(name, type) {\n  if (/[A-Z]/.test(name)) {\n    var newName = _hyphenate(name);\n    LogManager.getLogger('templating').warn('\\'' + name + '\\' is not a valid ' + type + ' name and has been converted to \\'' + newName + '\\'. Upper-case letters are not allowed because the DOM is not case-sensitive.');\n    return newName;\n  }\n  return name;\n}\n\nvar conventionMark = '__au_resource__';\n\nexport var ViewResources = function () {\n  ViewResources.convention = function convention(target, existing) {\n    var resource = void 0;\n\n    if (existing && conventionMark in existing) {\n      return existing;\n    }\n    if ('$resource' in target) {\n      var config = target.$resource;\n\n      if (typeof config === 'string') {\n        resource = existing || new HtmlBehaviorResource();\n        resource[conventionMark] = true;\n        if (!resource.elementName) {\n          resource.elementName = validateBehaviorName(config, 'custom element');\n        }\n      } else {\n        if (typeof config === 'function') {\n          config = config.call(target);\n        }\n        if (typeof config === 'string') {\n          config = { name: config };\n        }\n\n        config = Object.assign({}, config);\n\n        var resourceType = config.type || 'element';\n\n        var _name = config.name;\n        switch (resourceType) {\n          case 'element':case 'attribute':\n            resource = existing || new HtmlBehaviorResource();\n            resource[conventionMark] = true;\n            if (resourceType === 'element') {\n              if (!resource.elementName) {\n                resource.elementName = _name ? validateBehaviorName(_name, 'custom element') : _hyphenate(target.name);\n              }\n            } else {\n              if (!resource.attributeName) {\n                resource.attributeName = _name ? validateBehaviorName(_name, 'custom attribute') : _hyphenate(target.name);\n              }\n            }\n            if ('templateController' in config) {\n              config.liftsContent = config.templateController;\n              delete config.templateController;\n            }\n            if ('defaultBindingMode' in config && resource.attributeDefaultBindingMode !== undefined) {\n              config.attributeDefaultBindingMode = config.defaultBindingMode;\n              delete config.defaultBindingMode;\n            }\n\n            delete config.name;\n\n            Object.assign(resource, config);\n            break;\n          case 'valueConverter':\n            resource = new ValueConverterResource(camelCase(_name || target.name));\n            break;\n          case 'bindingBehavior':\n            resource = new BindingBehaviorResource(camelCase(_name || target.name));\n            break;\n          case 'viewEngineHooks':\n            resource = new ViewEngineHooksResource();\n            break;\n        }\n      }\n\n      if (resource instanceof HtmlBehaviorResource) {\n        var _bindables = typeof config === 'string' ? undefined : config.bindables;\n        var currentProps = resource.properties;\n        if (Array.isArray(_bindables)) {\n          for (var i = 0, ii = _bindables.length; ii > i; ++i) {\n            var prop = _bindables[i];\n            if (!prop || typeof prop !== 'string' && !prop.name) {\n              throw new Error('Invalid bindable property at \"' + i + '\" for class \"' + target.name + '\". Expected either a string or an object with \"name\" property.');\n            }\n            var newProp = new BindableProperty(prop);\n\n            var existed = false;\n            for (var j = 0, jj = currentProps.length; jj > j; ++j) {\n              if (currentProps[j].name === newProp.name) {\n                existed = true;\n                break;\n              }\n            }\n            if (existed) {\n              continue;\n            }\n            newProp.registerWith(target, resource);\n          }\n        }\n      }\n    }\n    return resource;\n  };\n\n  function ViewResources(parent, viewUrl) {\n    \n\n    this.bindingLanguage = null;\n\n    this.parent = parent || null;\n    this.hasParent = this.parent !== null;\n    this.viewUrl = viewUrl || '';\n    this.lookupFunctions = {\n      valueConverters: this.getValueConverter.bind(this),\n      bindingBehaviors: this.getBindingBehavior.bind(this)\n    };\n    this.attributes = Object.create(null);\n    this.elements = Object.create(null);\n    this.valueConverters = Object.create(null);\n    this.bindingBehaviors = Object.create(null);\n    this.attributeMap = Object.create(null);\n    this.values = Object.create(null);\n    this.beforeCompile = this.afterCompile = this.beforeCreate = this.afterCreate = this.beforeBind = this.beforeUnbind = false;\n  }\n\n  ViewResources.prototype._tryAddHook = function _tryAddHook(obj, name) {\n    if (typeof obj[name] === 'function') {\n      var func = obj[name].bind(obj);\n      var counter = 1;\n      var callbackName = void 0;\n\n      while (this[callbackName = name + counter.toString()] !== undefined) {\n        counter++;\n      }\n\n      this[name] = true;\n      this[callbackName] = func;\n    }\n  };\n\n  ViewResources.prototype._invokeHook = function _invokeHook(name, one, two, three, four) {\n    if (this.hasParent) {\n      this.parent._invokeHook(name, one, two, three, four);\n    }\n\n    if (this[name]) {\n      this[name + '1'](one, two, three, four);\n\n      var callbackName = name + '2';\n      if (this[callbackName]) {\n        this[callbackName](one, two, three, four);\n\n        callbackName = name + '3';\n        if (this[callbackName]) {\n          this[callbackName](one, two, three, four);\n\n          var counter = 4;\n\n          while (this[callbackName = name + counter.toString()] !== undefined) {\n            this[callbackName](one, two, three, four);\n            counter++;\n          }\n        }\n      }\n    }\n  };\n\n  ViewResources.prototype.registerViewEngineHooks = function registerViewEngineHooks(hooks) {\n    this._tryAddHook(hooks, 'beforeCompile');\n    this._tryAddHook(hooks, 'afterCompile');\n    this._tryAddHook(hooks, 'beforeCreate');\n    this._tryAddHook(hooks, 'afterCreate');\n    this._tryAddHook(hooks, 'beforeBind');\n    this._tryAddHook(hooks, 'beforeUnbind');\n  };\n\n  ViewResources.prototype.getBindingLanguage = function getBindingLanguage(bindingLanguageFallback) {\n    return this.bindingLanguage || (this.bindingLanguage = bindingLanguageFallback);\n  };\n\n  ViewResources.prototype.patchInParent = function patchInParent(newParent) {\n    var originalParent = this.parent;\n\n    this.parent = newParent || null;\n    this.hasParent = this.parent !== null;\n\n    if (newParent.parent === null) {\n      newParent.parent = originalParent;\n      newParent.hasParent = originalParent !== null;\n    }\n  };\n\n  ViewResources.prototype.relativeToView = function relativeToView(path) {\n    return relativeToFile(path, this.viewUrl);\n  };\n\n  ViewResources.prototype.registerElement = function registerElement(tagName, behavior) {\n    register(this.elements, tagName, behavior, 'an Element');\n  };\n\n  ViewResources.prototype.getElement = function getElement(tagName) {\n    return this.elements[tagName] || (this.hasParent ? this.parent.getElement(tagName) : null);\n  };\n\n  ViewResources.prototype.mapAttribute = function mapAttribute(attribute) {\n    return this.attributeMap[attribute] || (this.hasParent ? this.parent.mapAttribute(attribute) : null);\n  };\n\n  ViewResources.prototype.registerAttribute = function registerAttribute(attribute, behavior, knownAttribute) {\n    this.attributeMap[attribute] = knownAttribute;\n    register(this.attributes, attribute, behavior, 'an Attribute');\n  };\n\n  ViewResources.prototype.getAttribute = function getAttribute(attribute) {\n    return this.attributes[attribute] || (this.hasParent ? this.parent.getAttribute(attribute) : null);\n  };\n\n  ViewResources.prototype.registerValueConverter = function registerValueConverter(name, valueConverter) {\n    register(this.valueConverters, name, valueConverter, 'a ValueConverter');\n  };\n\n  ViewResources.prototype.getValueConverter = function getValueConverter(name) {\n    return this.valueConverters[name] || (this.hasParent ? this.parent.getValueConverter(name) : null);\n  };\n\n  ViewResources.prototype.registerBindingBehavior = function registerBindingBehavior(name, bindingBehavior) {\n    register(this.bindingBehaviors, name, bindingBehavior, 'a BindingBehavior');\n  };\n\n  ViewResources.prototype.getBindingBehavior = function getBindingBehavior(name) {\n    return this.bindingBehaviors[name] || (this.hasParent ? this.parent.getBindingBehavior(name) : null);\n  };\n\n  ViewResources.prototype.registerValue = function registerValue(name, value) {\n    register(this.values, name, value, 'a value');\n  };\n\n  ViewResources.prototype.getValue = function getValue(name) {\n    return this.values[name] || (this.hasParent ? this.parent.getValue(name) : null);\n  };\n\n  ViewResources.prototype.autoRegister = function autoRegister(container, impl) {\n    var resourceTypeMeta = metadata.getOwn(metadata.resource, impl);\n    if (resourceTypeMeta) {\n      if (resourceTypeMeta instanceof HtmlBehaviorResource) {\n        ViewResources.convention(impl, resourceTypeMeta);\n\n        if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\n          HtmlBehaviorResource.convention(impl.name, resourceTypeMeta);\n        }\n        if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\n          resourceTypeMeta.elementName = _hyphenate(impl.name);\n        }\n      }\n    } else {\n      resourceTypeMeta = ViewResources.convention(impl) || HtmlBehaviorResource.convention(impl.name) || ValueConverterResource.convention(impl.name) || BindingBehaviorResource.convention(impl.name) || ViewEngineHooksResource.convention(impl.name);\n      if (!resourceTypeMeta) {\n        resourceTypeMeta = new HtmlBehaviorResource();\n        resourceTypeMeta.elementName = _hyphenate(impl.name);\n      }\n      metadata.define(metadata.resource, resourceTypeMeta, impl);\n    }\n    resourceTypeMeta.initialize(container, impl);\n    resourceTypeMeta.register(this);\n    return resourceTypeMeta;\n  };\n\n  return ViewResources;\n}();\n\nexport var View = function () {\n  function View(container, viewFactory, fragment, controllers, bindings, children, slots) {\n    \n\n    this.container = container;\n    this.viewFactory = viewFactory;\n    this.resources = viewFactory.resources;\n    this.fragment = fragment;\n    this.firstChild = fragment.firstChild;\n    this.lastChild = fragment.lastChild;\n    this.controllers = controllers;\n    this.bindings = bindings;\n    this.children = children;\n    this.slots = slots;\n    this.hasSlots = false;\n    this.fromCache = false;\n    this.isBound = false;\n    this.isAttached = false;\n    this.bindingContext = null;\n    this.overrideContext = null;\n    this.controller = null;\n    this.viewModelScope = null;\n    this.animatableElement = undefined;\n    this._isUserControlled = false;\n    this.contentView = null;\n\n    for (var _key3 in slots) {\n      this.hasSlots = true;\n      break;\n    }\n  }\n\n  View.prototype.returnToCache = function returnToCache() {\n    this.viewFactory.returnViewToCache(this);\n  };\n\n  View.prototype.created = function created() {\n    var i = void 0;\n    var ii = void 0;\n    var controllers = this.controllers;\n\n    for (i = 0, ii = controllers.length; i < ii; ++i) {\n      controllers[i].created(this);\n    }\n  };\n\n  View.prototype.bind = function bind(bindingContext, overrideContext, _systemUpdate) {\n    var controllers = void 0;\n    var bindings = void 0;\n    var children = void 0;\n    var i = void 0;\n    var ii = void 0;\n\n    if (_systemUpdate && this._isUserControlled) {\n      return;\n    }\n\n    if (this.isBound) {\n      if (this.bindingContext === bindingContext) {\n        return;\n      }\n\n      this.unbind();\n    }\n\n    this.isBound = true;\n    this.bindingContext = bindingContext;\n    this.overrideContext = overrideContext || createOverrideContext(bindingContext);\n\n    this.resources._invokeHook('beforeBind', this);\n\n    bindings = this.bindings;\n    for (i = 0, ii = bindings.length; i < ii; ++i) {\n      bindings[i].bind(this);\n    }\n\n    if (this.viewModelScope !== null) {\n      bindingContext.bind(this.viewModelScope.bindingContext, this.viewModelScope.overrideContext);\n      this.viewModelScope = null;\n    }\n\n    controllers = this.controllers;\n    for (i = 0, ii = controllers.length; i < ii; ++i) {\n      controllers[i].bind(this);\n    }\n\n    children = this.children;\n    for (i = 0, ii = children.length; i < ii; ++i) {\n      children[i].bind(bindingContext, overrideContext, true);\n    }\n\n    if (this.hasSlots) {\n      ShadowDOM.distributeView(this.contentView, this.slots);\n    }\n  };\n\n  View.prototype.addBinding = function addBinding(binding) {\n    this.bindings.push(binding);\n\n    if (this.isBound) {\n      binding.bind(this);\n    }\n  };\n\n  View.prototype.unbind = function unbind() {\n    var controllers = void 0;\n    var bindings = void 0;\n    var children = void 0;\n    var i = void 0;\n    var ii = void 0;\n\n    if (this.isBound) {\n      this.isBound = false;\n      this.resources._invokeHook('beforeUnbind', this);\n\n      if (this.controller !== null) {\n        this.controller.unbind();\n      }\n\n      bindings = this.bindings;\n      for (i = 0, ii = bindings.length; i < ii; ++i) {\n        bindings[i].unbind();\n      }\n\n      controllers = this.controllers;\n      for (i = 0, ii = controllers.length; i < ii; ++i) {\n        controllers[i].unbind();\n      }\n\n      children = this.children;\n      for (i = 0, ii = children.length; i < ii; ++i) {\n        children[i].unbind();\n      }\n\n      this.bindingContext = null;\n      this.overrideContext = null;\n    }\n  };\n\n  View.prototype.insertNodesBefore = function insertNodesBefore(refNode) {\n    refNode.parentNode.insertBefore(this.fragment, refNode);\n  };\n\n  View.prototype.appendNodesTo = function appendNodesTo(parent) {\n    parent.appendChild(this.fragment);\n  };\n\n  View.prototype.removeNodes = function removeNodes() {\n    var fragment = this.fragment;\n    var current = this.firstChild;\n    var end = this.lastChild;\n    var next = void 0;\n\n    while (current) {\n      next = current.nextSibling;\n      fragment.appendChild(current);\n\n      if (current === end) {\n        break;\n      }\n\n      current = next;\n    }\n  };\n\n  View.prototype.attached = function attached() {\n    var controllers = void 0;\n    var children = void 0;\n    var i = void 0;\n    var ii = void 0;\n\n    if (this.isAttached) {\n      return;\n    }\n\n    this.isAttached = true;\n\n    if (this.controller !== null) {\n      this.controller.attached();\n    }\n\n    controllers = this.controllers;\n    for (i = 0, ii = controllers.length; i < ii; ++i) {\n      controllers[i].attached();\n    }\n\n    children = this.children;\n    for (i = 0, ii = children.length; i < ii; ++i) {\n      children[i].attached();\n    }\n  };\n\n  View.prototype.detached = function detached() {\n    var controllers = void 0;\n    var children = void 0;\n    var i = void 0;\n    var ii = void 0;\n\n    if (this.isAttached) {\n      this.isAttached = false;\n\n      if (this.controller !== null) {\n        this.controller.detached();\n      }\n\n      controllers = this.controllers;\n      for (i = 0, ii = controllers.length; i < ii; ++i) {\n        controllers[i].detached();\n      }\n\n      children = this.children;\n      for (i = 0, ii = children.length; i < ii; ++i) {\n        children[i].detached();\n      }\n    }\n  };\n\n  return View;\n}();\n\nfunction getAnimatableElement(view) {\n  if (view.animatableElement !== undefined) {\n    return view.animatableElement;\n  }\n\n  var current = view.firstChild;\n\n  while (current && current.nodeType !== 1) {\n    current = current.nextSibling;\n  }\n\n  if (current && current.nodeType === 1) {\n    return view.animatableElement = current.classList.contains('au-animate') ? current : null;\n  }\n\n  return view.animatableElement = null;\n}\n\nexport var ViewSlot = function () {\n  function ViewSlot(anchor, anchorIsContainer) {\n    var animator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Animator.instance;\n\n    \n\n    this.anchor = anchor;\n    this.anchorIsContainer = anchorIsContainer;\n    this.bindingContext = null;\n    this.overrideContext = null;\n    this.animator = animator;\n    this.children = [];\n    this.isBound = false;\n    this.isAttached = false;\n    this.contentSelectors = null;\n    anchor.viewSlot = this;\n    anchor.isContentProjectionSource = false;\n  }\n\n  ViewSlot.prototype.animateView = function animateView(view) {\n    var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'enter';\n\n    var animatableElement = getAnimatableElement(view);\n\n    if (animatableElement !== null) {\n      switch (direction) {\n        case 'enter':\n          return this.animator.enter(animatableElement);\n        case 'leave':\n          return this.animator.leave(animatableElement);\n        default:\n          throw new Error('Invalid animation direction: ' + direction);\n      }\n    }\n  };\n\n  ViewSlot.prototype.transformChildNodesIntoView = function transformChildNodesIntoView() {\n    var parent = this.anchor;\n\n    this.children.push({\n      fragment: parent,\n      firstChild: parent.firstChild,\n      lastChild: parent.lastChild,\n      returnToCache: function returnToCache() {},\n      removeNodes: function removeNodes() {\n        var last = void 0;\n\n        while (last = parent.lastChild) {\n          parent.removeChild(last);\n        }\n      },\n      created: function created() {},\n      bind: function bind() {},\n      unbind: function unbind() {},\n      attached: function attached() {},\n      detached: function detached() {}\n    });\n  };\n\n  ViewSlot.prototype.bind = function bind(bindingContext, overrideContext) {\n    var i = void 0;\n    var ii = void 0;\n    var children = void 0;\n\n    if (this.isBound) {\n      if (this.bindingContext === bindingContext) {\n        return;\n      }\n\n      this.unbind();\n    }\n\n    this.isBound = true;\n    this.bindingContext = bindingContext = bindingContext || this.bindingContext;\n    this.overrideContext = overrideContext = overrideContext || this.overrideContext;\n\n    children = this.children;\n    for (i = 0, ii = children.length; i < ii; ++i) {\n      children[i].bind(bindingContext, overrideContext, true);\n    }\n  };\n\n  ViewSlot.prototype.unbind = function unbind() {\n    if (this.isBound) {\n      var i = void 0;\n      var ii = void 0;\n      var _children4 = this.children;\n\n      this.isBound = false;\n      this.bindingContext = null;\n      this.overrideContext = null;\n\n      for (i = 0, ii = _children4.length; i < ii; ++i) {\n        _children4[i].unbind();\n      }\n    }\n  };\n\n  ViewSlot.prototype.add = function add(view) {\n    if (this.anchorIsContainer) {\n      view.appendNodesTo(this.anchor);\n    } else {\n      view.insertNodesBefore(this.anchor);\n    }\n\n    this.children.push(view);\n\n    if (this.isAttached) {\n      view.attached();\n      return this.animateView(view, 'enter');\n    }\n  };\n\n  ViewSlot.prototype.insert = function insert(index, view) {\n    var children = this.children;\n    var length = children.length;\n\n    if (index === 0 && length === 0 || index >= length) {\n      return this.add(view);\n    }\n\n    view.insertNodesBefore(children[index].firstChild);\n    children.splice(index, 0, view);\n\n    if (this.isAttached) {\n      view.attached();\n      return this.animateView(view, 'enter');\n    }\n  };\n\n  ViewSlot.prototype.move = function move(sourceIndex, targetIndex) {\n    if (sourceIndex === targetIndex) {\n      return;\n    }\n\n    var children = this.children;\n    var view = children[sourceIndex];\n\n    view.removeNodes();\n    view.insertNodesBefore(children[targetIndex].firstChild);\n    children.splice(sourceIndex, 1);\n    children.splice(targetIndex, 0, view);\n  };\n\n  ViewSlot.prototype.remove = function remove(view, returnToCache, skipAnimation) {\n    return this.removeAt(this.children.indexOf(view), returnToCache, skipAnimation);\n  };\n\n  ViewSlot.prototype.removeMany = function removeMany(viewsToRemove, returnToCache, skipAnimation) {\n    var _this3 = this;\n\n    var children = this.children;\n    var ii = viewsToRemove.length;\n    var i = void 0;\n    var rmPromises = [];\n\n    viewsToRemove.forEach(function (child) {\n      if (skipAnimation) {\n        child.removeNodes();\n        return;\n      }\n\n      var animation = _this3.animateView(child, 'leave');\n      if (animation) {\n        rmPromises.push(animation.then(function () {\n          return child.removeNodes();\n        }));\n      } else {\n        child.removeNodes();\n      }\n    });\n\n    var removeAction = function removeAction() {\n      if (_this3.isAttached) {\n        for (i = 0; i < ii; ++i) {\n          viewsToRemove[i].detached();\n        }\n      }\n\n      if (returnToCache) {\n        for (i = 0; i < ii; ++i) {\n          viewsToRemove[i].returnToCache();\n        }\n      }\n\n      for (i = 0; i < ii; ++i) {\n        var index = children.indexOf(viewsToRemove[i]);\n        if (index >= 0) {\n          children.splice(index, 1);\n        }\n      }\n    };\n\n    if (rmPromises.length > 0) {\n      return Promise.all(rmPromises).then(function () {\n        return removeAction();\n      });\n    }\n\n    return removeAction();\n  };\n\n  ViewSlot.prototype.removeAt = function removeAt(index, returnToCache, skipAnimation) {\n    var _this4 = this;\n\n    var view = this.children[index];\n\n    var removeAction = function removeAction() {\n      index = _this4.children.indexOf(view);\n      view.removeNodes();\n      _this4.children.splice(index, 1);\n\n      if (_this4.isAttached) {\n        view.detached();\n      }\n\n      if (returnToCache) {\n        view.returnToCache();\n      }\n\n      return view;\n    };\n\n    if (!skipAnimation) {\n      var animation = this.animateView(view, 'leave');\n      if (animation) {\n        return animation.then(function () {\n          return removeAction();\n        });\n      }\n    }\n\n    return removeAction();\n  };\n\n  ViewSlot.prototype.removeAll = function removeAll(returnToCache, skipAnimation) {\n    var _this5 = this;\n\n    var children = this.children;\n    var ii = children.length;\n    var i = void 0;\n    var rmPromises = [];\n\n    children.forEach(function (child) {\n      if (skipAnimation) {\n        child.removeNodes();\n        return;\n      }\n\n      var animation = _this5.animateView(child, 'leave');\n      if (animation) {\n        rmPromises.push(animation.then(function () {\n          return child.removeNodes();\n        }));\n      } else {\n        child.removeNodes();\n      }\n    });\n\n    var removeAction = function removeAction() {\n      if (_this5.isAttached) {\n        for (i = 0; i < ii; ++i) {\n          children[i].detached();\n        }\n      }\n\n      if (returnToCache) {\n        for (i = 0; i < ii; ++i) {\n          var _child3 = children[i];\n\n          if (_child3) {\n            _child3.returnToCache();\n          }\n        }\n      }\n\n      _this5.children = [];\n    };\n\n    if (rmPromises.length > 0) {\n      return Promise.all(rmPromises).then(function () {\n        return removeAction();\n      });\n    }\n\n    return removeAction();\n  };\n\n  ViewSlot.prototype.attached = function attached() {\n    var i = void 0;\n    var ii = void 0;\n    var children = void 0;\n    var child = void 0;\n\n    if (this.isAttached) {\n      return;\n    }\n\n    this.isAttached = true;\n\n    children = this.children;\n    for (i = 0, ii = children.length; i < ii; ++i) {\n      child = children[i];\n      child.attached();\n      this.animateView(child, 'enter');\n    }\n  };\n\n  ViewSlot.prototype.detached = function detached() {\n    var i = void 0;\n    var ii = void 0;\n    var children = void 0;\n\n    if (this.isAttached) {\n      this.isAttached = false;\n      children = this.children;\n      for (i = 0, ii = children.length; i < ii; ++i) {\n        children[i].detached();\n      }\n    }\n  };\n\n  ViewSlot.prototype.projectTo = function projectTo(slots) {\n    var _this6 = this;\n\n    this.projectToSlots = slots;\n    this.add = this._projectionAdd;\n    this.insert = this._projectionInsert;\n    this.move = this._projectionMove;\n    this.remove = this._projectionRemove;\n    this.removeAt = this._projectionRemoveAt;\n    this.removeMany = this._projectionRemoveMany;\n    this.removeAll = this._projectionRemoveAll;\n    this.children.forEach(function (view) {\n      return ShadowDOM.distributeView(view, slots, _this6);\n    });\n  };\n\n  ViewSlot.prototype._projectionAdd = function _projectionAdd(view) {\n    ShadowDOM.distributeView(view, this.projectToSlots, this);\n\n    this.children.push(view);\n\n    if (this.isAttached) {\n      view.attached();\n    }\n  };\n\n  ViewSlot.prototype._projectionInsert = function _projectionInsert(index, view) {\n    if (index === 0 && !this.children.length || index >= this.children.length) {\n      this.add(view);\n    } else {\n      ShadowDOM.distributeView(view, this.projectToSlots, this, index);\n\n      this.children.splice(index, 0, view);\n\n      if (this.isAttached) {\n        view.attached();\n      }\n    }\n  };\n\n  ViewSlot.prototype._projectionMove = function _projectionMove(sourceIndex, targetIndex) {\n    if (sourceIndex === targetIndex) {\n      return;\n    }\n\n    var children = this.children;\n    var view = children[sourceIndex];\n\n    ShadowDOM.undistributeView(view, this.projectToSlots, this);\n    ShadowDOM.distributeView(view, this.projectToSlots, this, targetIndex);\n\n    children.splice(sourceIndex, 1);\n    children.splice(targetIndex, 0, view);\n  };\n\n  ViewSlot.prototype._projectionRemove = function _projectionRemove(view, returnToCache) {\n    ShadowDOM.undistributeView(view, this.projectToSlots, this);\n    this.children.splice(this.children.indexOf(view), 1);\n\n    if (this.isAttached) {\n      view.detached();\n    }\n    if (returnToCache) {\n      view.returnToCache();\n    }\n  };\n\n  ViewSlot.prototype._projectionRemoveAt = function _projectionRemoveAt(index, returnToCache) {\n    var view = this.children[index];\n\n    ShadowDOM.undistributeView(view, this.projectToSlots, this);\n    this.children.splice(index, 1);\n\n    if (this.isAttached) {\n      view.detached();\n    }\n    if (returnToCache) {\n      view.returnToCache();\n    }\n  };\n\n  ViewSlot.prototype._projectionRemoveMany = function _projectionRemoveMany(viewsToRemove, returnToCache) {\n    var _this7 = this;\n\n    viewsToRemove.forEach(function (view) {\n      return _this7.remove(view, returnToCache);\n    });\n  };\n\n  ViewSlot.prototype._projectionRemoveAll = function _projectionRemoveAll(returnToCache) {\n    ShadowDOM.undistributeAll(this.projectToSlots, this);\n\n    var children = this.children;\n    var ii = children.length;\n\n    for (var i = 0; i < ii; ++i) {\n      if (returnToCache) {\n        children[i].returnToCache();\n      } else if (this.isAttached) {\n        children[i].detached();\n      }\n    }\n\n    this.children = [];\n  };\n\n  return ViewSlot;\n}();\n\nvar ProviderResolver = resolver(_class12 = function () {\n  function ProviderResolver() {\n    \n  }\n\n  ProviderResolver.prototype.get = function get(container, key) {\n    var id = key.__providerId__;\n    return id in container ? container[id] : container[id] = container.invoke(key);\n  };\n\n  return ProviderResolver;\n}()) || _class12;\n\nvar providerResolverInstance = new ProviderResolver();\n\nfunction elementContainerGet(key) {\n  if (key === DOM.Element) {\n    return this.element;\n  }\n\n  if (key === BoundViewFactory) {\n    if (this.boundViewFactory) {\n      return this.boundViewFactory;\n    }\n\n    var factory = this.instruction.viewFactory;\n    var _partReplacements = this.partReplacements;\n\n    if (_partReplacements) {\n      factory = _partReplacements[factory.part] || factory;\n    }\n\n    this.boundViewFactory = new BoundViewFactory(this, factory, _partReplacements);\n    return this.boundViewFactory;\n  }\n\n  if (key === ViewSlot) {\n    if (this.viewSlot === undefined) {\n      this.viewSlot = new ViewSlot(this.element, this.instruction.anchorIsContainer);\n      this.element.isContentProjectionSource = this.instruction.lifting;\n      this.children.push(this.viewSlot);\n    }\n\n    return this.viewSlot;\n  }\n\n  if (key === ElementEvents) {\n    return this.elementEvents || (this.elementEvents = new ElementEvents(this.element));\n  }\n\n  if (key === CompositionTransaction) {\n    return this.compositionTransaction || (this.compositionTransaction = this.parent.get(key));\n  }\n\n  if (key === ViewResources) {\n    return this.viewResources;\n  }\n\n  if (key === TargetInstruction) {\n    return this.instruction;\n  }\n\n  return this.superGet(key);\n}\n\nfunction createElementContainer(parent, element, instruction, children, partReplacements, resources) {\n  var container = parent.createChild();\n  var providers = void 0;\n  var i = void 0;\n\n  container.element = element;\n  container.instruction = instruction;\n  container.children = children;\n  container.viewResources = resources;\n  container.partReplacements = partReplacements;\n\n  providers = instruction.providers;\n  i = providers.length;\n\n  while (i--) {\n    container._resolvers.set(providers[i], providerResolverInstance);\n  }\n\n  container.superGet = container.get;\n  container.get = elementContainerGet;\n\n  return container;\n}\n\nfunction hasAttribute(name) {\n  return this._element.hasAttribute(name);\n}\n\nfunction getAttribute(name) {\n  return this._element.getAttribute(name);\n}\n\nfunction setAttribute(name, value) {\n  this._element.setAttribute(name, value);\n}\n\nfunction makeElementIntoAnchor(element, elementInstruction) {\n  var anchor = DOM.createComment('anchor');\n\n  if (elementInstruction) {\n    var firstChild = element.firstChild;\n\n    if (firstChild && firstChild.tagName === 'AU-CONTENT') {\n      anchor.contentElement = firstChild;\n    }\n\n    anchor._element = element;\n\n    anchor.hasAttribute = hasAttribute;\n    anchor.getAttribute = getAttribute;\n    anchor.setAttribute = setAttribute;\n  }\n\n  DOM.replaceNode(anchor, element);\n\n  return anchor;\n}\n\nfunction applyInstructions(containers, element, instruction, controllers, bindings, children, shadowSlots, partReplacements, resources) {\n  var behaviorInstructions = instruction.behaviorInstructions;\n  var expressions = instruction.expressions;\n  var elementContainer = void 0;\n  var i = void 0;\n  var ii = void 0;\n  var current = void 0;\n  var instance = void 0;\n\n  if (instruction.contentExpression) {\n    bindings.push(instruction.contentExpression.createBinding(element.nextSibling));\n    element.nextSibling.auInterpolationTarget = true;\n    element.parentNode.removeChild(element);\n    return;\n  }\n\n  if (instruction.shadowSlot) {\n    var commentAnchor = DOM.createComment('slot');\n    var slot = void 0;\n\n    if (instruction.slotDestination) {\n      slot = new PassThroughSlot(commentAnchor, instruction.slotName, instruction.slotDestination, instruction.slotFallbackFactory);\n    } else {\n      slot = new ShadowSlot(commentAnchor, instruction.slotName, instruction.slotFallbackFactory);\n    }\n\n    DOM.replaceNode(commentAnchor, element);\n    shadowSlots[instruction.slotName] = slot;\n    controllers.push(slot);\n    return;\n  }\n\n  if (instruction.letElement) {\n    for (i = 0, ii = expressions.length; i < ii; ++i) {\n      bindings.push(expressions[i].createBinding());\n    }\n    element.parentNode.removeChild(element);\n    return;\n  }\n\n  if (behaviorInstructions.length) {\n    if (!instruction.anchorIsContainer) {\n      element = makeElementIntoAnchor(element, instruction.elementInstruction);\n    }\n\n    containers[instruction.injectorId] = elementContainer = createElementContainer(containers[instruction.parentInjectorId], element, instruction, children, partReplacements, resources);\n\n    for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {\n      current = behaviorInstructions[i];\n      instance = current.type.create(elementContainer, current, element, bindings);\n      controllers.push(instance);\n    }\n  }\n\n  for (i = 0, ii = expressions.length; i < ii; ++i) {\n    bindings.push(expressions[i].createBinding(element));\n  }\n}\n\nfunction styleStringToObject(style, target) {\n  var attributes = style.split(';');\n  var firstIndexOfColon = void 0;\n  var i = void 0;\n  var current = void 0;\n  var key = void 0;\n  var value = void 0;\n\n  target = target || {};\n\n  for (i = 0; i < attributes.length; i++) {\n    current = attributes[i];\n    firstIndexOfColon = current.indexOf(':');\n    key = current.substring(0, firstIndexOfColon).trim();\n    value = current.substring(firstIndexOfColon + 1).trim();\n    target[key] = value;\n  }\n\n  return target;\n}\n\nfunction styleObjectToString(obj) {\n  var result = '';\n\n  for (var _key4 in obj) {\n    result += _key4 + ':' + obj[_key4] + ';';\n  }\n\n  return result;\n}\n\nfunction applySurrogateInstruction(container, element, instruction, controllers, bindings, children) {\n  var behaviorInstructions = instruction.behaviorInstructions;\n  var expressions = instruction.expressions;\n  var providers = instruction.providers;\n  var values = instruction.values;\n  var i = void 0;\n  var ii = void 0;\n  var current = void 0;\n  var instance = void 0;\n  var currentAttributeValue = void 0;\n\n  i = providers.length;\n  while (i--) {\n    container._resolvers.set(providers[i], providerResolverInstance);\n  }\n\n  for (var _key5 in values) {\n    currentAttributeValue = element.getAttribute(_key5);\n\n    if (currentAttributeValue) {\n      if (_key5 === 'class') {\n        element.setAttribute('class', currentAttributeValue + ' ' + values[_key5]);\n      } else if (_key5 === 'style') {\n        var styleObject = styleStringToObject(values[_key5]);\n        styleStringToObject(currentAttributeValue, styleObject);\n        element.setAttribute('style', styleObjectToString(styleObject));\n      }\n    } else {\n      element.setAttribute(_key5, values[_key5]);\n    }\n  }\n\n  if (behaviorInstructions.length) {\n    for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {\n      current = behaviorInstructions[i];\n      instance = current.type.create(container, current, element, bindings);\n\n      if (instance.contentView) {\n        children.push(instance.contentView);\n      }\n\n      controllers.push(instance);\n    }\n  }\n\n  for (i = 0, ii = expressions.length; i < ii; ++i) {\n    bindings.push(expressions[i].createBinding(element));\n  }\n}\n\nexport var BoundViewFactory = function () {\n  function BoundViewFactory(parentContainer, viewFactory, partReplacements) {\n    \n\n    this.parentContainer = parentContainer;\n    this.viewFactory = viewFactory;\n    this.factoryCreateInstruction = { partReplacements: partReplacements };\n  }\n\n  BoundViewFactory.prototype.create = function create() {\n    var view = this.viewFactory.create(this.parentContainer.createChild(), this.factoryCreateInstruction);\n    view._isUserControlled = true;\n    return view;\n  };\n\n  BoundViewFactory.prototype.setCacheSize = function setCacheSize(size, doNotOverrideIfAlreadySet) {\n    this.viewFactory.setCacheSize(size, doNotOverrideIfAlreadySet);\n  };\n\n  BoundViewFactory.prototype.getCachedView = function getCachedView() {\n    return this.viewFactory.getCachedView();\n  };\n\n  BoundViewFactory.prototype.returnViewToCache = function returnViewToCache(view) {\n    this.viewFactory.returnViewToCache(view);\n  };\n\n  _createClass(BoundViewFactory, [{\n    key: 'isCaching',\n    get: function get() {\n      return this.viewFactory.isCaching;\n    }\n  }]);\n\n  return BoundViewFactory;\n}();\n\nexport var ViewFactory = function () {\n  function ViewFactory(template, instructions, resources) {\n    \n\n    this.isCaching = false;\n\n    this.template = template;\n    this.instructions = instructions;\n    this.resources = resources;\n    this.cacheSize = -1;\n    this.cache = null;\n  }\n\n  ViewFactory.prototype.setCacheSize = function setCacheSize(size, doNotOverrideIfAlreadySet) {\n    if (size) {\n      if (size === '*') {\n        size = Number.MAX_VALUE;\n      } else if (typeof size === 'string') {\n        size = parseInt(size, 10);\n      }\n    }\n\n    if (this.cacheSize === -1 || !doNotOverrideIfAlreadySet) {\n      this.cacheSize = size;\n    }\n\n    if (this.cacheSize > 0) {\n      this.cache = [];\n    } else {\n      this.cache = null;\n    }\n\n    this.isCaching = this.cacheSize > 0;\n  };\n\n  ViewFactory.prototype.getCachedView = function getCachedView() {\n    return this.cache !== null ? this.cache.pop() || null : null;\n  };\n\n  ViewFactory.prototype.returnViewToCache = function returnViewToCache(view) {\n    if (view.isAttached) {\n      view.detached();\n    }\n\n    if (view.isBound) {\n      view.unbind();\n    }\n\n    if (this.cache !== null && this.cache.length < this.cacheSize) {\n      view.fromCache = true;\n      this.cache.push(view);\n    }\n  };\n\n  ViewFactory.prototype.create = function create(container, createInstruction, element) {\n    createInstruction = createInstruction || BehaviorInstruction.normal;\n\n    var cachedView = this.getCachedView();\n    if (cachedView !== null) {\n      return cachedView;\n    }\n\n    var fragment = createInstruction.enhance ? this.template : this.template.cloneNode(true);\n    var instructables = fragment.querySelectorAll('.au-target');\n    var instructions = this.instructions;\n    var resources = this.resources;\n    var controllers = [];\n    var bindings = [];\n    var children = [];\n    var shadowSlots = Object.create(null);\n    var containers = { root: container };\n    var partReplacements = createInstruction.partReplacements;\n    var i = void 0;\n    var ii = void 0;\n    var view = void 0;\n    var instructable = void 0;\n    var instruction = void 0;\n\n    this.resources._invokeHook('beforeCreate', this, container, fragment, createInstruction);\n\n    if (element && this.surrogateInstruction !== null) {\n      applySurrogateInstruction(container, element, this.surrogateInstruction, controllers, bindings, children);\n    }\n\n    if (createInstruction.enhance && fragment.hasAttribute('au-target-id')) {\n      instructable = fragment;\n      instruction = instructions[instructable.getAttribute('au-target-id')];\n      applyInstructions(containers, instructable, instruction, controllers, bindings, children, shadowSlots, partReplacements, resources);\n    }\n\n    for (i = 0, ii = instructables.length; i < ii; ++i) {\n      instructable = instructables[i];\n      instruction = instructions[instructable.getAttribute('au-target-id')];\n      applyInstructions(containers, instructable, instruction, controllers, bindings, children, shadowSlots, partReplacements, resources);\n    }\n\n    view = new View(container, this, fragment, controllers, bindings, children, shadowSlots);\n\n    if (!createInstruction.initiatedByBehavior) {\n      view.created();\n    }\n\n    this.resources._invokeHook('afterCreate', view);\n\n    return view;\n  };\n\n  return ViewFactory;\n}();\n\nvar nextInjectorId = 0;\nfunction getNextInjectorId() {\n  return ++nextInjectorId;\n}\n\nvar lastAUTargetID = 0;\nfunction getNextAUTargetID() {\n  return (++lastAUTargetID).toString();\n}\n\nfunction makeIntoInstructionTarget(element) {\n  var value = element.getAttribute('class');\n  var auTargetID = getNextAUTargetID();\n\n  element.setAttribute('class', value ? value + ' au-target' : 'au-target');\n  element.setAttribute('au-target-id', auTargetID);\n\n  return auTargetID;\n}\n\nfunction makeShadowSlot(compiler, resources, node, instructions, parentInjectorId) {\n  var auShadowSlot = DOM.createElement('au-shadow-slot');\n  DOM.replaceNode(auShadowSlot, node);\n\n  var auTargetID = makeIntoInstructionTarget(auShadowSlot);\n  var instruction = TargetInstruction.shadowSlot(parentInjectorId);\n\n  instruction.slotName = node.getAttribute('name') || ShadowDOM.defaultSlotKey;\n  instruction.slotDestination = node.getAttribute('slot');\n\n  if (node.innerHTML.trim()) {\n    var fragment = DOM.createDocumentFragment();\n    var _child4 = void 0;\n\n    while (_child4 = node.firstChild) {\n      fragment.appendChild(_child4);\n    }\n\n    instruction.slotFallbackFactory = compiler.compile(fragment, resources);\n  }\n\n  instructions[auTargetID] = instruction;\n\n  return auShadowSlot;\n}\n\nvar defaultLetHandler = BindingLanguage.prototype.createLetExpressions;\n\nexport var ViewCompiler = (_dec7 = inject(BindingLanguage, ViewResources), _dec7(_class14 = function () {\n  function ViewCompiler(bindingLanguage, resources) {\n    \n\n    this.bindingLanguage = bindingLanguage;\n    this.resources = resources;\n  }\n\n  ViewCompiler.prototype.compile = function compile(source, resources, compileInstruction) {\n    resources = resources || this.resources;\n    compileInstruction = compileInstruction || ViewCompileInstruction.normal;\n    source = typeof source === 'string' ? DOM.createTemplateFromMarkup(source) : source;\n\n    var content = void 0;\n    var part = void 0;\n    var cacheSize = void 0;\n\n    if (source.content) {\n      part = source.getAttribute('part');\n      cacheSize = source.getAttribute('view-cache');\n      content = DOM.adoptNode(source.content);\n    } else {\n      content = source;\n    }\n\n    compileInstruction.targetShadowDOM = compileInstruction.targetShadowDOM && FEATURE.shadowDOM;\n    resources._invokeHook('beforeCompile', content, resources, compileInstruction);\n\n    var instructions = {};\n    this._compileNode(content, resources, instructions, source, 'root', !compileInstruction.targetShadowDOM);\n\n    var firstChild = content.firstChild;\n    if (firstChild && firstChild.nodeType === 1) {\n      var targetId = firstChild.getAttribute('au-target-id');\n      if (targetId) {\n        var ins = instructions[targetId];\n\n        if (ins.shadowSlot || ins.lifting || ins.elementInstruction && !ins.elementInstruction.anchorIsContainer) {\n          content.insertBefore(DOM.createComment('view'), firstChild);\n        }\n      }\n    }\n\n    var factory = new ViewFactory(content, instructions, resources);\n\n    factory.surrogateInstruction = compileInstruction.compileSurrogate ? this._compileSurrogate(source, resources) : null;\n    factory.part = part;\n\n    if (cacheSize) {\n      factory.setCacheSize(cacheSize);\n    }\n\n    resources._invokeHook('afterCompile', factory);\n\n    return factory;\n  };\n\n  ViewCompiler.prototype._compileNode = function _compileNode(node, resources, instructions, parentNode, parentInjectorId, targetLightDOM) {\n    switch (node.nodeType) {\n      case 1:\n        return this._compileElement(node, resources, instructions, parentNode, parentInjectorId, targetLightDOM);\n      case 3:\n        var expression = resources.getBindingLanguage(this.bindingLanguage).inspectTextContent(resources, node.wholeText);\n        if (expression) {\n          var marker = DOM.createElement('au-marker');\n          var auTargetID = makeIntoInstructionTarget(marker);\n          (node.parentNode || parentNode).insertBefore(marker, node);\n          node.textContent = ' ';\n          instructions[auTargetID] = TargetInstruction.contentExpression(expression);\n\n          while (node.nextSibling && node.nextSibling.nodeType === 3) {\n            (node.parentNode || parentNode).removeChild(node.nextSibling);\n          }\n        } else {\n          while (node.nextSibling && node.nextSibling.nodeType === 3) {\n            node = node.nextSibling;\n          }\n        }\n        return node.nextSibling;\n      case 11:\n        var currentChild = node.firstChild;\n        while (currentChild) {\n          currentChild = this._compileNode(currentChild, resources, instructions, node, parentInjectorId, targetLightDOM);\n        }\n        break;\n      default:\n        break;\n    }\n\n    return node.nextSibling;\n  };\n\n  ViewCompiler.prototype._compileSurrogate = function _compileSurrogate(node, resources) {\n    var tagName = node.tagName.toLowerCase();\n    var attributes = node.attributes;\n    var bindingLanguage = resources.getBindingLanguage(this.bindingLanguage);\n    var knownAttribute = void 0;\n    var property = void 0;\n    var instruction = void 0;\n    var i = void 0;\n    var ii = void 0;\n    var attr = void 0;\n    var attrName = void 0;\n    var attrValue = void 0;\n    var info = void 0;\n    var type = void 0;\n    var expressions = [];\n    var expression = void 0;\n    var behaviorInstructions = [];\n    var values = {};\n    var hasValues = false;\n    var providers = [];\n\n    for (i = 0, ii = attributes.length; i < ii; ++i) {\n      attr = attributes[i];\n      attrName = attr.name;\n      attrValue = attr.value;\n\n      info = bindingLanguage.inspectAttribute(resources, tagName, attrName, attrValue);\n      type = resources.getAttribute(info.attrName);\n\n      if (type) {\n        knownAttribute = resources.mapAttribute(info.attrName);\n        if (knownAttribute) {\n          property = type.attributes[knownAttribute];\n\n          if (property) {\n            info.defaultBindingMode = property.defaultBindingMode;\n\n            if (!info.command && !info.expression) {\n              info.command = property.hasOptions ? 'options' : null;\n            }\n\n            if (info.command && info.command !== 'options' && type.primaryProperty) {\n              var _primaryProperty = type.primaryProperty;\n              attrName = info.attrName = _primaryProperty.attribute;\n\n              info.defaultBindingMode = _primaryProperty.defaultBindingMode;\n            }\n          }\n        }\n      }\n\n      instruction = bindingLanguage.createAttributeInstruction(resources, node, info, undefined, type);\n\n      if (instruction) {\n        if (instruction.alteredAttr) {\n          type = resources.getAttribute(instruction.attrName);\n        }\n\n        if (instruction.discrete) {\n          expressions.push(instruction);\n        } else {\n          if (type) {\n            instruction.type = type;\n            this._configureProperties(instruction, resources);\n\n            if (type.liftsContent) {\n              throw new Error('You cannot place a template controller on a surrogate element.');\n            } else {\n              behaviorInstructions.push(instruction);\n            }\n          } else {\n            expressions.push(instruction.attributes[instruction.attrName]);\n          }\n        }\n      } else {\n        if (type) {\n          instruction = BehaviorInstruction.attribute(attrName, type);\n          instruction.attributes[resources.mapAttribute(attrName)] = attrValue;\n\n          if (type.liftsContent) {\n            throw new Error('You cannot place a template controller on a surrogate element.');\n          } else {\n            behaviorInstructions.push(instruction);\n          }\n        } else if (attrName !== 'id' && attrName !== 'part' && attrName !== 'replace-part') {\n          hasValues = true;\n          values[attrName] = attrValue;\n        }\n      }\n    }\n\n    if (expressions.length || behaviorInstructions.length || hasValues) {\n      for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {\n        instruction = behaviorInstructions[i];\n        instruction.type.compile(this, resources, node, instruction);\n        providers.push(instruction.type.target);\n      }\n\n      for (i = 0, ii = expressions.length; i < ii; ++i) {\n        expression = expressions[i];\n        if (expression.attrToRemove !== undefined) {\n          node.removeAttribute(expression.attrToRemove);\n        }\n      }\n\n      return TargetInstruction.surrogate(providers, behaviorInstructions, expressions, values);\n    }\n\n    return null;\n  };\n\n  ViewCompiler.prototype._compileElement = function _compileElement(node, resources, instructions, parentNode, parentInjectorId, targetLightDOM) {\n    var tagName = node.tagName.toLowerCase();\n    var attributes = node.attributes;\n    var expressions = [];\n    var expression = void 0;\n    var behaviorInstructions = [];\n    var providers = [];\n    var bindingLanguage = resources.getBindingLanguage(this.bindingLanguage);\n    var liftingInstruction = void 0;\n    var viewFactory = void 0;\n    var type = void 0;\n    var elementInstruction = void 0;\n    var elementProperty = void 0;\n    var i = void 0;\n    var ii = void 0;\n    var attr = void 0;\n    var attrName = void 0;\n    var attrValue = void 0;\n    var originalAttrName = void 0;\n    var instruction = void 0;\n    var info = void 0;\n    var property = void 0;\n    var knownAttribute = void 0;\n    var auTargetID = void 0;\n    var injectorId = void 0;\n\n    if (tagName === 'slot') {\n      if (targetLightDOM) {\n        node = makeShadowSlot(this, resources, node, instructions, parentInjectorId);\n      }\n      return node.nextSibling;\n    } else if (tagName === 'template') {\n      if (!('content' in node)) {\n        throw new Error('You cannot place a template element within ' + node.namespaceURI + ' namespace');\n      }\n      viewFactory = this.compile(node, resources);\n      viewFactory.part = node.getAttribute('part');\n    } else {\n      type = resources.getElement(node.getAttribute('as-element') || tagName);\n\n      if (tagName === 'let' && !type && bindingLanguage.createLetExpressions !== defaultLetHandler) {\n        expressions = bindingLanguage.createLetExpressions(resources, node);\n        auTargetID = makeIntoInstructionTarget(node);\n        instructions[auTargetID] = TargetInstruction.letElement(expressions);\n        return node.nextSibling;\n      }\n      if (type) {\n        elementInstruction = BehaviorInstruction.element(node, type);\n        type.processAttributes(this, resources, node, attributes, elementInstruction);\n        behaviorInstructions.push(elementInstruction);\n      }\n    }\n\n    for (i = 0, ii = attributes.length; i < ii; ++i) {\n      attr = attributes[i];\n      originalAttrName = attrName = attr.name;\n      attrValue = attr.value;\n      info = bindingLanguage.inspectAttribute(resources, tagName, attrName, attrValue);\n\n      if (targetLightDOM && info.attrName === 'slot') {\n        info.attrName = attrName = 'au-slot';\n      }\n\n      type = resources.getAttribute(info.attrName);\n      elementProperty = null;\n\n      if (type) {\n        knownAttribute = resources.mapAttribute(info.attrName);\n        if (knownAttribute) {\n          property = type.attributes[knownAttribute];\n\n          if (property) {\n            info.defaultBindingMode = property.defaultBindingMode;\n\n            if (!info.command && !info.expression) {\n              info.command = property.hasOptions ? 'options' : null;\n            }\n\n            if (info.command && info.command !== 'options' && type.primaryProperty) {\n              var _primaryProperty2 = type.primaryProperty;\n              attrName = info.attrName = _primaryProperty2.attribute;\n\n              info.defaultBindingMode = _primaryProperty2.defaultBindingMode;\n            }\n          }\n        }\n      } else if (elementInstruction) {\n        elementProperty = elementInstruction.type.attributes[info.attrName];\n        if (elementProperty) {\n          info.defaultBindingMode = elementProperty.defaultBindingMode;\n        }\n      }\n\n      if (elementProperty) {\n        instruction = bindingLanguage.createAttributeInstruction(resources, node, info, elementInstruction);\n      } else {\n        instruction = bindingLanguage.createAttributeInstruction(resources, node, info, undefined, type);\n      }\n\n      if (instruction) {\n        if (instruction.alteredAttr) {\n          type = resources.getAttribute(instruction.attrName);\n        }\n\n        if (instruction.discrete) {\n          expressions.push(instruction);\n        } else {\n          if (type) {\n            instruction.type = type;\n            this._configureProperties(instruction, resources);\n\n            if (type.liftsContent) {\n              instruction.originalAttrName = originalAttrName;\n              liftingInstruction = instruction;\n              break;\n            } else {\n              behaviorInstructions.push(instruction);\n            }\n          } else if (elementProperty) {\n            elementInstruction.attributes[info.attrName].targetProperty = elementProperty.name;\n          } else {\n            expressions.push(instruction.attributes[instruction.attrName]);\n          }\n        }\n      } else {\n        if (type) {\n          instruction = BehaviorInstruction.attribute(attrName, type);\n          instruction.attributes[resources.mapAttribute(attrName)] = attrValue;\n\n          if (type.liftsContent) {\n            instruction.originalAttrName = originalAttrName;\n            liftingInstruction = instruction;\n            break;\n          } else {\n            behaviorInstructions.push(instruction);\n          }\n        } else if (elementProperty) {\n          elementInstruction.attributes[attrName] = attrValue;\n        }\n      }\n    }\n\n    if (liftingInstruction) {\n      liftingInstruction.viewFactory = viewFactory;\n      node = liftingInstruction.type.compile(this, resources, node, liftingInstruction, parentNode);\n      auTargetID = makeIntoInstructionTarget(node);\n      instructions[auTargetID] = TargetInstruction.lifting(parentInjectorId, liftingInstruction);\n    } else {\n      var skipContentProcessing = false;\n\n      if (expressions.length || behaviorInstructions.length) {\n        injectorId = behaviorInstructions.length ? getNextInjectorId() : false;\n\n        for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {\n          instruction = behaviorInstructions[i];\n          instruction.type.compile(this, resources, node, instruction, parentNode);\n          providers.push(instruction.type.target);\n          skipContentProcessing = skipContentProcessing || instruction.skipContentProcessing;\n        }\n\n        for (i = 0, ii = expressions.length; i < ii; ++i) {\n          expression = expressions[i];\n          if (expression.attrToRemove !== undefined) {\n            node.removeAttribute(expression.attrToRemove);\n          }\n        }\n\n        auTargetID = makeIntoInstructionTarget(node);\n        instructions[auTargetID] = TargetInstruction.normal(injectorId, parentInjectorId, providers, behaviorInstructions, expressions, elementInstruction);\n      }\n\n      if (skipContentProcessing) {\n        return node.nextSibling;\n      }\n\n      var currentChild = node.firstChild;\n      while (currentChild) {\n        currentChild = this._compileNode(currentChild, resources, instructions, node, injectorId || parentInjectorId, targetLightDOM);\n      }\n    }\n\n    return node.nextSibling;\n  };\n\n  ViewCompiler.prototype._configureProperties = function _configureProperties(instruction, resources) {\n    var type = instruction.type;\n    var attrName = instruction.attrName;\n    var attributes = instruction.attributes;\n    var property = void 0;\n    var key = void 0;\n    var value = void 0;\n\n    var knownAttribute = resources.mapAttribute(attrName);\n    if (knownAttribute && attrName in attributes && knownAttribute !== attrName) {\n      attributes[knownAttribute] = attributes[attrName];\n      delete attributes[attrName];\n    }\n\n    for (key in attributes) {\n      value = attributes[key];\n\n      if (value !== null && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {\n        property = type.attributes[key];\n\n        if (property !== undefined) {\n          value.targetProperty = property.name;\n        } else {\n          value.targetProperty = key;\n        }\n      }\n    }\n  };\n\n  return ViewCompiler;\n}()) || _class14);\n\nexport var ResourceModule = function () {\n  function ResourceModule(moduleId) {\n    \n\n    this.id = moduleId;\n    this.moduleInstance = null;\n    this.mainResource = null;\n    this.resources = null;\n    this.viewStrategy = null;\n    this.isInitialized = false;\n    this.onLoaded = null;\n    this.loadContext = null;\n  }\n\n  ResourceModule.prototype.initialize = function initialize(container) {\n    var current = this.mainResource;\n    var resources = this.resources;\n    var vs = this.viewStrategy;\n\n    if (this.isInitialized) {\n      return;\n    }\n\n    this.isInitialized = true;\n\n    if (current !== undefined) {\n      current.metadata.viewStrategy = vs;\n      current.initialize(container);\n    }\n\n    for (var i = 0, ii = resources.length; i < ii; ++i) {\n      current = resources[i];\n      current.metadata.viewStrategy = vs;\n      current.initialize(container);\n    }\n  };\n\n  ResourceModule.prototype.register = function register(registry, name) {\n    var main = this.mainResource;\n    var resources = this.resources;\n\n    if (main !== undefined) {\n      main.register(registry, name);\n      name = null;\n    }\n\n    for (var i = 0, ii = resources.length; i < ii; ++i) {\n      resources[i].register(registry, name);\n      name = null;\n    }\n  };\n\n  ResourceModule.prototype.load = function load(container, loadContext) {\n    if (this.onLoaded !== null) {\n      return this.loadContext === loadContext ? Promise.resolve() : this.onLoaded;\n    }\n\n    var main = this.mainResource;\n    var resources = this.resources;\n    var loads = void 0;\n\n    if (main !== undefined) {\n      loads = new Array(resources.length + 1);\n      loads[0] = main.load(container, loadContext);\n      for (var i = 0, ii = resources.length; i < ii; ++i) {\n        loads[i + 1] = resources[i].load(container, loadContext);\n      }\n    } else {\n      loads = new Array(resources.length);\n      for (var _i2 = 0, _ii = resources.length; _i2 < _ii; ++_i2) {\n        loads[_i2] = resources[_i2].load(container, loadContext);\n      }\n    }\n\n    this.loadContext = loadContext;\n    this.onLoaded = Promise.all(loads);\n    return this.onLoaded;\n  };\n\n  return ResourceModule;\n}();\n\nexport var ResourceDescription = function () {\n  function ResourceDescription(key, exportedValue, resourceTypeMeta) {\n    \n\n    if (!resourceTypeMeta) {\n      resourceTypeMeta = metadata.get(metadata.resource, exportedValue);\n\n      if (!resourceTypeMeta) {\n        resourceTypeMeta = new HtmlBehaviorResource();\n        resourceTypeMeta.elementName = _hyphenate(key);\n        metadata.define(metadata.resource, resourceTypeMeta, exportedValue);\n      }\n    }\n\n    if (resourceTypeMeta instanceof HtmlBehaviorResource) {\n      if (resourceTypeMeta.elementName === undefined) {\n        resourceTypeMeta.elementName = _hyphenate(key);\n      } else if (resourceTypeMeta.attributeName === undefined) {\n        resourceTypeMeta.attributeName = _hyphenate(key);\n      } else if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\n        HtmlBehaviorResource.convention(key, resourceTypeMeta);\n      }\n    } else if (!resourceTypeMeta.name) {\n      resourceTypeMeta.name = _hyphenate(key);\n    }\n\n    this.metadata = resourceTypeMeta;\n    this.value = exportedValue;\n  }\n\n  ResourceDescription.prototype.initialize = function initialize(container) {\n    this.metadata.initialize(container, this.value);\n  };\n\n  ResourceDescription.prototype.register = function register(registry, name) {\n    this.metadata.register(registry, name);\n  };\n\n  ResourceDescription.prototype.load = function load(container, loadContext) {\n    return this.metadata.load(container, this.value, loadContext);\n  };\n\n  return ResourceDescription;\n}();\n\nexport var ModuleAnalyzer = function () {\n  function ModuleAnalyzer() {\n    \n\n    this.cache = Object.create(null);\n  }\n\n  ModuleAnalyzer.prototype.getAnalysis = function getAnalysis(moduleId) {\n    return this.cache[moduleId];\n  };\n\n  ModuleAnalyzer.prototype.analyze = function analyze(moduleId, moduleInstance, mainResourceKey) {\n    var mainResource = void 0;\n    var fallbackValue = void 0;\n    var fallbackKey = void 0;\n    var resourceTypeMeta = void 0;\n    var key = void 0;\n    var exportedValue = void 0;\n    var resources = [];\n    var conventional = void 0;\n    var vs = void 0;\n    var resourceModule = void 0;\n\n    resourceModule = this.cache[moduleId];\n    if (resourceModule) {\n      return resourceModule;\n    }\n\n    resourceModule = new ResourceModule(moduleId);\n    this.cache[moduleId] = resourceModule;\n\n    if (typeof moduleInstance === 'function') {\n      moduleInstance = { 'default': moduleInstance };\n    }\n\n    if (mainResourceKey) {\n      mainResource = new ResourceDescription(mainResourceKey, moduleInstance[mainResourceKey]);\n    }\n\n    for (key in moduleInstance) {\n      exportedValue = moduleInstance[key];\n\n      if (key === mainResourceKey || typeof exportedValue !== 'function') {\n        continue;\n      }\n\n      resourceTypeMeta = metadata.get(metadata.resource, exportedValue);\n\n      if (resourceTypeMeta) {\n        if (resourceTypeMeta instanceof HtmlBehaviorResource) {\n          ViewResources.convention(exportedValue, resourceTypeMeta);\n\n          if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\n            HtmlBehaviorResource.convention(key, resourceTypeMeta);\n          }\n\n          if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\n            resourceTypeMeta.elementName = _hyphenate(key);\n          }\n        }\n\n        if (!mainResource && resourceTypeMeta instanceof HtmlBehaviorResource && resourceTypeMeta.elementName !== null) {\n          mainResource = new ResourceDescription(key, exportedValue, resourceTypeMeta);\n        } else {\n          resources.push(new ResourceDescription(key, exportedValue, resourceTypeMeta));\n        }\n      } else if (viewStrategy.decorates(exportedValue)) {\n        vs = exportedValue;\n      } else if (exportedValue instanceof TemplateRegistryEntry) {\n        vs = new TemplateRegistryViewStrategy(moduleId, exportedValue);\n      } else {\n        if (conventional = ViewResources.convention(exportedValue)) {\n          if (conventional.elementName !== null && !mainResource) {\n            mainResource = new ResourceDescription(key, exportedValue, conventional);\n          } else {\n            resources.push(new ResourceDescription(key, exportedValue, conventional));\n          }\n          metadata.define(metadata.resource, conventional, exportedValue);\n        } else if (conventional = HtmlBehaviorResource.convention(key)) {\n          if (conventional.elementName !== null && !mainResource) {\n            mainResource = new ResourceDescription(key, exportedValue, conventional);\n          } else {\n            resources.push(new ResourceDescription(key, exportedValue, conventional));\n          }\n\n          metadata.define(metadata.resource, conventional, exportedValue);\n        } else if (conventional = ValueConverterResource.convention(key) || BindingBehaviorResource.convention(key) || ViewEngineHooksResource.convention(key)) {\n          resources.push(new ResourceDescription(key, exportedValue, conventional));\n          metadata.define(metadata.resource, conventional, exportedValue);\n        } else if (!fallbackValue) {\n          fallbackValue = exportedValue;\n          fallbackKey = key;\n        }\n      }\n    }\n\n    if (!mainResource && fallbackValue) {\n      mainResource = new ResourceDescription(fallbackKey, fallbackValue);\n    }\n\n    resourceModule.moduleInstance = moduleInstance;\n    resourceModule.mainResource = mainResource;\n    resourceModule.resources = resources;\n    resourceModule.viewStrategy = vs;\n\n    return resourceModule;\n  };\n\n  return ModuleAnalyzer;\n}();\n\nvar logger = LogManager.getLogger('templating');\n\nfunction ensureRegistryEntry(loader, urlOrRegistryEntry) {\n  if (urlOrRegistryEntry instanceof TemplateRegistryEntry) {\n    return Promise.resolve(urlOrRegistryEntry);\n  }\n\n  return loader.loadTemplate(urlOrRegistryEntry);\n}\n\nvar ProxyViewFactory = function () {\n  function ProxyViewFactory(promise) {\n    var _this8 = this;\n\n    \n\n    promise.then(function (x) {\n      return _this8.viewFactory = x;\n    });\n  }\n\n  ProxyViewFactory.prototype.create = function create(container, bindingContext, createInstruction, element) {\n    return this.viewFactory.create(container, bindingContext, createInstruction, element);\n  };\n\n  ProxyViewFactory.prototype.setCacheSize = function setCacheSize(size, doNotOverrideIfAlreadySet) {\n    this.viewFactory.setCacheSize(size, doNotOverrideIfAlreadySet);\n  };\n\n  ProxyViewFactory.prototype.getCachedView = function getCachedView() {\n    return this.viewFactory.getCachedView();\n  };\n\n  ProxyViewFactory.prototype.returnViewToCache = function returnViewToCache(view) {\n    this.viewFactory.returnViewToCache(view);\n  };\n\n  _createClass(ProxyViewFactory, [{\n    key: 'isCaching',\n    get: function get() {\n      return this.viewFactory.isCaching;\n    }\n  }]);\n\n  return ProxyViewFactory;\n}();\n\nvar auSlotBehavior = null;\n\nexport var ViewEngine = (_dec8 = inject(Loader, Container, ViewCompiler, ModuleAnalyzer, ViewResources), _dec8(_class15 = (_temp5 = _class16 = function () {\n  function ViewEngine(loader, container, viewCompiler, moduleAnalyzer, appResources) {\n    \n\n    this.loader = loader;\n    this.container = container;\n    this.viewCompiler = viewCompiler;\n    this.moduleAnalyzer = moduleAnalyzer;\n    this.appResources = appResources;\n    this._pluginMap = {};\n\n    if (auSlotBehavior === null) {\n      auSlotBehavior = new HtmlBehaviorResource();\n      auSlotBehavior.attributeName = 'au-slot';\n      metadata.define(metadata.resource, auSlotBehavior, SlotCustomAttribute);\n    }\n\n    auSlotBehavior.initialize(container, SlotCustomAttribute);\n    auSlotBehavior.register(appResources);\n  }\n\n  ViewEngine.prototype.addResourcePlugin = function addResourcePlugin(extension, implementation) {\n    var name = extension.replace('.', '') + '-resource-plugin';\n    this._pluginMap[extension] = name;\n    this.loader.addPlugin(name, implementation);\n  };\n\n  ViewEngine.prototype.loadViewFactory = function loadViewFactory(urlOrRegistryEntry, compileInstruction, loadContext, target) {\n    var _this9 = this;\n\n    loadContext = loadContext || new ResourceLoadContext();\n\n    return ensureRegistryEntry(this.loader, urlOrRegistryEntry).then(function (registryEntry) {\n      var url = registryEntry.address;\n\n      if (registryEntry.onReady) {\n        if (!loadContext.hasDependency(url)) {\n          loadContext.addDependency(url);\n          return registryEntry.onReady;\n        }\n\n        if (registryEntry.template === null) {\n          return registryEntry.onReady;\n        }\n\n        return Promise.resolve(new ProxyViewFactory(registryEntry.onReady));\n      }\n\n      loadContext.addDependency(url);\n\n      registryEntry.onReady = _this9.loadTemplateResources(registryEntry, compileInstruction, loadContext, target).then(function (resources) {\n        registryEntry.resources = resources;\n\n        if (registryEntry.template === null) {\n          return registryEntry.factory = null;\n        }\n\n        var viewFactory = _this9.viewCompiler.compile(registryEntry.template, resources, compileInstruction);\n        return registryEntry.factory = viewFactory;\n      });\n\n      return registryEntry.onReady;\n    });\n  };\n\n  ViewEngine.prototype.loadTemplateResources = function loadTemplateResources(registryEntry, compileInstruction, loadContext, target) {\n    var resources = new ViewResources(this.appResources, registryEntry.address);\n    var dependencies = registryEntry.dependencies;\n    var importIds = void 0;\n    var names = void 0;\n\n    compileInstruction = compileInstruction || ViewCompileInstruction.normal;\n\n    if (dependencies.length === 0 && !compileInstruction.associatedModuleId) {\n      return Promise.resolve(resources);\n    }\n\n    importIds = dependencies.map(function (x) {\n      return x.src;\n    });\n    names = dependencies.map(function (x) {\n      return x.name;\n    });\n    logger.debug('importing resources for ' + registryEntry.address, importIds);\n\n    if (target) {\n      var viewModelRequires = metadata.get(ViewEngine.viewModelRequireMetadataKey, target);\n      if (viewModelRequires) {\n        var templateImportCount = importIds.length;\n        for (var i = 0, ii = viewModelRequires.length; i < ii; ++i) {\n          var req = viewModelRequires[i];\n          var importId = typeof req === 'function' ? Origin.get(req).moduleId : relativeToFile(req.src || req, registryEntry.address);\n\n          if (importIds.indexOf(importId) === -1) {\n            importIds.push(importId);\n            names.push(req.as);\n          }\n        }\n        logger.debug('importing ViewModel resources for ' + compileInstruction.associatedModuleId, importIds.slice(templateImportCount));\n      }\n    }\n\n    return this.importViewResources(importIds, names, resources, compileInstruction, loadContext);\n  };\n\n  ViewEngine.prototype.importViewModelResource = function importViewModelResource(moduleImport, moduleMember) {\n    var _this10 = this;\n\n    return this.loader.loadModule(moduleImport).then(function (viewModelModule) {\n      var normalizedId = Origin.get(viewModelModule).moduleId;\n      var resourceModule = _this10.moduleAnalyzer.analyze(normalizedId, viewModelModule, moduleMember);\n\n      if (!resourceModule.mainResource) {\n        throw new Error('No view model found in module \"' + moduleImport + '\".');\n      }\n\n      resourceModule.initialize(_this10.container);\n\n      return resourceModule.mainResource;\n    });\n  };\n\n  ViewEngine.prototype.importViewResources = function importViewResources(moduleIds, names, resources, compileInstruction, loadContext) {\n    var _this11 = this;\n\n    loadContext = loadContext || new ResourceLoadContext();\n    compileInstruction = compileInstruction || ViewCompileInstruction.normal;\n\n    moduleIds = moduleIds.map(function (x) {\n      return _this11._applyLoaderPlugin(x);\n    });\n\n    return this.loader.loadAllModules(moduleIds).then(function (imports) {\n      var i = void 0;\n      var ii = void 0;\n      var analysis = void 0;\n      var normalizedId = void 0;\n      var current = void 0;\n      var associatedModule = void 0;\n      var container = _this11.container;\n      var moduleAnalyzer = _this11.moduleAnalyzer;\n      var allAnalysis = new Array(imports.length);\n\n      for (i = 0, ii = imports.length; i < ii; ++i) {\n        current = imports[i];\n        normalizedId = Origin.get(current).moduleId;\n\n        analysis = moduleAnalyzer.analyze(normalizedId, current);\n        analysis.initialize(container);\n        analysis.register(resources, names[i]);\n\n        allAnalysis[i] = analysis;\n      }\n\n      if (compileInstruction.associatedModuleId) {\n        associatedModule = moduleAnalyzer.getAnalysis(compileInstruction.associatedModuleId);\n\n        if (associatedModule) {\n          associatedModule.register(resources);\n        }\n      }\n\n      for (i = 0, ii = allAnalysis.length; i < ii; ++i) {\n        allAnalysis[i] = allAnalysis[i].load(container, loadContext);\n      }\n\n      return Promise.all(allAnalysis).then(function () {\n        return resources;\n      });\n    });\n  };\n\n  ViewEngine.prototype._applyLoaderPlugin = function _applyLoaderPlugin(id) {\n    var index = id.lastIndexOf('.');\n    if (index !== -1) {\n      var ext = id.substring(index);\n      var pluginName = this._pluginMap[ext];\n\n      if (pluginName === undefined) {\n        return id;\n      }\n\n      return this.loader.applyPluginToUrl(id, pluginName);\n    }\n\n    return id;\n  };\n\n  return ViewEngine;\n}(), _class16.viewModelRequireMetadataKey = 'aurelia:view-model-require', _temp5)) || _class15);\n\nexport var Controller = function () {\n  function Controller(behavior, instruction, viewModel, container) {\n    \n\n    this.behavior = behavior;\n    this.instruction = instruction;\n    this.viewModel = viewModel;\n    this.isAttached = false;\n    this.view = null;\n    this.isBound = false;\n    this.scope = null;\n    this.container = container;\n    this.elementEvents = container.elementEvents || null;\n\n    var observerLookup = behavior.observerLocator.getOrCreateObserversLookup(viewModel);\n    var handlesBind = behavior.handlesBind;\n    var attributes = instruction.attributes;\n    var boundProperties = this.boundProperties = [];\n    var properties = behavior.properties;\n    var i = void 0;\n    var ii = void 0;\n\n    behavior._ensurePropertiesDefined(viewModel, observerLookup);\n\n    for (i = 0, ii = properties.length; i < ii; ++i) {\n      properties[i]._initialize(viewModel, observerLookup, attributes, handlesBind, boundProperties);\n    }\n  }\n\n  Controller.prototype.created = function created(owningView) {\n    if (this.behavior.handlesCreated) {\n      this.viewModel.created(owningView, this.view);\n    }\n  };\n\n  Controller.prototype.automate = function automate(overrideContext, owningView) {\n    this.view.bindingContext = this.viewModel;\n    this.view.overrideContext = overrideContext || createOverrideContext(this.viewModel);\n    this.view._isUserControlled = true;\n\n    if (this.behavior.handlesCreated) {\n      this.viewModel.created(owningView || null, this.view);\n    }\n\n    this.bind(this.view);\n  };\n\n  Controller.prototype.bind = function bind(scope) {\n    var skipSelfSubscriber = this.behavior.handlesBind;\n    var boundProperties = this.boundProperties;\n    var i = void 0;\n    var ii = void 0;\n    var x = void 0;\n    var observer = void 0;\n    var selfSubscriber = void 0;\n\n    if (this.isBound) {\n      if (this.scope === scope) {\n        return;\n      }\n\n      this.unbind();\n    }\n\n    this.isBound = true;\n    this.scope = scope;\n\n    for (i = 0, ii = boundProperties.length; i < ii; ++i) {\n      x = boundProperties[i];\n      observer = x.observer;\n      selfSubscriber = observer.selfSubscriber;\n      observer.publishing = false;\n\n      if (skipSelfSubscriber) {\n        observer.selfSubscriber = null;\n      }\n\n      x.binding.bind(scope);\n      observer.call();\n\n      observer.publishing = true;\n      observer.selfSubscriber = selfSubscriber;\n    }\n\n    var overrideContext = void 0;\n    if (this.view !== null) {\n      if (skipSelfSubscriber) {\n        this.view.viewModelScope = scope;\n      }\n\n      if (this.viewModel === scope.overrideContext.bindingContext) {\n        overrideContext = scope.overrideContext;\n      } else if (this.instruction.inheritBindingContext) {\n        overrideContext = createOverrideContext(this.viewModel, scope.overrideContext);\n      } else {\n        overrideContext = createOverrideContext(this.viewModel);\n        overrideContext.__parentOverrideContext = scope.overrideContext;\n      }\n\n      this.view.bind(this.viewModel, overrideContext);\n    } else if (skipSelfSubscriber) {\n      overrideContext = scope.overrideContext;\n\n      if (scope.overrideContext.__parentOverrideContext !== undefined && this.viewModel.viewFactory && this.viewModel.viewFactory.factoryCreateInstruction.partReplacements) {\n        overrideContext = Object.assign({}, scope.overrideContext);\n        overrideContext.parentOverrideContext = scope.overrideContext.__parentOverrideContext;\n      }\n      this.viewModel.bind(scope.bindingContext, overrideContext);\n    }\n  };\n\n  Controller.prototype.unbind = function unbind() {\n    if (this.isBound) {\n      var _boundProperties = this.boundProperties;\n      var _i3 = void 0;\n      var _ii2 = void 0;\n\n      this.isBound = false;\n      this.scope = null;\n\n      if (this.view !== null) {\n        this.view.unbind();\n      }\n\n      if (this.behavior.handlesUnbind) {\n        this.viewModel.unbind();\n      }\n\n      if (this.elementEvents !== null) {\n        this.elementEvents.disposeAll();\n      }\n\n      for (_i3 = 0, _ii2 = _boundProperties.length; _i3 < _ii2; ++_i3) {\n        _boundProperties[_i3].binding.unbind();\n      }\n    }\n  };\n\n  Controller.prototype.attached = function attached() {\n    if (this.isAttached) {\n      return;\n    }\n\n    this.isAttached = true;\n\n    if (this.behavior.handlesAttached) {\n      this.viewModel.attached();\n    }\n\n    if (this.view !== null) {\n      this.view.attached();\n    }\n  };\n\n  Controller.prototype.detached = function detached() {\n    if (this.isAttached) {\n      this.isAttached = false;\n\n      if (this.view !== null) {\n        this.view.detached();\n      }\n\n      if (this.behavior.handlesDetached) {\n        this.viewModel.detached();\n      }\n    }\n  };\n\n  return Controller;\n}();\n\nexport var BehaviorPropertyObserver = (_dec9 = subscriberCollection(), _dec9(_class17 = function () {\n  function BehaviorPropertyObserver(taskQueue, obj, propertyName, selfSubscriber, initialValue) {\n    \n\n    this.taskQueue = taskQueue;\n    this.obj = obj;\n    this.propertyName = propertyName;\n    this.notqueued = true;\n    this.publishing = false;\n    this.selfSubscriber = selfSubscriber;\n    this.currentValue = this.oldValue = initialValue;\n  }\n\n  BehaviorPropertyObserver.prototype.getValue = function getValue() {\n    return this.currentValue;\n  };\n\n  BehaviorPropertyObserver.prototype.setValue = function setValue(newValue) {\n    var oldValue = this.currentValue;\n\n    if (!Object.is(newValue, oldValue)) {\n      this.oldValue = oldValue;\n      this.currentValue = newValue;\n\n      if (this.publishing && this.notqueued) {\n        if (this.taskQueue.flushing) {\n          this.call();\n        } else {\n          this.notqueued = false;\n          this.taskQueue.queueMicroTask(this);\n        }\n      }\n    }\n  };\n\n  BehaviorPropertyObserver.prototype.call = function call() {\n    var oldValue = this.oldValue;\n    var newValue = this.currentValue;\n\n    this.notqueued = true;\n\n    if (Object.is(newValue, oldValue)) {\n      return;\n    }\n\n    if (this.selfSubscriber) {\n      this.selfSubscriber(newValue, oldValue);\n    }\n\n    this.callSubscribers(newValue, oldValue);\n    this.oldValue = newValue;\n  };\n\n  BehaviorPropertyObserver.prototype.subscribe = function subscribe(context, callable) {\n    this.addSubscriber(context, callable);\n  };\n\n  BehaviorPropertyObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    this.removeSubscriber(context, callable);\n  };\n\n  return BehaviorPropertyObserver;\n}()) || _class17);\n\nfunction getObserver(instance, name) {\n  var lookup = instance.__observers__;\n\n  if (lookup === undefined) {\n    var ctor = Object.getPrototypeOf(instance).constructor;\n    var _behavior = metadata.get(metadata.resource, ctor);\n    if (!_behavior.isInitialized) {\n      _behavior.initialize(Container.instance || new Container(), instance.constructor);\n    }\n\n    lookup = _behavior.observerLocator.getOrCreateObserversLookup(instance);\n    _behavior._ensurePropertiesDefined(instance, lookup);\n  }\n\n  return lookup[name];\n}\n\nexport var BindableProperty = function () {\n  function BindableProperty(nameOrConfig) {\n    \n\n    if (typeof nameOrConfig === 'string') {\n      this.name = nameOrConfig;\n    } else {\n      Object.assign(this, nameOrConfig);\n    }\n\n    this.attribute = this.attribute || _hyphenate(this.name);\n    var defaultBindingMode = this.defaultBindingMode;\n    if (defaultBindingMode === null || defaultBindingMode === undefined) {\n      this.defaultBindingMode = bindingMode.oneWay;\n    } else if (typeof defaultBindingMode === 'string') {\n      this.defaultBindingMode = bindingMode[defaultBindingMode] || bindingMode.oneWay;\n    }\n    this.changeHandler = this.changeHandler || null;\n    this.owner = null;\n    this.descriptor = null;\n  }\n\n  BindableProperty.prototype.registerWith = function registerWith(target, behavior, descriptor) {\n    behavior.properties.push(this);\n    behavior.attributes[this.attribute] = this;\n    this.owner = behavior;\n\n    if (descriptor) {\n      this.descriptor = descriptor;\n      return this._configureDescriptor(descriptor);\n    }\n\n    return undefined;\n  };\n\n  BindableProperty.prototype._configureDescriptor = function _configureDescriptor(descriptor) {\n    var name = this.name;\n\n    descriptor.configurable = true;\n    descriptor.enumerable = true;\n\n    if ('initializer' in descriptor) {\n      this.defaultValue = descriptor.initializer;\n      delete descriptor.initializer;\n      delete descriptor.writable;\n    }\n\n    if ('value' in descriptor) {\n      this.defaultValue = descriptor.value;\n      delete descriptor.value;\n      delete descriptor.writable;\n    }\n\n    descriptor.get = function () {\n      return getObserver(this, name).getValue();\n    };\n\n    descriptor.set = function (value) {\n      getObserver(this, name).setValue(value);\n    };\n\n    descriptor.get.getObserver = function (obj) {\n      return getObserver(obj, name);\n    };\n\n    return descriptor;\n  };\n\n  BindableProperty.prototype.defineOn = function defineOn(target, behavior) {\n    var name = this.name;\n    var handlerName = void 0;\n\n    if (this.changeHandler === null) {\n      handlerName = name + 'Changed';\n      if (handlerName in target.prototype) {\n        this.changeHandler = handlerName;\n      }\n    }\n\n    if (this.descriptor === null) {\n      Object.defineProperty(target.prototype, name, this._configureDescriptor(behavior, {}));\n    }\n  };\n\n  BindableProperty.prototype.createObserver = function createObserver(viewModel) {\n    var selfSubscriber = null;\n    var defaultValue = this.defaultValue;\n    var changeHandlerName = this.changeHandler;\n    var name = this.name;\n    var initialValue = void 0;\n\n    if (this.hasOptions) {\n      return undefined;\n    }\n\n    if (changeHandlerName in viewModel) {\n      if ('propertyChanged' in viewModel) {\n        selfSubscriber = function selfSubscriber(newValue, oldValue) {\n          viewModel[changeHandlerName](newValue, oldValue);\n          viewModel.propertyChanged(name, newValue, oldValue);\n        };\n      } else {\n        selfSubscriber = function selfSubscriber(newValue, oldValue) {\n          return viewModel[changeHandlerName](newValue, oldValue);\n        };\n      }\n    } else if ('propertyChanged' in viewModel) {\n      selfSubscriber = function selfSubscriber(newValue, oldValue) {\n        return viewModel.propertyChanged(name, newValue, oldValue);\n      };\n    } else if (changeHandlerName !== null) {\n      throw new Error('Change handler ' + changeHandlerName + ' was specified but not declared on the class.');\n    }\n\n    if (defaultValue !== undefined) {\n      initialValue = typeof defaultValue === 'function' ? defaultValue.call(viewModel) : defaultValue;\n    }\n\n    return new BehaviorPropertyObserver(this.owner.taskQueue, viewModel, this.name, selfSubscriber, initialValue);\n  };\n\n  BindableProperty.prototype._initialize = function _initialize(viewModel, observerLookup, attributes, behaviorHandlesBind, boundProperties) {\n    var selfSubscriber = void 0;\n    var observer = void 0;\n    var attribute = void 0;\n    var defaultValue = this.defaultValue;\n\n    if (this.isDynamic) {\n      for (var _key6 in attributes) {\n        this._createDynamicProperty(viewModel, observerLookup, behaviorHandlesBind, _key6, attributes[_key6], boundProperties);\n      }\n    } else if (!this.hasOptions) {\n      observer = observerLookup[this.name];\n\n      if (attributes !== null) {\n        selfSubscriber = observer.selfSubscriber;\n        attribute = attributes[this.attribute];\n\n        if (behaviorHandlesBind) {\n          observer.selfSubscriber = null;\n        }\n\n        if (typeof attribute === 'string') {\n          viewModel[this.name] = attribute;\n          observer.call();\n        } else if (attribute) {\n          boundProperties.push({ observer: observer, binding: attribute.createBinding(viewModel) });\n        } else if (defaultValue !== undefined) {\n          observer.call();\n        }\n\n        observer.selfSubscriber = selfSubscriber;\n      }\n\n      observer.publishing = true;\n    }\n  };\n\n  BindableProperty.prototype._createDynamicProperty = function _createDynamicProperty(viewModel, observerLookup, behaviorHandlesBind, name, attribute, boundProperties) {\n    var changeHandlerName = name + 'Changed';\n    var selfSubscriber = null;\n    var observer = void 0;\n    var info = void 0;\n\n    if (changeHandlerName in viewModel) {\n      if ('propertyChanged' in viewModel) {\n        selfSubscriber = function selfSubscriber(newValue, oldValue) {\n          viewModel[changeHandlerName](newValue, oldValue);\n          viewModel.propertyChanged(name, newValue, oldValue);\n        };\n      } else {\n        selfSubscriber = function selfSubscriber(newValue, oldValue) {\n          return viewModel[changeHandlerName](newValue, oldValue);\n        };\n      }\n    } else if ('propertyChanged' in viewModel) {\n      selfSubscriber = function selfSubscriber(newValue, oldValue) {\n        return viewModel.propertyChanged(name, newValue, oldValue);\n      };\n    }\n\n    observer = observerLookup[name] = new BehaviorPropertyObserver(this.owner.taskQueue, viewModel, name, selfSubscriber);\n\n    Object.defineProperty(viewModel, name, {\n      configurable: true,\n      enumerable: true,\n      get: observer.getValue.bind(observer),\n      set: observer.setValue.bind(observer)\n    });\n\n    if (behaviorHandlesBind) {\n      observer.selfSubscriber = null;\n    }\n\n    if (typeof attribute === 'string') {\n      viewModel[name] = attribute;\n      observer.call();\n    } else if (attribute) {\n      info = { observer: observer, binding: attribute.createBinding(viewModel) };\n      boundProperties.push(info);\n    }\n\n    observer.publishing = true;\n    observer.selfSubscriber = selfSubscriber;\n  };\n\n  return BindableProperty;\n}();\n\nvar lastProviderId = 0;\n\nfunction nextProviderId() {\n  return ++lastProviderId;\n}\n\nfunction doProcessContent() {\n  return true;\n}\nfunction doProcessAttributes() {}\n\nexport var HtmlBehaviorResource = function () {\n  function HtmlBehaviorResource() {\n    \n\n    this.elementName = null;\n    this.attributeName = null;\n    this.attributeDefaultBindingMode = undefined;\n    this.liftsContent = false;\n    this.targetShadowDOM = false;\n    this.shadowDOMOptions = null;\n    this.processAttributes = doProcessAttributes;\n    this.processContent = doProcessContent;\n    this.usesShadowDOM = false;\n    this.childBindings = null;\n    this.hasDynamicOptions = false;\n    this.containerless = false;\n    this.properties = [];\n    this.attributes = {};\n    this.isInitialized = false;\n    this.primaryProperty = null;\n  }\n\n  HtmlBehaviorResource.convention = function convention(name, existing) {\n    var behavior = void 0;\n\n    if (name.endsWith('CustomAttribute')) {\n      behavior = existing || new HtmlBehaviorResource();\n      behavior.attributeName = _hyphenate(name.substring(0, name.length - 15));\n    }\n\n    if (name.endsWith('CustomElement')) {\n      behavior = existing || new HtmlBehaviorResource();\n      behavior.elementName = _hyphenate(name.substring(0, name.length - 13));\n    }\n\n    return behavior;\n  };\n\n  HtmlBehaviorResource.prototype.addChildBinding = function addChildBinding(behavior) {\n    if (this.childBindings === null) {\n      this.childBindings = [];\n    }\n\n    this.childBindings.push(behavior);\n  };\n\n  HtmlBehaviorResource.prototype.initialize = function initialize(container, target) {\n    var proto = target.prototype;\n    var properties = this.properties;\n    var attributeName = this.attributeName;\n    var attributeDefaultBindingMode = this.attributeDefaultBindingMode;\n    var i = void 0;\n    var ii = void 0;\n    var current = void 0;\n\n    if (this.isInitialized) {\n      return;\n    }\n\n    this.isInitialized = true;\n    target.__providerId__ = nextProviderId();\n\n    this.observerLocator = container.get(ObserverLocator);\n    this.taskQueue = container.get(TaskQueue);\n\n    this.target = target;\n    this.usesShadowDOM = this.targetShadowDOM && FEATURE.shadowDOM;\n    this.handlesCreated = 'created' in proto;\n    this.handlesBind = 'bind' in proto;\n    this.handlesUnbind = 'unbind' in proto;\n    this.handlesAttached = 'attached' in proto;\n    this.handlesDetached = 'detached' in proto;\n    this.htmlName = this.elementName || this.attributeName;\n\n    if (attributeName !== null) {\n      if (properties.length === 0) {\n        new BindableProperty({\n          name: 'value',\n          changeHandler: 'valueChanged' in proto ? 'valueChanged' : null,\n          attribute: attributeName,\n          defaultBindingMode: attributeDefaultBindingMode\n        }).registerWith(target, this);\n      }\n\n      current = properties[0];\n\n      if (properties.length === 1 && current.name === 'value') {\n        current.isDynamic = current.hasOptions = this.hasDynamicOptions;\n        current.defineOn(target, this);\n      } else {\n        for (i = 0, ii = properties.length; i < ii; ++i) {\n          properties[i].defineOn(target, this);\n          if (properties[i].primaryProperty) {\n            if (this.primaryProperty) {\n              throw new Error('Only one bindable property on a custom element can be defined as the default');\n            }\n            this.primaryProperty = properties[i];\n          }\n        }\n\n        current = new BindableProperty({\n          name: 'value',\n          changeHandler: 'valueChanged' in proto ? 'valueChanged' : null,\n          attribute: attributeName,\n          defaultBindingMode: attributeDefaultBindingMode\n        });\n\n        current.hasOptions = true;\n        current.registerWith(target, this);\n      }\n    } else {\n      for (i = 0, ii = properties.length; i < ii; ++i) {\n        properties[i].defineOn(target, this);\n      }\n\n      this._copyInheritedProperties(container, target);\n    }\n  };\n\n  HtmlBehaviorResource.prototype.register = function register(registry, name) {\n    var _this12 = this;\n\n    if (this.attributeName !== null) {\n      registry.registerAttribute(name || this.attributeName, this, this.attributeName);\n\n      if (Array.isArray(this.aliases)) {\n        this.aliases.forEach(function (alias) {\n          registry.registerAttribute(alias, _this12, _this12.attributeName);\n        });\n      }\n    }\n\n    if (this.elementName !== null) {\n      registry.registerElement(name || this.elementName, this);\n    }\n  };\n\n  HtmlBehaviorResource.prototype.load = function load(container, target, loadContext, viewStrategy, transientView) {\n    var _this13 = this;\n\n    var options = void 0;\n\n    if (this.elementName !== null) {\n      viewStrategy = container.get(ViewLocator).getViewStrategy(viewStrategy || this.viewStrategy || target);\n      options = new ViewCompileInstruction(this.targetShadowDOM, true);\n\n      if (!viewStrategy.moduleId) {\n        viewStrategy.moduleId = Origin.get(target).moduleId;\n      }\n\n      return viewStrategy.loadViewFactory(container.get(ViewEngine), options, loadContext, target).then(function (viewFactory) {\n        if (!transientView || !_this13.viewFactory) {\n          _this13.viewFactory = viewFactory;\n        }\n\n        return viewFactory;\n      });\n    }\n\n    return Promise.resolve(this);\n  };\n\n  HtmlBehaviorResource.prototype.compile = function compile(compiler, resources, node, instruction, parentNode) {\n    if (this.liftsContent) {\n      if (!instruction.viewFactory) {\n        var _template = DOM.createElement('template');\n        var fragment = DOM.createDocumentFragment();\n        var cacheSize = node.getAttribute('view-cache');\n        var part = node.getAttribute('part');\n\n        node.removeAttribute(instruction.originalAttrName);\n        DOM.replaceNode(_template, node, parentNode);\n        fragment.appendChild(node);\n        instruction.viewFactory = compiler.compile(fragment, resources);\n\n        if (part) {\n          instruction.viewFactory.part = part;\n          node.removeAttribute('part');\n        }\n\n        if (cacheSize) {\n          instruction.viewFactory.setCacheSize(cacheSize);\n          node.removeAttribute('view-cache');\n        }\n\n        node = _template;\n      }\n    } else if (this.elementName !== null) {\n      var _partReplacements2 = {};\n\n      if (this.processContent(compiler, resources, node, instruction) && node.hasChildNodes()) {\n        var currentChild = node.firstChild;\n        var contentElement = this.usesShadowDOM ? null : DOM.createElement('au-content');\n        var nextSibling = void 0;\n        var toReplace = void 0;\n\n        while (currentChild) {\n          nextSibling = currentChild.nextSibling;\n\n          if (currentChild.tagName === 'TEMPLATE' && (toReplace = currentChild.getAttribute('replace-part'))) {\n            _partReplacements2[toReplace] = compiler.compile(currentChild, resources);\n            DOM.removeNode(currentChild, parentNode);\n            instruction.partReplacements = _partReplacements2;\n          } else if (contentElement !== null) {\n            if (currentChild.nodeType === 3 && _isAllWhitespace(currentChild)) {\n              DOM.removeNode(currentChild, parentNode);\n            } else {\n              contentElement.appendChild(currentChild);\n            }\n          }\n\n          currentChild = nextSibling;\n        }\n\n        if (contentElement !== null && contentElement.hasChildNodes()) {\n          node.appendChild(contentElement);\n        }\n\n        instruction.skipContentProcessing = false;\n      } else {\n        instruction.skipContentProcessing = true;\n      }\n    } else if (!this.processContent(compiler, resources, node, instruction)) {\n      instruction.skipContentProcessing = true;\n    }\n\n    return node;\n  };\n\n  HtmlBehaviorResource.prototype.create = function create(container, instruction, element, bindings) {\n    var viewHost = void 0;\n    var au = null;\n\n    instruction = instruction || BehaviorInstruction.normal;\n    element = element || null;\n    bindings = bindings || null;\n\n    if (this.elementName !== null && element) {\n      if (this.usesShadowDOM) {\n        viewHost = element.attachShadow(this.shadowDOMOptions);\n        container.registerInstance(DOM.boundary, viewHost);\n      } else {\n        viewHost = element;\n        if (this.targetShadowDOM) {\n          container.registerInstance(DOM.boundary, viewHost);\n        }\n      }\n    }\n\n    if (element !== null) {\n      element.au = au = element.au || {};\n    }\n\n    var viewModel = instruction.viewModel || container.get(this.target);\n    var controller = new Controller(this, instruction, viewModel, container);\n    var childBindings = this.childBindings;\n    var viewFactory = void 0;\n\n    if (this.liftsContent) {\n      au.controller = controller;\n    } else if (this.elementName !== null) {\n      viewFactory = instruction.viewFactory || this.viewFactory;\n      container.viewModel = viewModel;\n\n      if (viewFactory) {\n        controller.view = viewFactory.create(container, instruction, element);\n      }\n\n      if (element !== null) {\n        au.controller = controller;\n\n        if (controller.view) {\n          if (!this.usesShadowDOM && (element.childNodes.length === 1 || element.contentElement)) {\n            var contentElement = element.childNodes[0] || element.contentElement;\n            controller.view.contentView = { fragment: contentElement };\n            contentElement.parentNode && DOM.removeNode(contentElement);\n          }\n\n          if (instruction.anchorIsContainer) {\n            if (childBindings !== null) {\n              for (var _i4 = 0, _ii3 = childBindings.length; _i4 < _ii3; ++_i4) {\n                controller.view.addBinding(childBindings[_i4].create(element, viewModel, controller));\n              }\n            }\n\n            controller.view.appendNodesTo(viewHost);\n          } else {\n            controller.view.insertNodesBefore(viewHost);\n          }\n        } else if (childBindings !== null) {\n          for (var _i5 = 0, _ii4 = childBindings.length; _i5 < _ii4; ++_i5) {\n            bindings.push(childBindings[_i5].create(element, viewModel, controller));\n          }\n        }\n      } else if (controller.view) {\n        controller.view.controller = controller;\n\n        if (childBindings !== null) {\n          for (var _i6 = 0, _ii5 = childBindings.length; _i6 < _ii5; ++_i6) {\n            controller.view.addBinding(childBindings[_i6].create(instruction.host, viewModel, controller));\n          }\n        }\n      } else if (childBindings !== null) {\n        for (var _i7 = 0, _ii6 = childBindings.length; _i7 < _ii6; ++_i7) {\n          bindings.push(childBindings[_i7].create(instruction.host, viewModel, controller));\n        }\n      }\n    } else if (childBindings !== null) {\n      for (var _i8 = 0, _ii7 = childBindings.length; _i8 < _ii7; ++_i8) {\n        bindings.push(childBindings[_i8].create(element, viewModel, controller));\n      }\n    }\n\n    if (au !== null) {\n      au[this.htmlName] = controller;\n    }\n\n    if (instruction.initiatedByBehavior && viewFactory) {\n      controller.view.created();\n    }\n\n    return controller;\n  };\n\n  HtmlBehaviorResource.prototype._ensurePropertiesDefined = function _ensurePropertiesDefined(instance, lookup) {\n    var properties = void 0;\n    var i = void 0;\n    var ii = void 0;\n    var observer = void 0;\n\n    if ('__propertiesDefined__' in lookup) {\n      return;\n    }\n\n    lookup.__propertiesDefined__ = true;\n    properties = this.properties;\n\n    for (i = 0, ii = properties.length; i < ii; ++i) {\n      observer = properties[i].createObserver(instance);\n\n      if (observer !== undefined) {\n        lookup[observer.propertyName] = observer;\n      }\n    }\n  };\n\n  HtmlBehaviorResource.prototype._copyInheritedProperties = function _copyInheritedProperties(container, target) {\n    var _this14 = this;\n\n    var behavior = void 0;\n    var derived = target;\n\n    while (true) {\n      var proto = Object.getPrototypeOf(target.prototype);\n      target = proto && proto.constructor;\n      if (!target) {\n        return;\n      }\n      behavior = metadata.getOwn(metadata.resource, target);\n      if (behavior) {\n        break;\n      }\n    }\n    behavior.initialize(container, target);\n\n    var _loop = function _loop(_i9, _ii8) {\n      var prop = behavior.properties[_i9];\n\n      if (_this14.properties.some(function (p) {\n        return p.name === prop.name;\n      })) {\n        return 'continue';\n      }\n\n      new BindableProperty(prop).registerWith(derived, _this14);\n    };\n\n    for (var _i9 = 0, _ii8 = behavior.properties.length; _i9 < _ii8; ++_i9) {\n      var _ret = _loop(_i9, _ii8);\n\n      if (_ret === 'continue') continue;\n    }\n  };\n\n  return HtmlBehaviorResource;\n}();\n\nfunction createChildObserverDecorator(selectorOrConfig, all) {\n  return function (target, key, descriptor) {\n    var actualTarget = typeof key === 'string' ? target.constructor : target;\n    var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, actualTarget);\n\n    if (typeof selectorOrConfig === 'string') {\n      selectorOrConfig = {\n        selector: selectorOrConfig,\n        name: key\n      };\n    }\n\n    if (descriptor) {\n      descriptor.writable = true;\n      descriptor.configurable = true;\n    }\n\n    selectorOrConfig.all = all;\n    r.addChildBinding(new ChildObserver(selectorOrConfig));\n  };\n}\n\nexport function children(selectorOrConfig) {\n  return createChildObserverDecorator(selectorOrConfig, true);\n}\n\nexport function child(selectorOrConfig) {\n  return createChildObserverDecorator(selectorOrConfig, false);\n}\n\nvar ChildObserver = function () {\n  function ChildObserver(config) {\n    \n\n    this.name = config.name;\n    this.changeHandler = config.changeHandler || this.name + 'Changed';\n    this.selector = config.selector;\n    this.all = config.all;\n  }\n\n  ChildObserver.prototype.create = function create(viewHost, viewModel, controller) {\n    return new ChildObserverBinder(this.selector, viewHost, this.name, viewModel, controller, this.changeHandler, this.all);\n  };\n\n  return ChildObserver;\n}();\n\nvar noMutations = [];\n\nfunction trackMutation(groupedMutations, binder, record) {\n  var mutations = groupedMutations.get(binder);\n\n  if (!mutations) {\n    mutations = [];\n    groupedMutations.set(binder, mutations);\n  }\n\n  mutations.push(record);\n}\n\nfunction onChildChange(mutations, observer) {\n  var binders = observer.binders;\n  var bindersLength = binders.length;\n  var groupedMutations = new Map();\n\n  for (var _i10 = 0, _ii9 = mutations.length; _i10 < _ii9; ++_i10) {\n    var record = mutations[_i10];\n    var added = record.addedNodes;\n    var removed = record.removedNodes;\n\n    for (var j = 0, jj = removed.length; j < jj; ++j) {\n      var _node = removed[j];\n      if (_node.nodeType === 1) {\n        for (var k = 0; k < bindersLength; ++k) {\n          var binder = binders[k];\n          if (binder.onRemove(_node)) {\n            trackMutation(groupedMutations, binder, record);\n          }\n        }\n      }\n    }\n\n    for (var _j = 0, _jj = added.length; _j < _jj; ++_j) {\n      var _node2 = added[_j];\n      if (_node2.nodeType === 1) {\n        for (var _k = 0; _k < bindersLength; ++_k) {\n          var _binder = binders[_k];\n          if (_binder.onAdd(_node2)) {\n            trackMutation(groupedMutations, _binder, record);\n          }\n        }\n      }\n    }\n  }\n\n  groupedMutations.forEach(function (value, key) {\n    if (key.changeHandler !== null) {\n      key.viewModel[key.changeHandler](value);\n    }\n  });\n}\n\nvar ChildObserverBinder = function () {\n  function ChildObserverBinder(selector, viewHost, property, viewModel, controller, changeHandler, all) {\n    \n\n    this.selector = selector;\n    this.viewHost = viewHost;\n    this.property = property;\n    this.viewModel = viewModel;\n    this.controller = controller;\n    this.changeHandler = changeHandler in viewModel ? changeHandler : null;\n    this.usesShadowDOM = controller.behavior.usesShadowDOM;\n    this.all = all;\n\n    if (!this.usesShadowDOM && controller.view && controller.view.contentView) {\n      this.contentView = controller.view.contentView;\n    } else {\n      this.contentView = null;\n    }\n  }\n\n  ChildObserverBinder.prototype.matches = function matches(element) {\n    if (element.matches(this.selector)) {\n      if (this.contentView === null) {\n        return true;\n      }\n\n      var contentView = this.contentView;\n      var assignedSlot = element.auAssignedSlot;\n\n      if (assignedSlot && assignedSlot.projectFromAnchors) {\n        var anchors = assignedSlot.projectFromAnchors;\n\n        for (var _i11 = 0, _ii10 = anchors.length; _i11 < _ii10; ++_i11) {\n          if (anchors[_i11].auOwnerView === contentView) {\n            return true;\n          }\n        }\n\n        return false;\n      }\n\n      return element.auOwnerView === contentView;\n    }\n\n    return false;\n  };\n\n  ChildObserverBinder.prototype.bind = function bind(source) {\n    var viewHost = this.viewHost;\n    var viewModel = this.viewModel;\n    var observer = viewHost.__childObserver__;\n\n    if (!observer) {\n      observer = viewHost.__childObserver__ = DOM.createMutationObserver(onChildChange);\n\n      var options = {\n        childList: true,\n        subtree: !this.usesShadowDOM\n      };\n\n      observer.observe(viewHost, options);\n      observer.binders = [];\n    }\n\n    observer.binders.push(this);\n\n    if (this.usesShadowDOM) {\n      var current = viewHost.firstElementChild;\n\n      if (this.all) {\n        var items = viewModel[this.property];\n        if (!items) {\n          items = viewModel[this.property] = [];\n        } else {\n          items.splice(0);\n        }\n\n        while (current) {\n          if (this.matches(current)) {\n            items.push(current.au && current.au.controller ? current.au.controller.viewModel : current);\n          }\n\n          current = current.nextElementSibling;\n        }\n\n        if (this.changeHandler !== null) {\n          this.viewModel[this.changeHandler](noMutations);\n        }\n      } else {\n        while (current) {\n          if (this.matches(current)) {\n            var _value = current.au && current.au.controller ? current.au.controller.viewModel : current;\n            this.viewModel[this.property] = _value;\n\n            if (this.changeHandler !== null) {\n              this.viewModel[this.changeHandler](_value);\n            }\n\n            break;\n          }\n\n          current = current.nextElementSibling;\n        }\n      }\n    }\n  };\n\n  ChildObserverBinder.prototype.onRemove = function onRemove(element) {\n    if (this.matches(element)) {\n      var _value2 = element.au && element.au.controller ? element.au.controller.viewModel : element;\n\n      if (this.all) {\n        var items = this.viewModel[this.property] || (this.viewModel[this.property] = []);\n        var index = items.indexOf(_value2);\n\n        if (index !== -1) {\n          items.splice(index, 1);\n        }\n\n        return true;\n      }\n\n      return false;\n    }\n\n    return false;\n  };\n\n  ChildObserverBinder.prototype.onAdd = function onAdd(element) {\n    if (this.matches(element)) {\n      var _value3 = element.au && element.au.controller ? element.au.controller.viewModel : element;\n\n      if (this.all) {\n        var items = this.viewModel[this.property] || (this.viewModel[this.property] = []);\n\n        if (this.selector === '*') {\n          items.push(_value3);\n          return true;\n        }\n\n        var index = 0;\n        var prev = element.previousElementSibling;\n\n        while (prev) {\n          if (this.matches(prev)) {\n            index++;\n          }\n\n          prev = prev.previousElementSibling;\n        }\n\n        items.splice(index, 0, _value3);\n        return true;\n      }\n\n      this.viewModel[this.property] = _value3;\n\n      if (this.changeHandler !== null) {\n        this.viewModel[this.changeHandler](_value3);\n      }\n    }\n\n    return false;\n  };\n\n  ChildObserverBinder.prototype.unbind = function unbind() {\n    if (this.viewHost.__childObserver__) {\n      this.viewHost.__childObserver__.disconnect();\n      this.viewHost.__childObserver__ = null;\n      this.viewModel[this.property] = null;\n    }\n  };\n\n  return ChildObserverBinder;\n}();\n\nfunction remove(viewSlot, previous) {\n  return Array.isArray(previous) ? viewSlot.removeMany(previous, true) : viewSlot.remove(previous, true);\n}\n\nexport var SwapStrategies = {\n  before: function before(viewSlot, previous, callback) {\n    return previous === undefined ? callback() : callback().then(function () {\n      return remove(viewSlot, previous);\n    });\n  },\n  with: function _with(viewSlot, previous, callback) {\n    return previous === undefined ? callback() : Promise.all([remove(viewSlot, previous), callback()]);\n  },\n  after: function after(viewSlot, previous, callback) {\n    return Promise.resolve(viewSlot.removeAll(true)).then(callback);\n  }\n};\n\nfunction tryActivateViewModel(context) {\n  if (context.skipActivation || typeof context.viewModel.activate !== 'function') {\n    return Promise.resolve();\n  }\n\n  return context.viewModel.activate(context.model) || Promise.resolve();\n}\n\nexport var CompositionEngine = (_dec10 = inject(ViewEngine, ViewLocator), _dec10(_class18 = function () {\n  function CompositionEngine(viewEngine, viewLocator) {\n    \n\n    this.viewEngine = viewEngine;\n    this.viewLocator = viewLocator;\n  }\n\n  CompositionEngine.prototype._swap = function _swap(context, view) {\n    var swapStrategy = SwapStrategies[context.swapOrder] || SwapStrategies.after;\n    var previousViews = context.viewSlot.children.slice();\n\n    return swapStrategy(context.viewSlot, previousViews, function () {\n      return Promise.resolve(context.viewSlot.add(view)).then(function () {\n        if (context.currentController) {\n          context.currentController.unbind();\n        }\n      });\n    }).then(function () {\n      if (context.compositionTransactionNotifier) {\n        context.compositionTransactionNotifier.done();\n      }\n    });\n  };\n\n  CompositionEngine.prototype._createControllerAndSwap = function _createControllerAndSwap(context) {\n    var _this15 = this;\n\n    return this.createController(context).then(function (controller) {\n      if (context.compositionTransactionOwnershipToken) {\n        return context.compositionTransactionOwnershipToken.waitForCompositionComplete().then(function () {\n          controller.automate(context.overrideContext, context.owningView);\n\n          return _this15._swap(context, controller.view);\n        }).then(function () {\n          return controller;\n        });\n      }\n\n      controller.automate(context.overrideContext, context.owningView);\n\n      return _this15._swap(context, controller.view).then(function () {\n        return controller;\n      });\n    });\n  };\n\n  CompositionEngine.prototype.createController = function createController(context) {\n    var _this16 = this;\n\n    var childContainer = void 0;\n    var viewModel = void 0;\n    var viewModelResource = void 0;\n\n    var m = void 0;\n\n    return this.ensureViewModel(context).then(tryActivateViewModel).then(function () {\n      childContainer = context.childContainer;\n      viewModel = context.viewModel;\n      viewModelResource = context.viewModelResource;\n      m = viewModelResource.metadata;\n\n      var viewStrategy = _this16.viewLocator.getViewStrategy(context.view || viewModel);\n\n      if (context.viewResources) {\n        viewStrategy.makeRelativeTo(context.viewResources.viewUrl);\n      }\n\n      return m.load(childContainer, viewModelResource.value, null, viewStrategy, true);\n    }).then(function (viewFactory) {\n      return m.create(childContainer, BehaviorInstruction.dynamic(context.host, viewModel, viewFactory));\n    });\n  };\n\n  CompositionEngine.prototype.ensureViewModel = function ensureViewModel(context) {\n    var childContainer = context.childContainer = context.childContainer || context.container.createChild();\n\n    if (typeof context.viewModel === 'string') {\n      context.viewModel = context.viewResources ? context.viewResources.relativeToView(context.viewModel) : context.viewModel;\n\n      return this.viewEngine.importViewModelResource(context.viewModel).then(function (viewModelResource) {\n        childContainer.autoRegister(viewModelResource.value);\n\n        if (context.host) {\n          childContainer.registerInstance(DOM.Element, context.host);\n        }\n\n        context.viewModel = childContainer.viewModel = childContainer.get(viewModelResource.value);\n        context.viewModelResource = viewModelResource;\n        return context;\n      });\n    }\n\n    var ctor = context.viewModel.constructor;\n    var isClass = typeof context.viewModel === 'function';\n    if (isClass) {\n      ctor = context.viewModel;\n      childContainer.autoRegister(ctor);\n    }\n    var m = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, ctor);\n\n    m.elementName = m.elementName || 'dynamic-element';\n\n    m.initialize(isClass ? childContainer : context.container || childContainer, ctor);\n\n    context.viewModelResource = { metadata: m, value: ctor };\n\n    if (context.host) {\n      childContainer.registerInstance(DOM.Element, context.host);\n    }\n    childContainer.viewModel = context.viewModel = isClass ? childContainer.get(ctor) : context.viewModel;\n    return Promise.resolve(context);\n  };\n\n  CompositionEngine.prototype.compose = function compose(context) {\n    var _this17 = this;\n\n    context.childContainer = context.childContainer || context.container.createChild();\n    context.view = this.viewLocator.getViewStrategy(context.view);\n\n    var transaction = context.childContainer.get(CompositionTransaction);\n    var compositionTransactionOwnershipToken = transaction.tryCapture();\n\n    if (compositionTransactionOwnershipToken) {\n      context.compositionTransactionOwnershipToken = compositionTransactionOwnershipToken;\n    } else {\n      context.compositionTransactionNotifier = transaction.enlist();\n    }\n\n    if (context.viewModel) {\n      return this._createControllerAndSwap(context);\n    } else if (context.view) {\n      if (context.viewResources) {\n        context.view.makeRelativeTo(context.viewResources.viewUrl);\n      }\n\n      return context.view.loadViewFactory(this.viewEngine, new ViewCompileInstruction()).then(function (viewFactory) {\n        var result = viewFactory.create(context.childContainer);\n        result.bind(context.bindingContext, context.overrideContext);\n\n        if (context.compositionTransactionOwnershipToken) {\n          return context.compositionTransactionOwnershipToken.waitForCompositionComplete().then(function () {\n            return _this17._swap(context, result);\n          }).then(function () {\n            return result;\n          });\n        }\n\n        return _this17._swap(context, result).then(function () {\n          return result;\n        });\n      });\n    } else if (context.viewSlot) {\n      context.viewSlot.removeAll();\n\n      if (context.compositionTransactionNotifier) {\n        context.compositionTransactionNotifier.done();\n      }\n\n      return Promise.resolve(null);\n    }\n\n    return Promise.resolve(null);\n  };\n\n  return CompositionEngine;\n}()) || _class18);\n\nexport var ElementConfigResource = function () {\n  function ElementConfigResource() {\n    \n  }\n\n  ElementConfigResource.prototype.initialize = function initialize(container, target) {};\n\n  ElementConfigResource.prototype.register = function register(registry, name) {};\n\n  ElementConfigResource.prototype.load = function load(container, target) {\n    var config = new target();\n    var eventManager = container.get(EventManager);\n    eventManager.registerElementConfig(config);\n  };\n\n  return ElementConfigResource;\n}();\n\nexport function resource(instanceOrConfig) {\n  return function (target) {\n    var isConfig = typeof instanceOrConfig === 'string' || Object.getPrototypeOf(instanceOrConfig) === Object.prototype;\n    if (isConfig) {\n      target.$resource = instanceOrConfig;\n    } else {\n      metadata.define(metadata.resource, instanceOrConfig, target);\n    }\n  };\n}\n\nexport function behavior(override) {\n  return function (target) {\n    if (override instanceof HtmlBehaviorResource) {\n      metadata.define(metadata.resource, override, target);\n    } else {\n      var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, target);\n      Object.assign(r, override);\n    }\n  };\n}\n\nexport function customElement(name) {\n  return function (target) {\n    var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, target);\n    r.elementName = validateBehaviorName(name, 'custom element');\n  };\n}\n\nexport function customAttribute(name, defaultBindingMode, aliases) {\n  return function (target) {\n    var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, target);\n    r.attributeName = validateBehaviorName(name, 'custom attribute');\n    r.attributeDefaultBindingMode = defaultBindingMode;\n    r.aliases = aliases;\n  };\n}\n\nexport function templateController(target) {\n  var deco = function deco(t) {\n    var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, t);\n    r.liftsContent = true;\n  };\n\n  return target ? deco(target) : deco;\n}\n\nexport function bindable(nameOrConfigOrTarget, key, descriptor) {\n  var deco = function deco(target, key2, descriptor2) {\n    var actualTarget = key2 ? target.constructor : target;\n    var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, actualTarget);\n    var prop = void 0;\n\n    if (key2) {\n      nameOrConfigOrTarget = nameOrConfigOrTarget || {};\n      nameOrConfigOrTarget.name = key2;\n    }\n\n    prop = new BindableProperty(nameOrConfigOrTarget);\n    return prop.registerWith(actualTarget, r, descriptor2);\n  };\n\n  if (!nameOrConfigOrTarget) {\n    return deco;\n  }\n\n  if (key) {\n    var _target = nameOrConfigOrTarget;\n    nameOrConfigOrTarget = null;\n    return deco(_target, key, descriptor);\n  }\n\n  return deco;\n}\n\nexport function dynamicOptions(target) {\n  var deco = function deco(t) {\n    var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, t);\n    r.hasDynamicOptions = true;\n  };\n\n  return target ? deco(target) : deco;\n}\n\nvar defaultShadowDOMOptions = { mode: 'open' };\n\nexport function useShadowDOM(targetOrOptions) {\n  var options = typeof targetOrOptions === 'function' || !targetOrOptions ? defaultShadowDOMOptions : targetOrOptions;\n\n  var deco = function deco(t) {\n    var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, t);\n    r.targetShadowDOM = true;\n    r.shadowDOMOptions = options;\n  };\n\n  return typeof targetOrOptions === 'function' ? deco(targetOrOptions) : deco;\n}\n\nexport function processAttributes(processor) {\n  return function (t) {\n    var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, t);\n    r.processAttributes = function (compiler, resources, node, attributes, elementInstruction) {\n      try {\n        processor(compiler, resources, node, attributes, elementInstruction);\n      } catch (error) {\n        LogManager.getLogger('templating').error(error);\n      }\n    };\n  };\n}\n\nfunction doNotProcessContent() {\n  return false;\n}\n\nexport function processContent(processor) {\n  return function (t) {\n    var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, t);\n    r.processContent = processor ? function (compiler, resources, node, instruction) {\n      try {\n        return processor(compiler, resources, node, instruction);\n      } catch (error) {\n        LogManager.getLogger('templating').error(error);\n        return false;\n      }\n    } : doNotProcessContent;\n  };\n}\n\nexport function containerless(target) {\n  var deco = function deco(t) {\n    var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, t);\n    r.containerless = true;\n  };\n\n  return target ? deco(target) : deco;\n}\n\nexport function useViewStrategy(strategy) {\n  return function (target) {\n    metadata.define(ViewLocator.viewStrategyMetadataKey, strategy, target);\n  };\n}\n\nexport function useView(path) {\n  return useViewStrategy(new RelativeViewStrategy(path));\n}\n\nexport function inlineView(markup, dependencies, dependencyBaseUrl) {\n  return useViewStrategy(new InlineViewStrategy(markup, dependencies, dependencyBaseUrl));\n}\n\nexport function noView(targetOrDependencies, dependencyBaseUrl) {\n  var target = void 0;\n  var dependencies = void 0;\n  if (typeof targetOrDependencies === 'function') {\n    target = targetOrDependencies;\n  } else {\n    dependencies = targetOrDependencies;\n    target = undefined;\n  }\n\n  var deco = function deco(t) {\n    metadata.define(ViewLocator.viewStrategyMetadataKey, new NoViewStrategy(dependencies, dependencyBaseUrl), t);\n  };\n\n  return target ? deco(target) : deco;\n}\n\nexport function view(templateOrConfig) {\n  return function (target) {\n    target.$view = templateOrConfig;\n  };\n}\n\nexport function elementConfig(target) {\n  var deco = function deco(t) {\n    metadata.define(metadata.resource, new ElementConfigResource(), t);\n  };\n\n  return target ? deco(target) : deco;\n}\n\nexport function viewResources() {\n  for (var _len = arguments.length, resources = Array(_len), _key7 = 0; _key7 < _len; _key7++) {\n    resources[_key7] = arguments[_key7];\n  }\n\n  return function (target) {\n    metadata.define(ViewEngine.viewModelRequireMetadataKey, resources, target);\n  };\n}\n\nexport var TemplatingEngine = (_dec11 = inject(Container, ModuleAnalyzer, ViewCompiler, CompositionEngine), _dec11(_class19 = function () {\n  function TemplatingEngine(container, moduleAnalyzer, viewCompiler, compositionEngine) {\n    \n\n    this._container = container;\n    this._moduleAnalyzer = moduleAnalyzer;\n    this._viewCompiler = viewCompiler;\n    this._compositionEngine = compositionEngine;\n    container.registerInstance(Animator, Animator.instance = new Animator());\n  }\n\n  TemplatingEngine.prototype.configureAnimator = function configureAnimator(animator) {\n    this._container.unregister(Animator);\n    this._container.registerInstance(Animator, Animator.instance = animator);\n  };\n\n  TemplatingEngine.prototype.compose = function compose(context) {\n    return this._compositionEngine.compose(context);\n  };\n\n  TemplatingEngine.prototype.enhance = function enhance(instruction) {\n    if (instruction instanceof DOM.Element) {\n      instruction = { element: instruction };\n    }\n\n    var compilerInstructions = { letExpressions: [] };\n    var resources = instruction.resources || this._container.get(ViewResources);\n\n    this._viewCompiler._compileNode(instruction.element, resources, compilerInstructions, instruction.element.parentNode, 'root', true);\n\n    var factory = new ViewFactory(instruction.element, compilerInstructions, resources);\n    var container = instruction.container || this._container.createChild();\n    var view = factory.create(container, BehaviorInstruction.enhance());\n\n    view.bind(instruction.bindingContext || {}, instruction.overrideContext);\n\n    view.firstChild = view.lastChild = view.fragment;\n    view.fragment = DOM.createDocumentFragment();\n    view.attached();\n\n    return view;\n  };\n\n  return TemplatingEngine;\n}()) || _class19);","import { autoinject } from \"aurelia-framework\";\nimport { DefaultService } from \"shared-service/default-service\";\nimport { SearchService } from \"shared-service/search-service\";\nimport { SearchRequest } from \"shared-models/search-request\";\nimport { SearchResult } from \"shared-models/search-result\";\nimport { GetRecordService } from \"shared-service/get-record-service\";\nimport { GetRecordRequest } from \"shared-models/get-record-request\";\nimport { GetRecordsService } from \"shared-service/get-records-service\";\nimport { GetRecordsRequest } from \"shared-models/get-records-request\";\nimport { CreateRecordService } from \"shared-service/create-record-service\";\nimport { UpdateRecordService } from \"shared-service/update-record-service\";\nimport { CreateRecordRequest } from \"shared-models/create-record-request\";\nimport { UpdateRecordRequest } from \"shared-models/update-record-request\";\nimport { RecordReference } from \"shared-models/record-reference\";\nimport { ChangeOrder } from \"change-orders/models/change-order\";\nimport { ChangeOrderType, ChangeOrderRequest, ChangeOrderGiftMsgRequest, ChangeOrderShipInstructionsRequest, ChangeOrderShipDateRequest, ChangeOrderItemsRequest, ChangeOrderShipMethodRequest, ChangeOrderEmailRequest, ChangeOrderAddressRequest } from \"change-orders/models/change-order-request\";\nimport { Address, Order, convertResponseToOrder } from \"orders/models/order\";\n\n@autoinject\nexport class ChangeOrderService extends DefaultService {\n    private static readonly CHANGE_ORDER_RECORD_TYPE = \"vf_change_order\";\n    private static readonly CHANGE_ORDER_TYPE_RECORD_TYPE = \"vf_change_order_type\";\n\n    constructor(\n        private searchService: SearchService,\n        private getRecordService: GetRecordService,\n        private getRecordsService: GetRecordsService,\n        private updateRecordService: UpdateRecordService,\n        private createRecordService: CreateRecordService) {\n        super(ChangeOrderService.name);\n    }\n\n    async getChangeOrdersByOrder(orderId: number): Promise<ChangeOrder[]> {\n        let getRecordsRequest = new GetRecordsRequest({\n            recordType: ChangeOrderService.CHANGE_ORDER_RECORD_TYPE,\n            fieldReference: \"winery_order\",\n            fieldReferenceValue: orderId\n        });\n        let getRecordsResponse = await this.getRecordsService.getRecords(getRecordsRequest, this._convertResponseToChangeOrder, this);\n        getRecordsResponse.records = getRecordsResponse.records.sort((changeOrder1, changeOrder2)=> changeOrder2.createDate.getTime() - changeOrder1.createDate.getTime());\n        return getRecordsResponse.records;\n    }\n\n    async searchRecords(page: number, filter: string): Promise<SearchResult> {\n        page = page || 1;\n        filter = filter || \"\";\n        let searchRequest = new SearchRequest({\n            recordType: ChangeOrderService.CHANGE_ORDER_RECORD_TYPE,\n            pageSize: 50,\n            page: page,\n            filter: filter\n        });\n        let searchResponse = await this.searchService.searchRecords(searchRequest, this._convertResponseToChangeOrder, this) as {recordType: string, totalRecords: number, pageSize: number, pageCount: number, filter?: string, records?: ChangeOrder[]};\n        searchResponse.records = searchResponse.records.sort((changeOrder1, changeOrder2)=> changeOrder2.createDate.getTime() - changeOrder1.createDate.getTime());\n        return searchResponse;\n    }\n\n    async getAllRecords(): Promise<ChangeOrder[]> {\n        let getRecordsRequest = new GetRecordsRequest({\n            recordType: ChangeOrderService.CHANGE_ORDER_RECORD_TYPE\n        });\n        let getRecordsResponse = await this.getRecordsService.getRecords(getRecordsRequest, this._convertResponseToChangeOrder, this);\n        getRecordsResponse.records = getRecordsResponse.records.sort((changeOrder1, changeOrder2)=> changeOrder2.createDate.getTime() - changeOrder1.createDate.getTime());\n        return getRecordsResponse.records;\n    }\n\n    async getRecord(changeOrderId: number): Promise<ChangeOrder> {\n        let getRecordRequest = new GetRecordRequest({\n            recordType: ChangeOrderService.CHANGE_ORDER_RECORD_TYPE,\n            recordId: changeOrderId\n        });\n        let getRecordResponse = await this.getRecordService.getRecord(getRecordRequest, this._convertResponseToChangeOrder, this);\n        return getRecordResponse.record;\n    }\n\n    async createRecord(changeOrderRecord: ChangeOrder): Promise<number> {      \n        let createRecordRequest = new CreateRecordRequest({\n            recordType: ChangeOrderService.CHANGE_ORDER_RECORD_TYPE,\n            recordData: changeOrderRecord.convertToData()\n        });\n        return await this.createRecordService.createRecord(createRecordRequest);\n    }\n\n    async cancelChangeOrder(changeOrderRecord: ChangeOrder): Promise<void> {      \n        let changeOrderData = changeOrderRecord.convertToData();\n        changeOrderData[\"status\"] = \"Cancelled\";\n        let updateRecordRequest = new UpdateRecordRequest({\n            recordId: changeOrderRecord.id,\n            recordType: ChangeOrderService.CHANGE_ORDER_RECORD_TYPE,\n            recordData: changeOrderData\n        });\n        await this.updateRecordService.updateRecord(updateRecordRequest);\n    }\n\n    async getChangeOrderTypes(): Promise<ChangeOrderType[]> {\n        let getRecordsRequest = new GetRecordsRequest({\n            recordType: ChangeOrderService.CHANGE_ORDER_TYPE_RECORD_TYPE\n        });\n        let getRecordsResponse = await this.getRecordsService.getRecords(getRecordsRequest, this._convertResponseToChangeOrderType, this);\n        getRecordsResponse.records = getRecordsResponse.records.sort((type1, type2)=> (type1.name || \"\").toLowerCase().localeCompare((type2.name || \"\").toLowerCase()));\n        return getRecordsResponse.records;       \n    }\n\n    _convertResponseToChangeOrder(response): ChangeOrder {\n        let changeOrder = new ChangeOrder({\n            id: response[\"id\"],\n            name: response[\"name\"],\n            createdBy: response[\"created_by\"],\n            lastUpdatedByUser: response[\"last_updated_by_user\"],\n            createDate: this._convertValueToDateTime(response[\"create_date\"]),\n            status: response[\"status\"],\n            wineryOrderNumber: response[\"winery_order_number\"],\n            order: response[\"winery_order\"] ? convertResponseToOrder(response[\"winery_order\"]) : null,\n            vinfillmentNotes: response[\"notes_for_vinfillment\"],\n            deniedReasons: response[\"denied_reasons\"],\n            changeRequestsTypes: response[\"change_requests_types\"],\n            changeRequests: []\n        });\n        changeOrder.changeRequests = (response[\"change_requests\"] || []).map((changeRequest)=> this._convertResponseToChangeOrderRequest(changeRequest));\n        return changeOrder;\n    }\n\n    _convertResponseToChangeOrderRequest(response): ChangeOrderRequest {\n        let changeOrderTypeData = response[\"change_order_type\"];\n        let changeOrderType = new ChangeOrderType({\n            id: changeOrderTypeData[\"id\"],\n            name: changeOrderTypeData[\"name\"],\n            description: changeOrderTypeData[\"description\"],\n            doNotAllowOtherChanges: changeOrderTypeData[\"do_not_allow_other_changes\"],\n            statusesNotAllowed: changeOrderTypeData[\"statuses_not_allowed\"]\n        });\n        if(changeOrderType._isChangeGiftMessage()){\n            return this._convertToGiftMessageRequest(changeOrderType, response);\n        } else if(changeOrderType._isChangeShipInstructions()){\n            return this._convertToShipInstRequest(changeOrderType, response);\n        } else if(changeOrderType._isChangeShipMethod()){\n            return this._convertToShipMethodRequest(changeOrderType, response);\n        } else if(changeOrderType._isChangeShipDate()){\n            return this._convertToShipDateRequest(changeOrderType, response);\n        } else if(changeOrderType._isChangeEmail()){\n            return this._convertToEmailRequest(changeOrderType, response);\n        } else if(changeOrderType._isChangeAddress()){\n            return this._convertToAddressRequest(changeOrderType, response);\n        } else if(changeOrderType._isChangeItems()){\n            return this._convertToItemRequest(changeOrderType, response);\n        } else{\n            return new ChangeOrderRequest({\n                id: response[\"id\"],\n                name: response[\"name\"],\n                changeOrderType: changeOrderType\n            });\n        }\n    }\n\n    _convertResponseToChangeOrderType(response): ChangeOrderType {\n        return new ChangeOrderType({\n            id: response[\"id\"],\n            name: response[\"name\"],\n            description: response[\"description\"],\n            statusesNotAllowed: response[\"statuses_not_allowed\"],\n            doNotAllowOtherChanges: response[\"do_not_allow_other_changes\"]\n        });\n    }\n\n    _convertToGiftMessageRequest(changeOrderType, response): ChangeOrderGiftMsgRequest {\n        return new ChangeOrderGiftMsgRequest({\n            id: response[\"id\"],\n            name: response[\"name\"],\n            changeOrderType: changeOrderType,\n            currentGiftMessage: response[\"current_gift_message\"],\n            newGiftMessage: response[\"new_gift_message\"]\n        });\n    }\n\n    _convertToShipInstRequest(changeOrderType, response): ChangeOrderShipInstructionsRequest {\n        return new ChangeOrderShipInstructionsRequest({\n            id: response[\"id\"],\n            name: response[\"name\"],\n            changeOrderType: changeOrderType,\n            currentInstructions: response[\"current_instructions\"],\n            newInstructions: response[\"new_instructions\"]\n        });\n    }\n\n    _convertToShipMethodRequest(changeOrderType, response): ChangeOrderShipMethodRequest {\n        return new ChangeOrderShipMethodRequest({\n            id: response[\"id\"],\n            name: response[\"name\"],\n            changeOrderType: changeOrderType,\n            currentCarrier: response[\"current_carrier\"],\n            currentShipMethod: response[\"current_ship_method\"],\n            newCarrier: response[\"new_carrier\"],\n            newShipMethod: response[\"new_ship_method\"]\n        });\n    }\n\n    _convertToShipDateRequest(changeOrderType, response): ChangeOrderShipDateRequest {\n        return new ChangeOrderShipDateRequest({\n            id: response[\"id\"],\n            name: response[\"name\"],\n            changeOrderType: changeOrderType,\n            currentShipDate: this._convertValueToDate(response[\"current_ship_date\"]),\n            newShipDate: this._convertValueToDate(response[\"new_ship_date\"])\n        });\n    }\n\n    _convertToEmailRequest(changeOrderType, response): ChangeOrderEmailRequest {\n        return new ChangeOrderEmailRequest({\n            id: response[\"id\"],\n            name: response[\"name\"],\n            changeOrderType: changeOrderType,\n            currentEmail: response[\"current_email\"],\n            newEmail: response[\"new_email\"]\n        });\n    }\n\n    _convertToAddressRequest(changeOrderType, response): ChangeOrderAddressRequest {\n        return new ChangeOrderAddressRequest({\n            id: response[\"id\"],\n            name: response[\"name\"],\n            changeOrderType: changeOrderType,\n            currentAddress: this._convertResponseToAddress(response[\"current_address\"]),\n            newAddress: this._convertResponseToAddress(response[\"new_address\"])\n        });\n    }\n\n    _convertToItemRequest(changeOrderType, response): ChangeOrderItemsRequest {\n        return new ChangeOrderItemsRequest({\n            id: response[\"id\"],\n            name: response[\"name\"],\n            changeOrderType: changeOrderType,\n            items: (response[\"current_items\"] || []).map((currentItem)=>{\n                return {\n                    orderItem: currentItem[\"item\"],\n                    newQuantity: currentItem[\"new_quantity\"],\n                    removeItem: currentItem[\"remove_item\"]\n                }\n            }),\n            newItems: (response[\"new_items\"] || []).map((currentItem)=>{\n                return {\n                    item: currentItem[\"item\"],\n                    quantity: currentItem[\"new_quantity\"]\n                }\n            })          \n        });\n    }\n\n    _convertResponseToAddress(response): Address {\n        return new Address({\n            addressee: response[\"addressee\"],            \n            attention: response[\"attention\"],            \n            address1: response[\"street\"],            \n            address2: response[\"street2\"],            \n            city: response[\"city\"],            \n            state: response[\"state\"],            \n            zip: response[\"zipcode\"],            \n            country: response[\"country\"],            \n            phone: response[\"phone\"]            \n        });\n    }\n}","import { autoinject } from \"aurelia-framework\";\nimport { DefaultService } from \"shared-service/default-service\";\nimport { GetRecordsRequest } from \"shared-models/get-records-request\";\nimport { GetRecordsService } from \"shared-service/get-records-service\";\nimport { ImportOrderSetup, ImportOrderColumn } from \"orders/models/import-order-setup\";\nimport { ImportOrderBatch } from \"orders/models/import-order-batch\";\nimport { CreateRecordRequest } from \"shared-models/create-record-request\";\nimport { CreateRecordService } from \"shared-service/create-record-service\";\nimport { SearchRequest } from \"shared-models/search-request\";\nimport { SearchResult } from \"shared-models/search-result\";\nimport { SearchService } from \"shared-service/search-service\";\nimport { GetRecordService } from \"shared-service/get-record-service\";\nimport { GetRecordRequest } from \"shared-models/get-record-request\";\nimport { IntegratedShipMethod } from \"orders/models/integrated-ship-method\";\n\n@autoinject\nexport class ImportOrderService extends DefaultService{\n    private static readonly SETUP_RECORD_TYPE = \"vf_import_order_setup\";\n    private static readonly BATCH_RECORD_TYPE = \"vf_winery_orders_batch\";\n    private static readonly INT_SHIP_METHOD_RECORD_TYPE = \"vf_int_ship_method\";\n\n    constructor(\n        private searchService: SearchService, \n        private getRecordService: GetRecordService, \n        private getRecordsService: GetRecordsService, \n        private createRecordService: CreateRecordService){\n        super(ImportOrderService.name);\n    }\n\n    async getSetupRecords(): Promise<ImportOrderSetup[]>{\n        let getRecordsRequest = new GetRecordsRequest({\n            recordType: ImportOrderService.SETUP_RECORD_TYPE\n        });\n        let getRecordsResponse = await this.getRecordsService.getRecords(getRecordsRequest, this._convertResponseToImportOrderSetup, this);   \n        return getRecordsResponse.records;\n    }\n\n    async searchIntegratedShipMethods(searchRequestData: {page?: number, pageSize?: number, filter?: string, fieldFilters?: any[]}): Promise<SearchResult>{\n        let searchRequest = new SearchRequest({\n            recordType: ImportOrderService.INT_SHIP_METHOD_RECORD_TYPE,\n            pageSize: searchRequestData.pageSize || 50,\n            page: searchRequestData.page || 1,\n            filter: searchRequestData.filter || \"\",\n            fieldFilters: searchRequestData.fieldFilters || []\n        });\n        return await this.searchService.searchRecords(searchRequest, this._convertResponseToIntegratedShipMethod)\n    }\n\n    async getAllIntegratedShipMethods(fieldFilters: any[]=[]): Promise<IntegratedShipMethod[]>{\n        let allRecords = [] as IntegratedShipMethod[];\n        let page = 1;\n        let pageSize = 5000;\n        let initialSearch = await this.searchIntegratedShipMethods({page: page, pageSize: pageSize, fieldFilters: fieldFilters});\n        allRecords = allRecords.concat(initialSearch.records as IntegratedShipMethod[]);\n        var totalPageCount = initialSearch.pageCount;\n        if(totalPageCount > 1){\n            while(page < totalPageCount){\n                page++;\n                let nextSearch = await this.searchIntegratedShipMethods({page: page, pageSize: pageSize, fieldFilters: fieldFilters});\n                allRecords = allRecords.concat(nextSearch.records as IntegratedShipMethod[]);\n            }\n        }        \n        return allRecords;\n    }\n\n    async getBatchRecords(): Promise<ImportOrderBatch[]>{\n        let getRecordsRequest = new GetRecordsRequest({\n            recordType: ImportOrderService.BATCH_RECORD_TYPE\n        });\n        let getRecordsResponse = await this.getRecordsService.getRecords(getRecordsRequest, this._convertResponseToBatchOrders, this);   \n        return getRecordsResponse.records;\n    }\n\n    async getBatchRecord(orderBatchId: number): Promise<ImportOrderBatch>{\n        let getRecordRequest = new GetRecordRequest({\n            recordType: ImportOrderService.BATCH_RECORD_TYPE,\n            recordId: orderBatchId\n        });\n        let getRecordResponse = await this.getRecordService.getRecord(getRecordRequest, this._convertResponseToBatchOrders, this);\n        return getRecordResponse.record;\n    }\n\n    async searchBatchRecords(page: number, filter: string): Promise<SearchResult>{\n        page = page || 1;\n        filter = filter || \"\";\n        let searchRequest = new SearchRequest({\n            recordType: ImportOrderService.BATCH_RECORD_TYPE,\n            pageSize: 50,\n            page: page,\n            filter: filter\n        });\n        let searchResponse =  await this.searchService.searchRecords(searchRequest, this._convertResponseToBatchOrders, this);\n        // searchResponse.records = searchResponse.records.sort((address1, address2)=> (address1.name || \"\").toLowerCase().localeCompare((address2.name || \"\").toLowerCase()));\n        return searchResponse;\n    }\n\n    async submitImportOrderBatch(importOrderBatch: ImportOrderBatch): Promise<number>{\n        let createBatchRequest = new CreateRecordRequest({\n            recordType: ImportOrderService.BATCH_RECORD_TYPE,\n            recordData: {\n                \"original_file_data\": importOrderBatch.csvFileData,\n                \"original_file_data_name\": importOrderBatch.csvFileName,\n                \"import_orders_setup\": importOrderBatch.importOrdersSetup.id,\n                \"integration_type\": importOrderBatch.integrationType.id\n            }\n        });\n        return await this.createRecordService.createRecord(createBatchRequest);\n    }\n\n    _convertResponseToImportOrderSetup(response: any): ImportOrderSetup{\n        return new ImportOrderSetup({\n            id: response[\"id\"],\n            name: response[\"name\"],\n            isDefault: response[\"is_default\"],\n            csvFileData: atob(response[\"csv_file_data\"] || \"\").trim(),\n            integrationType: response[\"integration_type\"],\n            columns: (response[\"columns\"] || []).map((column) => new ImportOrderColumn({\n                id: column[\"id\"],\n                name: column[\"name\"],\n                type: column[\"column_type\"],\n                isMandatory: column[\"is_mandatory\"],\n                columnNameRegExpString: column[\"column_name_reg_exp\"],\n                dataRegExpString: column[\"data_reg_exp\"]\n            }))\n        });\n    }\n\n    _convertResponseToIntegratedShipMethod(response: any): IntegratedShipMethod{\n        return new IntegratedShipMethod({\n            id: response[\"id\"],\n            name: response[\"name\"],\n            isDefault: response[\"is_default\"],\n            winery: response[\"winery\"],\n            shippingMethod: response[\"ship_method\"],\n            integrationType: response[\"integration_type\"],\n            \n        });\n    }\n\n    _convertResponseToBatchOrders(response: any): ImportOrderBatch{\n        return new ImportOrderBatch({\n            id: response[\"id\"],\n            name: response[\"shipment_detail_number\"],\n            createDate: this._convertValueToDateTime(response[\"create_date\"]),\n            status: response[\"batch_status\"],\n            integrationType: response[\"integration_type\"],\n            integrationPartner: response[\"integration_partner\"],\n            importOrdersSetup: response[\"import_orders_setup\"],\n            shipmentDetailNumber: response[\"shipment_detail_number\"],\n            csvFileData: atob(response[\"original_file_data\"] || \"\"),\n            csvFileName: response[\"original_file_data_name\"],\n            numberOfOrders: response[\"number_of_orders\"],\n            numberOfOrdersPending: response[\"number_of_orders_pending\"],\n            numberOfOrdersUploaded: response[\"number_of_orders_uploaded\"],\n            numberOfOrdersCancelled: response[\"number_of_orders_cancelled\"],\n            errorMessage: response[\"error_message\"]\n        });\n    }\n\n    \n}","import { IRecordReference, RecordReference } from \"shared-models/record-reference\";\n\n\nexport interface IImportOrderBatch extends IRecordReference{\n    createdByUser?: IRecordReference,\n    createDate?: Date,\n    status?: string,\n    integrationType?: IRecordReference,\n    integrationPartner?: IRecordReference,\n    importOrdersSetup?: IRecordReference,\n    shipmentDetailNumber?: string,\n    csvFileData?: string, \n    csvFileName?: string, \n    numberOfOrders?: number,\n    numberOfOrdersPending?: number,\n    numberOfOrdersUploaded?: number,\n    numberOfOrdersCancelled?: number,\n    errorMessage?: string};\n\nexport class ImportOrderBatch extends RecordReference{\n    createdByUser?: RecordReference;\n    createDate?: Date;\n    status?: string;\n    integrationType?: RecordReference;\n    integrationPartner?: RecordReference;\n    importOrdersSetup?: RecordReference;\n    shipmentDetailNumber?: string;\n    csvFileData?: string;\n    csvFileName?: string;\n    numberOfOrders?: number;\n    numberOfOrdersPending?: number;\n    numberOfOrdersUploaded?: number;\n    numberOfOrdersCancelled?: number;\n    errorMessage?: string;    \n    \n    constructor(data: IImportOrderBatch){\n        super(data)\n        this.createdByUser = data.createdByUser ? new RecordReference(data.createdByUser) : null;\n        this.createDate = data.createDate;\n        this.status = data.status;\n        this.integrationType = data.integrationType ? new RecordReference(data.integrationType) : null;\n        this.integrationPartner = data.integrationPartner ? new RecordReference(data.integrationPartner) : null;\n        this.importOrdersSetup = data.importOrdersSetup ? new RecordReference(data.importOrdersSetup) : null;\n        this.shipmentDetailNumber = data.shipmentDetailNumber;\n        this.csvFileData = data.csvFileData;\n        this.csvFileName = data.csvFileName;\n        this.numberOfOrders = data.numberOfOrders || 0;\n        this.numberOfOrdersPending = data.numberOfOrdersPending || 0;\n        this.numberOfOrdersUploaded = data.numberOfOrdersUploaded || 0;\n        this.numberOfOrdersCancelled = data.numberOfOrdersCancelled || 0;\n        this.errorMessage = data.errorMessage || \"\";\n        \n    }\n}\n",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS.HmacSHA256;\n\n}));","import { IRecordReference, RecordReference } from \"shared-models/record-reference\";\n\nexport interface IWineryTransferReference extends IRecordReference{\n    transferLocation?: IRecordReference, \n    reference?: string, \n    receiptDate?: Date;\n    totalCharges?: number};\n\nexport class WineryTransferReference extends RecordReference{   \n    transferLocation: RecordReference;\n    reference: string;  \n    receiptDate: Date;  \n    totalCharges: number;   \n    constructor(data: IWineryTransferReference){\n        super(data);\n        this.transferLocation = new RecordReference(data.transferLocation);        \n        this.reference = data.reference || \"\";        \n        this.receiptDate = data.receiptDate || null;       \n        this.totalCharges = data.totalCharges || 0;        \n    }\n}\n\nexport interface IWineryTransfer extends IWineryTransferReference{items?: IWineryTransferItem[]}\nexport class WineryTransfer extends WineryTransferReference{\n    items?: WineryTransferItem[];\n\n    constructor(data: IWineryTransfer){\n        super(data);        \n        this.items = (data.items || []).map((item) => new WineryTransferItem(item));\n    }\n}\n\nexport interface IWineryTransferItem extends IRecordReference{itemName?: string, itemId?: string, sku?: string, quantity?: number, totalCharges?: number;};\nexport class WineryTransferItem extends RecordReference{\n    itemName: string;\n    itemId: string;\n    sku: string;\n    quantity: number; \n    totalCharges: number;   \n\n    constructor(data: IWineryTransferItem){\n        data = data || {};\n        super(data);\n        this.itemName = data.itemName;\n        this.itemId = data.itemId;\n        this.sku = data.sku;\n        this.quantity = data.quantity || 0;\n        this.totalCharges = data.totalCharges || 0;\n    }\n}","import { computedFrom } from \"aurelia-framework\";\nimport { CarrierReference, ICarrierReference, IShippingMethodReference, ShippingMethodReference } from \"orders/models/carrier-record\";\nimport { IRecordReference, RecordReference } from \"shared-models/record-reference\";\n\nvar STATUSES = {\n    \"pending\": \"Pending\",\n    \"processed\": \"Processed\"\n}\nexport interface IReturnReference extends IRecordReference{\n    status?: string,\n    orderNumber?: string,\n    order?: IRecordReference,\n    recipientName?: string,\n    shipDate?: Date,\n    returnDate?: Date,\n    shippingCarrier?: ICarrierReference,\n    shippingMethod?: IShippingMethodReference,\n    returnShippingCarrier?: ICarrierReference,\n    returnShippingMethod?: IShippingMethodReference,\n    returnReason?: IRecordReference,\n    isWillCall?: boolean,\n    returnCharge?: number\n    notes?: string\n};\nexport class ReturnReference extends RecordReference{   \n    status: string;\n    statusName: string;\n    orderNumber: string;\n    order: RecordReference;\n    recipientName: string;\n    shipDate: Date;\n    returnDate: Date;\n    shippingCarrier: CarrierReference;\n    shippingMethod: ShippingMethodReference;\n    returnShippingCarrier: CarrierReference;\n    returnShippingMethod: ShippingMethodReference;\n    returnReason: RecordReference;\n    isWillCall: boolean;\n    returnCharge: number;\n    notes: string;\n    constructor(data: IReturnReference){\n        super(data);   \n        this.status = data.status || \"\";                 \n        this.statusName = data.status ? STATUSES[data.status] : \"\";                 \n        this.orderNumber = data.orderNumber || \"\";                 \n        this.order = data.order ? new RecordReference(data.order): null;                     \n        this.recipientName = data.recipientName || \"\";                 \n        this.shipDate = data.shipDate ? new Date(data.shipDate) : null;                 \n        this.returnDate = data.returnDate ? new Date(data.returnDate) : null;\n        this.shippingCarrier = data.shippingCarrier ? new CarrierReference(data.shippingCarrier): null;\n        this.shippingMethod = data.shippingMethod ? new ShippingMethodReference(data.shippingMethod): null; \n        this.returnShippingCarrier = data.returnShippingCarrier ? new CarrierReference(data.returnShippingCarrier): null;\n        this.returnShippingMethod = data.returnShippingMethod ? new ShippingMethodReference(data.returnShippingMethod): null;                        \n        this.returnReason = data.returnReason ? new RecordReference(data.returnReason): null;             \n        this.isWillCall = data.isWillCall || false;                 \n        this.returnCharge = data.returnCharge || 0;                 \n        this.notes = data.notes || \"\";                 \n    }\n\n    @computedFrom('order.status')\n    get statusColor(): string {\n        if (this.status === \"processed\") {\n            return \"blue\";\n        }\n        return \"red\";\n    }\n\n    @computedFrom('order.status')\n    get isPending(): boolean {\n        if (this.status === \"pending\") {\n            return true;\n        }\n        return false;\n    }\n}\n\nexport interface IReturnRecord extends IReturnReference{items?: IReturnItemRecord[]}\nexport class ReturnRecord extends ReturnReference{\n    items: ReturnItemRecord[];\n    constructor(data: IReturnRecord){\n        super(data);\n        this.items = (data.items || []).map((item) => new ReturnItemRecord(item));\n    }\n}\n\nexport interface IReturnItemRecord extends IRecordReference{\n    item?: IRecordReference, \n    shippedQuantity?: number, \n    returnedQuantity?: number, \n    toInventoryQuantity?: number, \n    reshipQuantity?: number,\n    willCallQuantity?: number,\n    remainingQuantity?: number\n}\nexport class ReturnItemRecord extends RecordReference{\n    item: RecordReference;\n    shippedQuantity: number;\n    returnedQuantity: number;\n    toInventoryQuantity: number;\n    reshipQuantity: number;\n    willCallQuantity: number;\n    remainingQuantity: number;\n    constructor(data: IReturnItemRecord){\n        super(data);\n        this.item = data.item ? new RecordReference(data.item): null;\n        this.shippedQuantity = data.shippedQuantity || 0;\n        this.returnedQuantity = data.returnedQuantity || 0;\n        this.toInventoryQuantity = data.toInventoryQuantity || 0;\n        this.reshipQuantity = data.reshipQuantity || 0;\n        this.willCallQuantity = data.willCallQuantity || 0;\n        this.remainingQuantity = data.remainingQuantity || 0;\n    }\n}","export class LoginPassport{\n    email: string;\n    password: string;\n    \n    constructor(data: {email: string, password: string}){\n        data = data || {email: \"\", password: \"\"};\n        this.email = data.email;\n        this.password = data.password;\n    }\n}","import { computedFrom } from \"aurelia-binding\";\n\nexport enum SCREEN_SIZE {\n    LARGE,\n    DESKTOP,\n    IPAD,\n    MOBILE\n}\n\nexport class ScreenSizeUtility{\n    currentSize: SCREEN_SIZE;\n\n    constructor(){\n        this.currentSize = SCREEN_SIZE.DESKTOP;\n    }\n   \n    @computedFrom('currentSize')\n    get isDesktop(): boolean{\n        return this.isMedium || this.isLarge;\n    }\n\n    @computedFrom('currentSize')\n    get isMobile(): boolean{\n        return this.isSmall || this.isTiny;\n    }\n\n    @computedFrom('currentSize')\n    get isLarge(): boolean{\n        return this.currentSize === SCREEN_SIZE.LARGE;\n    }\n\n    @computedFrom('currentSize')\n    get isMedium(): boolean{\n        return this.currentSize === SCREEN_SIZE.DESKTOP;\n    }\n\n    @computedFrom('currentSize')\n    get isSmall(): boolean{\n        return this.currentSize === SCREEN_SIZE.IPAD;\n    }\n\n    @computedFrom('currentSize')\n    get isTiny(): boolean{\n        return this.currentSize === SCREEN_SIZE.MOBILE;\n    }\n}","var Collection = require('./collection');\n\nvar util = require('../util');\n\nfunction property(obj, name, value) {\n  if (value !== null && value !== undefined) {\n    util.property.apply(this, arguments);\n  }\n}\n\nfunction memoizedProperty(obj, name) {\n  if (!obj.constructor.prototype[name]) {\n    util.memoizedProperty.apply(this, arguments);\n  }\n}\n\nfunction Shape(shape, options, memberName) {\n  options = options || {};\n\n  property(this, 'shape', shape.shape);\n  property(this, 'api', options.api, false);\n  property(this, 'type', shape.type);\n  property(this, 'enum', shape.enum);\n  property(this, 'min', shape.min);\n  property(this, 'max', shape.max);\n  property(this, 'pattern', shape.pattern);\n  property(this, 'location', shape.location || this.location || 'body');\n  property(this, 'name', this.name || shape.xmlName || shape.queryName ||\n    shape.locationName || memberName);\n  property(this, 'isStreaming', shape.streaming || this.isStreaming || false);\n  property(this, 'requiresLength', shape.requiresLength, false);\n  property(this, 'isComposite', shape.isComposite || false);\n  property(this, 'isShape', true, false);\n  property(this, 'isQueryName', Boolean(shape.queryName), false);\n  property(this, 'isLocationName', Boolean(shape.locationName), false);\n  property(this, 'isIdempotent', shape.idempotencyToken === true);\n  property(this, 'isJsonValue', shape.jsonvalue === true);\n  property(this, 'isSensitive', shape.sensitive === true || shape.prototype && shape.prototype.sensitive === true);\n  property(this, 'isEventStream', Boolean(shape.eventstream), false);\n  property(this, 'isEvent', Boolean(shape.event), false);\n  property(this, 'isEventPayload', Boolean(shape.eventpayload), false);\n  property(this, 'isEventHeader', Boolean(shape.eventheader), false);\n  property(this, 'isTimestampFormatSet', Boolean(shape.timestampFormat) || shape.prototype && shape.prototype.isTimestampFormatSet === true, false);\n  property(this, 'endpointDiscoveryId', Boolean(shape.endpointdiscoveryid), false);\n  property(this, 'hostLabel', Boolean(shape.hostLabel), false);\n\n  if (options.documentation) {\n    property(this, 'documentation', shape.documentation);\n    property(this, 'documentationUrl', shape.documentationUrl);\n  }\n\n  if (shape.xmlAttribute) {\n    property(this, 'isXmlAttribute', shape.xmlAttribute || false);\n  }\n\n  // type conversion and parsing\n  property(this, 'defaultValue', null);\n  this.toWireFormat = function(value) {\n    if (value === null || value === undefined) return '';\n    return value;\n  };\n  this.toType = function(value) { return value; };\n}\n\n/**\n * @api private\n */\nShape.normalizedTypes = {\n  character: 'string',\n  double: 'float',\n  long: 'integer',\n  short: 'integer',\n  biginteger: 'integer',\n  bigdecimal: 'float',\n  blob: 'binary'\n};\n\n/**\n * @api private\n */\nShape.types = {\n  'structure': StructureShape,\n  'list': ListShape,\n  'map': MapShape,\n  'boolean': BooleanShape,\n  'timestamp': TimestampShape,\n  'float': FloatShape,\n  'integer': IntegerShape,\n  'string': StringShape,\n  'base64': Base64Shape,\n  'binary': BinaryShape\n};\n\nShape.resolve = function resolve(shape, options) {\n  if (shape.shape) {\n    var refShape = options.api.shapes[shape.shape];\n    if (!refShape) {\n      throw new Error('Cannot find shape reference: ' + shape.shape);\n    }\n\n    return refShape;\n  } else {\n    return null;\n  }\n};\n\nShape.create = function create(shape, options, memberName) {\n  if (shape.isShape) return shape;\n\n  var refShape = Shape.resolve(shape, options);\n  if (refShape) {\n    var filteredKeys = Object.keys(shape);\n    if (!options.documentation) {\n      filteredKeys = filteredKeys.filter(function(name) {\n        return !name.match(/documentation/);\n      });\n    }\n\n    // create an inline shape with extra members\n    var InlineShape = function() {\n      refShape.constructor.call(this, shape, options, memberName);\n    };\n    InlineShape.prototype = refShape;\n    return new InlineShape();\n  } else {\n    // set type if not set\n    if (!shape.type) {\n      if (shape.members) shape.type = 'structure';\n      else if (shape.member) shape.type = 'list';\n      else if (shape.key) shape.type = 'map';\n      else shape.type = 'string';\n    }\n\n    // normalize types\n    var origType = shape.type;\n    if (Shape.normalizedTypes[shape.type]) {\n      shape.type = Shape.normalizedTypes[shape.type];\n    }\n\n    if (Shape.types[shape.type]) {\n      return new Shape.types[shape.type](shape, options, memberName);\n    } else {\n      throw new Error('Unrecognized shape type: ' + origType);\n    }\n  }\n};\n\nfunction CompositeShape(shape) {\n  Shape.apply(this, arguments);\n  property(this, 'isComposite', true);\n\n  if (shape.flattened) {\n    property(this, 'flattened', shape.flattened || false);\n  }\n}\n\nfunction StructureShape(shape, options) {\n  var self = this;\n  var requiredMap = null, firstInit = !this.isShape;\n\n  CompositeShape.apply(this, arguments);\n\n  if (firstInit) {\n    property(this, 'defaultValue', function() { return {}; });\n    property(this, 'members', {});\n    property(this, 'memberNames', []);\n    property(this, 'required', []);\n    property(this, 'isRequired', function() { return false; });\n  }\n\n  if (shape.members) {\n    property(this, 'members', new Collection(shape.members, options, function(name, member) {\n      return Shape.create(member, options, name);\n    }));\n    memoizedProperty(this, 'memberNames', function() {\n      return shape.xmlOrder || Object.keys(shape.members);\n    });\n\n    if (shape.event) {\n      memoizedProperty(this, 'eventPayloadMemberName', function() {\n        var members = self.members;\n        var memberNames = self.memberNames;\n        // iterate over members to find ones that are event payloads\n        for (var i = 0, iLen = memberNames.length; i < iLen; i++) {\n          if (members[memberNames[i]].isEventPayload) {\n            return memberNames[i];\n          }\n        }\n      });\n\n      memoizedProperty(this, 'eventHeaderMemberNames', function() {\n        var members = self.members;\n        var memberNames = self.memberNames;\n        var eventHeaderMemberNames = [];\n        // iterate over members to find ones that are event headers\n        for (var i = 0, iLen = memberNames.length; i < iLen; i++) {\n          if (members[memberNames[i]].isEventHeader) {\n            eventHeaderMemberNames.push(memberNames[i]);\n          }\n        }\n        return eventHeaderMemberNames;\n      });\n    }\n  }\n\n  if (shape.required) {\n    property(this, 'required', shape.required);\n    property(this, 'isRequired', function(name) {\n      if (!requiredMap) {\n        requiredMap = {};\n        for (var i = 0; i < shape.required.length; i++) {\n          requiredMap[shape.required[i]] = true;\n        }\n      }\n\n      return requiredMap[name];\n    }, false, true);\n  }\n\n  property(this, 'resultWrapper', shape.resultWrapper || null);\n\n  if (shape.payload) {\n    property(this, 'payload', shape.payload);\n  }\n\n  if (typeof shape.xmlNamespace === 'string') {\n    property(this, 'xmlNamespaceUri', shape.xmlNamespace);\n  } else if (typeof shape.xmlNamespace === 'object') {\n    property(this, 'xmlNamespacePrefix', shape.xmlNamespace.prefix);\n    property(this, 'xmlNamespaceUri', shape.xmlNamespace.uri);\n  }\n}\n\nfunction ListShape(shape, options) {\n  var self = this, firstInit = !this.isShape;\n  CompositeShape.apply(this, arguments);\n\n  if (firstInit) {\n    property(this, 'defaultValue', function() { return []; });\n  }\n\n  if (shape.member) {\n    memoizedProperty(this, 'member', function() {\n      return Shape.create(shape.member, options);\n    });\n  }\n\n  if (this.flattened) {\n    var oldName = this.name;\n    memoizedProperty(this, 'name', function() {\n      return self.member.name || oldName;\n    });\n  }\n}\n\nfunction MapShape(shape, options) {\n  var firstInit = !this.isShape;\n  CompositeShape.apply(this, arguments);\n\n  if (firstInit) {\n    property(this, 'defaultValue', function() { return {}; });\n    property(this, 'key', Shape.create({type: 'string'}, options));\n    property(this, 'value', Shape.create({type: 'string'}, options));\n  }\n\n  if (shape.key) {\n    memoizedProperty(this, 'key', function() {\n      return Shape.create(shape.key, options);\n    });\n  }\n  if (shape.value) {\n    memoizedProperty(this, 'value', function() {\n      return Shape.create(shape.value, options);\n    });\n  }\n}\n\nfunction TimestampShape(shape) {\n  var self = this;\n  Shape.apply(this, arguments);\n\n  if (shape.timestampFormat) {\n    property(this, 'timestampFormat', shape.timestampFormat);\n  } else if (self.isTimestampFormatSet && this.timestampFormat) {\n    property(this, 'timestampFormat', this.timestampFormat);\n  } else if (this.location === 'header') {\n    property(this, 'timestampFormat', 'rfc822');\n  } else if (this.location === 'querystring') {\n    property(this, 'timestampFormat', 'iso8601');\n  } else if (this.api) {\n    switch (this.api.protocol) {\n      case 'json':\n      case 'rest-json':\n        property(this, 'timestampFormat', 'unixTimestamp');\n        break;\n      case 'rest-xml':\n      case 'query':\n      case 'ec2':\n        property(this, 'timestampFormat', 'iso8601');\n        break;\n    }\n  }\n\n  this.toType = function(value) {\n    if (value === null || value === undefined) return null;\n    if (typeof value.toUTCString === 'function') return value;\n    return typeof value === 'string' || typeof value === 'number' ?\n           util.date.parseTimestamp(value) : null;\n  };\n\n  this.toWireFormat = function(value) {\n    return util.date.format(value, self.timestampFormat);\n  };\n}\n\nfunction StringShape() {\n  Shape.apply(this, arguments);\n\n  var nullLessProtocols = ['rest-xml', 'query', 'ec2'];\n  this.toType = function(value) {\n    value = this.api && nullLessProtocols.indexOf(this.api.protocol) > -1 ?\n      value || '' : value;\n    if (this.isJsonValue) {\n      return JSON.parse(value);\n    }\n\n    return value && typeof value.toString === 'function' ?\n      value.toString() : value;\n  };\n\n  this.toWireFormat = function(value) {\n    return this.isJsonValue ? JSON.stringify(value) : value;\n  };\n}\n\nfunction FloatShape() {\n  Shape.apply(this, arguments);\n\n  this.toType = function(value) {\n    if (value === null || value === undefined) return null;\n    return parseFloat(value);\n  };\n  this.toWireFormat = this.toType;\n}\n\nfunction IntegerShape() {\n  Shape.apply(this, arguments);\n\n  this.toType = function(value) {\n    if (value === null || value === undefined) return null;\n    return parseInt(value, 10);\n  };\n  this.toWireFormat = this.toType;\n}\n\nfunction BinaryShape() {\n  Shape.apply(this, arguments);\n  this.toType = function(value) {\n    var buf = util.base64.decode(value);\n    if (this.isSensitive && util.isNode() && typeof util.Buffer.alloc === 'function') {\n  /* Node.js can create a Buffer that is not isolated.\n   * i.e. buf.byteLength !== buf.buffer.byteLength\n   * This means that the sensitive data is accessible to anyone with access to buf.buffer.\n   * If this is the node shared Buffer, then other code within this process _could_ find this secret.\n   * Copy sensitive data to an isolated Buffer and zero the sensitive data.\n   * While this is safe to do here, copying this code somewhere else may produce unexpected results.\n   */\n      var secureBuf = util.Buffer.alloc(buf.length, buf);\n      buf.fill(0);\n      buf = secureBuf;\n    }\n    return buf;\n  };\n  this.toWireFormat = util.base64.encode;\n}\n\nfunction Base64Shape() {\n  BinaryShape.apply(this, arguments);\n}\n\nfunction BooleanShape() {\n  Shape.apply(this, arguments);\n\n  this.toType = function(value) {\n    if (typeof value === 'boolean') return value;\n    if (value === null || value === undefined) return null;\n    return value === 'true';\n  };\n}\n\n/**\n * @api private\n */\nShape.shapes = {\n  StructureShape: StructureShape,\n  ListShape: ListShape,\n  MapShape: MapShape,\n  StringShape: StringShape,\n  BooleanShape: BooleanShape,\n  Base64Shape: Base64Shape\n};\n\n/**\n * @api private\n */\nmodule.exports = Shape;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.host = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.query = null;\n  this.pathname = null;\n  this.path = null;\n  this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n    portPattern = /:[0-9]*$/,\n\n    // Special case for a simple path URL\n    simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n    // RFC 2396: characters reserved for delimiting URLs.\n    // We actually just auto-escape these.\n    delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n    // RFC 2396: characters not allowed for various reasons.\n    unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n    // Allowed by RFCs, but cause of XSS attacks.  Always escape these.\n    autoEscape = ['\\''].concat(unwise),\n    // Characters that are never ever allowed in a hostname.\n    // Note that any invalid chars are also handled, but these\n    // are the ones that are *expected* to be seen, so we fast-path\n    // them.\n    nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n    hostEndingChars = ['/', '?', '#'],\n    hostnameMaxLen = 255,\n    hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n    hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n    // protocols that can allow \"unsafe\" and \"unwise\" chars.\n    unsafeProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that never have a hostname.\n    hostlessProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that always contain a // bit.\n    slashedProtocol = {\n      'http': true,\n      'https': true,\n      'ftp': true,\n      'gopher': true,\n      'file': true,\n      'http:': true,\n      'https:': true,\n      'ftp:': true,\n      'gopher:': true,\n      'file:': true\n    },\n    querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n  if (url && util.isObject(url) && url instanceof Url) return url;\n\n  var u = new Url;\n  u.parse(url, parseQueryString, slashesDenoteHost);\n  return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n  if (!util.isString(url)) {\n    throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n  }\n\n  // Copy chrome, IE, opera backslash-handling behavior.\n  // Back slashes before the query string get converted to forward slashes\n  // See: https://code.google.com/p/chromium/issues/detail?id=25916\n  var queryIndex = url.indexOf('?'),\n      splitter =\n          (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n      uSplit = url.split(splitter),\n      slashRegex = /\\\\/g;\n  uSplit[0] = uSplit[0].replace(slashRegex, '/');\n  url = uSplit.join(splitter);\n\n  var rest = url;\n\n  // trim before proceeding.\n  // This is to support parse stuff like \"  http://foo.com  \\n\"\n  rest = rest.trim();\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    var simplePath = simplePathPattern.exec(rest);\n    if (simplePath) {\n      this.path = rest;\n      this.href = rest;\n      this.pathname = simplePath[1];\n      if (simplePath[2]) {\n        this.search = simplePath[2];\n        if (parseQueryString) {\n          this.query = querystring.parse(this.search.substr(1));\n        } else {\n          this.query = this.search.substr(1);\n        }\n      } else if (parseQueryString) {\n        this.search = '';\n        this.query = {};\n      }\n      return this;\n    }\n  }\n\n  var proto = protocolPattern.exec(rest);\n  if (proto) {\n    proto = proto[0];\n    var lowerProto = proto.toLowerCase();\n    this.protocol = lowerProto;\n    rest = rest.substr(proto.length);\n  }\n\n  // figure out if it's got a host\n  // user@server is *always* interpreted as a hostname, and url\n  // resolution will treat //foo/bar as host=foo,path=bar because that's\n  // how the browser resolves relative URLs.\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n    var slashes = rest.substr(0, 2) === '//';\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      this.slashes = true;\n    }\n  }\n\n  if (!hostlessProtocol[proto] &&\n      (slashes || (proto && !slashedProtocol[proto]))) {\n\n    // there's a hostname.\n    // the first instance of /, ?, ;, or # ends the host.\n    //\n    // If there is an @ in the hostname, then non-host chars *are* allowed\n    // to the left of the last @ sign, unless some host-ending character\n    // comes *before* the @-sign.\n    // URLs are obnoxious.\n    //\n    // ex:\n    // http://a@b@c/ => user:a@b host:c\n    // http://a@b?@c => user:a host:c path:/?@c\n\n    // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n    // Review our test case against browsers more comprehensively.\n\n    // find the first instance of any hostEndingChars\n    var hostEnd = -1;\n    for (var i = 0; i < hostEndingChars.length; i++) {\n      var hec = rest.indexOf(hostEndingChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n        hostEnd = hec;\n    }\n\n    // at this point, either we have an explicit point where the\n    // auth portion cannot go past, or the last @ char is the decider.\n    var auth, atSign;\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@');\n    } else {\n      // atSign must be in auth portion.\n      // http://a@b/c@d => host:b auth:a path:/c@d\n      atSign = rest.lastIndexOf('@', hostEnd);\n    }\n\n    // Now we have a portion which is definitely the auth.\n    // Pull that off.\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      this.auth = decodeURIComponent(auth);\n    }\n\n    // the host is the remaining to the left of the first non-host char\n    hostEnd = -1;\n    for (var i = 0; i < nonHostChars.length; i++) {\n      var hec = rest.indexOf(nonHostChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n        hostEnd = hec;\n    }\n    // if we still have not hit it, then the entire thing is a host.\n    if (hostEnd === -1)\n      hostEnd = rest.length;\n\n    this.host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd);\n\n    // pull out port.\n    this.parseHost();\n\n    // we've indicated that there is a hostname,\n    // so even if it's empty, it has to be present.\n    this.hostname = this.hostname || '';\n\n    // if hostname begins with [ and ends with ]\n    // assume that it's an IPv6 address.\n    var ipv6Hostname = this.hostname[0] === '[' &&\n        this.hostname[this.hostname.length - 1] === ']';\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      var hostparts = this.hostname.split(/\\./);\n      for (var i = 0, l = hostparts.length; i < l; i++) {\n        var part = hostparts[i];\n        if (!part) continue;\n        if (!part.match(hostnamePartPattern)) {\n          var newpart = '';\n          for (var j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              // we replace non-ASCII char with a temporary placeholder\n              // we need this to make sure size of hostname is not\n              // broken by replacing non-ASCII by nothing\n              newpart += 'x';\n            } else {\n              newpart += part[j];\n            }\n          }\n          // we test again with ASCII char only\n          if (!newpart.match(hostnamePartPattern)) {\n            var validParts = hostparts.slice(0, i);\n            var notHost = hostparts.slice(i + 1);\n            var bit = part.match(hostnamePartStart);\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n            if (notHost.length) {\n              rest = '/' + notHost.join('.') + rest;\n            }\n            this.hostname = validParts.join('.');\n            break;\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = '';\n    } else {\n      // hostnames are always lower case.\n      this.hostname = this.hostname.toLowerCase();\n    }\n\n    if (!ipv6Hostname) {\n      // IDNA Support: Returns a punycoded representation of \"domain\".\n      // It only converts parts of the domain name that\n      // have non-ASCII characters, i.e. it doesn't matter if\n      // you call it with a domain that already is ASCII-only.\n      this.hostname = punycode.toASCII(this.hostname);\n    }\n\n    var p = this.port ? ':' + this.port : '';\n    var h = this.hostname || '';\n    this.host = h + p;\n    this.href += this.host;\n\n    // strip [ and ] from the hostname\n    // the host field still retains them, though\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n      if (rest[0] !== '/') {\n        rest = '/' + rest;\n      }\n    }\n  }\n\n  // now rest is set to the post-host stuff.\n  // chop off any delim chars.\n  if (!unsafeProtocol[lowerProto]) {\n\n    // First, make 100% sure that any \"autoEscape\" chars get\n    // escaped, even if encodeURIComponent doesn't think they\n    // need to be.\n    for (var i = 0, l = autoEscape.length; i < l; i++) {\n      var ae = autoEscape[i];\n      if (rest.indexOf(ae) === -1)\n        continue;\n      var esc = encodeURIComponent(ae);\n      if (esc === ae) {\n        esc = escape(ae);\n      }\n      rest = rest.split(ae).join(esc);\n    }\n  }\n\n\n  // chop off from the tail first.\n  var hash = rest.indexOf('#');\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n  var qm = rest.indexOf('?');\n  if (qm !== -1) {\n    this.search = rest.substr(qm);\n    this.query = rest.substr(qm + 1);\n    if (parseQueryString) {\n      this.query = querystring.parse(this.query);\n    }\n    rest = rest.slice(0, qm);\n  } else if (parseQueryString) {\n    // no query string, but parseQueryString still requested\n    this.search = '';\n    this.query = {};\n  }\n  if (rest) this.pathname = rest;\n  if (slashedProtocol[lowerProto] &&\n      this.hostname && !this.pathname) {\n    this.pathname = '/';\n  }\n\n  //to support http.request\n  if (this.pathname || this.search) {\n    var p = this.pathname || '';\n    var s = this.search || '';\n    this.path = p + s;\n  }\n\n  // finally, reconstruct the href based on what has been validated.\n  this.href = this.format();\n  return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n  // ensure it's an object, and not a string url.\n  // If it's an obj, this is a no-op.\n  // this way, you can call url_format() on strings\n  // to clean up potentially wonky urls.\n  if (util.isString(obj)) obj = urlParse(obj);\n  if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n  return obj.format();\n}\n\nUrl.prototype.format = function() {\n  var auth = this.auth || '';\n  if (auth) {\n    auth = encodeURIComponent(auth);\n    auth = auth.replace(/%3A/i, ':');\n    auth += '@';\n  }\n\n  var protocol = this.protocol || '',\n      pathname = this.pathname || '',\n      hash = this.hash || '',\n      host = false,\n      query = '';\n\n  if (this.host) {\n    host = auth + this.host;\n  } else if (this.hostname) {\n    host = auth + (this.hostname.indexOf(':') === -1 ?\n        this.hostname :\n        '[' + this.hostname + ']');\n    if (this.port) {\n      host += ':' + this.port;\n    }\n  }\n\n  if (this.query &&\n      util.isObject(this.query) &&\n      Object.keys(this.query).length) {\n    query = querystring.stringify(this.query);\n  }\n\n  var search = this.search || (query && ('?' + query)) || '';\n\n  if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n  // only the slashedProtocols get the //.  Not mailto:, xmpp:, etc.\n  // unless they had them to begin with.\n  if (this.slashes ||\n      (!protocol || slashedProtocol[protocol]) && host !== false) {\n    host = '//' + (host || '');\n    if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n  } else if (!host) {\n    host = '';\n  }\n\n  if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n  if (search && search.charAt(0) !== '?') search = '?' + search;\n\n  pathname = pathname.replace(/[?#]/g, function(match) {\n    return encodeURIComponent(match);\n  });\n  search = search.replace('#', '%23');\n\n  return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n  return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n  return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n  if (!source) return relative;\n  return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n  if (util.isString(relative)) {\n    var rel = new Url();\n    rel.parse(relative, false, true);\n    relative = rel;\n  }\n\n  var result = new Url();\n  var tkeys = Object.keys(this);\n  for (var tk = 0; tk < tkeys.length; tk++) {\n    var tkey = tkeys[tk];\n    result[tkey] = this[tkey];\n  }\n\n  // hash is always overridden, no matter what.\n  // even href=\"\" will remove it.\n  result.hash = relative.hash;\n\n  // if the relative url is empty, then there's nothing left to do here.\n  if (relative.href === '') {\n    result.href = result.format();\n    return result;\n  }\n\n  // hrefs like //foo/bar always cut to the protocol.\n  if (relative.slashes && !relative.protocol) {\n    // take everything except the protocol from relative\n    var rkeys = Object.keys(relative);\n    for (var rk = 0; rk < rkeys.length; rk++) {\n      var rkey = rkeys[rk];\n      if (rkey !== 'protocol')\n        result[rkey] = relative[rkey];\n    }\n\n    //urlParse appends trailing / to urls like http://www.example.com\n    if (slashedProtocol[result.protocol] &&\n        result.hostname && !result.pathname) {\n      result.path = result.pathname = '/';\n    }\n\n    result.href = result.format();\n    return result;\n  }\n\n  if (relative.protocol && relative.protocol !== result.protocol) {\n    // if it's a known url protocol, then changing\n    // the protocol does weird things\n    // first, if it's not file:, then we MUST have a host,\n    // and if there was a path\n    // to begin with, then we MUST have a path.\n    // if it is file:, then the host is dropped,\n    // because that's known to be hostless.\n    // anything else is assumed to be absolute.\n    if (!slashedProtocol[relative.protocol]) {\n      var keys = Object.keys(relative);\n      for (var v = 0; v < keys.length; v++) {\n        var k = keys[v];\n        result[k] = relative[k];\n      }\n      result.href = result.format();\n      return result;\n    }\n\n    result.protocol = relative.protocol;\n    if (!relative.host && !hostlessProtocol[relative.protocol]) {\n      var relPath = (relative.pathname || '').split('/');\n      while (relPath.length && !(relative.host = relPath.shift()));\n      if (!relative.host) relative.host = '';\n      if (!relative.hostname) relative.hostname = '';\n      if (relPath[0] !== '') relPath.unshift('');\n      if (relPath.length < 2) relPath.unshift('');\n      result.pathname = relPath.join('/');\n    } else {\n      result.pathname = relative.pathname;\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    result.host = relative.host || '';\n    result.auth = relative.auth;\n    result.hostname = relative.hostname || relative.host;\n    result.port = relative.port;\n    // to support http.request\n    if (result.pathname || result.search) {\n      var p = result.pathname || '';\n      var s = result.search || '';\n      result.path = p + s;\n    }\n    result.slashes = result.slashes || relative.slashes;\n    result.href = result.format();\n    return result;\n  }\n\n  var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n      isRelAbs = (\n          relative.host ||\n          relative.pathname && relative.pathname.charAt(0) === '/'\n      ),\n      mustEndAbs = (isRelAbs || isSourceAbs ||\n                    (result.host && relative.pathname)),\n      removeAllDots = mustEndAbs,\n      srcPath = result.pathname && result.pathname.split('/') || [],\n      relPath = relative.pathname && relative.pathname.split('/') || [],\n      psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n  // if the url is a non-slashed url, then relative\n  // links like ../.. should be able\n  // to crawl up to the hostname, as well.  This is strange.\n  // result.protocol has already been set by now.\n  // Later on, put the first path part into the host field.\n  if (psychotic) {\n    result.hostname = '';\n    result.port = null;\n    if (result.host) {\n      if (srcPath[0] === '') srcPath[0] = result.host;\n      else srcPath.unshift(result.host);\n    }\n    result.host = '';\n    if (relative.protocol) {\n      relative.hostname = null;\n      relative.port = null;\n      if (relative.host) {\n        if (relPath[0] === '') relPath[0] = relative.host;\n        else relPath.unshift(relative.host);\n      }\n      relative.host = null;\n    }\n    mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n  }\n\n  if (isRelAbs) {\n    // it's absolute.\n    result.host = (relative.host || relative.host === '') ?\n                  relative.host : result.host;\n    result.hostname = (relative.hostname || relative.hostname === '') ?\n                      relative.hostname : result.hostname;\n    result.search = relative.search;\n    result.query = relative.query;\n    srcPath = relPath;\n    // fall through to the dot-handling below.\n  } else if (relPath.length) {\n    // it's relative\n    // throw away the existing file, and take the new path instead.\n    if (!srcPath) srcPath = [];\n    srcPath.pop();\n    srcPath = srcPath.concat(relPath);\n    result.search = relative.search;\n    result.query = relative.query;\n  } else if (!util.isNullOrUndefined(relative.search)) {\n    // just pull out the search.\n    // like href='?foo'.\n    // Put this after the other two cases because it simplifies the booleans\n    if (psychotic) {\n      result.hostname = result.host = srcPath.shift();\n      //occationaly the auth can get stuck only in host\n      //this especially happens in cases like\n      //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n      var authInHost = result.host && result.host.indexOf('@') > 0 ?\n                       result.host.split('@') : false;\n      if (authInHost) {\n        result.auth = authInHost.shift();\n        result.host = result.hostname = authInHost.shift();\n      }\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    //to support http.request\n    if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n      result.path = (result.pathname ? result.pathname : '') +\n                    (result.search ? result.search : '');\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  if (!srcPath.length) {\n    // no path at all.  easy.\n    // we've already handled the other stuff above.\n    result.pathname = null;\n    //to support http.request\n    if (result.search) {\n      result.path = '/' + result.search;\n    } else {\n      result.path = null;\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  // if a url ENDs in . or .., then it must get a trailing slash.\n  // however, if it ends in anything else non-slashy,\n  // then it must NOT get a trailing slash.\n  var last = srcPath.slice(-1)[0];\n  var hasTrailingSlash = (\n      (result.host || relative.host || srcPath.length > 1) &&\n      (last === '.' || last === '..') || last === '');\n\n  // strip single dots, resolve double dots to parent dir\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = srcPath.length; i >= 0; i--) {\n    last = srcPath[i];\n    if (last === '.') {\n      srcPath.splice(i, 1);\n    } else if (last === '..') {\n      srcPath.splice(i, 1);\n      up++;\n    } else if (up) {\n      srcPath.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (!mustEndAbs && !removeAllDots) {\n    for (; up--; up) {\n      srcPath.unshift('..');\n    }\n  }\n\n  if (mustEndAbs && srcPath[0] !== '' &&\n      (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n    srcPath.unshift('');\n  }\n\n  if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n    srcPath.push('');\n  }\n\n  var isAbsolute = srcPath[0] === '' ||\n      (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n  // put the host back\n  if (psychotic) {\n    result.hostname = result.host = isAbsolute ? '' :\n                                    srcPath.length ? srcPath.shift() : '';\n    //occationaly the auth can get stuck only in host\n    //this especially happens in cases like\n    //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n    var authInHost = result.host && result.host.indexOf('@') > 0 ?\n                     result.host.split('@') : false;\n    if (authInHost) {\n      result.auth = authInHost.shift();\n      result.host = result.hostname = authInHost.shift();\n    }\n  }\n\n  mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n  if (mustEndAbs && !isAbsolute) {\n    srcPath.unshift('');\n  }\n\n  if (!srcPath.length) {\n    result.pathname = null;\n    result.path = null;\n  } else {\n    result.pathname = srcPath.join('/');\n  }\n\n  //to support request.http\n  if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n    result.path = (result.pathname ? result.pathname : '') +\n                  (result.search ? result.search : '');\n  }\n  result.auth = relative.auth || result.auth;\n  result.slashes = result.slashes || relative.slashes;\n  result.href = result.format();\n  return result;\n};\n\nUrl.prototype.parseHost = function() {\n  var host = this.host;\n  var port = portPattern.exec(host);\n  if (port) {\n    port = port[0];\n    if (port !== ':') {\n      this.port = port.substr(1);\n    }\n    host = host.substr(0, host.length - port.length);\n  }\n  if (host) this.hostname = host;\n};\n","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { syntaxError } from '../error';\nimport blockStringValue from './blockStringValue';\n\n/**\n * Given a Source object, this returns a Lexer for that source.\n * A Lexer is a stateful stream generator in that every time\n * it is advanced, it returns the next token in the Source. Assuming the\n * source lexes, the final Token emitted by the lexer will be of kind\n * EOF, after which the lexer will repeatedly return the same EOF token\n * whenever called.\n */\nexport function createLexer(source, options) {\n  var startOfFileToken = new Tok(TokenKind.SOF, 0, 0, 0, 0, null);\n  var lexer = {\n    source: source,\n    options: options,\n    lastToken: startOfFileToken,\n    token: startOfFileToken,\n    line: 1,\n    lineStart: 0,\n    advance: advanceLexer,\n    lookahead: lookahead\n  };\n  return lexer;\n}\n\nfunction advanceLexer() {\n  this.lastToken = this.token;\n  var token = this.token = this.lookahead();\n  return token;\n}\n\nfunction lookahead() {\n  var token = this.token;\n  if (token.kind !== TokenKind.EOF) {\n    do {\n      // Note: next is only mutable during parsing, so we cast to allow this.\n      token = token.next || (token.next = readToken(this, token));\n    } while (token.kind === TokenKind.COMMENT);\n  }\n  return token;\n}\n\n/**\n * The return type of createLexer.\n */\n\n\n/**\n * An exported enum describing the different kinds of tokens that the\n * lexer emits.\n */\nexport var TokenKind = Object.freeze({\n  SOF: '<SOF>',\n  EOF: '<EOF>',\n  BANG: '!',\n  DOLLAR: '$',\n  AMP: '&',\n  PAREN_L: '(',\n  PAREN_R: ')',\n  SPREAD: '...',\n  COLON: ':',\n  EQUALS: '=',\n  AT: '@',\n  BRACKET_L: '[',\n  BRACKET_R: ']',\n  BRACE_L: '{',\n  PIPE: '|',\n  BRACE_R: '}',\n  NAME: 'Name',\n  INT: 'Int',\n  FLOAT: 'Float',\n  STRING: 'String',\n  BLOCK_STRING: 'BlockString',\n  COMMENT: 'Comment'\n});\n\n/**\n * The enum type representing the token kinds values.\n */\n\n\n/**\n * A helper function to describe a token as a string for debugging\n */\nexport function getTokenDesc(token) {\n  var value = token.value;\n  return value ? token.kind + ' \"' + value + '\"' : token.kind;\n}\n\nvar charCodeAt = String.prototype.charCodeAt;\nvar slice = String.prototype.slice;\n\n/**\n * Helper function for constructing the Token object.\n */\nfunction Tok(kind, start, end, line, column, prev, value) {\n  this.kind = kind;\n  this.start = start;\n  this.end = end;\n  this.line = line;\n  this.column = column;\n  this.value = value;\n  this.prev = prev;\n  this.next = null;\n}\n\n// Print a simplified form when appearing in JSON/util.inspect.\nTok.prototype.toJSON = Tok.prototype.inspect = function toJSON() {\n  return {\n    kind: this.kind,\n    value: this.value,\n    line: this.line,\n    column: this.column\n  };\n};\n\nfunction printCharCode(code) {\n  return (\n    // NaN/undefined represents access beyond the end of the file.\n    isNaN(code) ? TokenKind.EOF : // Trust JSON for ASCII.\n    code < 0x007f ? JSON.stringify(String.fromCharCode(code)) : // Otherwise print the escaped form.\n    '\"\\\\u' + ('00' + code.toString(16).toUpperCase()).slice(-4) + '\"'\n  );\n}\n\n/**\n * Gets the next token from the source starting at the given position.\n *\n * This skips over whitespace and comments until it finds the next lexable\n * token, then lexes punctuators immediately or calls the appropriate helper\n * function for more complicated tokens.\n */\nfunction readToken(lexer, prev) {\n  var source = lexer.source;\n  var body = source.body;\n  var bodyLength = body.length;\n\n  var pos = positionAfterWhitespace(body, prev.end, lexer);\n  var line = lexer.line;\n  var col = 1 + pos - lexer.lineStart;\n\n  if (pos >= bodyLength) {\n    return new Tok(TokenKind.EOF, bodyLength, bodyLength, line, col, prev);\n  }\n\n  var code = charCodeAt.call(body, pos);\n\n  // SourceCharacter\n  if (code < 0x0020 && code !== 0x0009 && code !== 0x000a && code !== 0x000d) {\n    throw syntaxError(source, pos, 'Cannot contain the invalid character ' + printCharCode(code) + '.');\n  }\n\n  switch (code) {\n    // !\n    case 33:\n      return new Tok(TokenKind.BANG, pos, pos + 1, line, col, prev);\n    // #\n    case 35:\n      return readComment(source, pos, line, col, prev);\n    // $\n    case 36:\n      return new Tok(TokenKind.DOLLAR, pos, pos + 1, line, col, prev);\n    // &\n    case 38:\n      return new Tok(TokenKind.AMP, pos, pos + 1, line, col, prev);\n    // (\n    case 40:\n      return new Tok(TokenKind.PAREN_L, pos, pos + 1, line, col, prev);\n    // )\n    case 41:\n      return new Tok(TokenKind.PAREN_R, pos, pos + 1, line, col, prev);\n    // .\n    case 46:\n      if (charCodeAt.call(body, pos + 1) === 46 && charCodeAt.call(body, pos + 2) === 46) {\n        return new Tok(TokenKind.SPREAD, pos, pos + 3, line, col, prev);\n      }\n      break;\n    // :\n    case 58:\n      return new Tok(TokenKind.COLON, pos, pos + 1, line, col, prev);\n    // =\n    case 61:\n      return new Tok(TokenKind.EQUALS, pos, pos + 1, line, col, prev);\n    // @\n    case 64:\n      return new Tok(TokenKind.AT, pos, pos + 1, line, col, prev);\n    // [\n    case 91:\n      return new Tok(TokenKind.BRACKET_L, pos, pos + 1, line, col, prev);\n    // ]\n    case 93:\n      return new Tok(TokenKind.BRACKET_R, pos, pos + 1, line, col, prev);\n    // {\n    case 123:\n      return new Tok(TokenKind.BRACE_L, pos, pos + 1, line, col, prev);\n    // |\n    case 124:\n      return new Tok(TokenKind.PIPE, pos, pos + 1, line, col, prev);\n    // }\n    case 125:\n      return new Tok(TokenKind.BRACE_R, pos, pos + 1, line, col, prev);\n    // A-Z _ a-z\n    case 65:\n    case 66:\n    case 67:\n    case 68:\n    case 69:\n    case 70:\n    case 71:\n    case 72:\n    case 73:\n    case 74:\n    case 75:\n    case 76:\n    case 77:\n    case 78:\n    case 79:\n    case 80:\n    case 81:\n    case 82:\n    case 83:\n    case 84:\n    case 85:\n    case 86:\n    case 87:\n    case 88:\n    case 89:\n    case 90:\n    case 95:\n    case 97:\n    case 98:\n    case 99:\n    case 100:\n    case 101:\n    case 102:\n    case 103:\n    case 104:\n    case 105:\n    case 106:\n    case 107:\n    case 108:\n    case 109:\n    case 110:\n    case 111:\n    case 112:\n    case 113:\n    case 114:\n    case 115:\n    case 116:\n    case 117:\n    case 118:\n    case 119:\n    case 120:\n    case 121:\n    case 122:\n      return readName(source, pos, line, col, prev);\n    // - 0-9\n    case 45:\n    case 48:\n    case 49:\n    case 50:\n    case 51:\n    case 52:\n    case 53:\n    case 54:\n    case 55:\n    case 56:\n    case 57:\n      return readNumber(source, pos, code, line, col, prev);\n    // \"\n    case 34:\n      if (charCodeAt.call(body, pos + 1) === 34 && charCodeAt.call(body, pos + 2) === 34) {\n        return readBlockString(source, pos, line, col, prev);\n      }\n      return readString(source, pos, line, col, prev);\n  }\n\n  throw syntaxError(source, pos, unexpectedCharacterMessage(code));\n}\n\n/**\n * Report a message that an unexpected character was encountered.\n */\nfunction unexpectedCharacterMessage(code) {\n  if (code === 39) {\n    // '\n    return \"Unexpected single quote character ('), did you mean to use \" + 'a double quote (\")?';\n  }\n\n  return 'Cannot parse the unexpected character ' + printCharCode(code) + '.';\n}\n\n/**\n * Reads from body starting at startPosition until it finds a non-whitespace\n * or commented character, then returns the position of that character for\n * lexing.\n */\nfunction positionAfterWhitespace(body, startPosition, lexer) {\n  var bodyLength = body.length;\n  var position = startPosition;\n  while (position < bodyLength) {\n    var code = charCodeAt.call(body, position);\n    // tab | space | comma | BOM\n    if (code === 9 || code === 32 || code === 44 || code === 0xfeff) {\n      ++position;\n    } else if (code === 10) {\n      // new line\n      ++position;\n      ++lexer.line;\n      lexer.lineStart = position;\n    } else if (code === 13) {\n      // carriage return\n      if (charCodeAt.call(body, position + 1) === 10) {\n        position += 2;\n      } else {\n        ++position;\n      }\n      ++lexer.line;\n      lexer.lineStart = position;\n    } else {\n      break;\n    }\n  }\n  return position;\n}\n\n/**\n * Reads a comment token from the source file.\n *\n * #[\\u0009\\u0020-\\uFFFF]*\n */\nfunction readComment(source, start, line, col, prev) {\n  var body = source.body;\n  var code = void 0;\n  var position = start;\n\n  do {\n    code = charCodeAt.call(body, ++position);\n  } while (code !== null && (\n  // SourceCharacter but not LineTerminator\n  code > 0x001f || code === 0x0009));\n\n  return new Tok(TokenKind.COMMENT, start, position, line, col, prev, slice.call(body, start + 1, position));\n}\n\n/**\n * Reads a number token from the source file, either a float\n * or an int depending on whether a decimal point appears.\n *\n * Int:   -?(0|[1-9][0-9]*)\n * Float: -?(0|[1-9][0-9]*)(\\.[0-9]+)?((E|e)(+|-)?[0-9]+)?\n */\nfunction readNumber(source, start, firstCode, line, col, prev) {\n  var body = source.body;\n  var code = firstCode;\n  var position = start;\n  var isFloat = false;\n\n  if (code === 45) {\n    // -\n    code = charCodeAt.call(body, ++position);\n  }\n\n  if (code === 48) {\n    // 0\n    code = charCodeAt.call(body, ++position);\n    if (code >= 48 && code <= 57) {\n      throw syntaxError(source, position, 'Invalid number, unexpected digit after 0: ' + printCharCode(code) + '.');\n    }\n  } else {\n    position = readDigits(source, position, code);\n    code = charCodeAt.call(body, position);\n  }\n\n  if (code === 46) {\n    // .\n    isFloat = true;\n\n    code = charCodeAt.call(body, ++position);\n    position = readDigits(source, position, code);\n    code = charCodeAt.call(body, position);\n  }\n\n  if (code === 69 || code === 101) {\n    // E e\n    isFloat = true;\n\n    code = charCodeAt.call(body, ++position);\n    if (code === 43 || code === 45) {\n      // + -\n      code = charCodeAt.call(body, ++position);\n    }\n    position = readDigits(source, position, code);\n  }\n\n  return new Tok(isFloat ? TokenKind.FLOAT : TokenKind.INT, start, position, line, col, prev, slice.call(body, start, position));\n}\n\n/**\n * Returns the new position in the source after reading digits.\n */\nfunction readDigits(source, start, firstCode) {\n  var body = source.body;\n  var position = start;\n  var code = firstCode;\n  if (code >= 48 && code <= 57) {\n    // 0 - 9\n    do {\n      code = charCodeAt.call(body, ++position);\n    } while (code >= 48 && code <= 57); // 0 - 9\n    return position;\n  }\n  throw syntaxError(source, position, 'Invalid number, expected digit but got: ' + printCharCode(code) + '.');\n}\n\n/**\n * Reads a string token from the source file.\n *\n * \"([^\"\\\\\\u000A\\u000D]|(\\\\(u[0-9a-fA-F]{4}|[\"\\\\/bfnrt])))*\"\n */\nfunction readString(source, start, line, col, prev) {\n  var body = source.body;\n  var position = start + 1;\n  var chunkStart = position;\n  var code = 0;\n  var value = '';\n\n  while (position < body.length && (code = charCodeAt.call(body, position)) !== null &&\n  // not LineTerminator\n  code !== 0x000a && code !== 0x000d) {\n    // Closing Quote (\")\n    if (code === 34) {\n      value += slice.call(body, chunkStart, position);\n      return new Tok(TokenKind.STRING, start, position + 1, line, col, prev, value);\n    }\n\n    // SourceCharacter\n    if (code < 0x0020 && code !== 0x0009) {\n      throw syntaxError(source, position, 'Invalid character within String: ' + printCharCode(code) + '.');\n    }\n\n    ++position;\n    if (code === 92) {\n      // \\\n      value += slice.call(body, chunkStart, position - 1);\n      code = charCodeAt.call(body, position);\n      switch (code) {\n        case 34:\n          value += '\"';\n          break;\n        case 47:\n          value += '/';\n          break;\n        case 92:\n          value += '\\\\';\n          break;\n        case 98:\n          value += '\\b';\n          break;\n        case 102:\n          value += '\\f';\n          break;\n        case 110:\n          value += '\\n';\n          break;\n        case 114:\n          value += '\\r';\n          break;\n        case 116:\n          value += '\\t';\n          break;\n        case 117:\n          // u\n          var charCode = uniCharCode(charCodeAt.call(body, position + 1), charCodeAt.call(body, position + 2), charCodeAt.call(body, position + 3), charCodeAt.call(body, position + 4));\n          if (charCode < 0) {\n            throw syntaxError(source, position, 'Invalid character escape sequence: ' + ('\\\\u' + body.slice(position + 1, position + 5) + '.'));\n          }\n          value += String.fromCharCode(charCode);\n          position += 4;\n          break;\n        default:\n          throw syntaxError(source, position, 'Invalid character escape sequence: \\\\' + String.fromCharCode(code) + '.');\n      }\n      ++position;\n      chunkStart = position;\n    }\n  }\n\n  throw syntaxError(source, position, 'Unterminated string.');\n}\n\n/**\n * Reads a block string token from the source file.\n *\n * \"\"\"(\"?\"?(\\\\\"\"\"|\\\\(?!=\"\"\")|[^\"\\\\]))*\"\"\"\n */\nfunction readBlockString(source, start, line, col, prev) {\n  var body = source.body;\n  var position = start + 3;\n  var chunkStart = position;\n  var code = 0;\n  var rawValue = '';\n\n  while (position < body.length && (code = charCodeAt.call(body, position)) !== null) {\n    // Closing Triple-Quote (\"\"\")\n    if (code === 34 && charCodeAt.call(body, position + 1) === 34 && charCodeAt.call(body, position + 2) === 34) {\n      rawValue += slice.call(body, chunkStart, position);\n      return new Tok(TokenKind.BLOCK_STRING, start, position + 3, line, col, prev, blockStringValue(rawValue));\n    }\n\n    // SourceCharacter\n    if (code < 0x0020 && code !== 0x0009 && code !== 0x000a && code !== 0x000d) {\n      throw syntaxError(source, position, 'Invalid character within String: ' + printCharCode(code) + '.');\n    }\n\n    // Escape Triple-Quote (\\\"\"\")\n    if (code === 92 && charCodeAt.call(body, position + 1) === 34 && charCodeAt.call(body, position + 2) === 34 && charCodeAt.call(body, position + 3) === 34) {\n      rawValue += slice.call(body, chunkStart, position) + '\"\"\"';\n      position += 4;\n      chunkStart = position;\n    } else {\n      ++position;\n    }\n  }\n\n  throw syntaxError(source, position, 'Unterminated string.');\n}\n\n/**\n * Converts four hexidecimal chars to the integer that the\n * string represents. For example, uniCharCode('0','0','0','f')\n * will return 15, and uniCharCode('0','0','f','f') returns 255.\n *\n * Returns a negative number on error, if a char was invalid.\n *\n * This is implemented by noting that char2hex() returns -1 on error,\n * which means the result of ORing the char2hex() will also be negative.\n */\nfunction uniCharCode(a, b, c, d) {\n  return char2hex(a) << 12 | char2hex(b) << 8 | char2hex(c) << 4 | char2hex(d);\n}\n\n/**\n * Converts a hex character to its integer value.\n * '0' becomes 0, '9' becomes 9\n * 'A' becomes 10, 'F' becomes 15\n * 'a' becomes 10, 'f' becomes 15\n *\n * Returns -1 on error.\n */\nfunction char2hex(a) {\n  return a >= 48 && a <= 57 ? a - 48 // 0-9\n  : a >= 65 && a <= 70 ? a - 55 // A-F\n  : a >= 97 && a <= 102 ? a - 87 // a-f\n  : -1;\n}\n\n/**\n * Reads an alphanumeric + underscore name from the source.\n *\n * [_A-Za-z][_0-9A-Za-z]*\n */\nfunction readName(source, start, line, col, prev) {\n  var body = source.body;\n  var bodyLength = body.length;\n  var position = start + 1;\n  var code = 0;\n  while (position !== bodyLength && (code = charCodeAt.call(body, position)) !== null && (code === 95 || // _\n  code >= 48 && code <= 57 || // 0-9\n  code >= 65 && code <= 90 || // A-Z\n  code >= 97 && code <= 122) // a-z\n  ) {\n    ++position;\n  }\n  return new Tok(TokenKind.NAME, start, position, line, col, prev, slice.call(body, start, position));\n}","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['sts'] = {};\nAWS.STS = Service.defineService('sts', ['2011-06-15']);\nrequire('../lib/services/sts');\nObject.defineProperty(apiLoader.services['sts'], '2011-06-15', {\n  get: function get() {\n    var model = require('../apis/sts-2011-06-15.min.json');\n    model.paginators = require('../apis/sts-2011-06-15.paginators.json').pagination;\n    return model;\n  },\n  enumerable: true,\n  configurable: true\n});\n\nmodule.exports = AWS.STS;\n","\n\nfunction mi(name) {\n  throw new Error('History must implement ' + name + '().');\n}\n\nexport var History = function () {\n  function History() {\n    \n  }\n\n  History.prototype.activate = function activate(options) {\n    mi('activate');\n  };\n\n  History.prototype.deactivate = function deactivate() {\n    mi('deactivate');\n  };\n\n  History.prototype.getAbsoluteRoot = function getAbsoluteRoot() {\n    mi('getAbsoluteRoot');\n  };\n\n  History.prototype.navigate = function navigate(fragment, options) {\n    mi('navigate');\n  };\n\n  History.prototype.navigateBack = function navigateBack() {\n    mi('navigateBack');\n  };\n\n  History.prototype.setTitle = function setTitle(title) {\n    mi('setTitle');\n  };\n\n  History.prototype.setState = function setState(key, value) {\n    mi('setState');\n  };\n\n  History.prototype.getState = function getState(key) {\n    mi('getState');\n  };\n\n  History.prototype.getHistoryIndex = function getHistoryIndex() {\n    mi('getHistoryIndex');\n  };\n\n  History.prototype.go = function go(movement) {\n    mi('go');\n  };\n\n  return History;\n}();","import { IRecordReference, RecordReference } from \"shared-models/record-reference\";\nimport { computedFrom } from \"aurelia-binding\";\n\nexport enum ORDER_COLUMN_TYPES { \n    ORDER_NUMBER = 'Order Number',\n    SHIP_DATE = 'Ship Date',\n    FIRST_NAME = 'First Name',\n    LAST_NAME = 'Last Name',\n    COMPANY = 'Company',\n    ADDRESS1 = 'Address1',\n    ADDRESS2 = 'Address2',\n    CITY = 'City',    \n    STATE = 'State',\n    ZIP = 'Zip',    \n    COUNTRY = 'Country',\n    PHONE = 'Phone',\n    EMAIL = 'Email',\n    SHIPPING_INSTRUCTIONS = 'ShippingInstructions',\n    GIFT_MESSAGE = 'GiftMessage',\n    SHIP_METHOD = 'ShipMethod',\n    ITEM_SKU = 'Item', \n    ITEM_QUANTITY = 'Item Quantity'\n}\n\n\n\nexport interface IImportOrderSetup extends IRecordReference{isDefault?: boolean, columns: IImportOrderColumn[], csvFileData?: string, integrationType?: IRecordReference};\nexport class ImportOrderSetup extends RecordReference{\n    isDefault?: boolean = false;\n    columns: ImportOrderColumn[];\n    csvFileData?: string;\n    integrationType: RecordReference;\n    \n    constructor(data: IImportOrderSetup){\n        super(data)\n        this.isDefault = data.isDefault || false;        \n        this.columns = (data.columns || []).map((column)=> new ImportOrderColumn(column));\n        this.csvFileData = data.csvFileData\n        this.integrationType = data.integrationType ? new RecordReference(data.integrationType) : null;\n    }\n}\n\nexport interface IImportOrderColumn extends IRecordReference{type: IRecordReference, isMandatory?: boolean, columnNameRegExpString?: string, dataRegExpString?: string};\nexport class ImportOrderColumn extends RecordReference{\n    type: RecordReference;\n    isMandatory?: boolean = false;\n    columnNameRegExpString?: string;\n    dataRegExpString?: string;\n    columnNameRegExp: RegExp;\n    dataRegExp: RegExp;\n    \n    constructor(data: IImportOrderColumn){\n        super(data)\n        this.type = data.type ? new RecordReference(data.type) : null;        \n        this.isMandatory = data.isMandatory || false;        \n        this.columnNameRegExpString = data.columnNameRegExpString || `^${this.name}$`;    \n        this.dataRegExpString = data.dataRegExpString || \"\";    \n        this.columnNameRegExp = new RegExp(this.columnNameRegExpString, 'i');   \n        this.dataRegExp = this.dataRegExpString ? new RegExp(this.dataRegExpString, 'i') : null;   \n    }\n\n    isColumnMatched(columnName): boolean{\n        return this.columnNameRegExp.test(columnName);\n    }\n\n    isDataMatched(data): boolean{        \n        if(!data){\n            return true;\n        }\n        if(!this.dataRegExp){\n            return true;\n        }\n        return this.dataRegExp.test(data);\n    }\n\n    @computedFrom('type')\n    get isOrderNumber(): boolean{\n        return this.type.name === ORDER_COLUMN_TYPES.ORDER_NUMBER;\n    }    \n\n    @computedFrom('type')\n    get isState(): boolean{\n        return this.type.name === ORDER_COLUMN_TYPES.STATE;\n    }\n\n    @computedFrom('type')\n    get isCountry(): boolean{\n        return this.type.name === ORDER_COLUMN_TYPES.COUNTRY;\n    }\n\n    @computedFrom('type')\n    get isShipMethod(): boolean{\n        return this.type.name === ORDER_COLUMN_TYPES.SHIP_METHOD;\n    }\n\n    @computedFrom('type')\n    get isEmail(): boolean{\n        return this.type.name === ORDER_COLUMN_TYPES.EMAIL;\n    }\n\n    @computedFrom('type')\n    get isShipDate(): boolean{\n        return this.type.name === ORDER_COLUMN_TYPES.SHIP_DATE;\n    }\n\n    @computedFrom('type')\n    get isItemSku(): boolean{\n        return this.type.name === ORDER_COLUMN_TYPES.ITEM_SKU;\n    }\n\n    @computedFrom('type')\n    get isItemQuantity(): boolean{\n        return this.type.name === ORDER_COLUMN_TYPES.ITEM_QUANTITY;\n    }\n}\n","import { IRecordReference, RecordReference } from \"shared-models/record-reference\";\n\nexport interface IInvoice extends IRecordReference{\n    date?: Date;\n    dueDate?: Date;\n    amountTotal?: number;\n    amountDue?: number;\n    reference?: string;\n    paymentState?: string;\n    term?: IRecordReference;\n    inboundFileName?: string;\n    inboundFile?: string;\n    outboundFileName?: string;\n    outboundFile?: string;\n    storageFileName?: string;\n    storageFile?: string;\n    addressCorrFileName?: string;\n    addressCorrFile?: string;\n    returnsFileName?: string;\n    returnsFile?: string;\n    items?: IInvoiceItem[];\n};\nexport class Invoice extends RecordReference{   \n    date: Date;\n    dueDate: Date;\n    amountTotal: number;\n    amountDue: number;\n    reference: string;\n    paymentState: string;\n    term: RecordReference;\n    inboundFileName: string;\n    inboundFile: string;\n    outboundFileName: string;\n    outboundFile: string;\n    storageFileName: string;\n    storageFile: string;\n    addressCorrFileName: string;\n    addressCorrFile: string;\n    returnsFileName: string;\n    returnsFile: string;\n    items: InvoiceItem[];\n\n    constructor(data: IInvoice){\n        data = data || {}\n        super(data);     \n        this.date = data.date ? new Date(data.date) : null;\n        this.dueDate = data.dueDate ? new Date(data.dueDate) : null;\n        this.amountTotal = data.amountTotal || 0;\n        this.amountDue = data.amountDue || 0;\n        this.reference = data.reference || \"\";\n        this.paymentState = data.paymentState || \"\";\n        this.term = data.term ? new RecordReference(data.term): null;\n        this.inboundFileName = data.inboundFileName || \"\";\n        this.inboundFile = data.inboundFile || \"\";\n        this.outboundFileName = data.outboundFileName || \"\";\n        this.outboundFile = data.outboundFile || \"\";\n        this.storageFileName = data.storageFileName || \"\";\n        this.storageFile = data.storageFile || \"\";\n        this.addressCorrFileName = data.addressCorrFileName || \"\";\n        this.addressCorrFile = data.addressCorrFile || \"\";\n        this.returnsFileName = data.returnsFileName || \"\";\n        this.returnsFile = data.returnsFile || \"\";\n        this.items = (data.items || []).map((item) => new InvoiceItem(item));\n    }\n}\n\nexport interface IInvoiceItem extends IRecordReference{itemName?: string, itemId?: string, quantity?: number, totalCharges?: number;};\nexport class InvoiceItem extends RecordReference{\n    itemName: string;\n    itemId: string;\n    quantity: number; \n    totalCharges: number;   \n\n    constructor(data: IInvoiceItem){\n        data = data || {};\n        super(data);\n        this.itemName = data.itemName;\n        this.itemId = data.itemId;\n        this.quantity = data.quantity || 0;\n        this.totalCharges = data.totalCharges || 0;\n    }\n}","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// import * as S3 from 'aws-sdk/clients/s3';\nvar AWS = require(\"aws-sdk/global\");\nexports.AWS = AWS;\n//# sourceMappingURL=Facet.js.map","var util = require('../util');\nvar populateHostPrefix = require('./helpers').populateHostPrefix;\n\nfunction populateMethod(req) {\n  req.httpRequest.method = req.service.api.operations[req.operation].httpMethod;\n}\n\nfunction generateURI(endpointPath, operationPath, input, params) {\n  var uri = [endpointPath, operationPath].join('/');\n  uri = uri.replace(/\\/+/g, '/');\n\n  var queryString = {}, queryStringSet = false;\n  util.each(input.members, function (name, member) {\n    var paramValue = params[name];\n    if (paramValue === null || paramValue === undefined) return;\n    if (member.location === 'uri') {\n      var regex = new RegExp('\\\\{' + member.name + '(\\\\+)?\\\\}');\n      uri = uri.replace(regex, function(_, plus) {\n        var fn = plus ? util.uriEscapePath : util.uriEscape;\n        return fn(String(paramValue));\n      });\n    } else if (member.location === 'querystring') {\n      queryStringSet = true;\n\n      if (member.type === 'list') {\n        queryString[member.name] = paramValue.map(function(val) {\n          return util.uriEscape(member.member.toWireFormat(val).toString());\n        });\n      } else if (member.type === 'map') {\n        util.each(paramValue, function(key, value) {\n          if (Array.isArray(value)) {\n            queryString[key] = value.map(function(val) {\n              return util.uriEscape(String(val));\n            });\n          } else {\n            queryString[key] = util.uriEscape(String(value));\n          }\n        });\n      } else {\n        queryString[member.name] = util.uriEscape(member.toWireFormat(paramValue).toString());\n      }\n    }\n  });\n\n  if (queryStringSet) {\n    uri += (uri.indexOf('?') >= 0 ? '&' : '?');\n    var parts = [];\n    util.arrayEach(Object.keys(queryString).sort(), function(key) {\n      if (!Array.isArray(queryString[key])) {\n        queryString[key] = [queryString[key]];\n      }\n      for (var i = 0; i < queryString[key].length; i++) {\n        parts.push(util.uriEscape(String(key)) + '=' + queryString[key][i]);\n      }\n    });\n    uri += parts.join('&');\n  }\n\n  return uri;\n}\n\nfunction populateURI(req) {\n  var operation = req.service.api.operations[req.operation];\n  var input = operation.input;\n\n  var uri = generateURI(req.httpRequest.endpoint.path, operation.httpPath, input, req.params);\n  req.httpRequest.path = uri;\n}\n\nfunction populateHeaders(req) {\n  var operation = req.service.api.operations[req.operation];\n  util.each(operation.input.members, function (name, member) {\n    var value = req.params[name];\n    if (value === null || value === undefined) return;\n\n    if (member.location === 'headers' && member.type === 'map') {\n      util.each(value, function(key, memberValue) {\n        req.httpRequest.headers[member.name + key] = memberValue;\n      });\n    } else if (member.location === 'header') {\n      value = member.toWireFormat(value).toString();\n      if (member.isJsonValue) {\n        value = util.base64.encode(value);\n      }\n      req.httpRequest.headers[member.name] = value;\n    }\n  });\n}\n\nfunction buildRequest(req) {\n  populateMethod(req);\n  populateURI(req);\n  populateHeaders(req);\n  populateHostPrefix(req);\n}\n\nfunction extractError() {\n}\n\nfunction extractData(resp) {\n  var req = resp.request;\n  var data = {};\n  var r = resp.httpResponse;\n  var operation = req.service.api.operations[req.operation];\n  var output = operation.output;\n\n  // normalize headers names to lower-cased keys for matching\n  var headers = {};\n  util.each(r.headers, function (k, v) {\n    headers[k.toLowerCase()] = v;\n  });\n\n  util.each(output.members, function(name, member) {\n    var header = (member.name || name).toLowerCase();\n    if (member.location === 'headers' && member.type === 'map') {\n      data[name] = {};\n      var location = member.isLocationName ? member.name : '';\n      var pattern = new RegExp('^' + location + '(.+)', 'i');\n      util.each(r.headers, function (k, v) {\n        var result = k.match(pattern);\n        if (result !== null) {\n          data[name][result[1]] = v;\n        }\n      });\n    } else if (member.location === 'header') {\n      if (headers[header] !== undefined) {\n        var value = member.isJsonValue ?\n          util.base64.decode(headers[header]) :\n          headers[header];\n        data[name] = member.toType(value);\n      }\n    } else if (member.location === 'statusCode') {\n      data[name] = parseInt(r.statusCode, 10);\n    }\n  });\n\n  resp.data = data;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n  buildRequest: buildRequest,\n  extractError: extractError,\n  extractData: extractData,\n  generateURI: generateURI\n};\n","var Buffer = require('buffer/').Buffer;\n\n/**\n * This is a polyfill for the static method `isView` of `ArrayBuffer`, which is\n * e.g. missing in IE 10.\n *\n * @api private\n */\nif (\n    typeof ArrayBuffer !== 'undefined' &&\n    typeof ArrayBuffer.isView === 'undefined'\n) {\n    ArrayBuffer.isView = function(arg) {\n        return viewStrings.indexOf(Object.prototype.toString.call(arg)) > -1;\n    };\n}\n\n/**\n * @api private\n */\nvar viewStrings = [\n    '[object Int8Array]',\n    '[object Uint8Array]',\n    '[object Uint8ClampedArray]',\n    '[object Int16Array]',\n    '[object Uint16Array]',\n    '[object Int32Array]',\n    '[object Uint32Array]',\n    '[object Float32Array]',\n    '[object Float64Array]',\n    '[object DataView]',\n];\n\n/**\n * @api private\n */\nfunction isEmptyData(data) {\n    if (typeof data === 'string') {\n        return data.length === 0;\n    }\n    return data.byteLength === 0;\n}\n\n/**\n * @api private\n */\nfunction convertToBuffer(data) {\n    if (typeof data === 'string') {\n        data = new Buffer(data, 'utf8');\n    }\n\n    if (ArrayBuffer.isView(data)) {\n        return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n    }\n\n    return new Uint8Array(data);\n}\n\n/**\n * @api private\n */\nmodule.exports = exports = {\n    isEmptyData: isEmptyData,\n    convertToBuffer: convertToBuffer,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Logger_1 = require(\"./Logger\");\nvar logger = new Logger_1.ConsoleLogger('Amplify');\nvar Amplify = /** @class */ (function () {\n    function Amplify() {\n    }\n    Amplify.register = function (comp) {\n        logger.debug('component registered in amplify', comp);\n        this._components.push(comp);\n        if (typeof comp.getModuleName === 'function') {\n            Amplify[comp.getModuleName()] = comp;\n        }\n        else {\n            logger.debug('no getModuleName method for component', comp);\n        }\n    };\n    Amplify.configure = function (config) {\n        var _this = this;\n        if (!config)\n            return this._config;\n        this._config = Object.assign(this._config, config);\n        logger.debug('amplify config', this._config);\n        this._components.map(function (comp) {\n            comp.configure(_this._config);\n        });\n        return this._config;\n    };\n    Amplify.addPluggable = function (pluggable) {\n        if (pluggable && pluggable['getCategory'] && typeof pluggable['getCategory'] === 'function') {\n            this._components.map(function (comp) {\n                if (comp['addPluggable'] && typeof comp['addPluggable'] === 'function') {\n                    comp.addPluggable(pluggable);\n                }\n            });\n        }\n    };\n    Amplify._components = [];\n    Amplify._config = {};\n    // for backward compatibility to avoid breaking change\n    // if someone is using like Amplify.Auth\n    Amplify.Auth = null;\n    Amplify.Analytics = null;\n    Amplify.API = null;\n    Amplify.Storage = null;\n    Amplify.I18n = null;\n    Amplify.Cache = null;\n    Amplify.PubSub = null;\n    Amplify.Interactions = null;\n    Amplify.Pushnotification = null;\n    Amplify.UI = null;\n    Amplify.XR = null;\n    Amplify.Logger = Logger_1.ConsoleLogger;\n    Amplify.ServiceWorker = null;\n    return Amplify;\n}());\nexports.default = Amplify;\n//# sourceMappingURL=Amplify.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@aws-amplify/core\");\nvar BrowserStorageCache_1 = require(\"./BrowserStorageCache\");\nexports.BrowserStorageCache = BrowserStorageCache_1.default;\nvar InMemoryCache_1 = require(\"./InMemoryCache\");\nexports.InMemoryCache = InMemoryCache_1.default;\nexports.default = BrowserStorageCache_1.default;\ncore_1.default.register(BrowserStorageCache_1.default);\n//# sourceMappingURL=index.js.map","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nexport default function invariant(condition, message) {\n  /* istanbul ignore else */\n  if (!condition) {\n    throw new Error(message);\n  }\n}","module.exports = require('./lib/Observable.js').Observable;\n",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var WordArray = C_lib.WordArray;\n\t    var Hasher = C_lib.Hasher;\n\t    var C_algo = C.algo;\n\n\t    // Initialization and round constants tables\n\t    var H = [];\n\t    var K = [];\n\n\t    // Compute constants\n\t    (function () {\n\t        function isPrime(n) {\n\t            var sqrtN = Math.sqrt(n);\n\t            for (var factor = 2; factor <= sqrtN; factor++) {\n\t                if (!(n % factor)) {\n\t                    return false;\n\t                }\n\t            }\n\n\t            return true;\n\t        }\n\n\t        function getFractionalBits(n) {\n\t            return ((n - (n | 0)) * 0x100000000) | 0;\n\t        }\n\n\t        var n = 2;\n\t        var nPrime = 0;\n\t        while (nPrime < 64) {\n\t            if (isPrime(n)) {\n\t                if (nPrime < 8) {\n\t                    H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t                }\n\t                K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t                nPrime++;\n\t            }\n\n\t            n++;\n\t        }\n\t    }());\n\n\t    // Reusable object\n\t    var W = [];\n\n\t    /**\n\t     * SHA-256 hash algorithm.\n\t     */\n\t    var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t        _doReset: function () {\n\t            this._hash = new WordArray.init(H.slice(0));\n\t        },\n\n\t        _doProcessBlock: function (M, offset) {\n\t            // Shortcut\n\t            var H = this._hash.words;\n\n\t            // Working variables\n\t            var a = H[0];\n\t            var b = H[1];\n\t            var c = H[2];\n\t            var d = H[3];\n\t            var e = H[4];\n\t            var f = H[5];\n\t            var g = H[6];\n\t            var h = H[7];\n\n\t            // Computation\n\t            for (var i = 0; i < 64; i++) {\n\t                if (i < 16) {\n\t                    W[i] = M[offset + i] | 0;\n\t                } else {\n\t                    var gamma0x = W[i - 15];\n\t                    var gamma0  = ((gamma0x << 25) | (gamma0x >>> 7))  ^\n\t                                  ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t                                   (gamma0x >>> 3);\n\n\t                    var gamma1x = W[i - 2];\n\t                    var gamma1  = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t                                  ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t                                   (gamma1x >>> 10);\n\n\t                    W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t                }\n\n\t                var ch  = (e & f) ^ (~e & g);\n\t                var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t                var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t                var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7)  | (e >>> 25));\n\n\t                var t1 = h + sigma1 + ch + K[i] + W[i];\n\t                var t2 = sigma0 + maj;\n\n\t                h = g;\n\t                g = f;\n\t                f = e;\n\t                e = (d + t1) | 0;\n\t                d = c;\n\t                c = b;\n\t                b = a;\n\t                a = (t1 + t2) | 0;\n\t            }\n\n\t            // Intermediate hash value\n\t            H[0] = (H[0] + a) | 0;\n\t            H[1] = (H[1] + b) | 0;\n\t            H[2] = (H[2] + c) | 0;\n\t            H[3] = (H[3] + d) | 0;\n\t            H[4] = (H[4] + e) | 0;\n\t            H[5] = (H[5] + f) | 0;\n\t            H[6] = (H[6] + g) | 0;\n\t            H[7] = (H[7] + h) | 0;\n\t        },\n\n\t        _doFinalize: function () {\n\t            // Shortcuts\n\t            var data = this._data;\n\t            var dataWords = data.words;\n\n\t            var nBitsTotal = this._nDataBytes * 8;\n\t            var nBitsLeft = data.sigBytes * 8;\n\n\t            // Add padding\n\t            dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t            data.sigBytes = dataWords.length * 4;\n\n\t            // Hash final blocks\n\t            this._process();\n\n\t            // Return final computed hash\n\t            return this._hash;\n\t        },\n\n\t        clone: function () {\n\t            var clone = Hasher.clone.call(this);\n\t            clone._hash = this._hash.clone();\n\n\t            return clone;\n\t        }\n\t    });\n\n\t    /**\n\t     * Shortcut function to the hasher's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     *\n\t     * @return {WordArray} The hash.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hash = CryptoJS.SHA256('message');\n\t     *     var hash = CryptoJS.SHA256(wordArray);\n\t     */\n\t    C.SHA256 = Hasher._createHelper(SHA256);\n\n\t    /**\n\t     * Shortcut function to the HMAC's object interface.\n\t     *\n\t     * @param {WordArray|string} message The message to hash.\n\t     * @param {WordArray|string} key The secret key.\n\t     *\n\t     * @return {WordArray} The HMAC.\n\t     *\n\t     * @static\n\t     *\n\t     * @example\n\t     *\n\t     *     var hmac = CryptoJS.HmacSHA256(message, key);\n\t     */\n\t    C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));","\n/**\n *  Copyright (c) 2017, Facebook, Inc.\n *  All rights reserved.\n *\n *  This source code is licensed under the BSD-style license found in the\n *  LICENSE file in the root directory of this source tree. An additional grant\n *  of patent rights can be found in the PATENTS file in the same directory.\n */\n\nimport keyValMap from '../jsutils/keyValMap';\nimport isInvalid from '../jsutils/isInvalid';\n\nimport { Kind } from '../language/kinds';\n\n\n/**\n * Produces a JavaScript value given a GraphQL Value AST.\n *\n * Unlike `valueFromAST()`, no type is provided. The resulting JavaScript value\n * will reflect the provided GraphQL value AST.\n *\n * | GraphQL Value        | JavaScript Value |\n * | -------------------- | ---------------- |\n * | Input Object         | Object           |\n * | List                 | Array            |\n * | Boolean              | Boolean          |\n * | String / Enum        | String           |\n * | Int / Float          | Number           |\n * | Null                 | null             |\n *\n */\nexport function valueFromASTUntyped(valueNode, variables) {\n  switch (valueNode.kind) {\n    case Kind.NULL:\n      return null;\n    case Kind.INT:\n      return parseInt(valueNode.value, 10);\n    case Kind.FLOAT:\n      return parseFloat(valueNode.value);\n    case Kind.STRING:\n    case Kind.ENUM:\n    case Kind.BOOLEAN:\n      return valueNode.value;\n    case Kind.LIST:\n      return valueNode.values.map(function (node) {\n        return valueFromASTUntyped(node, variables);\n      });\n    case Kind.OBJECT:\n      return keyValMap(valueNode.fields, function (field) {\n        return field.name.value;\n      }, function (field) {\n        return valueFromASTUntyped(field.value, variables);\n      });\n    case Kind.VARIABLE:\n      var variableName = valueNode.name.value;\n      return variables && !isInvalid(variables[variableName]) ? variables[variableName] : undefined;\n  }\n  /* istanbul ignore next */\n  throw new Error('Unexpected value kind: ' + valueNode.kind);\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { getLocation } from '../language/location';\n\n\n/**\n * Prints a GraphQLError to a string, representing useful location information\n * about the error's position in the source.\n */\nexport function printError(error) {\n  var printedLocations = [];\n  if (error.nodes) {\n    error.nodes.forEach(function (node) {\n      if (node.loc) {\n        printedLocations.push(highlightSourceAtLocation(node.loc.source, getLocation(node.loc.source, node.loc.start)));\n      }\n    });\n  } else if (error.source && error.locations) {\n    var source = error.source;\n    error.locations.forEach(function (location) {\n      printedLocations.push(highlightSourceAtLocation(source, location));\n    });\n  }\n  return printedLocations.length === 0 ? error.message : [error.message].concat(printedLocations).join('\\n\\n') + '\\n';\n}\n\n/**\n * Render a helpful description of the location of the error in the GraphQL\n * Source document.\n */\nfunction highlightSourceAtLocation(source, location) {\n  var line = location.line;\n  var lineOffset = source.locationOffset.line - 1;\n  var columnOffset = getColumnOffset(source, location);\n  var contextLine = line + lineOffset;\n  var contextColumn = location.column + columnOffset;\n  var prevLineNum = (contextLine - 1).toString();\n  var lineNum = contextLine.toString();\n  var nextLineNum = (contextLine + 1).toString();\n  var padLen = nextLineNum.length;\n  var lines = source.body.split(/\\r\\n|[\\n\\r]/g);\n  lines[0] = whitespace(source.locationOffset.column - 1) + lines[0];\n  var outputLines = [source.name + ' (' + contextLine + ':' + contextColumn + ')', line >= 2 && lpad(padLen, prevLineNum) + ': ' + lines[line - 2], lpad(padLen, lineNum) + ': ' + lines[line - 1], whitespace(2 + padLen + contextColumn - 1) + '^', line < lines.length && lpad(padLen, nextLineNum) + ': ' + lines[line]];\n  return outputLines.filter(Boolean).join('\\n');\n}\n\nfunction getColumnOffset(source, location) {\n  return location.line === 1 ? source.locationOffset.column - 1 : 0;\n}\n\nfunction whitespace(len) {\n  return Array(len + 1).join(' ');\n}\n\nfunction lpad(len, str) {\n  return whitespace(len - str.length) + str;\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { GraphQLError } from '../error/GraphQLError';\n\nimport invariant from '../jsutils/invariant';\n\nvar NAME_RX = /^[_a-zA-Z][_a-zA-Z0-9]*$/;\n\n/**\n * Upholds the spec rules about naming.\n */\nexport function assertValidName(name) {\n  var error = isValidNameError(name);\n  if (error) {\n    throw error;\n  }\n  return name;\n}\n\n/**\n * Returns an Error if a name is invalid.\n */\nexport function isValidNameError(name, node) {\n  !(typeof name === 'string') ? invariant(0, 'Expected string') : void 0;\n  if (name.length > 1 && name[0] === '_' && name[1] === '_' &&\n  // Note: this special case is not part of the spec and exists only to\n  // support legacy server configurations. Do not rely on this special case\n  // as it may be removed at any time.\n  name !== '__configs__') {\n    return new GraphQLError('Name \"' + name + '\" must not begin with \"__\", which is reserved by ' + 'GraphQL introspection.', node);\n  }\n  if (!NAME_RX.test(name)) {\n    return new GraphQLError('Names must match /^[_a-zA-Z][_a-zA-Z0-9]*$/ but \"' + name + '\" does not.', node);\n  }\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { GraphQLError } from './GraphQLError';\n\n\n/**\n * Given an arbitrary Error, presumably thrown while attempting to execute a\n * GraphQL operation, produce a new GraphQLError aware of the location in the\n * document responsible for the original Error.\n */\nexport function locatedError(originalError, nodes, path) {\n  // Note: this uses a brand-check to support GraphQL errors originating from\n  // other contexts.\n  if (originalError && Array.isArray(originalError.path)) {\n    return originalError;\n  }\n\n  return new GraphQLError(originalError && originalError.message, originalError && originalError.nodes || nodes, originalError && originalError.source, originalError && originalError.positions, path, originalError);\n}","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nexport function duplicateOperationNameMessage(operationName) {\n  return 'There can be only one operation named \"' + operationName + '\".';\n}\n\n/**\n * Unique operation names\n *\n * A GraphQL document is only valid if all defined operations have unique names.\n */\nexport function UniqueOperationNames(context) {\n  var knownOperationNames = Object.create(null);\n  return {\n    OperationDefinition: function OperationDefinition(node) {\n      var operationName = node.name;\n      if (operationName) {\n        if (knownOperationNames[operationName.value]) {\n          context.reportError(new GraphQLError(duplicateOperationNameMessage(operationName.value), [knownOperationNames[operationName.value], operationName]));\n        } else {\n          knownOperationNames[operationName.value] = operationName;\n        }\n      }\n      return false;\n    },\n\n    FragmentDefinition: function FragmentDefinition() {\n      return false;\n    }\n  };\n}","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nimport { Kind } from '../../language/kinds';\n\n\nexport function anonOperationNotAloneMessage() {\n  return 'This anonymous operation must be the only defined operation.';\n}\n\n/**\n * Lone anonymous operation\n *\n * A GraphQL document is only valid if when it contains an anonymous operation\n * (the query short-hand) that it contains only that one operation definition.\n */\nexport function LoneAnonymousOperation(context) {\n  var operationCount = 0;\n  return {\n    Document: function Document(node) {\n      operationCount = node.definitions.filter(function (definition) {\n        return definition.kind === Kind.OPERATION_DEFINITION;\n      }).length;\n    },\n    OperationDefinition: function OperationDefinition(node) {\n      if (!node.name && operationCount > 1) {\n        context.reportError(new GraphQLError(anonOperationNotAloneMessage(), [node]));\n      }\n    }\n  };\n}","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nexport function singleFieldOnlyMessage(name) {\n  return (name ? 'Subscription \"' + name + '\" ' : 'Anonymous Subscription ') + 'must select only one top level field.';\n}\n\n/**\n * Subscriptions must only include one field.\n *\n * A GraphQL subscription is valid only if it contains a single root field.\n */\nexport function SingleFieldSubscriptions(context) {\n  return {\n    OperationDefinition: function OperationDefinition(node) {\n      if (node.operation === 'subscription') {\n        if (node.selectionSet.selections.length !== 1) {\n          context.reportError(new GraphQLError(singleFieldOnlyMessage(node.name && node.name.value), node.selectionSet.selections.slice(1)));\n        }\n      }\n    }\n  };\n}","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nimport suggestionList from '../../jsutils/suggestionList';\nimport quotedOrList from '../../jsutils/quotedOrList';\n\n\nexport function unknownTypeMessage(typeName, suggestedTypes) {\n  var message = 'Unknown type \"' + typeName + '\".';\n  if (suggestedTypes.length) {\n    message += ' Did you mean ' + quotedOrList(suggestedTypes) + '?';\n  }\n  return message;\n}\n\n/**\n * Known type names\n *\n * A GraphQL document is only valid if referenced types (specifically\n * variable definitions and fragment conditions) are defined by the type schema.\n */\nexport function KnownTypeNames(context) {\n  return {\n    // TODO: when validating IDL, re-enable these. Experimental version does not\n    // add unreferenced types, resulting in false-positive errors. Squelched\n    // errors for now.\n    ObjectTypeDefinition: function ObjectTypeDefinition() {\n      return false;\n    },\n    InterfaceTypeDefinition: function InterfaceTypeDefinition() {\n      return false;\n    },\n    UnionTypeDefinition: function UnionTypeDefinition() {\n      return false;\n    },\n    InputObjectTypeDefinition: function InputObjectTypeDefinition() {\n      return false;\n    },\n    NamedType: function NamedType(node) {\n      var schema = context.getSchema();\n      var typeName = node.name.value;\n      var type = schema.getType(typeName);\n      if (!type) {\n        context.reportError(new GraphQLError(unknownTypeMessage(typeName, suggestionList(typeName, Object.keys(schema.getTypeMap()))), [node]));\n      }\n    }\n  };\n}","export interface IRecordReference {id?: number, name?: string};\nexport class RecordReference{\n    id?: number;\n    name?: string;\n    constructor(data: IRecordReference){\n        this.id = data.id;\n        this.name = data.name;\n    }\n}","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nimport { print } from '../../language/printer';\n\nimport { isCompositeType } from '../../type/definition';\n\nimport { typeFromAST } from '../../utilities/typeFromAST';\n\nexport function inlineFragmentOnNonCompositeErrorMessage(type) {\n  return 'Fragment cannot condition on non composite type \"' + String(type) + '\".';\n}\n\nexport function fragmentOnNonCompositeErrorMessage(fragName, type) {\n  return 'Fragment \"' + fragName + '\" cannot condition on non composite ' + ('type \"' + String(type) + '\".');\n}\n\n/**\n * Fragments on composite type\n *\n * Fragments use a type condition to determine if they apply, since fragments\n * can only be spread into a composite type (object, interface, or union), the\n * type condition must also be a composite type.\n */\nexport function FragmentsOnCompositeTypes(context) {\n  return {\n    InlineFragment: function InlineFragment(node) {\n      var typeCondition = node.typeCondition;\n      if (typeCondition) {\n        var type = typeFromAST(context.getSchema(), typeCondition);\n        if (type && !isCompositeType(type)) {\n          context.reportError(new GraphQLError(inlineFragmentOnNonCompositeErrorMessage(print(typeCondition)), [typeCondition]));\n        }\n      }\n    },\n    FragmentDefinition: function FragmentDefinition(node) {\n      var type = typeFromAST(context.getSchema(), node.typeCondition);\n      if (type && !isCompositeType(type)) {\n        context.reportError(new GraphQLError(fragmentOnNonCompositeErrorMessage(node.name.value, print(node.typeCondition)), [node.typeCondition]));\n      }\n    }\n  };\n}","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nimport { print } from '../../language/printer';\n\nimport { isInputType } from '../../type/definition';\nimport { typeFromAST } from '../../utilities/typeFromAST';\n\nexport function nonInputTypeOnVarMessage(variableName, typeName) {\n  return 'Variable \"$' + variableName + '\" cannot be non-input type \"' + typeName + '\".';\n}\n\n/**\n * Variables are input types\n *\n * A GraphQL operation is only valid if all the variables it defines are of\n * input types (scalar, enum, or input object).\n */\nexport function VariablesAreInputTypes(context) {\n  return {\n    VariableDefinition: function VariableDefinition(node) {\n      var type = typeFromAST(context.getSchema(), node.type);\n\n      // If the variable type is not an input type, return an error.\n      if (type && !isInputType(type)) {\n        var variableName = node.variable.name.value;\n        context.reportError(new GraphQLError(nonInputTypeOnVarMessage(variableName, print(node.type)), [node.type]));\n      }\n    }\n  };\n}","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nimport { getNamedType, isLeafType } from '../../type/definition';\n\n\nexport function noSubselectionAllowedMessage(fieldName, type) {\n  return 'Field \"' + fieldName + '\" must not have a selection since ' + ('type \"' + String(type) + '\" has no subfields.');\n}\n\nexport function requiredSubselectionMessage(fieldName, type) {\n  return 'Field \"' + fieldName + '\" of type \"' + String(type) + '\" must have a ' + ('selection of subfields. Did you mean \"' + fieldName + ' { ... }\"?');\n}\n\n/**\n * Scalar leafs\n *\n * A GraphQL document is valid only if all leaf fields (fields without\n * sub selections) are of scalar or enum types.\n */\nexport function ScalarLeafs(context) {\n  return {\n    Field: function Field(node) {\n      var type = context.getType();\n      var selectionSet = node.selectionSet;\n      if (type) {\n        if (isLeafType(getNamedType(type))) {\n          if (selectionSet) {\n            context.reportError(new GraphQLError(noSubselectionAllowedMessage(node.name.value, type), [selectionSet]));\n          }\n        } else if (!selectionSet) {\n          context.reportError(new GraphQLError(requiredSubselectionMessage(node.name.value, type), [node]));\n        }\n      }\n    }\n  };\n}","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nimport suggestionList from '../../jsutils/suggestionList';\nimport quotedOrList from '../../jsutils/quotedOrList';\n\nimport { isObjectType, isInterfaceType, isAbstractType } from '../../type/definition';\n\nexport function undefinedFieldMessage(fieldName, type, suggestedTypeNames, suggestedFieldNames) {\n  var message = 'Cannot query field \"' + fieldName + '\" on type \"' + type + '\".';\n  if (suggestedTypeNames.length !== 0) {\n    var suggestions = quotedOrList(suggestedTypeNames);\n    message += ' Did you mean to use an inline fragment on ' + suggestions + '?';\n  } else if (suggestedFieldNames.length !== 0) {\n    message += ' Did you mean ' + quotedOrList(suggestedFieldNames) + '?';\n  }\n  return message;\n}\n\n/**\n * Fields on correct type\n *\n * A GraphQL document is only valid if all fields selected are defined by the\n * parent type, or are an allowed meta field such as __typename.\n */\nexport function FieldsOnCorrectType(context) {\n  return {\n    Field: function Field(node) {\n      var type = context.getParentType();\n      if (type) {\n        var fieldDef = context.getFieldDef();\n        if (!fieldDef) {\n          // This field doesn't exist, lets look for suggestions.\n          var schema = context.getSchema();\n          var fieldName = node.name.value;\n          // First determine if there are any suggested types to condition on.\n          var suggestedTypeNames = getSuggestedTypeNames(schema, type, fieldName);\n          // If there are no suggested types, then perhaps this was a typo?\n          var suggestedFieldNames = suggestedTypeNames.length !== 0 ? [] : getSuggestedFieldNames(schema, type, fieldName);\n\n          // Report an error, including helpful suggestions.\n          context.reportError(new GraphQLError(undefinedFieldMessage(fieldName, type.name, suggestedTypeNames, suggestedFieldNames), [node]));\n        }\n      }\n    }\n  };\n}\n\n/**\n * Go through all of the implementations of type, as well as the interfaces\n * that they implement. If any of those types include the provided field,\n * suggest them, sorted by how often the type is referenced,  starting\n * with Interfaces.\n */\nfunction getSuggestedTypeNames(schema, type, fieldName) {\n  if (isAbstractType(type)) {\n    var suggestedObjectTypes = [];\n    var interfaceUsageCount = Object.create(null);\n    schema.getPossibleTypes(type).forEach(function (possibleType) {\n      if (!possibleType.getFields()[fieldName]) {\n        return;\n      }\n      // This object type defines this field.\n      suggestedObjectTypes.push(possibleType.name);\n      possibleType.getInterfaces().forEach(function (possibleInterface) {\n        if (!possibleInterface.getFields()[fieldName]) {\n          return;\n        }\n        // This interface type defines this field.\n        interfaceUsageCount[possibleInterface.name] = (interfaceUsageCount[possibleInterface.name] || 0) + 1;\n      });\n    });\n\n    // Suggest interface types based on how common they are.\n    var suggestedInterfaceTypes = Object.keys(interfaceUsageCount).sort(function (a, b) {\n      return interfaceUsageCount[b] - interfaceUsageCount[a];\n    });\n\n    // Suggest both interface and object types.\n    return suggestedInterfaceTypes.concat(suggestedObjectTypes);\n  }\n\n  // Otherwise, must be an Object type, which does not have possible fields.\n  return [];\n}\n\n/**\n * For the field name provided, determine if there are any similar field names\n * that may be the result of a typo.\n */\nfunction getSuggestedFieldNames(schema, type, fieldName) {\n  if (isObjectType(type) || isInterfaceType(type)) {\n    var possibleFieldNames = Object.keys(type.getFields());\n    return suggestionList(fieldName, possibleFieldNames);\n  }\n  // Otherwise, must be a Union type, which does not define fields.\n  return [];\n}","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nexport function duplicateFragmentNameMessage(fragName) {\n  return 'There can be only one fragment named \"' + fragName + '\".';\n}\n\n/**\n * Unique fragment names\n *\n * A GraphQL document is only valid if all defined fragments have unique names.\n */\nexport function UniqueFragmentNames(context) {\n  var knownFragmentNames = Object.create(null);\n  return {\n    OperationDefinition: function OperationDefinition() {\n      return false;\n    },\n    FragmentDefinition: function FragmentDefinition(node) {\n      var fragmentName = node.name.value;\n      if (knownFragmentNames[fragmentName]) {\n        context.reportError(new GraphQLError(duplicateFragmentNameMessage(fragmentName), [knownFragmentNames[fragmentName], node.name]));\n      } else {\n        knownFragmentNames[fragmentName] = node.name;\n      }\n      return false;\n    }\n  };\n}","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nexport function unknownFragmentMessage(fragName) {\n  return 'Unknown fragment \"' + fragName + '\".';\n}\n\n/**\n * Known fragment names\n *\n * A GraphQL document is only valid if all `...Fragment` fragment spreads refer\n * to fragments defined in the same document.\n */\nexport function KnownFragmentNames(context) {\n  return {\n    FragmentSpread: function FragmentSpread(node) {\n      var fragmentName = node.name.value;\n      var fragment = context.getFragment(fragmentName);\n      if (!fragment) {\n        context.reportError(new GraphQLError(unknownFragmentMessage(fragmentName), [node.name]));\n      }\n    }\n  };\n}","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nexport function unusedFragMessage(fragName) {\n  return 'Fragment \"' + fragName + '\" is never used.';\n}\n\n/**\n * No unused fragments\n *\n * A GraphQL document is only valid if all fragment definitions are spread\n * within operations, or spread within other fragments spread within operations.\n */\nexport function NoUnusedFragments(context) {\n  var operationDefs = [];\n  var fragmentDefs = [];\n\n  return {\n    OperationDefinition: function OperationDefinition(node) {\n      operationDefs.push(node);\n      return false;\n    },\n    FragmentDefinition: function FragmentDefinition(node) {\n      fragmentDefs.push(node);\n      return false;\n    },\n\n    Document: {\n      leave: function leave() {\n        var fragmentNameUsed = Object.create(null);\n        operationDefs.forEach(function (operation) {\n          context.getRecursivelyReferencedFragments(operation).forEach(function (fragment) {\n            fragmentNameUsed[fragment.name.value] = true;\n          });\n        });\n\n        fragmentDefs.forEach(function (fragmentDef) {\n          var fragName = fragmentDef.name.value;\n          if (fragmentNameUsed[fragName] !== true) {\n            context.reportError(new GraphQLError(unusedFragMessage(fragName), [fragmentDef]));\n          }\n        });\n      }\n    }\n  };\n}","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nimport { doTypesOverlap } from '../../utilities/typeComparators';\nimport { typeFromAST } from '../../utilities/typeFromAST';\nimport { isCompositeType } from '../../type/definition';\n\n\nexport function typeIncompatibleSpreadMessage(fragName, parentType, fragType) {\n  return 'Fragment \"' + fragName + '\" cannot be spread here as objects of ' + ('type \"' + String(parentType) + '\" can never be of type \"' + String(fragType) + '\".');\n}\n\nexport function typeIncompatibleAnonSpreadMessage(parentType, fragType) {\n  return 'Fragment cannot be spread here as objects of ' + ('type \"' + String(parentType) + '\" can never be of type \"' + String(fragType) + '\".');\n}\n\n/**\n * Possible fragment spread\n *\n * A fragment spread is only valid if the type condition could ever possibly\n * be true: if there is a non-empty intersection of the possible parent types,\n * and possible types which pass the type condition.\n */\nexport function PossibleFragmentSpreads(context) {\n  return {\n    InlineFragment: function InlineFragment(node) {\n      var fragType = context.getType();\n      var parentType = context.getParentType();\n      if (isCompositeType(fragType) && isCompositeType(parentType) && !doTypesOverlap(context.getSchema(), fragType, parentType)) {\n        context.reportError(new GraphQLError(typeIncompatibleAnonSpreadMessage(parentType, fragType), [node]));\n      }\n    },\n    FragmentSpread: function FragmentSpread(node) {\n      var fragName = node.name.value;\n      var fragType = getFragmentType(context, fragName);\n      var parentType = context.getParentType();\n      if (fragType && parentType && !doTypesOverlap(context.getSchema(), fragType, parentType)) {\n        context.reportError(new GraphQLError(typeIncompatibleSpreadMessage(fragName, parentType, fragType), [node]));\n      }\n    }\n  };\n}\n\nfunction getFragmentType(context, name) {\n  var frag = context.getFragment(name);\n  if (frag) {\n    var type = typeFromAST(context.getSchema(), frag.typeCondition);\n    if (isCompositeType(type)) {\n      return type;\n    }\n  }\n}","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nexport function cycleErrorMessage(fragName, spreadNames) {\n  var via = spreadNames.length ? ' via ' + spreadNames.join(', ') : '';\n  return 'Cannot spread fragment \"' + fragName + '\" within itself' + via + '.';\n}\n\nexport function NoFragmentCycles(context) {\n  // Tracks already visited fragments to maintain O(N) and to ensure that cycles\n  // are not redundantly reported.\n  var visitedFrags = Object.create(null);\n\n  // Array of AST nodes used to produce meaningful errors\n  var spreadPath = [];\n\n  // Position in the spread path\n  var spreadPathIndexByName = Object.create(null);\n\n  return {\n    OperationDefinition: function OperationDefinition() {\n      return false;\n    },\n    FragmentDefinition: function FragmentDefinition(node) {\n      if (!visitedFrags[node.name.value]) {\n        detectCycleRecursive(node);\n      }\n      return false;\n    }\n  };\n\n  // This does a straight-forward DFS to find cycles.\n  // It does not terminate when a cycle was found but continues to explore\n  // the graph to find all possible cycles.\n  function detectCycleRecursive(fragment) {\n    var fragmentName = fragment.name.value;\n    visitedFrags[fragmentName] = true;\n\n    var spreadNodes = context.getFragmentSpreads(fragment.selectionSet);\n    if (spreadNodes.length === 0) {\n      return;\n    }\n\n    spreadPathIndexByName[fragmentName] = spreadPath.length;\n\n    for (var i = 0; i < spreadNodes.length; i++) {\n      var spreadNode = spreadNodes[i];\n      var spreadName = spreadNode.name.value;\n      var cycleIndex = spreadPathIndexByName[spreadName];\n\n      if (cycleIndex === undefined) {\n        spreadPath.push(spreadNode);\n        if (!visitedFrags[spreadName]) {\n          var spreadFragment = context.getFragment(spreadName);\n          if (spreadFragment) {\n            detectCycleRecursive(spreadFragment);\n          }\n        }\n        spreadPath.pop();\n      } else {\n        var cyclePath = spreadPath.slice(cycleIndex);\n        context.reportError(new GraphQLError(cycleErrorMessage(spreadName, cyclePath.map(function (s) {\n          return s.name.value;\n        })), cyclePath.concat(spreadNode)));\n      }\n    }\n\n    spreadPathIndexByName[fragmentName] = undefined;\n  }\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { GraphQLError } from '../../error';\n\n\nexport function duplicateVariableMessage(variableName) {\n  return 'There can be only one variable named \"' + variableName + '\".';\n}\n\n/**\n * Unique variable names\n *\n * A GraphQL operation is only valid if all its variables are uniquely named.\n */\nexport function UniqueVariableNames(context) {\n  var knownVariableNames = Object.create(null);\n  return {\n    OperationDefinition: function OperationDefinition() {\n      knownVariableNames = Object.create(null);\n    },\n    VariableDefinition: function VariableDefinition(node) {\n      var variableName = node.variable.name.value;\n      if (knownVariableNames[variableName]) {\n        context.reportError(new GraphQLError(duplicateVariableMessage(variableName), [knownVariableNames[variableName], node.variable.name]));\n      } else {\n        knownVariableNames[variableName] = node.variable.name;\n      }\n    }\n  };\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { assertType, assertNullableType } from './definition';\n\n/**\n * List Type Wrapper\n *\n * A list is a wrapping type which points to another type.\n * Lists are often created within the context of defining the fields of\n * an object type.\n *\n * Example:\n *\n *     const PersonType = new GraphQLObjectType({\n *       name: 'Person',\n *       fields: () => ({\n *         parents: { type: GraphQLList(PersonType) },\n *         children: { type: GraphQLList(PersonType) },\n *       })\n *     })\n *\n */\n\n// eslint-disable-next-line no-redeclare\nexport function GraphQLList(ofType) {\n  if (this instanceof GraphQLList) {\n    this.ofType = assertType(ofType);\n  } else {\n    return new GraphQLList(ofType);\n  }\n}\n\n// Also provide toJSON and inspect aliases for toString.\nvar listProto = GraphQLList.prototype;\nlistProto.toString = listProto.toJSON = listProto.inspect = function toString() {\n  return '[' + String(this.ofType) + ']';\n};\n\n/**\n * Non-Null Type Wrapper\n *\n * A non-null is a wrapping type which points to another type.\n * Non-null types enforce that their values are never null and can ensure\n * an error is raised if this ever occurs during a request. It is useful for\n * fields which you can make a strong guarantee on non-nullability, for example\n * usually the id field of a database row will never be null.\n *\n * Example:\n *\n *     const RowType = new GraphQLObjectType({\n *       name: 'Row',\n *       fields: () => ({\n *         id: { type: GraphQLNonNull(GraphQLString) },\n *       })\n *     })\n *\n * Note: the enforcement of non-nullability occurs within the executor.\n */\n\n// eslint-disable-next-line no-redeclare\nexport function GraphQLNonNull(ofType) {\n  if (this instanceof GraphQLNonNull) {\n    this.ofType = assertNullableType(ofType);\n  } else {\n    return new GraphQLNonNull(ofType);\n  }\n}\n\n// Also provide toJSON and inspect aliases for toString.\nvar nonNullProto = GraphQLNonNull.prototype;\nnonNullProto.toString = nonNullProto.toJSON = nonNullProto.inspect = function toString() {\n  return String(this.ofType) + '!';\n};","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nexport function undefinedVarMessage(varName, opName) {\n  return opName ? 'Variable \"$' + varName + '\" is not defined by operation \"' + opName + '\".' : 'Variable \"$' + varName + '\" is not defined.';\n}\n\n/**\n * No undefined variables\n *\n * A GraphQL operation is only valid if all variables encountered, both directly\n * and via fragment spreads, are defined by that operation.\n */\nexport function NoUndefinedVariables(context) {\n  var variableNameDefined = Object.create(null);\n\n  return {\n    OperationDefinition: {\n      enter: function enter() {\n        variableNameDefined = Object.create(null);\n      },\n      leave: function leave(operation) {\n        var usages = context.getRecursiveVariableUsages(operation);\n\n        usages.forEach(function (_ref) {\n          var node = _ref.node;\n\n          var varName = node.name.value;\n          if (variableNameDefined[varName] !== true) {\n            context.reportError(new GraphQLError(undefinedVarMessage(varName, operation.name && operation.name.value), [node, operation]));\n          }\n        });\n      }\n    },\n    VariableDefinition: function VariableDefinition(node) {\n      variableNameDefined[node.variable.name.value] = true;\n    }\n  };\n}","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nexport function unusedVariableMessage(varName, opName) {\n  return opName ? 'Variable \"$' + varName + '\" is never used in operation \"' + opName + '\".' : 'Variable \"$' + varName + '\" is never used.';\n}\n\n/**\n * No unused variables\n *\n * A GraphQL operation is only valid if all variables defined by an operation\n * are used, either directly or within a spread fragment.\n */\nexport function NoUnusedVariables(context) {\n  var variableDefs = [];\n\n  return {\n    OperationDefinition: {\n      enter: function enter() {\n        variableDefs = [];\n      },\n      leave: function leave(operation) {\n        var variableNameUsed = Object.create(null);\n        var usages = context.getRecursiveVariableUsages(operation);\n        var opName = operation.name ? operation.name.value : null;\n\n        usages.forEach(function (_ref) {\n          var node = _ref.node;\n\n          variableNameUsed[node.name.value] = true;\n        });\n\n        variableDefs.forEach(function (variableDef) {\n          var variableName = variableDef.variable.name.value;\n          if (variableNameUsed[variableName] !== true) {\n            context.reportError(new GraphQLError(unusedVariableMessage(variableName, opName), [variableDef]));\n          }\n        });\n      }\n    },\n    VariableDefinition: function VariableDefinition(def) {\n      variableDefs.push(def);\n    }\n  };\n}","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nimport find from '../../jsutils/find';\nimport { Kind } from '../../language/kinds';\nimport { DirectiveLocation } from '../../language/directiveLocation';\n\n\nexport function unknownDirectiveMessage(directiveName) {\n  return 'Unknown directive \"' + directiveName + '\".';\n}\n\nexport function misplacedDirectiveMessage(directiveName, location) {\n  return 'Directive \"' + directiveName + '\" may not be used on ' + location + '.';\n}\n\n/**\n * Known directives\n *\n * A GraphQL document is only valid if all `@directives` are known by the\n * schema and legally positioned.\n */\nexport function KnownDirectives(context) {\n  return {\n    Directive: function Directive(node, key, parent, path, ancestors) {\n      var directiveDef = find(context.getSchema().getDirectives(), function (def) {\n        return def.name === node.name.value;\n      });\n      if (!directiveDef) {\n        context.reportError(new GraphQLError(unknownDirectiveMessage(node.name.value), [node]));\n        return;\n      }\n      var candidateLocation = getDirectiveLocationForASTPath(ancestors);\n      if (candidateLocation && directiveDef.locations.indexOf(candidateLocation) === -1) {\n        context.reportError(new GraphQLError(misplacedDirectiveMessage(node.name.value, candidateLocation), [node]));\n      }\n    }\n  };\n}\n\nfunction getDirectiveLocationForASTPath(ancestors) {\n  var appliedTo = ancestors[ancestors.length - 1];\n  if (!Array.isArray(appliedTo)) {\n    switch (appliedTo.kind) {\n      case Kind.OPERATION_DEFINITION:\n        switch (appliedTo.operation) {\n          case 'query':\n            return DirectiveLocation.QUERY;\n          case 'mutation':\n            return DirectiveLocation.MUTATION;\n          case 'subscription':\n            return DirectiveLocation.SUBSCRIPTION;\n        }\n        break;\n      case Kind.FIELD:\n        return DirectiveLocation.FIELD;\n      case Kind.FRAGMENT_SPREAD:\n        return DirectiveLocation.FRAGMENT_SPREAD;\n      case Kind.INLINE_FRAGMENT:\n        return DirectiveLocation.INLINE_FRAGMENT;\n      case Kind.FRAGMENT_DEFINITION:\n        return DirectiveLocation.FRAGMENT_DEFINITION;\n      case Kind.SCHEMA_DEFINITION:\n        return DirectiveLocation.SCHEMA;\n      case Kind.SCALAR_TYPE_DEFINITION:\n      case Kind.SCALAR_TYPE_EXTENSION:\n        return DirectiveLocation.SCALAR;\n      case Kind.OBJECT_TYPE_DEFINITION:\n      case Kind.OBJECT_TYPE_EXTENSION:\n        return DirectiveLocation.OBJECT;\n      case Kind.FIELD_DEFINITION:\n        return DirectiveLocation.FIELD_DEFINITION;\n      case Kind.INTERFACE_TYPE_DEFINITION:\n      case Kind.INTERFACE_TYPE_EXTENSION:\n        return DirectiveLocation.INTERFACE;\n      case Kind.UNION_TYPE_DEFINITION:\n      case Kind.UNION_TYPE_EXTENSION:\n        return DirectiveLocation.UNION;\n      case Kind.ENUM_TYPE_DEFINITION:\n      case Kind.ENUM_TYPE_EXTENSION:\n        return DirectiveLocation.ENUM;\n      case Kind.ENUM_VALUE_DEFINITION:\n        return DirectiveLocation.ENUM_VALUE;\n      case Kind.INPUT_OBJECT_TYPE_DEFINITION:\n      case Kind.INPUT_OBJECT_TYPE_EXTENSION:\n        return DirectiveLocation.INPUT_OBJECT;\n      case Kind.INPUT_VALUE_DEFINITION:\n        var parentNode = ancestors[ancestors.length - 3];\n        return parentNode.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION ? DirectiveLocation.INPUT_FIELD_DEFINITION : DirectiveLocation.ARGUMENT_DEFINITION;\n    }\n  }\n}","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nexport function duplicateDirectiveMessage(directiveName) {\n  return 'The directive \"' + directiveName + '\" can only be used once at ' + 'this location.';\n}\n\n/**\n * Unique directive names per location\n *\n * A GraphQL document is only valid if all directives at a given location\n * are uniquely named.\n */\nexport function UniqueDirectivesPerLocation(context) {\n  return {\n    // Many different AST nodes may contain directives. Rather than listing\n    // them all, just listen for entering any node, and check to see if it\n    // defines any directives.\n    enter: function enter(node) {\n      // Flow can't refine that node.directives will only contain directives,\n      var directives = node.directives;\n      if (directives) {\n        var knownDirectives = Object.create(null);\n        directives.forEach(function (directive) {\n          var directiveName = directive.name.value;\n          if (knownDirectives[directiveName]) {\n            context.reportError(new GraphQLError(duplicateDirectiveMessage(directiveName), [knownDirectives[directiveName], directive]));\n          } else {\n            knownDirectives[directiveName] = directive;\n          }\n        });\n      }\n    }\n  };\n}","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nimport suggestionList from '../../jsutils/suggestionList';\nimport quotedOrList from '../../jsutils/quotedOrList';\nimport { Kind } from '../../language/kinds';\n\nexport function unknownArgMessage(argName, fieldName, typeName, suggestedArgs) {\n  var message = 'Unknown argument \"' + argName + '\" on field \"' + fieldName + '\" of ' + ('type \"' + typeName + '\".');\n  if (suggestedArgs.length) {\n    message += ' Did you mean ' + quotedOrList(suggestedArgs) + '?';\n  }\n  return message;\n}\n\nexport function unknownDirectiveArgMessage(argName, directiveName, suggestedArgs) {\n  var message = 'Unknown argument \"' + argName + '\" on directive \"@' + directiveName + '\".';\n  if (suggestedArgs.length) {\n    message += ' Did you mean ' + quotedOrList(suggestedArgs) + '?';\n  }\n  return message;\n}\n\n/**\n * Known argument names\n *\n * A GraphQL field is only valid if all supplied arguments are defined by\n * that field.\n */\nexport function KnownArgumentNames(context) {\n  return {\n    Argument: function Argument(node, key, parent, path, ancestors) {\n      var argDef = context.getArgument();\n      if (!argDef) {\n        var argumentOf = ancestors[ancestors.length - 1];\n        if (argumentOf.kind === Kind.FIELD) {\n          var fieldDef = context.getFieldDef();\n          var parentType = context.getParentType();\n          if (fieldDef && parentType) {\n            context.reportError(new GraphQLError(unknownArgMessage(node.name.value, fieldDef.name, parentType.name, suggestionList(node.name.value, fieldDef.args.map(function (arg) {\n              return arg.name;\n            }))), [node]));\n          }\n        } else if (argumentOf.kind === Kind.DIRECTIVE) {\n          var directive = context.getDirective();\n          if (directive) {\n            context.reportError(new GraphQLError(unknownDirectiveArgMessage(node.name.value, directive.name, suggestionList(node.name.value, directive.args.map(function (arg) {\n              return arg.name;\n            }))), [node]));\n          }\n        }\n      }\n    }\n  };\n}","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nexport function duplicateArgMessage(argName) {\n  return 'There can be only one argument named \"' + argName + '\".';\n}\n\n/**\n * Unique argument names\n *\n * A GraphQL field or directive is only valid if all supplied arguments are\n * uniquely named.\n */\nexport function UniqueArgumentNames(context) {\n  var knownArgNames = Object.create(null);\n  return {\n    Field: function Field() {\n      knownArgNames = Object.create(null);\n    },\n    Directive: function Directive() {\n      knownArgNames = Object.create(null);\n    },\n    Argument: function Argument(node) {\n      var argName = node.name.value;\n      if (knownArgNames[argName]) {\n        context.reportError(new GraphQLError(duplicateArgMessage(argName), [knownArgNames[argName], node.name]));\n      } else {\n        knownArgNames[argName] = node.name;\n      }\n      return false;\n    }\n  };\n}","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nimport keyMap from '../../jsutils/keyMap';\nimport { isNonNullType } from '../../type/definition';\n\n\nexport function missingFieldArgMessage(fieldName, argName, type) {\n  return 'Field \"' + fieldName + '\" argument \"' + argName + '\" of type ' + ('\"' + String(type) + '\" is required but not provided.');\n}\n\nexport function missingDirectiveArgMessage(directiveName, argName, type) {\n  return 'Directive \"@' + directiveName + '\" argument \"' + argName + '\" of type ' + ('\"' + String(type) + '\" is required but not provided.');\n}\n\n/**\n * Provided required arguments\n *\n * A field or directive is only valid if all required (non-null) field arguments\n * have been provided.\n */\nexport function ProvidedNonNullArguments(context) {\n  return {\n    Field: {\n      // Validate on leave to allow for deeper errors to appear first.\n      leave: function leave(node) {\n        var fieldDef = context.getFieldDef();\n        if (!fieldDef) {\n          return false;\n        }\n        var argNodes = node.arguments || [];\n\n        var argNodeMap = keyMap(argNodes, function (arg) {\n          return arg.name.value;\n        });\n        fieldDef.args.forEach(function (argDef) {\n          var argNode = argNodeMap[argDef.name];\n          if (!argNode && isNonNullType(argDef.type)) {\n            context.reportError(new GraphQLError(missingFieldArgMessage(node.name.value, argDef.name, argDef.type), [node]));\n          }\n        });\n      }\n    },\n\n    Directive: {\n      // Validate on leave to allow for deeper errors to appear first.\n      leave: function leave(node) {\n        var directiveDef = context.getDirective();\n        if (!directiveDef) {\n          return false;\n        }\n        var argNodes = node.arguments || [];\n\n        var argNodeMap = keyMap(argNodes, function (arg) {\n          return arg.name.value;\n        });\n        directiveDef.args.forEach(function (argDef) {\n          var argNode = argNodeMap[argDef.name];\n          if (!argNode && isNonNullType(argDef.type)) {\n            context.reportError(new GraphQLError(missingDirectiveArgMessage(node.name.value, argDef.name, argDef.type), [node]));\n          }\n        });\n      }\n    }\n  };\n}","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nimport { isNonNullType } from '../../type/definition';\n\n\nexport function defaultForRequiredVarMessage(varName, type, guessType) {\n  return 'Variable \"$' + varName + '\" of type \"' + String(type) + '\" is required and ' + 'will not use the default value. ' + ('Perhaps you meant to use type \"' + String(guessType) + '\".');\n}\n\n/**\n * Variable's default value is allowed\n *\n * A GraphQL document is only valid if all variable default values are allowed\n * due to a variable not being required.\n */\nexport function VariablesDefaultValueAllowed(context) {\n  return {\n    VariableDefinition: function VariableDefinition(node) {\n      var name = node.variable.name.value;\n      var defaultValue = node.defaultValue;\n      var type = context.getInputType();\n      if (isNonNullType(type) && defaultValue) {\n        context.reportError(new GraphQLError(defaultForRequiredVarMessage(name, type, type.ofType), [defaultValue]));\n      }\n      return false; // Do not traverse further.\n    },\n\n    SelectionSet: function SelectionSet() {\n      return false;\n    },\n    FragmentDefinition: function FragmentDefinition() {\n      return false;\n    }\n  };\n}","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nimport { isNonNullType } from '../../type/definition';\nimport { GraphQLNonNull } from '../../type/wrappers';\nimport { isTypeSubTypeOf } from '../../utilities/typeComparators';\nimport { typeFromAST } from '../../utilities/typeFromAST';\n\n\nexport function badVarPosMessage(varName, varType, expectedType) {\n  return 'Variable \"$' + varName + '\" of type \"' + String(varType) + '\" used in ' + ('position expecting type \"' + String(expectedType) + '\".');\n}\n\n/**\n * Variables passed to field arguments conform to type\n */\nexport function VariablesInAllowedPosition(context) {\n  var varDefMap = Object.create(null);\n\n  return {\n    OperationDefinition: {\n      enter: function enter() {\n        varDefMap = Object.create(null);\n      },\n      leave: function leave(operation) {\n        var usages = context.getRecursiveVariableUsages(operation);\n\n        usages.forEach(function (_ref) {\n          var node = _ref.node,\n              type = _ref.type;\n\n          var varName = node.name.value;\n          var varDef = varDefMap[varName];\n          if (varDef && type) {\n            // A var type is allowed if it is the same or more strict (e.g. is\n            // a subtype of) than the expected type. It can be more strict if\n            // the variable type is non-null when the expected type is nullable.\n            // If both are list types, the variable item type can be more strict\n            // than the expected item type (contravariant).\n            var schema = context.getSchema();\n            var varType = typeFromAST(schema, varDef.type);\n            if (varType && !isTypeSubTypeOf(schema, effectiveType(varType, varDef), type)) {\n              context.reportError(new GraphQLError(badVarPosMessage(varName, varType, type), [varDef, node]));\n            }\n          }\n        });\n      }\n    },\n    VariableDefinition: function VariableDefinition(node) {\n      varDefMap[node.variable.name.value] = node;\n    }\n  };\n}\n\n// If a variable definition has a default value, it's effectively non-null.\nfunction effectiveType(varType, varDef) {\n  return !varDef.defaultValue || isNonNullType(varType) ? varType : GraphQLNonNull(varType);\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nimport find from '../../jsutils/find';\n\nimport { Kind } from '../../language/kinds';\nimport { print } from '../../language/printer';\n\nimport { getNamedType, isNonNullType, isLeafType, isObjectType, isListType, isInterfaceType } from '../../type/definition';\n\nimport { typeFromAST } from '../../utilities/typeFromAST';\n\nexport function fieldsConflictMessage(responseName, reason) {\n  return 'Fields \"' + responseName + '\" conflict because ' + reasonMessage(reason) + '. Use different aliases on the fields to fetch both if this was ' + 'intentional.';\n}\n\nfunction reasonMessage(reason) {\n  if (Array.isArray(reason)) {\n    return reason.map(function (_ref) {\n      var responseName = _ref[0],\n          subreason = _ref[1];\n      return 'subfields \"' + responseName + '\" conflict because ' + reasonMessage(subreason);\n    }).join(' and ');\n  }\n  return reason;\n}\n\n/**\n * Overlapping fields can be merged\n *\n * A selection set is only valid if all fields (including spreading any\n * fragments) either correspond to distinct response names or can be merged\n * without ambiguity.\n */\nexport function OverlappingFieldsCanBeMerged(context) {\n  // A memoization for when two fragments are compared \"between\" each other for\n  // conflicts. Two fragments may be compared many times, so memoizing this can\n  // dramatically improve the performance of this validator.\n  var comparedFragmentPairs = new PairSet();\n\n  // A cache for the \"field map\" and list of fragment names found in any given\n  // selection set. Selection sets may be asked for this information multiple\n  // times, so this improves the performance of this validator.\n  var cachedFieldsAndFragmentNames = new Map();\n\n  return {\n    SelectionSet: function SelectionSet(selectionSet) {\n      var conflicts = findConflictsWithinSelectionSet(context, cachedFieldsAndFragmentNames, comparedFragmentPairs, context.getParentType(), selectionSet);\n      conflicts.forEach(function (_ref2) {\n        var _ref2$ = _ref2[0],\n            responseName = _ref2$[0],\n            reason = _ref2$[1],\n            fields1 = _ref2[1],\n            fields2 = _ref2[2];\n        return context.reportError(new GraphQLError(fieldsConflictMessage(responseName, reason), fields1.concat(fields2)));\n      });\n    }\n  };\n}\n// Field name and reason.\n\n// Reason is a string, or a nested list of conflicts.\n\n// Tuple defining a field node in a context.\n\n// Map of array of those.\n\n\n/**\n * Algorithm:\n *\n * Conflicts occur when two fields exist in a query which will produce the same\n * response name, but represent differing values, thus creating a conflict.\n * The algorithm below finds all conflicts via making a series of comparisons\n * between fields. In order to compare as few fields as possible, this makes\n * a series of comparisons \"within\" sets of fields and \"between\" sets of fields.\n *\n * Given any selection set, a collection produces both a set of fields by\n * also including all inline fragments, as well as a list of fragments\n * referenced by fragment spreads.\n *\n * A) Each selection set represented in the document first compares \"within\" its\n * collected set of fields, finding any conflicts between every pair of\n * overlapping fields.\n * Note: This is the *only time* that a the fields \"within\" a set are compared\n * to each other. After this only fields \"between\" sets are compared.\n *\n * B) Also, if any fragment is referenced in a selection set, then a\n * comparison is made \"between\" the original set of fields and the\n * referenced fragment.\n *\n * C) Also, if multiple fragments are referenced, then comparisons\n * are made \"between\" each referenced fragment.\n *\n * D) When comparing \"between\" a set of fields and a referenced fragment, first\n * a comparison is made between each field in the original set of fields and\n * each field in the the referenced set of fields.\n *\n * E) Also, if any fragment is referenced in the referenced selection set,\n * then a comparison is made \"between\" the original set of fields and the\n * referenced fragment (recursively referring to step D).\n *\n * F) When comparing \"between\" two fragments, first a comparison is made between\n * each field in the first referenced set of fields and each field in the the\n * second referenced set of fields.\n *\n * G) Also, any fragments referenced by the first must be compared to the\n * second, and any fragments referenced by the second must be compared to the\n * first (recursively referring to step F).\n *\n * H) When comparing two fields, if both have selection sets, then a comparison\n * is made \"between\" both selection sets, first comparing the set of fields in\n * the first selection set with the set of fields in the second.\n *\n * I) Also, if any fragment is referenced in either selection set, then a\n * comparison is made \"between\" the other set of fields and the\n * referenced fragment.\n *\n * J) Also, if two fragments are referenced in both selection sets, then a\n * comparison is made \"between\" the two fragments.\n *\n */\n\n// Find all conflicts found \"within\" a selection set, including those found\n// via spreading in fragments. Called when visiting each SelectionSet in the\n// GraphQL Document.\nfunction findConflictsWithinSelectionSet(context, cachedFieldsAndFragmentNames, comparedFragmentPairs, parentType, selectionSet) {\n  var conflicts = [];\n\n  var _getFieldsAndFragment = getFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, parentType, selectionSet),\n      fieldMap = _getFieldsAndFragment[0],\n      fragmentNames = _getFieldsAndFragment[1];\n\n  // (A) Find find all conflicts \"within\" the fields of this selection set.\n  // Note: this is the *only place* `collectConflictsWithin` is called.\n\n\n  collectConflictsWithin(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, fieldMap);\n\n  if (fragmentNames.length !== 0) {\n    // (B) Then collect conflicts between these fields and those represented by\n    // each spread fragment name found.\n    var comparedFragments = Object.create(null);\n    for (var i = 0; i < fragmentNames.length; i++) {\n      collectConflictsBetweenFieldsAndFragment(context, conflicts, cachedFieldsAndFragmentNames, comparedFragments, comparedFragmentPairs, false, fieldMap, fragmentNames[i]);\n      // (C) Then compare this fragment with all other fragments found in this\n      // selection set to collect conflicts between fragments spread together.\n      // This compares each item in the list of fragment names to every other\n      // item in that same list (except for itself).\n      for (var j = i + 1; j < fragmentNames.length; j++) {\n        collectConflictsBetweenFragments(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, false, fragmentNames[i], fragmentNames[j]);\n      }\n    }\n  }\n  return conflicts;\n}\n\n// Collect all conflicts found between a set of fields and a fragment reference\n// including via spreading in any nested fragments.\nfunction collectConflictsBetweenFieldsAndFragment(context, conflicts, cachedFieldsAndFragmentNames, comparedFragments, comparedFragmentPairs, areMutuallyExclusive, fieldMap, fragmentName) {\n  // Memoize so a fragment is not compared for conflicts more than once.\n  if (comparedFragments[fragmentName]) {\n    return;\n  }\n  comparedFragments[fragmentName] = true;\n\n  var fragment = context.getFragment(fragmentName);\n  if (!fragment) {\n    return;\n  }\n\n  var _getReferencedFieldsA = getReferencedFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, fragment),\n      fieldMap2 = _getReferencedFieldsA[0],\n      fragmentNames2 = _getReferencedFieldsA[1];\n\n  // Do not compare a fragment's fieldMap to itself.\n\n\n  if (fieldMap === fieldMap2) {\n    return;\n  }\n\n  // (D) First collect any conflicts between the provided collection of fields\n  // and the collection of fields represented by the given fragment.\n  collectConflictsBetween(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, fieldMap, fieldMap2);\n\n  // (E) Then collect any conflicts between the provided collection of fields\n  // and any fragment names found in the given fragment.\n  for (var i = 0; i < fragmentNames2.length; i++) {\n    collectConflictsBetweenFieldsAndFragment(context, conflicts, cachedFieldsAndFragmentNames, comparedFragments, comparedFragmentPairs, areMutuallyExclusive, fieldMap, fragmentNames2[i]);\n  }\n}\n\n// Collect all conflicts found between two fragments, including via spreading in\n// any nested fragments.\nfunction collectConflictsBetweenFragments(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, fragmentName1, fragmentName2) {\n  // No need to compare a fragment to itself.\n  if (fragmentName1 === fragmentName2) {\n    return;\n  }\n\n  // Memoize so two fragments are not compared for conflicts more than once.\n  if (comparedFragmentPairs.has(fragmentName1, fragmentName2, areMutuallyExclusive)) {\n    return;\n  }\n  comparedFragmentPairs.add(fragmentName1, fragmentName2, areMutuallyExclusive);\n\n  var fragment1 = context.getFragment(fragmentName1);\n  var fragment2 = context.getFragment(fragmentName2);\n  if (!fragment1 || !fragment2) {\n    return;\n  }\n\n  var _getReferencedFieldsA2 = getReferencedFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, fragment1),\n      fieldMap1 = _getReferencedFieldsA2[0],\n      fragmentNames1 = _getReferencedFieldsA2[1];\n\n  var _getReferencedFieldsA3 = getReferencedFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, fragment2),\n      fieldMap2 = _getReferencedFieldsA3[0],\n      fragmentNames2 = _getReferencedFieldsA3[1];\n\n  // (F) First, collect all conflicts between these two collections of fields\n  // (not including any nested fragments).\n\n\n  collectConflictsBetween(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, fieldMap1, fieldMap2);\n\n  // (G) Then collect conflicts between the first fragment and any nested\n  // fragments spread in the second fragment.\n  for (var j = 0; j < fragmentNames2.length; j++) {\n    collectConflictsBetweenFragments(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, fragmentName1, fragmentNames2[j]);\n  }\n\n  // (G) Then collect conflicts between the second fragment and any nested\n  // fragments spread in the first fragment.\n  for (var i = 0; i < fragmentNames1.length; i++) {\n    collectConflictsBetweenFragments(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, fragmentNames1[i], fragmentName2);\n  }\n}\n\n// Find all conflicts found between two selection sets, including those found\n// via spreading in fragments. Called when determining if conflicts exist\n// between the sub-fields of two overlapping fields.\nfunction findConflictsBetweenSubSelectionSets(context, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, parentType1, selectionSet1, parentType2, selectionSet2) {\n  var conflicts = [];\n\n  var _getFieldsAndFragment2 = getFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, parentType1, selectionSet1),\n      fieldMap1 = _getFieldsAndFragment2[0],\n      fragmentNames1 = _getFieldsAndFragment2[1];\n\n  var _getFieldsAndFragment3 = getFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, parentType2, selectionSet2),\n      fieldMap2 = _getFieldsAndFragment3[0],\n      fragmentNames2 = _getFieldsAndFragment3[1];\n\n  // (H) First, collect all conflicts between these two collections of field.\n\n\n  collectConflictsBetween(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, fieldMap1, fieldMap2);\n\n  // (I) Then collect conflicts between the first collection of fields and\n  // those referenced by each fragment name associated with the second.\n  if (fragmentNames2.length !== 0) {\n    var comparedFragments = Object.create(null);\n    for (var j = 0; j < fragmentNames2.length; j++) {\n      collectConflictsBetweenFieldsAndFragment(context, conflicts, cachedFieldsAndFragmentNames, comparedFragments, comparedFragmentPairs, areMutuallyExclusive, fieldMap1, fragmentNames2[j]);\n    }\n  }\n\n  // (I) Then collect conflicts between the second collection of fields and\n  // those referenced by each fragment name associated with the first.\n  if (fragmentNames1.length !== 0) {\n    var _comparedFragments = Object.create(null);\n    for (var i = 0; i < fragmentNames1.length; i++) {\n      collectConflictsBetweenFieldsAndFragment(context, conflicts, cachedFieldsAndFragmentNames, _comparedFragments, comparedFragmentPairs, areMutuallyExclusive, fieldMap2, fragmentNames1[i]);\n    }\n  }\n\n  // (J) Also collect conflicts between any fragment names by the first and\n  // fragment names by the second. This compares each item in the first set of\n  // names to each item in the second set of names.\n  for (var _i = 0; _i < fragmentNames1.length; _i++) {\n    for (var _j = 0; _j < fragmentNames2.length; _j++) {\n      collectConflictsBetweenFragments(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, fragmentNames1[_i], fragmentNames2[_j]);\n    }\n  }\n  return conflicts;\n}\n\n// Collect all Conflicts \"within\" one collection of fields.\nfunction collectConflictsWithin(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, fieldMap) {\n  // A field map is a keyed collection, where each key represents a response\n  // name and the value at that key is a list of all fields which provide that\n  // response name. For every response name, if there are multiple fields, they\n  // must be compared to find a potential conflict.\n  Object.keys(fieldMap).forEach(function (responseName) {\n    var fields = fieldMap[responseName];\n    // This compares every field in the list to every other field in this list\n    // (except to itself). If the list only has one item, nothing needs to\n    // be compared.\n    if (fields.length > 1) {\n      for (var i = 0; i < fields.length; i++) {\n        for (var j = i + 1; j < fields.length; j++) {\n          var conflict = findConflict(context, cachedFieldsAndFragmentNames, comparedFragmentPairs, false, // within one collection is never mutually exclusive\n          responseName, fields[i], fields[j]);\n          if (conflict) {\n            conflicts.push(conflict);\n          }\n        }\n      }\n    }\n  });\n}\n\n// Collect all Conflicts between two collections of fields. This is similar to,\n// but different from the `collectConflictsWithin` function above. This check\n// assumes that `collectConflictsWithin` has already been called on each\n// provided collection of fields. This is true because this validator traverses\n// each individual selection set.\nfunction collectConflictsBetween(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, parentFieldsAreMutuallyExclusive, fieldMap1, fieldMap2) {\n  // A field map is a keyed collection, where each key represents a response\n  // name and the value at that key is a list of all fields which provide that\n  // response name. For any response name which appears in both provided field\n  // maps, each field from the first field map must be compared to every field\n  // in the second field map to find potential conflicts.\n  Object.keys(fieldMap1).forEach(function (responseName) {\n    var fields2 = fieldMap2[responseName];\n    if (fields2) {\n      var fields1 = fieldMap1[responseName];\n      for (var i = 0; i < fields1.length; i++) {\n        for (var j = 0; j < fields2.length; j++) {\n          var conflict = findConflict(context, cachedFieldsAndFragmentNames, comparedFragmentPairs, parentFieldsAreMutuallyExclusive, responseName, fields1[i], fields2[j]);\n          if (conflict) {\n            conflicts.push(conflict);\n          }\n        }\n      }\n    }\n  });\n}\n\n// Determines if there is a conflict between two particular fields, including\n// comparing their sub-fields.\nfunction findConflict(context, cachedFieldsAndFragmentNames, comparedFragmentPairs, parentFieldsAreMutuallyExclusive, responseName, field1, field2) {\n  var parentType1 = field1[0],\n      node1 = field1[1],\n      def1 = field1[2];\n  var parentType2 = field2[0],\n      node2 = field2[1],\n      def2 = field2[2];\n\n  // If it is known that two fields could not possibly apply at the same\n  // time, due to the parent types, then it is safe to permit them to diverge\n  // in aliased field or arguments used as they will not present any ambiguity\n  // by differing.\n  // It is known that two parent types could never overlap if they are\n  // different Object types. Interface or Union types might overlap - if not\n  // in the current state of the schema, then perhaps in some future version,\n  // thus may not safely diverge.\n\n  var areMutuallyExclusive = parentFieldsAreMutuallyExclusive || parentType1 !== parentType2 && isObjectType(parentType1) && isObjectType(parentType2);\n\n  // The return type for each field.\n  var type1 = def1 && def1.type;\n  var type2 = def2 && def2.type;\n\n  if (!areMutuallyExclusive) {\n    // Two aliases must refer to the same field.\n    var name1 = node1.name.value;\n    var name2 = node2.name.value;\n    if (name1 !== name2) {\n      return [[responseName, name1 + ' and ' + name2 + ' are different fields'], [node1], [node2]];\n    }\n\n    // Two field calls must have the same arguments.\n    if (!sameArguments(node1.arguments || [], node2.arguments || [])) {\n      return [[responseName, 'they have differing arguments'], [node1], [node2]];\n    }\n  }\n\n  if (type1 && type2 && doTypesConflict(type1, type2)) {\n    return [[responseName, 'they return conflicting types ' + String(type1) + ' and ' + String(type2)], [node1], [node2]];\n  }\n\n  // Collect and compare sub-fields. Use the same \"visited fragment names\" list\n  // for both collections so fields in a fragment reference are never\n  // compared to themselves.\n  var selectionSet1 = node1.selectionSet;\n  var selectionSet2 = node2.selectionSet;\n  if (selectionSet1 && selectionSet2) {\n    var conflicts = findConflictsBetweenSubSelectionSets(context, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, getNamedType(type1), selectionSet1, getNamedType(type2), selectionSet2);\n    return subfieldConflicts(conflicts, responseName, node1, node2);\n  }\n}\n\nfunction sameArguments(arguments1, arguments2) {\n  if (arguments1.length !== arguments2.length) {\n    return false;\n  }\n  return arguments1.every(function (argument1) {\n    var argument2 = find(arguments2, function (argument) {\n      return argument.name.value === argument1.name.value;\n    });\n    if (!argument2) {\n      return false;\n    }\n    return sameValue(argument1.value, argument2.value);\n  });\n}\n\nfunction sameValue(value1, value2) {\n  return !value1 && !value2 || print(value1) === print(value2);\n}\n\n// Two types conflict if both types could not apply to a value simultaneously.\n// Composite types are ignored as their individual field types will be compared\n// later recursively. However List and Non-Null types must match.\nfunction doTypesConflict(type1, type2) {\n  if (isListType(type1)) {\n    return isListType(type2) ? doTypesConflict(type1.ofType, type2.ofType) : true;\n  }\n  if (isListType(type2)) {\n    return true;\n  }\n  if (isNonNullType(type1)) {\n    return isNonNullType(type2) ? doTypesConflict(type1.ofType, type2.ofType) : true;\n  }\n  if (isNonNullType(type2)) {\n    return true;\n  }\n  if (isLeafType(type1) || isLeafType(type2)) {\n    return type1 !== type2;\n  }\n  return false;\n}\n\n// Given a selection set, return the collection of fields (a mapping of response\n// name to field nodes and definitions) as well as a list of fragment names\n// referenced via fragment spreads.\nfunction getFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, parentType, selectionSet) {\n  var cached = cachedFieldsAndFragmentNames.get(selectionSet);\n  if (!cached) {\n    var nodeAndDefs = Object.create(null);\n    var fragmentNames = Object.create(null);\n    _collectFieldsAndFragmentNames(context, parentType, selectionSet, nodeAndDefs, fragmentNames);\n    cached = [nodeAndDefs, Object.keys(fragmentNames)];\n    cachedFieldsAndFragmentNames.set(selectionSet, cached);\n  }\n  return cached;\n}\n\n// Given a reference to a fragment, return the represented collection of fields\n// as well as a list of nested fragment names referenced via fragment spreads.\nfunction getReferencedFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, fragment) {\n  // Short-circuit building a type from the node if possible.\n  var cached = cachedFieldsAndFragmentNames.get(fragment.selectionSet);\n  if (cached) {\n    return cached;\n  }\n\n  var fragmentType = typeFromAST(context.getSchema(), fragment.typeCondition);\n  return getFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, fragmentType, fragment.selectionSet);\n}\n\nfunction _collectFieldsAndFragmentNames(context, parentType, selectionSet, nodeAndDefs, fragmentNames) {\n  for (var i = 0; i < selectionSet.selections.length; i++) {\n    var selection = selectionSet.selections[i];\n    switch (selection.kind) {\n      case Kind.FIELD:\n        var fieldName = selection.name.value;\n        var fieldDef = void 0;\n        if (isObjectType(parentType) || isInterfaceType(parentType)) {\n          fieldDef = parentType.getFields()[fieldName];\n        }\n        var responseName = selection.alias ? selection.alias.value : fieldName;\n        if (!nodeAndDefs[responseName]) {\n          nodeAndDefs[responseName] = [];\n        }\n        nodeAndDefs[responseName].push([parentType, selection, fieldDef]);\n        break;\n      case Kind.FRAGMENT_SPREAD:\n        fragmentNames[selection.name.value] = true;\n        break;\n      case Kind.INLINE_FRAGMENT:\n        var typeCondition = selection.typeCondition;\n        var inlineFragmentType = typeCondition ? typeFromAST(context.getSchema(), typeCondition) : parentType;\n        _collectFieldsAndFragmentNames(context, inlineFragmentType, selection.selectionSet, nodeAndDefs, fragmentNames);\n        break;\n    }\n  }\n}\n\n// Given a series of Conflicts which occurred between two sub-fields, generate\n// a single Conflict.\nfunction subfieldConflicts(conflicts, responseName, node1, node2) {\n  if (conflicts.length > 0) {\n    return [[responseName, conflicts.map(function (_ref3) {\n      var reason = _ref3[0];\n      return reason;\n    })], conflicts.reduce(function (allFields, _ref4) {\n      var fields1 = _ref4[1];\n      return allFields.concat(fields1);\n    }, [node1]), conflicts.reduce(function (allFields, _ref5) {\n      var fields2 = _ref5[2];\n      return allFields.concat(fields2);\n    }, [node2])];\n  }\n}\n\n/**\n * A way to keep track of pairs of things when the ordering of the pair does\n * not matter. We do this by maintaining a sort of double adjacency sets.\n */\n\nvar PairSet = function () {\n  function PairSet() {\n    _classCallCheck(this, PairSet);\n\n    this._data = Object.create(null);\n  }\n\n  PairSet.prototype.has = function has(a, b, areMutuallyExclusive) {\n    var first = this._data[a];\n    var result = first && first[b];\n    if (result === undefined) {\n      return false;\n    }\n    // areMutuallyExclusive being false is a superset of being true,\n    // hence if we want to know if this PairSet \"has\" these two with no\n    // exclusivity, we have to ensure it was added as such.\n    if (areMutuallyExclusive === false) {\n      return result === false;\n    }\n    return true;\n  };\n\n  PairSet.prototype.add = function add(a, b, areMutuallyExclusive) {\n    _pairSetAdd(this._data, a, b, areMutuallyExclusive);\n    _pairSetAdd(this._data, b, a, areMutuallyExclusive);\n  };\n\n  return PairSet;\n}();\n\nfunction _pairSetAdd(data, a, b, areMutuallyExclusive) {\n  var map = data[a];\n  if (!map) {\n    map = Object.create(null);\n    data[a] = map;\n  }\n  map[b] = areMutuallyExclusive;\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n/**\n * The set of allowed directive location values.\n */\nexport var DirectiveLocation = Object.freeze({\n  // Request Definitions\n  QUERY: 'QUERY',\n  MUTATION: 'MUTATION',\n  SUBSCRIPTION: 'SUBSCRIPTION',\n  FIELD: 'FIELD',\n  FRAGMENT_DEFINITION: 'FRAGMENT_DEFINITION',\n  FRAGMENT_SPREAD: 'FRAGMENT_SPREAD',\n  INLINE_FRAGMENT: 'INLINE_FRAGMENT',\n  // Type System Definitions\n  SCHEMA: 'SCHEMA',\n  SCALAR: 'SCALAR',\n  OBJECT: 'OBJECT',\n  FIELD_DEFINITION: 'FIELD_DEFINITION',\n  ARGUMENT_DEFINITION: 'ARGUMENT_DEFINITION',\n  INTERFACE: 'INTERFACE',\n  UNION: 'UNION',\n  ENUM: 'ENUM',\n  ENUM_VALUE: 'ENUM_VALUE',\n  INPUT_OBJECT: 'INPUT_OBJECT',\n  INPUT_FIELD_DEFINITION: 'INPUT_FIELD_DEFINITION'\n});\n\n/**\n * The enum type representing the directive location values.\n */","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nexport function duplicateInputFieldMessage(fieldName) {\n  return 'There can be only one input field named \"' + fieldName + '\".';\n}\n\n/**\n * Unique input field names\n *\n * A GraphQL input object value is only valid if all supplied fields are\n * uniquely named.\n */\nexport function UniqueInputFieldNames(context) {\n  var knownNameStack = [];\n  var knownNames = Object.create(null);\n\n  return {\n    ObjectValue: {\n      enter: function enter() {\n        knownNameStack.push(knownNames);\n        knownNames = Object.create(null);\n      },\n      leave: function leave() {\n        knownNames = knownNameStack.pop();\n      }\n    },\n    ObjectField: function ObjectField(node) {\n      var fieldName = node.name.value;\n      if (knownNames[fieldName]) {\n        context.reportError(new GraphQLError(duplicateInputFieldMessage(fieldName), [knownNames[fieldName], node.name]));\n      } else {\n        knownNames[fieldName] = node.name;\n      }\n      return false;\n    }\n  };\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n// Spec Section: \"Executable Definitions\"\nimport { ExecutableDefinitions } from './rules/ExecutableDefinitions';\n\n// Spec Section: \"Operation Name Uniqueness\"\nimport { UniqueOperationNames } from './rules/UniqueOperationNames';\n\n// Spec Section: \"Lone Anonymous Operation\"\nimport { LoneAnonymousOperation } from './rules/LoneAnonymousOperation';\n\n// Spec Section: \"Subscriptions with Single Root Field\"\nimport { SingleFieldSubscriptions } from './rules/SingleFieldSubscriptions';\n\n// Spec Section: \"Fragment Spread Type Existence\"\nimport { KnownTypeNames } from './rules/KnownTypeNames';\n\n// Spec Section: \"Fragments on Composite Types\"\nimport { FragmentsOnCompositeTypes } from './rules/FragmentsOnCompositeTypes';\n\n// Spec Section: \"Variables are Input Types\"\nimport { VariablesAreInputTypes } from './rules/VariablesAreInputTypes';\n\n// Spec Section: \"Leaf Field Selections\"\nimport { ScalarLeafs } from './rules/ScalarLeafs';\n\n// Spec Section: \"Field Selections on Objects, Interfaces, and Unions Types\"\nimport { FieldsOnCorrectType } from './rules/FieldsOnCorrectType';\n\n// Spec Section: \"Fragment Name Uniqueness\"\nimport { UniqueFragmentNames } from './rules/UniqueFragmentNames';\n\n// Spec Section: \"Fragment spread target defined\"\nimport { KnownFragmentNames } from './rules/KnownFragmentNames';\n\n// Spec Section: \"Fragments must be used\"\nimport { NoUnusedFragments } from './rules/NoUnusedFragments';\n\n// Spec Section: \"Fragment spread is possible\"\nimport { PossibleFragmentSpreads } from './rules/PossibleFragmentSpreads';\n\n// Spec Section: \"Fragments must not form cycles\"\nimport { NoFragmentCycles } from './rules/NoFragmentCycles';\n\n// Spec Section: \"Variable Uniqueness\"\nimport { UniqueVariableNames } from './rules/UniqueVariableNames';\n\n// Spec Section: \"All Variable Used Defined\"\nimport { NoUndefinedVariables } from './rules/NoUndefinedVariables';\n\n// Spec Section: \"All Variables Used\"\nimport { NoUnusedVariables } from './rules/NoUnusedVariables';\n\n// Spec Section: \"Directives Are Defined\"\nimport { KnownDirectives } from './rules/KnownDirectives';\n\n// Spec Section: \"Directives Are Unique Per Location\"\nimport { UniqueDirectivesPerLocation } from './rules/UniqueDirectivesPerLocation';\n\n// Spec Section: \"Argument Names\"\nimport { KnownArgumentNames } from './rules/KnownArgumentNames';\n\n// Spec Section: \"Argument Uniqueness\"\nimport { UniqueArgumentNames } from './rules/UniqueArgumentNames';\n\n// Spec Section: \"Value Type Correctness\"\nimport { ValuesOfCorrectType } from './rules/ValuesOfCorrectType';\n\n// Spec Section: \"Argument Optionality\"\nimport { ProvidedNonNullArguments } from './rules/ProvidedNonNullArguments';\n\n// Spec Section: \"Variables Default Value Is Allowed\"\nimport { VariablesDefaultValueAllowed } from './rules/VariablesDefaultValueAllowed';\n\n// Spec Section: \"All Variable Usages Are Allowed\"\nimport { VariablesInAllowedPosition } from './rules/VariablesInAllowedPosition';\n\n// Spec Section: \"Field Selection Merging\"\nimport { OverlappingFieldsCanBeMerged } from './rules/OverlappingFieldsCanBeMerged';\n\n// Spec Section: \"Input Object Field Uniqueness\"\nimport { UniqueInputFieldNames } from './rules/UniqueInputFieldNames';\n\n/**\n * This set includes all validation rules defined by the GraphQL spec.\n *\n * The order of the rules in this list has been adjusted to lead to the\n * most clear output when encountering multiple validation errors.\n */\nexport var specifiedRules = [ExecutableDefinitions, UniqueOperationNames, LoneAnonymousOperation, SingleFieldSubscriptions, KnownTypeNames, FragmentsOnCompositeTypes, VariablesAreInputTypes, ScalarLeafs, FieldsOnCorrectType, UniqueFragmentNames, KnownFragmentNames, NoUnusedFragments, PossibleFragmentSpreads, NoFragmentCycles, UniqueVariableNames, NoUndefinedVariables, NoUnusedVariables, KnownDirectives, UniqueDirectivesPerLocation, KnownArgumentNames, UniqueArgumentNames, ValuesOfCorrectType, ProvidedNonNullArguments, VariablesDefaultValueAllowed, VariablesInAllowedPosition, OverlappingFieldsCanBeMerged, UniqueInputFieldNames];","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nimport { Kind } from '../../language/kinds';\n\n\nexport function nonExecutableDefinitionMessage(defName) {\n  return 'The ' + defName + ' definition is not executable.';\n}\n\n/**\n * Executable definitions\n *\n * A GraphQL document is only valid for execution if all definitions are either\n * operation or fragment definitions.\n */\nexport function ExecutableDefinitions(context) {\n  return {\n    Document: function Document(node) {\n      node.definitions.forEach(function (definition) {\n        if (definition.kind !== Kind.OPERATION_DEFINITION && definition.kind !== Kind.FRAGMENT_DEFINITION) {\n          context.reportError(new GraphQLError(nonExecutableDefinitionMessage(definition.kind === Kind.SCHEMA_DEFINITION ? 'schema' : definition.name.value), [definition]));\n        }\n      });\n      return false;\n    }\n  };\n}","import { autoinject } from \"aurelia-framework\";\nimport { ErrorMessageView } from \"./error-message-view\";\nimport { Logger } from \"aurelia-logging\";\nimport { LogManager } from \"aurelia-framework\";\n\n@autoinject\nexport class ErrorMessageUtility {\n    \n    errorMessageView: ErrorMessageView;\n    logger: Logger;\n\n    constructor(){\n        this.logger = LogManager.getLogger(ErrorMessageUtility.name);\n    }\n    \n    showErrorMessage(errorMessage: string, errorHeader: string=\"There seems to be some technical difficulties.\"){\n        this.logger.error(`error :: ${errorMessage}`);\n        this.errorMessageView.showError(errorMessage, errorHeader);\n    }\n\n    showError(error: Error, errorHeader: string=\"There seems to be some technical difficulties.\"){\n        let errorToDisplay = error['response'] && error['response']['data'] && error['response']['data']['message'] ? error['response']['data'] : error;\n        this.showErrorMessage(errorToDisplay.message, errorHeader);\n    }\n}",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var WordArray = C_lib.WordArray;\n\t    var C_enc = C.enc;\n\n\t    /**\n\t     * Base64 encoding strategy.\n\t     */\n\t    var Base64 = C_enc.Base64 = {\n\t        /**\n\t         * Converts a word array to a Base64 string.\n\t         *\n\t         * @param {WordArray} wordArray The word array.\n\t         *\n\t         * @return {string} The Base64 string.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t         */\n\t        stringify: function (wordArray) {\n\t            // Shortcuts\n\t            var words = wordArray.words;\n\t            var sigBytes = wordArray.sigBytes;\n\t            var map = this._map;\n\n\t            // Clamp excess bits\n\t            wordArray.clamp();\n\n\t            // Convert\n\t            var base64Chars = [];\n\t            for (var i = 0; i < sigBytes; i += 3) {\n\t                var byte1 = (words[i >>> 2]       >>> (24 - (i % 4) * 8))       & 0xff;\n\t                var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t                var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t                var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t                for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t                    base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t                }\n\t            }\n\n\t            // Add padding\n\t            var paddingChar = map.charAt(64);\n\t            if (paddingChar) {\n\t                while (base64Chars.length % 4) {\n\t                    base64Chars.push(paddingChar);\n\t                }\n\t            }\n\n\t            return base64Chars.join('');\n\t        },\n\n\t        /**\n\t         * Converts a Base64 string to a word array.\n\t         *\n\t         * @param {string} base64Str The Base64 string.\n\t         *\n\t         * @return {WordArray} The word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t         */\n\t        parse: function (base64Str) {\n\t            // Shortcuts\n\t            var base64StrLength = base64Str.length;\n\t            var map = this._map;\n\t            var reverseMap = this._reverseMap;\n\n\t            if (!reverseMap) {\n\t                    reverseMap = this._reverseMap = [];\n\t                    for (var j = 0; j < map.length; j++) {\n\t                        reverseMap[map.charCodeAt(j)] = j;\n\t                    }\n\t            }\n\n\t            // Ignore padding\n\t            var paddingChar = map.charAt(64);\n\t            if (paddingChar) {\n\t                var paddingIndex = base64Str.indexOf(paddingChar);\n\t                if (paddingIndex !== -1) {\n\t                    base64StrLength = paddingIndex;\n\t                }\n\t            }\n\n\t            // Convert\n\t            return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t        },\n\n\t        _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t    };\n\n\t    function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t      var words = [];\n\t      var nBytes = 0;\n\t      for (var i = 0; i < base64StrLength; i++) {\n\t          if (i % 4) {\n\t              var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t              var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t              words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8);\n\t              nBytes++;\n\t          }\n\t      }\n\t      return WordArray.create(words, nBytes);\n\t    }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n/**\n * Produces the value of a block string from its parsed raw value, similar to\n * Coffeescript's block string, Python's docstring trim or Ruby's strip_heredoc.\n *\n * This implements the GraphQL spec's BlockStringValue() static algorithm.\n */\nexport default function blockStringValue(rawString) {\n  // Expand a block string's raw value into independent lines.\n  var lines = rawString.split(/\\r\\n|[\\n\\r]/g);\n\n  // Remove common indentation from all lines but first.\n  var commonIndent = null;\n  for (var i = 1; i < lines.length; i++) {\n    var line = lines[i];\n    var indent = leadingWhitespace(line);\n    if (indent < line.length && (commonIndent === null || indent < commonIndent)) {\n      commonIndent = indent;\n      if (commonIndent === 0) {\n        break;\n      }\n    }\n  }\n\n  if (commonIndent) {\n    for (var _i = 1; _i < lines.length; _i++) {\n      lines[_i] = lines[_i].slice(commonIndent);\n    }\n  }\n\n  // Remove leading and trailing blank lines.\n  while (lines.length > 0 && isBlank(lines[0])) {\n    lines.shift();\n  }\n  while (lines.length > 0 && isBlank(lines[lines.length - 1])) {\n    lines.pop();\n  }\n\n  // Return a string of the lines joined with U+000A.\n  return lines.join('\\n');\n}\n\nfunction leadingWhitespace(str) {\n  var i = 0;\n  while (i < str.length && (str[i] === ' ' || str[i] === '\\t')) {\n    i++;\n  }\n  return i;\n}\n\nfunction isBlank(str) {\n  return leadingWhitespace(str) === str.length;\n}","import { autoinject } from \"aurelia-framework\";\nimport { DefaultService } from \"shared-service/default-service\";\nimport { AlertNotification } from \"../models/alert-notification\";\n\n@autoinject\nexport class NotificationService extends DefaultService{\n    private static readonly URI = \"alert-notification\";\n\n    constructor(){\n        super(NotificationService.name);        \n    }\n\n    async getAlertNotifications(): Promise<AlertNotification[]>{\n        try{\n            let response = await this.get(NotificationService.URI);\n            response = response || [];\n            this.logger.info(\"Alert Notifications Response :: {}\", response);\n            return response.map(alertNotification => new AlertNotification(alertNotification));\n        } catch(err){\n            this.logger.error(\"error getting Alert Notifications :: {}\", err);\n            return [];\n        }\n    }\n}","import { autoinject } from \"aurelia-framework\";\nimport { DefaultService } from \"shared-service/default-service\";\nimport { UpdateRecordRequest } from \"shared-models/update-record-request\";\n\n@autoinject\nexport class UpdateRecordService extends DefaultService{\n    private static readonly URI = \"update-record\";\n\n    constructor(){\n        super(UpdateRecordService.name);\n    }\n\n    async updateRecord(getRecordRequest: UpdateRecordRequest): Promise<number>{\n        return await this.post(UpdateRecordService.URI, getRecordRequest);\n    }\n}","export interface IUpdateRecordRequest {recordType: string, recordId: number, recordData: any};\nexport class UpdateRecordRequest{\n    recordType: string;\n    recordId: number;\n    recordData: any;\n    \n    constructor(data: IUpdateRecordRequest){\n        this.recordType = data.recordType;\n        this.recordId = data.recordId;\n        this.recordData = data.recordData;\n    }\n}","import { IRecordReference, RecordReference } from \"shared-models/record-reference\";\nimport { IShippingMethodReference, ShippingMethodReference } from \"./carrier-record\";\n\nexport interface IIntegratedShipMethod extends IRecordReference{\n    isDefault?: boolean, \n    winery?: IRecordReference, \n    shippingMethod?: IShippingMethodReference,\n    integrationType?: RecordReference};\nexport class IntegratedShipMethod extends RecordReference{   \n    isDefault: boolean;\n    winery: RecordReference;\n    shippingMethod: ShippingMethodReference;\n    integrationType: RecordReference;\n    constructor(data: IIntegratedShipMethod){\n        super(data)  \n        this.isDefault = data.isDefault || false;\n        this.winery = data.winery ? new RecordReference(data.winery) : null;      \n        this.shippingMethod = data.shippingMethod ? new ShippingMethodReference(data.shippingMethod) : null;      \n        this.integrationType = data.integrationType ? new RecordReference(data.integrationType) : null;\n    }    \n}","import { ShippingMethodReference } from \"orders/models/carrier-record\";\nimport { IRecordReference, RecordReference } from \"shared-models/record-reference\";\n\nexport interface IBillingRate extends IRecordReference{\n    isDefaultRate?: boolean,\n    startDate?: Date,\n    endDate?: Date,\n    bottleSizeIds?: number[],\n    bottleSizeNames?: string[],\n    wineryIds?: number[],\n    wineryNames?: string[],\n    zone?: RecordReference,\n    shippingMethodIds?: number[],\n    shippingMethodNames?: string[],\n    quantity?: number,\n    charge?: number};\n\nexport class BillingRate extends RecordReference{    \n    isDefaultRate: boolean;\n    startDate: Date;\n    endDate: Date;\n    bottleSizeIds: number[];\n    bottleSizeNames?: string[];\n    wineryIds: number[];\n    wineryNames?: string[];\n    zone: RecordReference;\n    shippingMethodIds: number[];\n    shippingMethodNames?: string[];\n    quantity: number;\n    charge: number;\n    constructor(data: IBillingRate){\n        data = data || {}\n        super(data);\n        this.isDefaultRate = data.isDefaultRate || false;        \n        this.startDate = data.startDate;        \n        this.endDate = data.endDate;     \n        this.bottleSizeIds = (data.bottleSizeIds || []).map((bottleSizeId) => typeof bottleSizeId === \"string\" ? parseInt(bottleSizeId, 10): bottleSizeId);  \n        this.bottleSizeNames = data.bottleSizeNames || []; \n        this.wineryIds = (data.wineryIds || []).map((wineryId) => typeof wineryId === \"string\" ? parseInt(wineryId, 10): wineryId);   \n        this.wineryNames = data.wineryNames || [];\n        this.zone = data.zone ? new RecordReference(data.zone): null;\n        this.shippingMethodIds = (data.shippingMethodIds || []).map((shippingMethodId) => typeof shippingMethodId === \"string\" ? parseInt(shippingMethodId, 10): shippingMethodId);\n        this.shippingMethodNames = data.shippingMethodNames || [];\n        this.quantity = data.quantity || 0;   \n        this.charge = data.charge || 0;   \n    }    \n}\n\nexport function getMatchingRates(billingRates: BillingRate[], zone: RecordReference, shippingMethod: ShippingMethodReference): BillingRate[]{\n    if(!zone){\n        return billingRates.filter((rate)=> true);\n    }\n    return billingRates.filter((rate)=> rate.zone.id == zone.id && (!shippingMethod || rate.shippingMethodIds.indexOf(shippingMethod.id) > -1));\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport isInvalid from '../jsutils/isInvalid';\nimport objectValues from '../jsutils/objectValues';\nimport { astFromValue } from '../utilities/astFromValue';\nimport { print } from '../language/printer';\nimport { GraphQLObjectType, GraphQLEnumType, isScalarType, isObjectType, isInterfaceType, isUnionType, isEnumType, isInputObjectType, isListType, isNonNullType, isAbstractType, isNamedType } from './definition';\nimport { GraphQLList, GraphQLNonNull } from '../type/wrappers';\nimport { GraphQLString, GraphQLBoolean } from './scalars';\nimport { DirectiveLocation } from '../language/directiveLocation';\n\n\nexport var __Schema = new GraphQLObjectType({\n  name: '__Schema',\n  isIntrospection: true,\n  description: 'A GraphQL Schema defines the capabilities of a GraphQL server. It ' + 'exposes all available types and directives on the server, as well as ' + 'the entry points for query, mutation, and subscription operations.',\n  fields: function fields() {\n    return {\n      types: {\n        description: 'A list of all types supported by this server.',\n        type: GraphQLNonNull(GraphQLList(GraphQLNonNull(__Type))),\n        resolve: function resolve(schema) {\n          return objectValues(schema.getTypeMap());\n        }\n      },\n      queryType: {\n        description: 'The type that query operations will be rooted at.',\n        type: GraphQLNonNull(__Type),\n        resolve: function resolve(schema) {\n          return schema.getQueryType();\n        }\n      },\n      mutationType: {\n        description: 'If this server supports mutation, the type that ' + 'mutation operations will be rooted at.',\n        type: __Type,\n        resolve: function resolve(schema) {\n          return schema.getMutationType();\n        }\n      },\n      subscriptionType: {\n        description: 'If this server support subscription, the type that ' + 'subscription operations will be rooted at.',\n        type: __Type,\n        resolve: function resolve(schema) {\n          return schema.getSubscriptionType();\n        }\n      },\n      directives: {\n        description: 'A list of all directives supported by this server.',\n        type: GraphQLNonNull(GraphQLList(GraphQLNonNull(__Directive))),\n        resolve: function resolve(schema) {\n          return schema.getDirectives();\n        }\n      }\n    };\n  }\n});\n\nexport var __Directive = new GraphQLObjectType({\n  name: '__Directive',\n  isIntrospection: true,\n  description: 'A Directive provides a way to describe alternate runtime execution and ' + 'type validation behavior in a GraphQL document.' + \"\\n\\nIn some cases, you need to provide options to alter GraphQL's \" + 'execution behavior in ways field arguments will not suffice, such as ' + 'conditionally including or skipping a field. Directives provide this by ' + 'describing additional information to the executor.',\n  fields: function fields() {\n    return {\n      name: { type: GraphQLNonNull(GraphQLString) },\n      description: { type: GraphQLString },\n      locations: {\n        type: GraphQLNonNull(GraphQLList(GraphQLNonNull(__DirectiveLocation)))\n      },\n      args: {\n        type: GraphQLNonNull(GraphQLList(GraphQLNonNull(__InputValue))),\n        resolve: function resolve(directive) {\n          return directive.args || [];\n        }\n      },\n      // NOTE: the following three fields are deprecated and are no longer part\n      // of the GraphQL specification.\n      onOperation: {\n        deprecationReason: 'Use `locations`.',\n        type: GraphQLNonNull(GraphQLBoolean),\n        resolve: function resolve(d) {\n          return d.locations.indexOf(DirectiveLocation.QUERY) !== -1 || d.locations.indexOf(DirectiveLocation.MUTATION) !== -1 || d.locations.indexOf(DirectiveLocation.SUBSCRIPTION) !== -1;\n        }\n      },\n      onFragment: {\n        deprecationReason: 'Use `locations`.',\n        type: GraphQLNonNull(GraphQLBoolean),\n        resolve: function resolve(d) {\n          return d.locations.indexOf(DirectiveLocation.FRAGMENT_SPREAD) !== -1 || d.locations.indexOf(DirectiveLocation.INLINE_FRAGMENT) !== -1 || d.locations.indexOf(DirectiveLocation.FRAGMENT_DEFINITION) !== -1;\n        }\n      },\n      onField: {\n        deprecationReason: 'Use `locations`.',\n        type: GraphQLNonNull(GraphQLBoolean),\n        resolve: function resolve(d) {\n          return d.locations.indexOf(DirectiveLocation.FIELD) !== -1;\n        }\n      }\n    };\n  }\n});\n\nexport var __DirectiveLocation = new GraphQLEnumType({\n  name: '__DirectiveLocation',\n  isIntrospection: true,\n  description: 'A Directive can be adjacent to many parts of the GraphQL language, a ' + '__DirectiveLocation describes one such possible adjacencies.',\n  values: {\n    QUERY: {\n      value: DirectiveLocation.QUERY,\n      description: 'Location adjacent to a query operation.'\n    },\n    MUTATION: {\n      value: DirectiveLocation.MUTATION,\n      description: 'Location adjacent to a mutation operation.'\n    },\n    SUBSCRIPTION: {\n      value: DirectiveLocation.SUBSCRIPTION,\n      description: 'Location adjacent to a subscription operation.'\n    },\n    FIELD: {\n      value: DirectiveLocation.FIELD,\n      description: 'Location adjacent to a field.'\n    },\n    FRAGMENT_DEFINITION: {\n      value: DirectiveLocation.FRAGMENT_DEFINITION,\n      description: 'Location adjacent to a fragment definition.'\n    },\n    FRAGMENT_SPREAD: {\n      value: DirectiveLocation.FRAGMENT_SPREAD,\n      description: 'Location adjacent to a fragment spread.'\n    },\n    INLINE_FRAGMENT: {\n      value: DirectiveLocation.INLINE_FRAGMENT,\n      description: 'Location adjacent to an inline fragment.'\n    },\n    SCHEMA: {\n      value: DirectiveLocation.SCHEMA,\n      description: 'Location adjacent to a schema definition.'\n    },\n    SCALAR: {\n      value: DirectiveLocation.SCALAR,\n      description: 'Location adjacent to a scalar definition.'\n    },\n    OBJECT: {\n      value: DirectiveLocation.OBJECT,\n      description: 'Location adjacent to an object type definition.'\n    },\n    FIELD_DEFINITION: {\n      value: DirectiveLocation.FIELD_DEFINITION,\n      description: 'Location adjacent to a field definition.'\n    },\n    ARGUMENT_DEFINITION: {\n      value: DirectiveLocation.ARGUMENT_DEFINITION,\n      description: 'Location adjacent to an argument definition.'\n    },\n    INTERFACE: {\n      value: DirectiveLocation.INTERFACE,\n      description: 'Location adjacent to an interface definition.'\n    },\n    UNION: {\n      value: DirectiveLocation.UNION,\n      description: 'Location adjacent to a union definition.'\n    },\n    ENUM: {\n      value: DirectiveLocation.ENUM,\n      description: 'Location adjacent to an enum definition.'\n    },\n    ENUM_VALUE: {\n      value: DirectiveLocation.ENUM_VALUE,\n      description: 'Location adjacent to an enum value definition.'\n    },\n    INPUT_OBJECT: {\n      value: DirectiveLocation.INPUT_OBJECT,\n      description: 'Location adjacent to an input object type definition.'\n    },\n    INPUT_FIELD_DEFINITION: {\n      value: DirectiveLocation.INPUT_FIELD_DEFINITION,\n      description: 'Location adjacent to an input object field definition.'\n    }\n  }\n});\n\nexport var __Type = new GraphQLObjectType({\n  name: '__Type',\n  isIntrospection: true,\n  description: 'The fundamental unit of any GraphQL Schema is the type. There are ' + 'many kinds of types in GraphQL as represented by the `__TypeKind` enum.' + '\\n\\nDepending on the kind of a type, certain fields describe ' + 'information about that type. Scalar types provide no information ' + 'beyond a name and description, while Enum types provide their values. ' + 'Object and Interface types provide the fields they describe. Abstract ' + 'types, Union and Interface, provide the Object types possible ' + 'at runtime. List and NonNull types compose other types.',\n  fields: function fields() {\n    return {\n      kind: {\n        type: GraphQLNonNull(__TypeKind),\n        resolve: function resolve(type) {\n          if (isScalarType(type)) {\n            return TypeKind.SCALAR;\n          } else if (isObjectType(type)) {\n            return TypeKind.OBJECT;\n          } else if (isInterfaceType(type)) {\n            return TypeKind.INTERFACE;\n          } else if (isUnionType(type)) {\n            return TypeKind.UNION;\n          } else if (isEnumType(type)) {\n            return TypeKind.ENUM;\n          } else if (isInputObjectType(type)) {\n            return TypeKind.INPUT_OBJECT;\n          } else if (isListType(type)) {\n            return TypeKind.LIST;\n          } else if (isNonNullType(type)) {\n            return TypeKind.NON_NULL;\n          }\n          throw new Error('Unknown kind of type: ' + type);\n        }\n      },\n      name: { type: GraphQLString },\n      description: { type: GraphQLString },\n      fields: {\n        type: GraphQLList(GraphQLNonNull(__Field)),\n        args: {\n          includeDeprecated: { type: GraphQLBoolean, defaultValue: false }\n        },\n        resolve: function resolve(type, _ref) {\n          var includeDeprecated = _ref.includeDeprecated;\n\n          if (isObjectType(type) || isInterfaceType(type)) {\n            var fields = objectValues(type.getFields());\n            if (!includeDeprecated) {\n              fields = fields.filter(function (field) {\n                return !field.deprecationReason;\n              });\n            }\n            return fields;\n          }\n          return null;\n        }\n      },\n      interfaces: {\n        type: GraphQLList(GraphQLNonNull(__Type)),\n        resolve: function resolve(type) {\n          if (isObjectType(type)) {\n            return type.getInterfaces();\n          }\n        }\n      },\n      possibleTypes: {\n        type: GraphQLList(GraphQLNonNull(__Type)),\n        resolve: function resolve(type, args, context, _ref2) {\n          var schema = _ref2.schema;\n\n          if (isAbstractType(type)) {\n            return schema.getPossibleTypes(type);\n          }\n        }\n      },\n      enumValues: {\n        type: GraphQLList(GraphQLNonNull(__EnumValue)),\n        args: {\n          includeDeprecated: { type: GraphQLBoolean, defaultValue: false }\n        },\n        resolve: function resolve(type, _ref3) {\n          var includeDeprecated = _ref3.includeDeprecated;\n\n          if (isEnumType(type)) {\n            var values = type.getValues();\n            if (!includeDeprecated) {\n              values = values.filter(function (value) {\n                return !value.deprecationReason;\n              });\n            }\n            return values;\n          }\n        }\n      },\n      inputFields: {\n        type: GraphQLList(GraphQLNonNull(__InputValue)),\n        resolve: function resolve(type) {\n          if (isInputObjectType(type)) {\n            return objectValues(type.getFields());\n          }\n        }\n      },\n      ofType: { type: __Type }\n    };\n  }\n});\n\nexport var __Field = new GraphQLObjectType({\n  name: '__Field',\n  isIntrospection: true,\n  description: 'Object and Interface types are described by a list of Fields, each of ' + 'which has a name, potentially a list of arguments, and a return type.',\n  fields: function fields() {\n    return {\n      name: { type: GraphQLNonNull(GraphQLString) },\n      description: { type: GraphQLString },\n      args: {\n        type: GraphQLNonNull(GraphQLList(GraphQLNonNull(__InputValue))),\n        resolve: function resolve(field) {\n          return field.args || [];\n        }\n      },\n      type: { type: GraphQLNonNull(__Type) },\n      isDeprecated: { type: GraphQLNonNull(GraphQLBoolean) },\n      deprecationReason: {\n        type: GraphQLString\n      }\n    };\n  }\n});\n\nexport var __InputValue = new GraphQLObjectType({\n  name: '__InputValue',\n  isIntrospection: true,\n  description: 'Arguments provided to Fields or Directives and the input fields of an ' + 'InputObject are represented as Input Values which describe their type ' + 'and optionally a default value.',\n  fields: function fields() {\n    return {\n      name: { type: GraphQLNonNull(GraphQLString) },\n      description: { type: GraphQLString },\n      type: { type: GraphQLNonNull(__Type) },\n      defaultValue: {\n        type: GraphQLString,\n        description: 'A GraphQL-formatted string representing the default value for this ' + 'input value.',\n        resolve: function resolve(inputVal) {\n          return isInvalid(inputVal.defaultValue) ? null : print(astFromValue(inputVal.defaultValue, inputVal.type));\n        }\n      }\n    };\n  }\n});\n\nexport var __EnumValue = new GraphQLObjectType({\n  name: '__EnumValue',\n  isIntrospection: true,\n  description: 'One possible value for a given Enum. Enum values are unique values, not ' + 'a placeholder for a string or numeric value. However an Enum value is ' + 'returned in a JSON response as a string.',\n  fields: function fields() {\n    return {\n      name: { type: GraphQLNonNull(GraphQLString) },\n      description: { type: GraphQLString },\n      isDeprecated: { type: GraphQLNonNull(GraphQLBoolean) },\n      deprecationReason: {\n        type: GraphQLString\n      }\n    };\n  }\n});\n\nexport var TypeKind = {\n  SCALAR: 'SCALAR',\n  OBJECT: 'OBJECT',\n  INTERFACE: 'INTERFACE',\n  UNION: 'UNION',\n  ENUM: 'ENUM',\n  INPUT_OBJECT: 'INPUT_OBJECT',\n  LIST: 'LIST',\n  NON_NULL: 'NON_NULL'\n};\n\nexport var __TypeKind = new GraphQLEnumType({\n  name: '__TypeKind',\n  isIntrospection: true,\n  description: 'An enum describing what kind of type a given `__Type` is.',\n  values: {\n    SCALAR: {\n      value: TypeKind.SCALAR,\n      description: 'Indicates this type is a scalar.'\n    },\n    OBJECT: {\n      value: TypeKind.OBJECT,\n      description: 'Indicates this type is an object. ' + '`fields` and `interfaces` are valid fields.'\n    },\n    INTERFACE: {\n      value: TypeKind.INTERFACE,\n      description: 'Indicates this type is an interface. ' + '`fields` and `possibleTypes` are valid fields.'\n    },\n    UNION: {\n      value: TypeKind.UNION,\n      description: 'Indicates this type is a union. ' + '`possibleTypes` is a valid field.'\n    },\n    ENUM: {\n      value: TypeKind.ENUM,\n      description: 'Indicates this type is an enum. ' + '`enumValues` is a valid field.'\n    },\n    INPUT_OBJECT: {\n      value: TypeKind.INPUT_OBJECT,\n      description: 'Indicates this type is an input object. ' + '`inputFields` is a valid field.'\n    },\n    LIST: {\n      value: TypeKind.LIST,\n      description: 'Indicates this type is a list. ' + '`ofType` is a valid field.'\n    },\n    NON_NULL: {\n      value: TypeKind.NON_NULL,\n      description: 'Indicates this type is a non-null. ' + '`ofType` is a valid field.'\n    }\n  }\n});\n\n/**\n * Note that these are GraphQLField and not GraphQLFieldConfig,\n * so the format for args is different.\n */\n\nexport var SchemaMetaFieldDef = {\n  name: '__schema',\n  type: GraphQLNonNull(__Schema),\n  description: 'Access the current type schema of this server.',\n  args: [],\n  resolve: function resolve(source, args, context, _ref4) {\n    var schema = _ref4.schema;\n    return schema;\n  }\n};\n\nexport var TypeMetaFieldDef = {\n  name: '__type',\n  type: __Type,\n  description: 'Request the type information of a single type.',\n  args: [{ name: 'name', type: GraphQLNonNull(GraphQLString) }],\n  resolve: function resolve(source, _ref5, context, _ref6) {\n    var name = _ref5.name;\n    var schema = _ref6.schema;\n    return schema.getType(name);\n  }\n};\n\nexport var TypeNameMetaFieldDef = {\n  name: '__typename',\n  type: GraphQLNonNull(GraphQLString),\n  description: 'The name of the current Object type at runtime.',\n  args: [],\n  resolve: function resolve(source, args, context, _ref7) {\n    var parentType = _ref7.parentType;\n    return parentType.name;\n  }\n};\n\nexport var introspectionTypes = [__Schema, __Directive, __DirectiveLocation, __Type, __Field, __InputValue, __EnumValue, __TypeKind];\n\nexport function isIntrospectionType(type) {\n  return isNamedType(type) && (\n  // Would prefer to use introspectionTypes.some(), however %checks needs\n  // a simple expression.\n  type.name === __Schema.name || type.name === __Directive.name || type.name === __DirectiveLocation.name || type.name === __Type.name || type.name === __Field.name || type.name === __InputValue.name || type.name === __EnumValue.name || type.name === __TypeKind.name);\n}","import { CarrierReference, ICarrierReference } from \"orders/models/carrier-record\";\nimport { CountryReference, ICountryReference, IStateReference, StateReference } from \"orders/models/country-record\";\nimport { IRecordReference, RecordReference } from \"shared-models/record-reference\";\nimport { Logger } from \"aurelia-logging\";\nimport { LogManager } from \"aurelia-framework\";\n\nlet logger = LogManager.getLogger(\"ZONE\");\n\nexport interface IZoneRange extends IRecordReference{    \n    billingZone?: IRecordReference,\n    carriers?: number[],\n    country?: ICountryReference,\n    state?: IStateReference,\n    zipStart?: number,\n    zipEnd?: number\n};\n\nexport class ZoneRange extends RecordReference{    \n    billingZone: RecordReference;\n    carriers: number[];\n    country: CountryReference;\n    state: StateReference;\n    zipStart: number;\n    zipEnd: number;\n\n    constructor(data: IZoneRange){\n        data = data || {}\n        super(data);\n        this.billingZone = data.billingZone ? new RecordReference(data.billingZone): null;\n        this.carriers = (data.carriers || []).map((carrier) => typeof carrier === \"string\" ? parseInt(carrier, 10): carrier);\n        this.country = data.country ? new CountryReference(data.country): null;\n        this.state = data.state ? new StateReference(data.state): null;\n        this.zipStart = typeof data.zipStart === \"string\" ? parseInt(data.zipStart, 10) : data.zipStart;\n        this.zipEnd = typeof data.zipEnd === \"string\" ? parseInt(data.zipEnd, 10) : data.zipEnd;\n    }    \n}\n\nexport function getMatchingZone(zoneRanges: ZoneRange[], carrier: CarrierReference, zipcode: string, country: CountryReference, state: StateReference): ZoneRange{    \n    if(!carrier || !country || zoneRanges.length === 0){\n        return null;\n    }\n    if(!zipcode && !state){\n        return null;\n    }    \n    logger.info(`zoneRanges :: ${JSON.stringify(zoneRanges)}`)\n    let filteredCountryZoneRanges = zoneRanges.filter((zoneRange)=> zoneRange.country.id == country.id);\n    logger.info(`filteredCountryZoneRanges :: ${JSON.stringify(filteredCountryZoneRanges)}`)\n    if(filteredCountryZoneRanges.length === 1){\n        return filteredCountryZoneRanges[0];\n    }\n    \n    let filteredCarrierZoneRanges = filteredCountryZoneRanges.filter((zoneRange)=> zoneRange.carriers.indexOf(carrier.id) > -1);\n    logger.info(`filteredCarrierZoneRanges :: ${JSON.stringify(filteredCarrierZoneRanges)}`)\n    if(filteredCarrierZoneRanges.length === 1){\n        return filteredCarrierZoneRanges[0];\n    }\n\n    \n    let filteredStateZoneRanges = [];\n    if(state){\n        filteredStateZoneRanges = filteredCarrierZoneRanges.filter((zoneRange)=> zoneRange.state.id == state.id);\n        logger.info(`filteredStateZoneRanges :: ${JSON.stringify(filteredStateZoneRanges)}`)\n        if(filteredStateZoneRanges.length === 1){\n            return filteredStateZoneRanges[0];\n        }\n    }\n    if(zipcode){\n        let zipcodeInt = parseInt(zipcode, 10);\n        let filteredZoneRanges = (filteredStateZoneRanges.length > 0 ? filteredStateZoneRanges : filteredCarrierZoneRanges).filter((zoneRange)=> zoneRange.zipStart <= zipcodeInt && zoneRange.zipEnd >= zipcodeInt);\n        logger.info(`filteredZoneRanges :: ${JSON.stringify(filteredZoneRanges)}`)\n        if(filteredZoneRanges.length === 1){\n            return filteredZoneRanges[0];\n        }\n    }    \n    return null;\n}","import { IRecordReference, RecordReference } from \"shared-models/record-reference\";\n\nexport interface ICreditMemo extends IRecordReference{\n    createdDate?: Date;\n    approvedDate?: Date;\n    deniedDate?: Date;\n    status?: string;\n    refundType?: string;\n    wineryOrder?: IRecordReference;\n    recipientName?: string;\n    wineryOrderNumber?: string;\n    vfOrderNumber?: string;\n    trackingNumbers?: string;\n    checkOrInvoiceNumber?: string;\n    vfInvoiceNumber?: string;\n    notes?: string;\n    creditAmount?: number;    \n};\nexport class CreditMemo extends RecordReference{   \n    createdDate: Date;\n    approvedDate: Date;\n    deniedDate: Date;\n    status: string;\n    refundType: string;\n    wineryOrder: IRecordReference;\n    recipientName: string;\n    wineryOrderNumber: string;\n    vfOrderNumber: string;\n    trackingNumbers: string;\n    checkOrInvoiceNumber: string;\n    vfInvoiceNumber: string;\n    notes: string;\n    creditAmount: number; \n\n    constructor(data: ICreditMemo){\n        data = data || {}\n        super(data);     \n        this.createdDate = data.createdDate ? new Date(data.createdDate) : null;\n        this.approvedDate = data.approvedDate ? new Date(data.approvedDate) : null;\n        this.deniedDate = data.deniedDate ? new Date(data.deniedDate) : null;\n        this.status = data.status || \"\";\n        this.refundType = data.refundType || \"\";\n        this.wineryOrder = data.wineryOrder ? new RecordReference(data.wineryOrder): null;\n        this.recipientName = data.recipientName || \"\";\n        this.wineryOrderNumber = data.wineryOrderNumber || \"\";\n        this.vfOrderNumber = data.vfOrderNumber || \"\";\n        this.trackingNumbers = data.trackingNumbers || \"\";\n        this.checkOrInvoiceNumber = data.checkOrInvoiceNumber || \"\";\n        this.vfInvoiceNumber = data.vfInvoiceNumber || \"\";\n        this.notes = data.notes || \"\";\n        this.creditAmount = data.creditAmount || 0;\n    }\n}","import { autoinject } from \"aurelia-framework\";\nimport { DefaultService } from \"shared-service/default-service\";\nimport { SearchService } from \"shared-service/search-service\";\nimport { GetRecordService } from \"shared-service/get-record-service\";\nimport { SearchResult } from \"shared-models/search-result\";\nimport { SearchRequest } from \"shared-models/search-request\";\nimport { GetRecordRequest } from \"shared-models/get-record-request\";\nimport { WineryTransfer, WineryTransferItem, WineryTransferReference } from \"items/models/winery-transfer\";\n\n@autoinject\nexport class WineryTransferService extends DefaultService{\n    private static readonly RECORD_TYPE = \"winery.transfer\";\n\n    constructor(\n        private searchService: SearchService, \n        private getRecordService: GetRecordService ){\n        super(WineryTransferService.name);\n    }\n\n    async searchRecords(searchRequestData: {page?: number, pageSize?: number, filter?: string, fieldFilters?: any[]}): Promise<SearchResult>{\n        let searchRequest = new SearchRequest({\n            recordType: WineryTransferService.RECORD_TYPE,\n            pageSize: searchRequestData.pageSize || 50,\n            page: searchRequestData.page || 1,\n            filter: searchRequestData.filter || \"\",\n            fieldFilters: searchRequestData.fieldFilters || []\n        });\n        return await this.searchService.searchRecords(searchRequest, this._convertResponseToWineryTransferReference)\n    }\n\n    async getAllRecords(fieldFilters: any[]=[]): Promise<WineryTransferReference[]>{\n        let allRecords = [] as WineryTransferReference[];\n        let page = 1;\n        let pageSize = 5000;\n        let initialSearch = await this.searchRecords({page: page, pageSize: pageSize, fieldFilters: fieldFilters});\n        allRecords = allRecords.concat(initialSearch.records as WineryTransferReference[]);\n        var totalPageCount = initialSearch.pageCount;\n        if(totalPageCount > 1){\n            while(page < totalPageCount){\n                page++;\n                let nextSearch = await this.searchRecords({page: page, pageSize: pageSize, fieldFilters: fieldFilters});\n                allRecords = allRecords.concat(nextSearch.records as WineryTransferReference[]);\n            }           \n        }        \n        return allRecords;\n    }\n\n    async getRecord(id: number): Promise<WineryTransfer>{\n        let getRecordRequest = new GetRecordRequest({\n            recordType: WineryTransferService.RECORD_TYPE,\n            recordId: id\n        });\n        let getRecordResponse = await this.getRecordService.getRecord(getRecordRequest, this._convertResponseToWineryTransfer, this);\n        return getRecordResponse.record;\n    }\n\n    _convertResponseToWineryTransfer(response): WineryTransfer{\n        let reference = this._convertResponseToWineryTransferReference(response);\n        let wineryTransfer = new WineryTransfer(reference);\n        wineryTransfer.items = (response[\"items\"] || []).map((item) => new WineryTransferItem({\n            id: item[\"id\"],\n            name: item[\"id\"],\n            itemId: item[\"product_tmpl_id\"][\"id\"],\n            itemName: item[\"product_tmpl_id\"][\"name\"],\n            quantity: item[\"quantity_related\"],\n            sku: item[\"winery_sku\"],\n            totalCharges: item[\"billing_charges\"]\n        }));\n        return wineryTransfer;\n    }\n\n    _convertResponseToWineryTransferReference(response): WineryTransferReference{\n        return new WineryTransferReference({\n            id: response[\"id\"],\n            name: response[\"name\"],\n            transferLocation: response[\"transfer_location\"],\n            receiptDate: response[\"date_done\"],\n            reference: response[\"origin\"],\n            totalCharges: response[\"total_charges\"],\n        });\n    }\n}","import { autoinject } from \"aurelia-framework\";\nimport { DefaultService } from \"shared-service/default-service\";\nimport { SearchService } from \"shared-service/search-service\";\nimport { GetRecordService } from \"shared-service/get-record-service\";\nimport { SearchResult } from \"shared-models/search-result\";\nimport { SearchRequest } from \"shared-models/search-request\";\nimport { GetRecordRequest } from \"shared-models/get-record-request\";\nimport { ReturnItemRecord, ReturnRecord, ReturnReference } from \"returns/models/return-record\";\n\n@autoinject\nexport class ReturnService extends DefaultService{\n    private static readonly RECORD_TYPE = \"vf_winery_order_return\";\n\n    constructor(\n        private searchService: SearchService, \n        private getRecordService: GetRecordService ){\n        super(ReturnService.name);\n    }\n\n    async searchRecords(searchRequestData: {page?: number, pageSize?: number, filter?: string, fieldFilters?: any[]}): Promise<SearchResult>{\n        let searchRequest = new SearchRequest({\n            recordType: ReturnService.RECORD_TYPE,\n            pageSize: searchRequestData.pageSize || 50,\n            page: searchRequestData.page || 1,\n            filter: searchRequestData.filter || \"\",\n            fieldFilters: searchRequestData.fieldFilters || []\n        });\n        return await this.searchService.searchRecords(searchRequest, this._convertResponseToReturnReference, this)\n    }\n\n    async getAllRecords(fieldFilters: any[]=[]): Promise<ReturnReference[]>{\n        let allItems = [] as ReturnReference[];\n        let page = 1;\n        let pageSize = 5000;\n        let initialSearch = await this.searchRecords({page: page, pageSize: pageSize, fieldFilters: fieldFilters});\n        allItems = allItems.concat(initialSearch.records as ReturnReference[]);\n        var totalPageCount = initialSearch.pageCount;\n        if(totalPageCount > 1){\n            while(page < totalPageCount){\n                page++;\n                let nextSearch = await this.searchRecords({page: page, pageSize: pageSize, fieldFilters: fieldFilters});\n                allItems = allItems.concat(nextSearch.records as ReturnReference[]);\n            }           \n        }        \n        return allItems;\n    }\n\n    async getRecord(itemId: number): Promise<ReturnRecord>{\n        let getRecordRequest = new GetRecordRequest({\n            recordType: ReturnService.RECORD_TYPE,\n            recordId: itemId\n        });\n        let getRecordResponse = await this.getRecordService.getRecord(getRecordRequest, this._convertResponseToReturn, this);\n        return getRecordResponse.record;\n    }\n\n    _convertResponseToReturn(returnResponse): ReturnRecord{\n        let reference = this._convertResponseToReturnReference(returnResponse);\n        let returnRecord = new ReturnRecord(reference);\n        returnRecord.items = (returnResponse[\"return_lines\"] || []).map((itemLine) => this._convertResponseToReturnItemReference(itemLine));\n        return returnRecord;\n    }\n\n    _convertResponseToReturnReference(returnRefResponse): ReturnReference{\n        return new ReturnReference({\n            id: returnRefResponse[\"id\"],\n            recipientName: returnRefResponse[\"recipient_name\"],\n            status: returnRefResponse[\"status\"],\n            orderNumber: returnRefResponse[\"winery_order_number\"],\n            order: returnRefResponse[\"winery_order\"],\n            returnReason: returnRefResponse[\"return_reason\"],\n            shipDate: returnRefResponse[\"shipped_date\"],\n            returnDate: returnRefResponse[\"return_date\"],\n            shippingCarrier: returnRefResponse[\"shipping_carrier\"],\n            shippingMethod: returnRefResponse[\"shipping_method\"],\n            isWillCall: returnRefResponse[\"is_will_call\"],\n            returnShippingCarrier: returnRefResponse[\"return_shipping_carrier\"],\n            returnShippingMethod: returnRefResponse[\"return_shipping_method\"],\n            returnCharge: returnRefResponse[\"total_return_charges\"],\n            notes: returnRefResponse[\"notes\"],\n        });\n    }\n\n    _convertResponseToReturnItemReference(returnResponse): ReturnItemRecord{\n        return new ReturnItemRecord({\n            id: returnResponse[\"id\"],\n            item: returnResponse[\"item\"],\n            shippedQuantity: returnResponse[\"shipped_quantity\"],\n            returnedQuantity: returnResponse[\"returned_quantity\"],\n            toInventoryQuantity: returnResponse[\"to_inv_quantity\"],\n            reshipQuantity: returnResponse[\"reship_quantity\"],\n            willCallQuantity: returnResponse[\"will_call_quantity\"],\n            remainingQuantity: returnResponse[\"qty_remaining\"]\n\n        });\n    }\n}","var scope = (typeof global !== \"undefined\" && global) ||\n            (typeof self !== \"undefined\" && self) ||\n            window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n  return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n  return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n  if (timeout) {\n    timeout.close();\n  }\n};\n\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n  this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n  clearTimeout(item._idleTimeoutId);\n\n  var msecs = item._idleTimeout;\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout)\n        item._onTimeout();\n    }, msecs);\n  }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto.  Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n                       (typeof global !== \"undefined\" && global.setImmediate) ||\n                       (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n                         (typeof global !== \"undefined\" && global.clearImmediate) ||\n                         (this && this.clearImmediate);\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","var util = require('../util');\nvar JsonBuilder = require('../json/builder');\nvar JsonParser = require('../json/parser');\nvar populateHostPrefix = require('./helpers').populateHostPrefix;\n\nfunction buildRequest(req) {\n  var httpRequest = req.httpRequest;\n  var api = req.service.api;\n  var target = api.targetPrefix + '.' + api.operations[req.operation].name;\n  var version = api.jsonVersion || '1.0';\n  var input = api.operations[req.operation].input;\n  var builder = new JsonBuilder();\n\n  if (version === 1) version = '1.0';\n  httpRequest.body = builder.build(req.params || {}, input);\n  httpRequest.headers['Content-Type'] = 'application/x-amz-json-' + version;\n  httpRequest.headers['X-Amz-Target'] = target;\n\n  populateHostPrefix(req);\n}\n\nfunction extractError(resp) {\n  var error = {};\n  var httpResponse = resp.httpResponse;\n\n  error.code = httpResponse.headers['x-amzn-errortype'] || 'UnknownError';\n  if (typeof error.code === 'string') {\n    error.code = error.code.split(':')[0];\n  }\n\n  if (httpResponse.body.length > 0) {\n    try {\n      var e = JSON.parse(httpResponse.body.toString());\n      if (e.__type || e.code) {\n        error.code = (e.__type || e.code).split('#').pop();\n      }\n      if (error.code === 'RequestEntityTooLarge') {\n        error.message = 'Request body must be less than 1 MB';\n      } else {\n        error.message = (e.message || e.Message || null);\n      }\n    } catch (e) {\n      error.statusCode = httpResponse.statusCode;\n      error.message = httpResponse.statusMessage;\n    }\n  } else {\n    error.statusCode = httpResponse.statusCode;\n    error.message = httpResponse.statusCode.toString();\n  }\n\n  resp.error = util.error(new Error(), error);\n}\n\nfunction extractData(resp) {\n  var body = resp.httpResponse.body.toString() || '{}';\n  if (resp.request.service.config.convertResponseTypes === false) {\n    resp.data = JSON.parse(body);\n  } else {\n    var operation = resp.request.service.api.operations[resp.request.operation];\n    var shape = operation.output || {};\n    var parser = new JsonParser();\n    resp.data = parser.parse(body, shape);\n  }\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n  buildRequest: buildRequest,\n  extractError: extractError,\n  extractData: extractData\n};\n","var util = require('../util');\n\nfunction JsonBuilder() { }\n\nJsonBuilder.prototype.build = function(value, shape) {\n  return JSON.stringify(translate(value, shape));\n};\n\nfunction translate(value, shape) {\n  if (!shape || value === undefined || value === null) return undefined;\n\n  switch (shape.type) {\n    case 'structure': return translateStructure(value, shape);\n    case 'map': return translateMap(value, shape);\n    case 'list': return translateList(value, shape);\n    default: return translateScalar(value, shape);\n  }\n}\n\nfunction translateStructure(structure, shape) {\n  var struct = {};\n  util.each(structure, function(name, value) {\n    var memberShape = shape.members[name];\n    if (memberShape) {\n      if (memberShape.location !== 'body') return;\n      var locationName = memberShape.isLocationName ? memberShape.name : name;\n      var result = translate(value, memberShape);\n      if (result !== undefined) struct[locationName] = result;\n    }\n  });\n  return struct;\n}\n\nfunction translateList(list, shape) {\n  var out = [];\n  util.arrayEach(list, function(value) {\n    var result = translate(value, shape.member);\n    if (result !== undefined) out.push(result);\n  });\n  return out;\n}\n\nfunction translateMap(map, shape) {\n  var out = {};\n  util.each(map, function(key, value) {\n    var result = translate(value, shape.value);\n    if (result !== undefined) out[key] = result;\n  });\n  return out;\n}\n\nfunction translateScalar(value, shape) {\n  return shape.toWireFormat(value);\n}\n\n/**\n * @api private\n */\nmodule.exports = JsonBuilder;\n","var util = require('../util');\n\nfunction JsonParser() { }\n\nJsonParser.prototype.parse = function(value, shape) {\n  return translate(JSON.parse(value), shape);\n};\n\nfunction translate(value, shape) {\n  if (!shape || value === undefined) return undefined;\n\n  switch (shape.type) {\n    case 'structure': return translateStructure(value, shape);\n    case 'map': return translateMap(value, shape);\n    case 'list': return translateList(value, shape);\n    default: return translateScalar(value, shape);\n  }\n}\n\nfunction translateStructure(structure, shape) {\n  if (structure == null) return undefined;\n\n  var struct = {};\n  var shapeMembers = shape.members;\n  util.each(shapeMembers, function(name, memberShape) {\n    var locationName = memberShape.isLocationName ? memberShape.name : name;\n    if (Object.prototype.hasOwnProperty.call(structure, locationName)) {\n      var value = structure[locationName];\n      var result = translate(value, memberShape);\n      if (result !== undefined) struct[name] = result;\n    }\n  });\n  return struct;\n}\n\nfunction translateList(list, shape) {\n  if (list == null) return undefined;\n\n  var out = [];\n  util.arrayEach(list, function(value) {\n    var result = translate(value, shape.member);\n    if (result === undefined) out.push(null);\n    else out.push(result);\n  });\n  return out;\n}\n\nfunction translateMap(map, shape) {\n  if (map == null) return undefined;\n\n  var out = {};\n  util.each(map, function(key, value) {\n    var result = translate(value, shape.value);\n    if (result === undefined) out[key] = null;\n    else out[key] = result;\n  });\n  return out;\n}\n\nfunction translateScalar(value, shape) {\n  return shape.toType(value);\n}\n\n/**\n * @api private\n */\nmodule.exports = JsonParser;\n","var util =  require('../util');\nvar AWS = require('../core');\n\n/**\n * Prepend prefix defined by API model to endpoint that's already\n * constructed. This feature does not apply to operations using\n * endpoint discovery and can be disabled.\n * @api private\n */\nfunction populateHostPrefix(request)  {\n  var enabled = request.service.config.hostPrefixEnabled;\n  if (!enabled) return request;\n  var operationModel = request.service.api.operations[request.operation];\n  //don't marshal host prefix when operation has endpoint discovery traits\n  if (hasEndpointDiscover(request)) return request;\n  if (operationModel.endpoint && operationModel.endpoint.hostPrefix) {\n    var hostPrefixNotation = operationModel.endpoint.hostPrefix;\n    var hostPrefix = expandHostPrefix(hostPrefixNotation, request.params, operationModel.input);\n    prependEndpointPrefix(request.httpRequest.endpoint, hostPrefix);\n    validateHostname(request.httpRequest.endpoint.hostname);\n  }\n  return request;\n}\n\n/**\n * @api private\n */\nfunction hasEndpointDiscover(request) {\n  var api = request.service.api;\n  var operationModel = api.operations[request.operation];\n  var isEndpointOperation = api.endpointOperation && (api.endpointOperation === util.string.lowerFirst(operationModel.name));\n  return (operationModel.endpointDiscoveryRequired !== 'NULL' || isEndpointOperation === true);\n}\n\n/**\n * @api private\n */\nfunction expandHostPrefix(hostPrefixNotation, params, shape) {\n  util.each(shape.members, function(name, member) {\n    if (member.hostLabel === true) {\n      if (typeof params[name] !== 'string' || params[name] === '') {\n        throw util.error(new Error(), {\n          message: 'Parameter ' + name + ' should be a non-empty string.',\n          code: 'InvalidParameter'\n        });\n      }\n      var regex = new RegExp('\\\\{' + name + '\\\\}', 'g');\n      hostPrefixNotation = hostPrefixNotation.replace(regex, params[name]);\n    }\n  });\n  return hostPrefixNotation;\n}\n\n/**\n * @api private\n */\nfunction prependEndpointPrefix(endpoint, prefix) {\n  if (endpoint.host) {\n    endpoint.host = prefix + endpoint.host;\n  }\n  if (endpoint.hostname) {\n    endpoint.hostname = prefix + endpoint.hostname;\n  }\n}\n\n/**\n * @api private\n */\nfunction validateHostname(hostname) {\n  var labels = hostname.split('.');\n  //Reference: https://tools.ietf.org/html/rfc1123#section-2\n  var hostPattern = /^[a-zA-Z0-9]{1}$|^[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9]$/;\n  util.arrayEach(labels, function(label) {\n    if (!label.length || label.length < 1 || label.length > 63) {\n      throw util.error(new Error(), {\n        code: 'ValidationError',\n        message: 'Hostname label length should be between 1 to 63 characters, inclusive.'\n      });\n    }\n    if (!hostPattern.test(label)) {\n      throw AWS.util.error(new Error(),\n        {code: 'ValidationError', message: label + ' is not hostname compatible.'});\n    }\n  });\n}\n\nmodule.exports = {\n  populateHostPrefix: populateHostPrefix\n};\n","/**\n * The main AWS namespace\n */\nvar AWS = { util: require('./util') };\n\n/**\n * @api private\n * @!macro [new] nobrowser\n *   @note This feature is not supported in the browser environment of the SDK.\n */\nvar _hidden = {}; _hidden.toString(); // hack to parse macro\n\n/**\n * @api private\n */\nmodule.exports = AWS;\n\nAWS.util.update(AWS, {\n\n  /**\n   * @constant\n   */\n  VERSION: '2.474.0',\n\n  /**\n   * @api private\n   */\n  Signers: {},\n\n  /**\n   * @api private\n   */\n  Protocol: {\n    Json: require('./protocol/json'),\n    Query: require('./protocol/query'),\n    Rest: require('./protocol/rest'),\n    RestJson: require('./protocol/rest_json'),\n    RestXml: require('./protocol/rest_xml')\n  },\n\n  /**\n   * @api private\n   */\n  XML: {\n    Builder: require('./xml/builder'),\n    Parser: null // conditionally set based on environment\n  },\n\n  /**\n   * @api private\n   */\n  JSON: {\n    Builder: require('./json/builder'),\n    Parser: require('./json/parser')\n  },\n\n  /**\n   * @api private\n   */\n  Model: {\n    Api: require('./model/api'),\n    Operation: require('./model/operation'),\n    Shape: require('./model/shape'),\n    Paginator: require('./model/paginator'),\n    ResourceWaiter: require('./model/resource_waiter')\n  },\n\n  /**\n   * @api private\n   */\n  apiLoader: require('./api_loader'),\n\n  /**\n   * @api private\n   */\n  EndpointCache: require('../vendor/endpoint-cache').EndpointCache\n});\nrequire('./sequential_executor');\nrequire('./service');\nrequire('./config');\nrequire('./http');\nrequire('./event_listeners');\nrequire('./request');\nrequire('./response');\nrequire('./resource_waiter');\nrequire('./signers/request_signer');\nrequire('./param_validator');\n\n/**\n * @readonly\n * @return [AWS.SequentialExecutor] a collection of global event listeners that\n *   are attached to every sent request.\n * @see AWS.Request AWS.Request for a list of events to listen for\n * @example Logging the time taken to send a request\n *   AWS.events.on('send', function startSend(resp) {\n *     resp.startTime = new Date().getTime();\n *   }).on('complete', function calculateTime(resp) {\n *     var time = (new Date().getTime() - resp.startTime) / 1000;\n *     console.log('Request took ' + time + ' seconds');\n *   });\n *\n *   new AWS.S3().listBuckets(); // prints 'Request took 0.285 seconds'\n */\nAWS.events = new AWS.SequentialExecutor();\n\n//create endpoint cache lazily\nAWS.util.memoizedProperty(AWS, 'endpointCache', function() {\n  return new AWS.EndpointCache(AWS.config.endpointCacheSize);\n}, true);\n","(function(exports) {\n  \"use strict\";\n\n  function isArray(obj) {\n    if (obj !== null) {\n      return Object.prototype.toString.call(obj) === \"[object Array]\";\n    } else {\n      return false;\n    }\n  }\n\n  function isObject(obj) {\n    if (obj !== null) {\n      return Object.prototype.toString.call(obj) === \"[object Object]\";\n    } else {\n      return false;\n    }\n  }\n\n  function strictDeepEqual(first, second) {\n    // Check the scalar case first.\n    if (first === second) {\n      return true;\n    }\n\n    // Check if they are the same type.\n    var firstType = Object.prototype.toString.call(first);\n    if (firstType !== Object.prototype.toString.call(second)) {\n      return false;\n    }\n    // We know that first and second have the same type so we can just check the\n    // first type from now on.\n    if (isArray(first) === true) {\n      // Short circuit if they're not the same length;\n      if (first.length !== second.length) {\n        return false;\n      }\n      for (var i = 0; i < first.length; i++) {\n        if (strictDeepEqual(first[i], second[i]) === false) {\n          return false;\n        }\n      }\n      return true;\n    }\n    if (isObject(first) === true) {\n      // An object is equal if it has the same key/value pairs.\n      var keysSeen = {};\n      for (var key in first) {\n        if (hasOwnProperty.call(first, key)) {\n          if (strictDeepEqual(first[key], second[key]) === false) {\n            return false;\n          }\n          keysSeen[key] = true;\n        }\n      }\n      // Now check that there aren't any keys in second that weren't\n      // in first.\n      for (var key2 in second) {\n        if (hasOwnProperty.call(second, key2)) {\n          if (keysSeen[key2] !== true) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n\n  function isFalse(obj) {\n    // From the spec:\n    // A false value corresponds to the following values:\n    // Empty list\n    // Empty object\n    // Empty string\n    // False boolean\n    // null value\n\n    // First check the scalar values.\n    if (obj === \"\" || obj === false || obj === null) {\n        return true;\n    } else if (isArray(obj) && obj.length === 0) {\n        // Check for an empty array.\n        return true;\n    } else if (isObject(obj)) {\n        // Check for an empty object.\n        for (var key in obj) {\n            // If there are any keys, then\n            // the object is not empty so the object\n            // is not false.\n            if (obj.hasOwnProperty(key)) {\n              return false;\n            }\n        }\n        return true;\n    } else {\n        return false;\n    }\n  }\n\n  function objValues(obj) {\n    var keys = Object.keys(obj);\n    var values = [];\n    for (var i = 0; i < keys.length; i++) {\n      values.push(obj[keys[i]]);\n    }\n    return values;\n  }\n\n  function merge(a, b) {\n      var merged = {};\n      for (var key in a) {\n          merged[key] = a[key];\n      }\n      for (var key2 in b) {\n          merged[key2] = b[key2];\n      }\n      return merged;\n  }\n\n  var trimLeft;\n  if (typeof String.prototype.trimLeft === \"function\") {\n    trimLeft = function(str) {\n      return str.trimLeft();\n    };\n  } else {\n    trimLeft = function(str) {\n      return str.match(/^\\s*(.*)/)[1];\n    };\n  }\n\n  // Type constants used to define functions.\n  var TYPE_NUMBER = 0;\n  var TYPE_ANY = 1;\n  var TYPE_STRING = 2;\n  var TYPE_ARRAY = 3;\n  var TYPE_OBJECT = 4;\n  var TYPE_BOOLEAN = 5;\n  var TYPE_EXPREF = 6;\n  var TYPE_NULL = 7;\n  var TYPE_ARRAY_NUMBER = 8;\n  var TYPE_ARRAY_STRING = 9;\n\n  var TOK_EOF = \"EOF\";\n  var TOK_UNQUOTEDIDENTIFIER = \"UnquotedIdentifier\";\n  var TOK_QUOTEDIDENTIFIER = \"QuotedIdentifier\";\n  var TOK_RBRACKET = \"Rbracket\";\n  var TOK_RPAREN = \"Rparen\";\n  var TOK_COMMA = \"Comma\";\n  var TOK_COLON = \"Colon\";\n  var TOK_RBRACE = \"Rbrace\";\n  var TOK_NUMBER = \"Number\";\n  var TOK_CURRENT = \"Current\";\n  var TOK_EXPREF = \"Expref\";\n  var TOK_PIPE = \"Pipe\";\n  var TOK_OR = \"Or\";\n  var TOK_AND = \"And\";\n  var TOK_EQ = \"EQ\";\n  var TOK_GT = \"GT\";\n  var TOK_LT = \"LT\";\n  var TOK_GTE = \"GTE\";\n  var TOK_LTE = \"LTE\";\n  var TOK_NE = \"NE\";\n  var TOK_FLATTEN = \"Flatten\";\n  var TOK_STAR = \"Star\";\n  var TOK_FILTER = \"Filter\";\n  var TOK_DOT = \"Dot\";\n  var TOK_NOT = \"Not\";\n  var TOK_LBRACE = \"Lbrace\";\n  var TOK_LBRACKET = \"Lbracket\";\n  var TOK_LPAREN= \"Lparen\";\n  var TOK_LITERAL= \"Literal\";\n\n  // The \"&\", \"[\", \"<\", \">\" tokens\n  // are not in basicToken because\n  // there are two token variants\n  // (\"&&\", \"[?\", \"<=\", \">=\").  This is specially handled\n  // below.\n\n  var basicTokens = {\n    \".\": TOK_DOT,\n    \"*\": TOK_STAR,\n    \",\": TOK_COMMA,\n    \":\": TOK_COLON,\n    \"{\": TOK_LBRACE,\n    \"}\": TOK_RBRACE,\n    \"]\": TOK_RBRACKET,\n    \"(\": TOK_LPAREN,\n    \")\": TOK_RPAREN,\n    \"@\": TOK_CURRENT\n  };\n\n  var operatorStartToken = {\n      \"<\": true,\n      \">\": true,\n      \"=\": true,\n      \"!\": true\n  };\n\n  var skipChars = {\n      \" \": true,\n      \"\\t\": true,\n      \"\\n\": true\n  };\n\n\n  function isAlpha(ch) {\n      return (ch >= \"a\" && ch <= \"z\") ||\n             (ch >= \"A\" && ch <= \"Z\") ||\n             ch === \"_\";\n  }\n\n  function isNum(ch) {\n      return (ch >= \"0\" && ch <= \"9\") ||\n             ch === \"-\";\n  }\n  function isAlphaNum(ch) {\n      return (ch >= \"a\" && ch <= \"z\") ||\n             (ch >= \"A\" && ch <= \"Z\") ||\n             (ch >= \"0\" && ch <= \"9\") ||\n             ch === \"_\";\n  }\n\n  function Lexer() {\n  }\n  Lexer.prototype = {\n      tokenize: function(stream) {\n          var tokens = [];\n          this._current = 0;\n          var start;\n          var identifier;\n          var token;\n          while (this._current < stream.length) {\n              if (isAlpha(stream[this._current])) {\n                  start = this._current;\n                  identifier = this._consumeUnquotedIdentifier(stream);\n                  tokens.push({type: TOK_UNQUOTEDIDENTIFIER,\n                               value: identifier,\n                               start: start});\n              } else if (basicTokens[stream[this._current]] !== undefined) {\n                  tokens.push({type: basicTokens[stream[this._current]],\n                              value: stream[this._current],\n                              start: this._current});\n                  this._current++;\n              } else if (isNum(stream[this._current])) {\n                  token = this._consumeNumber(stream);\n                  tokens.push(token);\n              } else if (stream[this._current] === \"[\") {\n                  // No need to increment this._current.  This happens\n                  // in _consumeLBracket\n                  token = this._consumeLBracket(stream);\n                  tokens.push(token);\n              } else if (stream[this._current] === \"\\\"\") {\n                  start = this._current;\n                  identifier = this._consumeQuotedIdentifier(stream);\n                  tokens.push({type: TOK_QUOTEDIDENTIFIER,\n                               value: identifier,\n                               start: start});\n              } else if (stream[this._current] === \"'\") {\n                  start = this._current;\n                  identifier = this._consumeRawStringLiteral(stream);\n                  tokens.push({type: TOK_LITERAL,\n                               value: identifier,\n                               start: start});\n              } else if (stream[this._current] === \"`\") {\n                  start = this._current;\n                  var literal = this._consumeLiteral(stream);\n                  tokens.push({type: TOK_LITERAL,\n                               value: literal,\n                               start: start});\n              } else if (operatorStartToken[stream[this._current]] !== undefined) {\n                  tokens.push(this._consumeOperator(stream));\n              } else if (skipChars[stream[this._current]] !== undefined) {\n                  // Ignore whitespace.\n                  this._current++;\n              } else if (stream[this._current] === \"&\") {\n                  start = this._current;\n                  this._current++;\n                  if (stream[this._current] === \"&\") {\n                      this._current++;\n                      tokens.push({type: TOK_AND, value: \"&&\", start: start});\n                  } else {\n                      tokens.push({type: TOK_EXPREF, value: \"&\", start: start});\n                  }\n              } else if (stream[this._current] === \"|\") {\n                  start = this._current;\n                  this._current++;\n                  if (stream[this._current] === \"|\") {\n                      this._current++;\n                      tokens.push({type: TOK_OR, value: \"||\", start: start});\n                  } else {\n                      tokens.push({type: TOK_PIPE, value: \"|\", start: start});\n                  }\n              } else {\n                  var error = new Error(\"Unknown character:\" + stream[this._current]);\n                  error.name = \"LexerError\";\n                  throw error;\n              }\n          }\n          return tokens;\n      },\n\n      _consumeUnquotedIdentifier: function(stream) {\n          var start = this._current;\n          this._current++;\n          while (this._current < stream.length && isAlphaNum(stream[this._current])) {\n              this._current++;\n          }\n          return stream.slice(start, this._current);\n      },\n\n      _consumeQuotedIdentifier: function(stream) {\n          var start = this._current;\n          this._current++;\n          var maxLength = stream.length;\n          while (stream[this._current] !== \"\\\"\" && this._current < maxLength) {\n              // You can escape a double quote and you can escape an escape.\n              var current = this._current;\n              if (stream[current] === \"\\\\\" && (stream[current + 1] === \"\\\\\" ||\n                                               stream[current + 1] === \"\\\"\")) {\n                  current += 2;\n              } else {\n                  current++;\n              }\n              this._current = current;\n          }\n          this._current++;\n          return JSON.parse(stream.slice(start, this._current));\n      },\n\n      _consumeRawStringLiteral: function(stream) {\n          var start = this._current;\n          this._current++;\n          var maxLength = stream.length;\n          while (stream[this._current] !== \"'\" && this._current < maxLength) {\n              // You can escape a single quote and you can escape an escape.\n              var current = this._current;\n              if (stream[current] === \"\\\\\" && (stream[current + 1] === \"\\\\\" ||\n                                               stream[current + 1] === \"'\")) {\n                  current += 2;\n              } else {\n                  current++;\n              }\n              this._current = current;\n          }\n          this._current++;\n          var literal = stream.slice(start + 1, this._current - 1);\n          return literal.replace(\"\\\\'\", \"'\");\n      },\n\n      _consumeNumber: function(stream) {\n          var start = this._current;\n          this._current++;\n          var maxLength = stream.length;\n          while (isNum(stream[this._current]) && this._current < maxLength) {\n              this._current++;\n          }\n          var value = parseInt(stream.slice(start, this._current));\n          return {type: TOK_NUMBER, value: value, start: start};\n      },\n\n      _consumeLBracket: function(stream) {\n          var start = this._current;\n          this._current++;\n          if (stream[this._current] === \"?\") {\n              this._current++;\n              return {type: TOK_FILTER, value: \"[?\", start: start};\n          } else if (stream[this._current] === \"]\") {\n              this._current++;\n              return {type: TOK_FLATTEN, value: \"[]\", start: start};\n          } else {\n              return {type: TOK_LBRACKET, value: \"[\", start: start};\n          }\n      },\n\n      _consumeOperator: function(stream) {\n          var start = this._current;\n          var startingChar = stream[start];\n          this._current++;\n          if (startingChar === \"!\") {\n              if (stream[this._current] === \"=\") {\n                  this._current++;\n                  return {type: TOK_NE, value: \"!=\", start: start};\n              } else {\n                return {type: TOK_NOT, value: \"!\", start: start};\n              }\n          } else if (startingChar === \"<\") {\n              if (stream[this._current] === \"=\") {\n                  this._current++;\n                  return {type: TOK_LTE, value: \"<=\", start: start};\n              } else {\n                  return {type: TOK_LT, value: \"<\", start: start};\n              }\n          } else if (startingChar === \">\") {\n              if (stream[this._current] === \"=\") {\n                  this._current++;\n                  return {type: TOK_GTE, value: \">=\", start: start};\n              } else {\n                  return {type: TOK_GT, value: \">\", start: start};\n              }\n          } else if (startingChar === \"=\") {\n              if (stream[this._current] === \"=\") {\n                  this._current++;\n                  return {type: TOK_EQ, value: \"==\", start: start};\n              }\n          }\n      },\n\n      _consumeLiteral: function(stream) {\n          this._current++;\n          var start = this._current;\n          var maxLength = stream.length;\n          var literal;\n          while(stream[this._current] !== \"`\" && this._current < maxLength) {\n              // You can escape a literal char or you can escape the escape.\n              var current = this._current;\n              if (stream[current] === \"\\\\\" && (stream[current + 1] === \"\\\\\" ||\n                                               stream[current + 1] === \"`\")) {\n                  current += 2;\n              } else {\n                  current++;\n              }\n              this._current = current;\n          }\n          var literalString = trimLeft(stream.slice(start, this._current));\n          literalString = literalString.replace(\"\\\\`\", \"`\");\n          if (this._looksLikeJSON(literalString)) {\n              literal = JSON.parse(literalString);\n          } else {\n              // Try to JSON parse it as \"<literal>\"\n              literal = JSON.parse(\"\\\"\" + literalString + \"\\\"\");\n          }\n          // +1 gets us to the ending \"`\", +1 to move on to the next char.\n          this._current++;\n          return literal;\n      },\n\n      _looksLikeJSON: function(literalString) {\n          var startingChars = \"[{\\\"\";\n          var jsonLiterals = [\"true\", \"false\", \"null\"];\n          var numberLooking = \"-0123456789\";\n\n          if (literalString === \"\") {\n              return false;\n          } else if (startingChars.indexOf(literalString[0]) >= 0) {\n              return true;\n          } else if (jsonLiterals.indexOf(literalString) >= 0) {\n              return true;\n          } else if (numberLooking.indexOf(literalString[0]) >= 0) {\n              try {\n                  JSON.parse(literalString);\n                  return true;\n              } catch (ex) {\n                  return false;\n              }\n          } else {\n              return false;\n          }\n      }\n  };\n\n      var bindingPower = {};\n      bindingPower[TOK_EOF] = 0;\n      bindingPower[TOK_UNQUOTEDIDENTIFIER] = 0;\n      bindingPower[TOK_QUOTEDIDENTIFIER] = 0;\n      bindingPower[TOK_RBRACKET] = 0;\n      bindingPower[TOK_RPAREN] = 0;\n      bindingPower[TOK_COMMA] = 0;\n      bindingPower[TOK_RBRACE] = 0;\n      bindingPower[TOK_NUMBER] = 0;\n      bindingPower[TOK_CURRENT] = 0;\n      bindingPower[TOK_EXPREF] = 0;\n      bindingPower[TOK_PIPE] = 1;\n      bindingPower[TOK_OR] = 2;\n      bindingPower[TOK_AND] = 3;\n      bindingPower[TOK_EQ] = 5;\n      bindingPower[TOK_GT] = 5;\n      bindingPower[TOK_LT] = 5;\n      bindingPower[TOK_GTE] = 5;\n      bindingPower[TOK_LTE] = 5;\n      bindingPower[TOK_NE] = 5;\n      bindingPower[TOK_FLATTEN] = 9;\n      bindingPower[TOK_STAR] = 20;\n      bindingPower[TOK_FILTER] = 21;\n      bindingPower[TOK_DOT] = 40;\n      bindingPower[TOK_NOT] = 45;\n      bindingPower[TOK_LBRACE] = 50;\n      bindingPower[TOK_LBRACKET] = 55;\n      bindingPower[TOK_LPAREN] = 60;\n\n  function Parser() {\n  }\n\n  Parser.prototype = {\n      parse: function(expression) {\n          this._loadTokens(expression);\n          this.index = 0;\n          var ast = this.expression(0);\n          if (this._lookahead(0) !== TOK_EOF) {\n              var t = this._lookaheadToken(0);\n              var error = new Error(\n                  \"Unexpected token type: \" + t.type + \", value: \" + t.value);\n              error.name = \"ParserError\";\n              throw error;\n          }\n          return ast;\n      },\n\n      _loadTokens: function(expression) {\n          var lexer = new Lexer();\n          var tokens = lexer.tokenize(expression);\n          tokens.push({type: TOK_EOF, value: \"\", start: expression.length});\n          this.tokens = tokens;\n      },\n\n      expression: function(rbp) {\n          var leftToken = this._lookaheadToken(0);\n          this._advance();\n          var left = this.nud(leftToken);\n          var currentToken = this._lookahead(0);\n          while (rbp < bindingPower[currentToken]) {\n              this._advance();\n              left = this.led(currentToken, left);\n              currentToken = this._lookahead(0);\n          }\n          return left;\n      },\n\n      _lookahead: function(number) {\n          return this.tokens[this.index + number].type;\n      },\n\n      _lookaheadToken: function(number) {\n          return this.tokens[this.index + number];\n      },\n\n      _advance: function() {\n          this.index++;\n      },\n\n      nud: function(token) {\n        var left;\n        var right;\n        var expression;\n        switch (token.type) {\n          case TOK_LITERAL:\n            return {type: \"Literal\", value: token.value};\n          case TOK_UNQUOTEDIDENTIFIER:\n            return {type: \"Field\", name: token.value};\n          case TOK_QUOTEDIDENTIFIER:\n            var node = {type: \"Field\", name: token.value};\n            if (this._lookahead(0) === TOK_LPAREN) {\n                throw new Error(\"Quoted identifier not allowed for function names.\");\n            } else {\n                return node;\n            }\n            break;\n          case TOK_NOT:\n            right = this.expression(bindingPower.Not);\n            return {type: \"NotExpression\", children: [right]};\n          case TOK_STAR:\n            left = {type: \"Identity\"};\n            right = null;\n            if (this._lookahead(0) === TOK_RBRACKET) {\n                // This can happen in a multiselect,\n                // [a, b, *]\n                right = {type: \"Identity\"};\n            } else {\n                right = this._parseProjectionRHS(bindingPower.Star);\n            }\n            return {type: \"ValueProjection\", children: [left, right]};\n          case TOK_FILTER:\n            return this.led(token.type, {type: \"Identity\"});\n          case TOK_LBRACE:\n            return this._parseMultiselectHash();\n          case TOK_FLATTEN:\n            left = {type: TOK_FLATTEN, children: [{type: \"Identity\"}]};\n            right = this._parseProjectionRHS(bindingPower.Flatten);\n            return {type: \"Projection\", children: [left, right]};\n          case TOK_LBRACKET:\n            if (this._lookahead(0) === TOK_NUMBER || this._lookahead(0) === TOK_COLON) {\n                right = this._parseIndexExpression();\n                return this._projectIfSlice({type: \"Identity\"}, right);\n            } else if (this._lookahead(0) === TOK_STAR &&\n                       this._lookahead(1) === TOK_RBRACKET) {\n                this._advance();\n                this._advance();\n                right = this._parseProjectionRHS(bindingPower.Star);\n                return {type: \"Projection\",\n                        children: [{type: \"Identity\"}, right]};\n            } else {\n                return this._parseMultiselectList();\n            }\n            break;\n          case TOK_CURRENT:\n            return {type: TOK_CURRENT};\n          case TOK_EXPREF:\n            expression = this.expression(bindingPower.Expref);\n            return {type: \"ExpressionReference\", children: [expression]};\n          case TOK_LPAREN:\n            var args = [];\n            while (this._lookahead(0) !== TOK_RPAREN) {\n              if (this._lookahead(0) === TOK_CURRENT) {\n                expression = {type: TOK_CURRENT};\n                this._advance();\n              } else {\n                expression = this.expression(0);\n              }\n              args.push(expression);\n            }\n            this._match(TOK_RPAREN);\n            return args[0];\n          default:\n            this._errorToken(token);\n        }\n      },\n\n      led: function(tokenName, left) {\n        var right;\n        switch(tokenName) {\n          case TOK_DOT:\n            var rbp = bindingPower.Dot;\n            if (this._lookahead(0) !== TOK_STAR) {\n                right = this._parseDotRHS(rbp);\n                return {type: \"Subexpression\", children: [left, right]};\n            } else {\n                // Creating a projection.\n                this._advance();\n                right = this._parseProjectionRHS(rbp);\n                return {type: \"ValueProjection\", children: [left, right]};\n            }\n            break;\n          case TOK_PIPE:\n            right = this.expression(bindingPower.Pipe);\n            return {type: TOK_PIPE, children: [left, right]};\n          case TOK_OR:\n            right = this.expression(bindingPower.Or);\n            return {type: \"OrExpression\", children: [left, right]};\n          case TOK_AND:\n            right = this.expression(bindingPower.And);\n            return {type: \"AndExpression\", children: [left, right]};\n          case TOK_LPAREN:\n            var name = left.name;\n            var args = [];\n            var expression, node;\n            while (this._lookahead(0) !== TOK_RPAREN) {\n              if (this._lookahead(0) === TOK_CURRENT) {\n                expression = {type: TOK_CURRENT};\n                this._advance();\n              } else {\n                expression = this.expression(0);\n              }\n              if (this._lookahead(0) === TOK_COMMA) {\n                this._match(TOK_COMMA);\n              }\n              args.push(expression);\n            }\n            this._match(TOK_RPAREN);\n            node = {type: \"Function\", name: name, children: args};\n            return node;\n          case TOK_FILTER:\n            var condition = this.expression(0);\n            this._match(TOK_RBRACKET);\n            if (this._lookahead(0) === TOK_FLATTEN) {\n              right = {type: \"Identity\"};\n            } else {\n              right = this._parseProjectionRHS(bindingPower.Filter);\n            }\n            return {type: \"FilterProjection\", children: [left, right, condition]};\n          case TOK_FLATTEN:\n            var leftNode = {type: TOK_FLATTEN, children: [left]};\n            var rightNode = this._parseProjectionRHS(bindingPower.Flatten);\n            return {type: \"Projection\", children: [leftNode, rightNode]};\n          case TOK_EQ:\n          case TOK_NE:\n          case TOK_GT:\n          case TOK_GTE:\n          case TOK_LT:\n          case TOK_LTE:\n            return this._parseComparator(left, tokenName);\n          case TOK_LBRACKET:\n            var token = this._lookaheadToken(0);\n            if (token.type === TOK_NUMBER || token.type === TOK_COLON) {\n                right = this._parseIndexExpression();\n                return this._projectIfSlice(left, right);\n            } else {\n                this._match(TOK_STAR);\n                this._match(TOK_RBRACKET);\n                right = this._parseProjectionRHS(bindingPower.Star);\n                return {type: \"Projection\", children: [left, right]};\n            }\n            break;\n          default:\n            this._errorToken(this._lookaheadToken(0));\n        }\n      },\n\n      _match: function(tokenType) {\n          if (this._lookahead(0) === tokenType) {\n              this._advance();\n          } else {\n              var t = this._lookaheadToken(0);\n              var error = new Error(\"Expected \" + tokenType + \", got: \" + t.type);\n              error.name = \"ParserError\";\n              throw error;\n          }\n      },\n\n      _errorToken: function(token) {\n          var error = new Error(\"Invalid token (\" +\n                                token.type + \"): \\\"\" +\n                                token.value + \"\\\"\");\n          error.name = \"ParserError\";\n          throw error;\n      },\n\n\n      _parseIndexExpression: function() {\n          if (this._lookahead(0) === TOK_COLON || this._lookahead(1) === TOK_COLON) {\n              return this._parseSliceExpression();\n          } else {\n              var node = {\n                  type: \"Index\",\n                  value: this._lookaheadToken(0).value};\n              this._advance();\n              this._match(TOK_RBRACKET);\n              return node;\n          }\n      },\n\n      _projectIfSlice: function(left, right) {\n          var indexExpr = {type: \"IndexExpression\", children: [left, right]};\n          if (right.type === \"Slice\") {\n              return {\n                  type: \"Projection\",\n                  children: [indexExpr, this._parseProjectionRHS(bindingPower.Star)]\n              };\n          } else {\n              return indexExpr;\n          }\n      },\n\n      _parseSliceExpression: function() {\n          // [start:end:step] where each part is optional, as well as the last\n          // colon.\n          var parts = [null, null, null];\n          var index = 0;\n          var currentToken = this._lookahead(0);\n          while (currentToken !== TOK_RBRACKET && index < 3) {\n              if (currentToken === TOK_COLON) {\n                  index++;\n                  this._advance();\n              } else if (currentToken === TOK_NUMBER) {\n                  parts[index] = this._lookaheadToken(0).value;\n                  this._advance();\n              } else {\n                  var t = this._lookahead(0);\n                  var error = new Error(\"Syntax error, unexpected token: \" +\n                                        t.value + \"(\" + t.type + \")\");\n                  error.name = \"Parsererror\";\n                  throw error;\n              }\n              currentToken = this._lookahead(0);\n          }\n          this._match(TOK_RBRACKET);\n          return {\n              type: \"Slice\",\n              children: parts\n          };\n      },\n\n      _parseComparator: function(left, comparator) {\n        var right = this.expression(bindingPower[comparator]);\n        return {type: \"Comparator\", name: comparator, children: [left, right]};\n      },\n\n      _parseDotRHS: function(rbp) {\n          var lookahead = this._lookahead(0);\n          var exprTokens = [TOK_UNQUOTEDIDENTIFIER, TOK_QUOTEDIDENTIFIER, TOK_STAR];\n          if (exprTokens.indexOf(lookahead) >= 0) {\n              return this.expression(rbp);\n          } else if (lookahead === TOK_LBRACKET) {\n              this._match(TOK_LBRACKET);\n              return this._parseMultiselectList();\n          } else if (lookahead === TOK_LBRACE) {\n              this._match(TOK_LBRACE);\n              return this._parseMultiselectHash();\n          }\n      },\n\n      _parseProjectionRHS: function(rbp) {\n          var right;\n          if (bindingPower[this._lookahead(0)] < 10) {\n              right = {type: \"Identity\"};\n          } else if (this._lookahead(0) === TOK_LBRACKET) {\n              right = this.expression(rbp);\n          } else if (this._lookahead(0) === TOK_FILTER) {\n              right = this.expression(rbp);\n          } else if (this._lookahead(0) === TOK_DOT) {\n              this._match(TOK_DOT);\n              right = this._parseDotRHS(rbp);\n          } else {\n              var t = this._lookaheadToken(0);\n              var error = new Error(\"Sytanx error, unexpected token: \" +\n                                    t.value + \"(\" + t.type + \")\");\n              error.name = \"ParserError\";\n              throw error;\n          }\n          return right;\n      },\n\n      _parseMultiselectList: function() {\n          var expressions = [];\n          while (this._lookahead(0) !== TOK_RBRACKET) {\n              var expression = this.expression(0);\n              expressions.push(expression);\n              if (this._lookahead(0) === TOK_COMMA) {\n                  this._match(TOK_COMMA);\n                  if (this._lookahead(0) === TOK_RBRACKET) {\n                    throw new Error(\"Unexpected token Rbracket\");\n                  }\n              }\n          }\n          this._match(TOK_RBRACKET);\n          return {type: \"MultiSelectList\", children: expressions};\n      },\n\n      _parseMultiselectHash: function() {\n        var pairs = [];\n        var identifierTypes = [TOK_UNQUOTEDIDENTIFIER, TOK_QUOTEDIDENTIFIER];\n        var keyToken, keyName, value, node;\n        for (;;) {\n          keyToken = this._lookaheadToken(0);\n          if (identifierTypes.indexOf(keyToken.type) < 0) {\n            throw new Error(\"Expecting an identifier token, got: \" +\n                            keyToken.type);\n          }\n          keyName = keyToken.value;\n          this._advance();\n          this._match(TOK_COLON);\n          value = this.expression(0);\n          node = {type: \"KeyValuePair\", name: keyName, value: value};\n          pairs.push(node);\n          if (this._lookahead(0) === TOK_COMMA) {\n            this._match(TOK_COMMA);\n          } else if (this._lookahead(0) === TOK_RBRACE) {\n            this._match(TOK_RBRACE);\n            break;\n          }\n        }\n        return {type: \"MultiSelectHash\", children: pairs};\n      }\n  };\n\n\n  function TreeInterpreter(runtime) {\n    this.runtime = runtime;\n  }\n\n  TreeInterpreter.prototype = {\n      search: function(node, value) {\n          return this.visit(node, value);\n      },\n\n      visit: function(node, value) {\n          var matched, current, result, first, second, field, left, right, collected, i;\n          switch (node.type) {\n            case \"Field\":\n              if (value === null ) {\n                  return null;\n              } else if (isObject(value)) {\n                  field = value[node.name];\n                  if (field === undefined) {\n                      return null;\n                  } else {\n                      return field;\n                  }\n              } else {\n                return null;\n              }\n              break;\n            case \"Subexpression\":\n              result = this.visit(node.children[0], value);\n              for (i = 1; i < node.children.length; i++) {\n                  result = this.visit(node.children[1], result);\n                  if (result === null) {\n                      return null;\n                  }\n              }\n              return result;\n            case \"IndexExpression\":\n              left = this.visit(node.children[0], value);\n              right = this.visit(node.children[1], left);\n              return right;\n            case \"Index\":\n              if (!isArray(value)) {\n                return null;\n              }\n              var index = node.value;\n              if (index < 0) {\n                index = value.length + index;\n              }\n              result = value[index];\n              if (result === undefined) {\n                result = null;\n              }\n              return result;\n            case \"Slice\":\n              if (!isArray(value)) {\n                return null;\n              }\n              var sliceParams = node.children.slice(0);\n              var computed = this.computeSliceParams(value.length, sliceParams);\n              var start = computed[0];\n              var stop = computed[1];\n              var step = computed[2];\n              result = [];\n              if (step > 0) {\n                  for (i = start; i < stop; i += step) {\n                      result.push(value[i]);\n                  }\n              } else {\n                  for (i = start; i > stop; i += step) {\n                      result.push(value[i]);\n                  }\n              }\n              return result;\n            case \"Projection\":\n              // Evaluate left child.\n              var base = this.visit(node.children[0], value);\n              if (!isArray(base)) {\n                return null;\n              }\n              collected = [];\n              for (i = 0; i < base.length; i++) {\n                current = this.visit(node.children[1], base[i]);\n                if (current !== null) {\n                  collected.push(current);\n                }\n              }\n              return collected;\n            case \"ValueProjection\":\n              // Evaluate left child.\n              base = this.visit(node.children[0], value);\n              if (!isObject(base)) {\n                return null;\n              }\n              collected = [];\n              var values = objValues(base);\n              for (i = 0; i < values.length; i++) {\n                current = this.visit(node.children[1], values[i]);\n                if (current !== null) {\n                  collected.push(current);\n                }\n              }\n              return collected;\n            case \"FilterProjection\":\n              base = this.visit(node.children[0], value);\n              if (!isArray(base)) {\n                return null;\n              }\n              var filtered = [];\n              var finalResults = [];\n              for (i = 0; i < base.length; i++) {\n                matched = this.visit(node.children[2], base[i]);\n                if (!isFalse(matched)) {\n                  filtered.push(base[i]);\n                }\n              }\n              for (var j = 0; j < filtered.length; j++) {\n                current = this.visit(node.children[1], filtered[j]);\n                if (current !== null) {\n                  finalResults.push(current);\n                }\n              }\n              return finalResults;\n            case \"Comparator\":\n              first = this.visit(node.children[0], value);\n              second = this.visit(node.children[1], value);\n              switch(node.name) {\n                case TOK_EQ:\n                  result = strictDeepEqual(first, second);\n                  break;\n                case TOK_NE:\n                  result = !strictDeepEqual(first, second);\n                  break;\n                case TOK_GT:\n                  result = first > second;\n                  break;\n                case TOK_GTE:\n                  result = first >= second;\n                  break;\n                case TOK_LT:\n                  result = first < second;\n                  break;\n                case TOK_LTE:\n                  result = first <= second;\n                  break;\n                default:\n                  throw new Error(\"Unknown comparator: \" + node.name);\n              }\n              return result;\n            case TOK_FLATTEN:\n              var original = this.visit(node.children[0], value);\n              if (!isArray(original)) {\n                return null;\n              }\n              var merged = [];\n              for (i = 0; i < original.length; i++) {\n                current = original[i];\n                if (isArray(current)) {\n                  merged.push.apply(merged, current);\n                } else {\n                  merged.push(current);\n                }\n              }\n              return merged;\n            case \"Identity\":\n              return value;\n            case \"MultiSelectList\":\n              if (value === null) {\n                return null;\n              }\n              collected = [];\n              for (i = 0; i < node.children.length; i++) {\n                  collected.push(this.visit(node.children[i], value));\n              }\n              return collected;\n            case \"MultiSelectHash\":\n              if (value === null) {\n                return null;\n              }\n              collected = {};\n              var child;\n              for (i = 0; i < node.children.length; i++) {\n                child = node.children[i];\n                collected[child.name] = this.visit(child.value, value);\n              }\n              return collected;\n            case \"OrExpression\":\n              matched = this.visit(node.children[0], value);\n              if (isFalse(matched)) {\n                  matched = this.visit(node.children[1], value);\n              }\n              return matched;\n            case \"AndExpression\":\n              first = this.visit(node.children[0], value);\n\n              if (isFalse(first) === true) {\n                return first;\n              }\n              return this.visit(node.children[1], value);\n            case \"NotExpression\":\n              first = this.visit(node.children[0], value);\n              return isFalse(first);\n            case \"Literal\":\n              return node.value;\n            case TOK_PIPE:\n              left = this.visit(node.children[0], value);\n              return this.visit(node.children[1], left);\n            case TOK_CURRENT:\n              return value;\n            case \"Function\":\n              var resolvedArgs = [];\n              for (i = 0; i < node.children.length; i++) {\n                  resolvedArgs.push(this.visit(node.children[i], value));\n              }\n              return this.runtime.callFunction(node.name, resolvedArgs);\n            case \"ExpressionReference\":\n              var refNode = node.children[0];\n              // Tag the node with a specific attribute so the type\n              // checker verify the type.\n              refNode.jmespathType = TOK_EXPREF;\n              return refNode;\n            default:\n              throw new Error(\"Unknown node type: \" + node.type);\n          }\n      },\n\n      computeSliceParams: function(arrayLength, sliceParams) {\n        var start = sliceParams[0];\n        var stop = sliceParams[1];\n        var step = sliceParams[2];\n        var computed = [null, null, null];\n        if (step === null) {\n          step = 1;\n        } else if (step === 0) {\n          var error = new Error(\"Invalid slice, step cannot be 0\");\n          error.name = \"RuntimeError\";\n          throw error;\n        }\n        var stepValueNegative = step < 0 ? true : false;\n\n        if (start === null) {\n            start = stepValueNegative ? arrayLength - 1 : 0;\n        } else {\n            start = this.capSliceRange(arrayLength, start, step);\n        }\n\n        if (stop === null) {\n            stop = stepValueNegative ? -1 : arrayLength;\n        } else {\n            stop = this.capSliceRange(arrayLength, stop, step);\n        }\n        computed[0] = start;\n        computed[1] = stop;\n        computed[2] = step;\n        return computed;\n      },\n\n      capSliceRange: function(arrayLength, actualValue, step) {\n          if (actualValue < 0) {\n              actualValue += arrayLength;\n              if (actualValue < 0) {\n                  actualValue = step < 0 ? -1 : 0;\n              }\n          } else if (actualValue >= arrayLength) {\n              actualValue = step < 0 ? arrayLength - 1 : arrayLength;\n          }\n          return actualValue;\n      }\n\n  };\n\n  function Runtime(interpreter) {\n    this._interpreter = interpreter;\n    this.functionTable = {\n        // name: [function, <signature>]\n        // The <signature> can be:\n        //\n        // {\n        //   args: [[type1, type2], [type1, type2]],\n        //   variadic: true|false\n        // }\n        //\n        // Each arg in the arg list is a list of valid types\n        // (if the function is overloaded and supports multiple\n        // types.  If the type is \"any\" then no type checking\n        // occurs on the argument.  Variadic is optional\n        // and if not provided is assumed to be false.\n        abs: {_func: this._functionAbs, _signature: [{types: [TYPE_NUMBER]}]},\n        avg: {_func: this._functionAvg, _signature: [{types: [TYPE_ARRAY_NUMBER]}]},\n        ceil: {_func: this._functionCeil, _signature: [{types: [TYPE_NUMBER]}]},\n        contains: {\n            _func: this._functionContains,\n            _signature: [{types: [TYPE_STRING, TYPE_ARRAY]},\n                        {types: [TYPE_ANY]}]},\n        \"ends_with\": {\n            _func: this._functionEndsWith,\n            _signature: [{types: [TYPE_STRING]}, {types: [TYPE_STRING]}]},\n        floor: {_func: this._functionFloor, _signature: [{types: [TYPE_NUMBER]}]},\n        length: {\n            _func: this._functionLength,\n            _signature: [{types: [TYPE_STRING, TYPE_ARRAY, TYPE_OBJECT]}]},\n        map: {\n            _func: this._functionMap,\n            _signature: [{types: [TYPE_EXPREF]}, {types: [TYPE_ARRAY]}]},\n        max: {\n            _func: this._functionMax,\n            _signature: [{types: [TYPE_ARRAY_NUMBER, TYPE_ARRAY_STRING]}]},\n        \"merge\": {\n            _func: this._functionMerge,\n            _signature: [{types: [TYPE_OBJECT], variadic: true}]\n        },\n        \"max_by\": {\n          _func: this._functionMaxBy,\n          _signature: [{types: [TYPE_ARRAY]}, {types: [TYPE_EXPREF]}]\n        },\n        sum: {_func: this._functionSum, _signature: [{types: [TYPE_ARRAY_NUMBER]}]},\n        \"starts_with\": {\n            _func: this._functionStartsWith,\n            _signature: [{types: [TYPE_STRING]}, {types: [TYPE_STRING]}]},\n        min: {\n            _func: this._functionMin,\n            _signature: [{types: [TYPE_ARRAY_NUMBER, TYPE_ARRAY_STRING]}]},\n        \"min_by\": {\n          _func: this._functionMinBy,\n          _signature: [{types: [TYPE_ARRAY]}, {types: [TYPE_EXPREF]}]\n        },\n        type: {_func: this._functionType, _signature: [{types: [TYPE_ANY]}]},\n        keys: {_func: this._functionKeys, _signature: [{types: [TYPE_OBJECT]}]},\n        values: {_func: this._functionValues, _signature: [{types: [TYPE_OBJECT]}]},\n        sort: {_func: this._functionSort, _signature: [{types: [TYPE_ARRAY_STRING, TYPE_ARRAY_NUMBER]}]},\n        \"sort_by\": {\n          _func: this._functionSortBy,\n          _signature: [{types: [TYPE_ARRAY]}, {types: [TYPE_EXPREF]}]\n        },\n        join: {\n            _func: this._functionJoin,\n            _signature: [\n                {types: [TYPE_STRING]},\n                {types: [TYPE_ARRAY_STRING]}\n            ]\n        },\n        reverse: {\n            _func: this._functionReverse,\n            _signature: [{types: [TYPE_STRING, TYPE_ARRAY]}]},\n        \"to_array\": {_func: this._functionToArray, _signature: [{types: [TYPE_ANY]}]},\n        \"to_string\": {_func: this._functionToString, _signature: [{types: [TYPE_ANY]}]},\n        \"to_number\": {_func: this._functionToNumber, _signature: [{types: [TYPE_ANY]}]},\n        \"not_null\": {\n            _func: this._functionNotNull,\n            _signature: [{types: [TYPE_ANY], variadic: true}]\n        }\n    };\n  }\n\n  Runtime.prototype = {\n    callFunction: function(name, resolvedArgs) {\n      var functionEntry = this.functionTable[name];\n      if (functionEntry === undefined) {\n          throw new Error(\"Unknown function: \" + name + \"()\");\n      }\n      this._validateArgs(name, resolvedArgs, functionEntry._signature);\n      return functionEntry._func.call(this, resolvedArgs);\n    },\n\n    _validateArgs: function(name, args, signature) {\n        // Validating the args requires validating\n        // the correct arity and the correct type of each arg.\n        // If the last argument is declared as variadic, then we need\n        // a minimum number of args to be required.  Otherwise it has to\n        // be an exact amount.\n        var pluralized;\n        if (signature[signature.length - 1].variadic) {\n            if (args.length < signature.length) {\n                pluralized = signature.length === 1 ? \" argument\" : \" arguments\";\n                throw new Error(\"ArgumentError: \" + name + \"() \" +\n                                \"takes at least\" + signature.length + pluralized +\n                                \" but received \" + args.length);\n            }\n        } else if (args.length !== signature.length) {\n            pluralized = signature.length === 1 ? \" argument\" : \" arguments\";\n            throw new Error(\"ArgumentError: \" + name + \"() \" +\n                            \"takes \" + signature.length + pluralized +\n                            \" but received \" + args.length);\n        }\n        var currentSpec;\n        var actualType;\n        var typeMatched;\n        for (var i = 0; i < signature.length; i++) {\n            typeMatched = false;\n            currentSpec = signature[i].types;\n            actualType = this._getTypeName(args[i]);\n            for (var j = 0; j < currentSpec.length; j++) {\n                if (this._typeMatches(actualType, currentSpec[j], args[i])) {\n                    typeMatched = true;\n                    break;\n                }\n            }\n            if (!typeMatched) {\n                throw new Error(\"TypeError: \" + name + \"() \" +\n                                \"expected argument \" + (i + 1) +\n                                \" to be type \" + currentSpec +\n                                \" but received type \" + actualType +\n                                \" instead.\");\n            }\n        }\n    },\n\n    _typeMatches: function(actual, expected, argValue) {\n        if (expected === TYPE_ANY) {\n            return true;\n        }\n        if (expected === TYPE_ARRAY_STRING ||\n            expected === TYPE_ARRAY_NUMBER ||\n            expected === TYPE_ARRAY) {\n            // The expected type can either just be array,\n            // or it can require a specific subtype (array of numbers).\n            //\n            // The simplest case is if \"array\" with no subtype is specified.\n            if (expected === TYPE_ARRAY) {\n                return actual === TYPE_ARRAY;\n            } else if (actual === TYPE_ARRAY) {\n                // Otherwise we need to check subtypes.\n                // I think this has potential to be improved.\n                var subtype;\n                if (expected === TYPE_ARRAY_NUMBER) {\n                  subtype = TYPE_NUMBER;\n                } else if (expected === TYPE_ARRAY_STRING) {\n                  subtype = TYPE_STRING;\n                }\n                for (var i = 0; i < argValue.length; i++) {\n                    if (!this._typeMatches(\n                            this._getTypeName(argValue[i]), subtype,\n                                             argValue[i])) {\n                        return false;\n                    }\n                }\n                return true;\n            }\n        } else {\n            return actual === expected;\n        }\n    },\n    _getTypeName: function(obj) {\n        switch (Object.prototype.toString.call(obj)) {\n            case \"[object String]\":\n              return TYPE_STRING;\n            case \"[object Number]\":\n              return TYPE_NUMBER;\n            case \"[object Array]\":\n              return TYPE_ARRAY;\n            case \"[object Boolean]\":\n              return TYPE_BOOLEAN;\n            case \"[object Null]\":\n              return TYPE_NULL;\n            case \"[object Object]\":\n              // Check if it's an expref.  If it has, it's been\n              // tagged with a jmespathType attr of 'Expref';\n              if (obj.jmespathType === TOK_EXPREF) {\n                return TYPE_EXPREF;\n              } else {\n                return TYPE_OBJECT;\n              }\n        }\n    },\n\n    _functionStartsWith: function(resolvedArgs) {\n        return resolvedArgs[0].lastIndexOf(resolvedArgs[1]) === 0;\n    },\n\n    _functionEndsWith: function(resolvedArgs) {\n        var searchStr = resolvedArgs[0];\n        var suffix = resolvedArgs[1];\n        return searchStr.indexOf(suffix, searchStr.length - suffix.length) !== -1;\n    },\n\n    _functionReverse: function(resolvedArgs) {\n        var typeName = this._getTypeName(resolvedArgs[0]);\n        if (typeName === TYPE_STRING) {\n          var originalStr = resolvedArgs[0];\n          var reversedStr = \"\";\n          for (var i = originalStr.length - 1; i >= 0; i--) {\n              reversedStr += originalStr[i];\n          }\n          return reversedStr;\n        } else {\n          var reversedArray = resolvedArgs[0].slice(0);\n          reversedArray.reverse();\n          return reversedArray;\n        }\n    },\n\n    _functionAbs: function(resolvedArgs) {\n      return Math.abs(resolvedArgs[0]);\n    },\n\n    _functionCeil: function(resolvedArgs) {\n        return Math.ceil(resolvedArgs[0]);\n    },\n\n    _functionAvg: function(resolvedArgs) {\n        var sum = 0;\n        var inputArray = resolvedArgs[0];\n        for (var i = 0; i < inputArray.length; i++) {\n            sum += inputArray[i];\n        }\n        return sum / inputArray.length;\n    },\n\n    _functionContains: function(resolvedArgs) {\n        return resolvedArgs[0].indexOf(resolvedArgs[1]) >= 0;\n    },\n\n    _functionFloor: function(resolvedArgs) {\n        return Math.floor(resolvedArgs[0]);\n    },\n\n    _functionLength: function(resolvedArgs) {\n       if (!isObject(resolvedArgs[0])) {\n         return resolvedArgs[0].length;\n       } else {\n         // As far as I can tell, there's no way to get the length\n         // of an object without O(n) iteration through the object.\n         return Object.keys(resolvedArgs[0]).length;\n       }\n    },\n\n    _functionMap: function(resolvedArgs) {\n      var mapped = [];\n      var interpreter = this._interpreter;\n      var exprefNode = resolvedArgs[0];\n      var elements = resolvedArgs[1];\n      for (var i = 0; i < elements.length; i++) {\n          mapped.push(interpreter.visit(exprefNode, elements[i]));\n      }\n      return mapped;\n    },\n\n    _functionMerge: function(resolvedArgs) {\n      var merged = {};\n      for (var i = 0; i < resolvedArgs.length; i++) {\n        var current = resolvedArgs[i];\n        for (var key in current) {\n          merged[key] = current[key];\n        }\n      }\n      return merged;\n    },\n\n    _functionMax: function(resolvedArgs) {\n      if (resolvedArgs[0].length > 0) {\n        var typeName = this._getTypeName(resolvedArgs[0][0]);\n        if (typeName === TYPE_NUMBER) {\n          return Math.max.apply(Math, resolvedArgs[0]);\n        } else {\n          var elements = resolvedArgs[0];\n          var maxElement = elements[0];\n          for (var i = 1; i < elements.length; i++) {\n              if (maxElement.localeCompare(elements[i]) < 0) {\n                  maxElement = elements[i];\n              }\n          }\n          return maxElement;\n        }\n      } else {\n          return null;\n      }\n    },\n\n    _functionMin: function(resolvedArgs) {\n      if (resolvedArgs[0].length > 0) {\n        var typeName = this._getTypeName(resolvedArgs[0][0]);\n        if (typeName === TYPE_NUMBER) {\n          return Math.min.apply(Math, resolvedArgs[0]);\n        } else {\n          var elements = resolvedArgs[0];\n          var minElement = elements[0];\n          for (var i = 1; i < elements.length; i++) {\n              if (elements[i].localeCompare(minElement) < 0) {\n                  minElement = elements[i];\n              }\n          }\n          return minElement;\n        }\n      } else {\n        return null;\n      }\n    },\n\n    _functionSum: function(resolvedArgs) {\n      var sum = 0;\n      var listToSum = resolvedArgs[0];\n      for (var i = 0; i < listToSum.length; i++) {\n        sum += listToSum[i];\n      }\n      return sum;\n    },\n\n    _functionType: function(resolvedArgs) {\n        switch (this._getTypeName(resolvedArgs[0])) {\n          case TYPE_NUMBER:\n            return \"number\";\n          case TYPE_STRING:\n            return \"string\";\n          case TYPE_ARRAY:\n            return \"array\";\n          case TYPE_OBJECT:\n            return \"object\";\n          case TYPE_BOOLEAN:\n            return \"boolean\";\n          case TYPE_EXPREF:\n            return \"expref\";\n          case TYPE_NULL:\n            return \"null\";\n        }\n    },\n\n    _functionKeys: function(resolvedArgs) {\n        return Object.keys(resolvedArgs[0]);\n    },\n\n    _functionValues: function(resolvedArgs) {\n        var obj = resolvedArgs[0];\n        var keys = Object.keys(obj);\n        var values = [];\n        for (var i = 0; i < keys.length; i++) {\n            values.push(obj[keys[i]]);\n        }\n        return values;\n    },\n\n    _functionJoin: function(resolvedArgs) {\n        var joinChar = resolvedArgs[0];\n        var listJoin = resolvedArgs[1];\n        return listJoin.join(joinChar);\n    },\n\n    _functionToArray: function(resolvedArgs) {\n        if (this._getTypeName(resolvedArgs[0]) === TYPE_ARRAY) {\n            return resolvedArgs[0];\n        } else {\n            return [resolvedArgs[0]];\n        }\n    },\n\n    _functionToString: function(resolvedArgs) {\n        if (this._getTypeName(resolvedArgs[0]) === TYPE_STRING) {\n            return resolvedArgs[0];\n        } else {\n            return JSON.stringify(resolvedArgs[0]);\n        }\n    },\n\n    _functionToNumber: function(resolvedArgs) {\n        var typeName = this._getTypeName(resolvedArgs[0]);\n        var convertedValue;\n        if (typeName === TYPE_NUMBER) {\n            return resolvedArgs[0];\n        } else if (typeName === TYPE_STRING) {\n            convertedValue = +resolvedArgs[0];\n            if (!isNaN(convertedValue)) {\n                return convertedValue;\n            }\n        }\n        return null;\n    },\n\n    _functionNotNull: function(resolvedArgs) {\n        for (var i = 0; i < resolvedArgs.length; i++) {\n            if (this._getTypeName(resolvedArgs[i]) !== TYPE_NULL) {\n                return resolvedArgs[i];\n            }\n        }\n        return null;\n    },\n\n    _functionSort: function(resolvedArgs) {\n        var sortedArray = resolvedArgs[0].slice(0);\n        sortedArray.sort();\n        return sortedArray;\n    },\n\n    _functionSortBy: function(resolvedArgs) {\n        var sortedArray = resolvedArgs[0].slice(0);\n        if (sortedArray.length === 0) {\n            return sortedArray;\n        }\n        var interpreter = this._interpreter;\n        var exprefNode = resolvedArgs[1];\n        var requiredType = this._getTypeName(\n            interpreter.visit(exprefNode, sortedArray[0]));\n        if ([TYPE_NUMBER, TYPE_STRING].indexOf(requiredType) < 0) {\n            throw new Error(\"TypeError\");\n        }\n        var that = this;\n        // In order to get a stable sort out of an unstable\n        // sort algorithm, we decorate/sort/undecorate (DSU)\n        // by creating a new list of [index, element] pairs.\n        // In the cmp function, if the evaluated elements are\n        // equal, then the index will be used as the tiebreaker.\n        // After the decorated list has been sorted, it will be\n        // undecorated to extract the original elements.\n        var decorated = [];\n        for (var i = 0; i < sortedArray.length; i++) {\n          decorated.push([i, sortedArray[i]]);\n        }\n        decorated.sort(function(a, b) {\n          var exprA = interpreter.visit(exprefNode, a[1]);\n          var exprB = interpreter.visit(exprefNode, b[1]);\n          if (that._getTypeName(exprA) !== requiredType) {\n              throw new Error(\n                  \"TypeError: expected \" + requiredType + \", received \" +\n                  that._getTypeName(exprA));\n          } else if (that._getTypeName(exprB) !== requiredType) {\n              throw new Error(\n                  \"TypeError: expected \" + requiredType + \", received \" +\n                  that._getTypeName(exprB));\n          }\n          if (exprA > exprB) {\n            return 1;\n          } else if (exprA < exprB) {\n            return -1;\n          } else {\n            // If they're equal compare the items by their\n            // order to maintain relative order of equal keys\n            // (i.e. to get a stable sort).\n            return a[0] - b[0];\n          }\n        });\n        // Undecorate: extract out the original list elements.\n        for (var j = 0; j < decorated.length; j++) {\n          sortedArray[j] = decorated[j][1];\n        }\n        return sortedArray;\n    },\n\n    _functionMaxBy: function(resolvedArgs) {\n      var exprefNode = resolvedArgs[1];\n      var resolvedArray = resolvedArgs[0];\n      var keyFunction = this.createKeyFunction(exprefNode, [TYPE_NUMBER, TYPE_STRING]);\n      var maxNumber = -Infinity;\n      var maxRecord;\n      var current;\n      for (var i = 0; i < resolvedArray.length; i++) {\n        current = keyFunction(resolvedArray[i]);\n        if (current > maxNumber) {\n          maxNumber = current;\n          maxRecord = resolvedArray[i];\n        }\n      }\n      return maxRecord;\n    },\n\n    _functionMinBy: function(resolvedArgs) {\n      var exprefNode = resolvedArgs[1];\n      var resolvedArray = resolvedArgs[0];\n      var keyFunction = this.createKeyFunction(exprefNode, [TYPE_NUMBER, TYPE_STRING]);\n      var minNumber = Infinity;\n      var minRecord;\n      var current;\n      for (var i = 0; i < resolvedArray.length; i++) {\n        current = keyFunction(resolvedArray[i]);\n        if (current < minNumber) {\n          minNumber = current;\n          minRecord = resolvedArray[i];\n        }\n      }\n      return minRecord;\n    },\n\n    createKeyFunction: function(exprefNode, allowedTypes) {\n      var that = this;\n      var interpreter = this._interpreter;\n      var keyFunc = function(x) {\n        var current = interpreter.visit(exprefNode, x);\n        if (allowedTypes.indexOf(that._getTypeName(current)) < 0) {\n          var msg = \"TypeError: expected one of \" + allowedTypes +\n                    \", received \" + that._getTypeName(current);\n          throw new Error(msg);\n        }\n        return current;\n      };\n      return keyFunc;\n    }\n\n  };\n\n  function compile(stream) {\n    var parser = new Parser();\n    var ast = parser.parse(stream);\n    return ast;\n  }\n\n  function tokenize(stream) {\n      var lexer = new Lexer();\n      return lexer.tokenize(stream);\n  }\n\n  function search(data, expression) {\n      var parser = new Parser();\n      // This needs to be improved.  Both the interpreter and runtime depend on\n      // each other.  The runtime needs the interpreter to support exprefs.\n      // There's likely a clean way to avoid the cyclic dependency.\n      var runtime = new Runtime();\n      var interpreter = new TreeInterpreter(runtime);\n      runtime._interpreter = interpreter;\n      var node = parser.parse(expression);\n      return interpreter.search(node, data);\n  }\n\n  exports.tokenize = tokenize;\n  exports.compile = compile;\n  exports.search = search;\n  exports.strictDeepEqual = strictDeepEqual;\n})(typeof exports === \"undefined\" ? this.jmespath = {} : exports);\n","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar dataMemory = {};\n/** @class */\nvar MemoryStorage = /** @class */ (function () {\n    function MemoryStorage() {\n    }\n    /**\n     * This is used to set a specific item in storage\n     * @param {string} key - the key for the item\n     * @param {object} value - the value\n     * @returns {string} value that was set\n     */\n    MemoryStorage.setItem = function (key, value) {\n        dataMemory[key] = value;\n        return dataMemory[key];\n    };\n    /**\n     * This is used to get a specific key from storage\n     * @param {string} key - the key for the item\n     * This is used to clear the storage\n     * @returns {string} the data item\n     */\n    MemoryStorage.getItem = function (key) {\n        return Object.prototype.hasOwnProperty.call(dataMemory, key) ? dataMemory[key] : undefined;\n    };\n    /**\n     * This is used to remove an item from storage\n     * @param {string} key - the key being set\n     * @returns {string} value - value that was deleted\n     */\n    MemoryStorage.removeItem = function (key) {\n        return delete dataMemory[key];\n    };\n    /**\n     * This is used to clear the storage\n     * @returns {string} nothing\n     */\n    MemoryStorage.clear = function () {\n        dataMemory = {};\n        return dataMemory;\n    };\n    return MemoryStorage;\n}());\nexports.MemoryStorage = MemoryStorage;\nvar StorageHelper = /** @class */ (function () {\n    /**\n     * This is used to get a storage object\n     * @returns {object} the storage\n     */\n    function StorageHelper() {\n        try {\n            this.storageWindow = window.localStorage;\n            this.storageWindow.setItem('aws.amplify.test-ls', 1);\n            this.storageWindow.removeItem('aws.amplify.test-ls');\n        }\n        catch (exception) {\n            this.storageWindow = MemoryStorage;\n        }\n    }\n    /**\n     * This is used to return the storage\n     * @returns {object} the storage\n     */\n    StorageHelper.prototype.getStorage = function () {\n        return this.storageWindow;\n    };\n    return StorageHelper;\n}());\nexports.default = StorageHelper;\n//# sourceMappingURL=index.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./CacheUtils\"));\nvar CacheList_1 = require(\"./CacheList\");\nexports.CacheList = CacheList_1.default;\n//# sourceMappingURL=index.js.map","\"use strict\";\n/**\n * Copyright (c) 2017, Philip Walton <philip@philipwalton.com>\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@aws-amplify/core\");\nvar proto = core_1.JS.browserOrNode().isBrowser && window['Element'] ? window['Element'].prototype : null;\nvar nativeMatches = proto ? proto.matches ||\n    proto.matchesSelector ||\n    proto.webkitMatchesSelector ||\n    proto.mozMatchesSelector ||\n    proto.msMatchesSelector ||\n    proto.oMatchesSelector : null;\n/**\n * Tests if a DOM elements matches any of the test DOM elements or selectors.\n * @param {Element} element The DOM element to test.\n * @param {Element|string|Array<Element|string>} test A DOM element, a CSS\n *     selector, or an array of DOM elements or CSS selectors to match against.\n * @return {boolean} True of any part of the test matches.\n */\nfunction matches(element, test) {\n    // Validate input.\n    if (element && element.nodeType === 1 && test) {\n        // if test is a string or DOM element test it.\n        if (typeof test === 'string' || test.nodeType === 1) {\n            return element === test ||\n                matchesSelector(element, /** @type {string} */ (test));\n        }\n        else if ('length' in test) {\n            // if it has a length property iterate over the items\n            // and return true if any match.\n            for (var i = 0, item = void 0; item = test[i]; i++) {\n                if (element === item || matchesSelector(element, item))\n                    return true;\n            }\n        }\n    }\n    // Still here? Return false\n    return false;\n}\nexports.default = matches;\n/**\n * Tests whether a DOM element matches a selector. This polyfills the native\n * Element.prototype.matches method across browsers.\n * @param {!Element} element The DOM element to test.\n * @param {string} selector The CSS selector to test element against.\n * @return {boolean} True if the selector matches.\n */\nfunction matchesSelector(element, selector) {\n    if (typeof selector !== 'string')\n        return false;\n    if (nativeMatches)\n        return nativeMatches.call(element, selector);\n    var nodes = element.parentNode.querySelectorAll(selector);\n    for (var i = 0, node = void 0; node = nodes[i]; i++) {\n        if (node === element)\n            return true;\n    }\n    return false;\n}\n//# sourceMappingURL=matches.js.map","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { validateSchema } from './type/validate';\nimport { parse } from './language/parser';\nimport { validate } from './validation/validate';\nimport { execute } from './execution/execute';\n\n/**\n * This is the primary entry point function for fulfilling GraphQL operations\n * by parsing, validating, and executing a GraphQL document along side a\n * GraphQL schema.\n *\n * More sophisticated GraphQL servers, such as those which persist queries,\n * may wish to separate the validation and execution phases to a static time\n * tooling step, and a server runtime step.\n *\n * Accepts either an object with named arguments, or individual arguments:\n *\n * schema:\n *    The GraphQL type system to use when validating and executing a query.\n * source:\n *    A GraphQL language formatted string representing the requested operation.\n * rootValue:\n *    The value provided as the first argument to resolver functions on the top\n *    level type (e.g. the query object type).\n * variableValues:\n *    A mapping of variable name to runtime value to use for all variables\n *    defined in the requestString.\n * operationName:\n *    The name of the operation to use if requestString contains multiple\n *    possible operations. Can be omitted if requestString contains only\n *    one operation.\n * fieldResolver:\n *    A resolver function to use when one is not provided by the schema.\n *    If not provided, the default field resolver is used (which looks for a\n *    value or method on the source value with the field's name).\n */\n\n/* eslint-disable no-redeclare */\n\nexport function graphql(argsOrSchema, source, rootValue, contextValue, variableValues, operationName, fieldResolver) {\n  var _arguments = arguments;\n\n  /* eslint-enable no-redeclare */\n  // Always return a Promise for a consistent API.\n  return new Promise(function (resolve) {\n    return resolve(\n    // Extract arguments from object args if provided.\n    _arguments.length === 1 ? graphqlImpl(argsOrSchema.schema, argsOrSchema.source, argsOrSchema.rootValue, argsOrSchema.contextValue, argsOrSchema.variableValues, argsOrSchema.operationName, argsOrSchema.fieldResolver) : graphqlImpl(argsOrSchema, source, rootValue, contextValue, variableValues, operationName, fieldResolver));\n  });\n}\n\n/**\n * The graphqlSync function also fulfills GraphQL operations by parsing,\n * validating, and executing a GraphQL document along side a GraphQL schema.\n * However, it guarantees to complete synchronously (or throw an error) assuming\n * that all field resolvers are also synchronous.\n */\n\n/* eslint-disable no-redeclare */\n\nexport function graphqlSync(argsOrSchema, source, rootValue, contextValue, variableValues, operationName, fieldResolver) {\n  // Extract arguments from object args if provided.\n  var result = arguments.length === 1 ? graphqlImpl(argsOrSchema.schema, argsOrSchema.source, argsOrSchema.rootValue, argsOrSchema.contextValue, argsOrSchema.variableValues, argsOrSchema.operationName, argsOrSchema.fieldResolver) : graphqlImpl(argsOrSchema, source, rootValue, contextValue, variableValues, operationName, fieldResolver);\n\n  // Assert that the execution was synchronous.\n  if (result.then) {\n    throw new Error('GraphQL execution failed to complete synchronously.');\n  }\n\n  return result;\n}\n\nfunction graphqlImpl(schema, source, rootValue, contextValue, variableValues, operationName, fieldResolver) {\n  // Validate Schema\n  var schemaValidationErrors = validateSchema(schema);\n  if (schemaValidationErrors.length > 0) {\n    return { errors: schemaValidationErrors };\n  }\n\n  // Parse\n  var document = void 0;\n  try {\n    document = parse(source);\n  } catch (syntaxError) {\n    return { errors: [syntaxError] };\n  }\n\n  // Validate\n  var validationErrors = validate(schema, document);\n  if (validationErrors.length > 0) {\n    return { errors: validationErrors };\n  }\n\n  // Execute\n  return execute(schema, document, rootValue, contextValue, variableValues, operationName, fieldResolver);\n}","/**\n * Copyright (c) 2017-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { isAsyncIterable } from 'iterall';\nimport { GraphQLError } from '../error/GraphQLError';\nimport { locatedError } from '../error/locatedError';\nimport { addPath, assertValidExecutionArguments, buildExecutionContext, buildResolveInfo, collectFields, execute, getFieldDef, getOperationRootType, resolveFieldValueOrError, responsePathAsArray } from '../execution/execute';\nimport { GraphQLSchema } from '../type/schema';\nimport mapAsyncIterator from './mapAsyncIterator';\n\n/**\n * Implements the \"Subscribe\" algorithm described in the GraphQL specification.\n *\n * Returns a Promise which resolves to either an AsyncIterator (if successful)\n * or an ExecutionResult (client error). The promise will be rejected if a\n * server error occurs.\n *\n * If the client-provided arguments to this function do not result in a\n * compliant subscription, a GraphQL Response (ExecutionResult) with\n * descriptive errors and no data will be returned.\n *\n * If the the source stream could not be created due to faulty subscription\n * resolver logic or underlying systems, the promise will resolve to a single\n * ExecutionResult containing `errors` and no `data`.\n *\n * If the operation succeeded, the promise resolves to an AsyncIterator, which\n * yields a stream of ExecutionResults representing the response stream.\n *\n * Accepts either an object with named arguments, or individual arguments.\n */\n\n/* eslint-disable no-redeclare */\n\nexport function subscribe(argsOrSchema, document, rootValue, contextValue, variableValues, operationName, fieldResolver, subscribeFieldResolver) {\n  /* eslint-enable no-redeclare */\n  // Extract arguments from object args if provided.\n  return arguments.length === 1 ? subscribeImpl(argsOrSchema.schema, argsOrSchema.document, argsOrSchema.rootValue, argsOrSchema.contextValue, argsOrSchema.variableValues, argsOrSchema.operationName, argsOrSchema.fieldResolver, argsOrSchema.subscribeFieldResolver) : subscribeImpl(argsOrSchema, document, rootValue, contextValue, variableValues, operationName, fieldResolver, subscribeFieldResolver);\n}\n\n/**\n * This function checks if the error is a GraphQLError. If it is, report it as\n * an ExecutionResult, containing only errors and no data. Otherwise treat the\n * error as a system-class error and re-throw it.\n */\nfunction reportGraphQLError(error) {\n  if (error instanceof GraphQLError) {\n    return { errors: [error] };\n  }\n  throw error;\n}\n\nfunction subscribeImpl(schema, document, rootValue, contextValue, variableValues, operationName, fieldResolver, subscribeFieldResolver) {\n  var sourcePromise = createSourceEventStream(schema, document, rootValue, contextValue, variableValues, operationName, subscribeFieldResolver);\n\n  // For each payload yielded from a subscription, map it over the normal\n  // GraphQL `execute` function, with `payload` as the rootValue.\n  // This implements the \"MapSourceToResponseEvent\" algorithm described in\n  // the GraphQL specification. The `execute` function provides the\n  // \"ExecuteSubscriptionEvent\" algorithm, as it is nearly identical to the\n  // \"ExecuteQuery\" algorithm, for which `execute` is also used.\n  var mapSourceToResponse = function mapSourceToResponse(payload) {\n    return execute(schema, document, payload, contextValue, variableValues, operationName, fieldResolver);\n  };\n\n  // Resolve the Source Stream, then map every source value to a\n  // ExecutionResult value as described above.\n  return sourcePromise.then(function (resultOrStream) {\n    return (\n      // Note: Flow can't refine isAsyncIterable, so explicit casts are used.\n      isAsyncIterable(resultOrStream) ? mapAsyncIterator(resultOrStream, mapSourceToResponse, reportGraphQLError) : resultOrStream\n    );\n  }, reportGraphQLError);\n}\n\n/**\n * Implements the \"CreateSourceEventStream\" algorithm described in the\n * GraphQL specification, resolving the subscription source event stream.\n *\n * Returns a Promise<AsyncIterable>.\n *\n * If the client-provided invalid arguments, the source stream could not be\n * created, or the resolver did not return an AsyncIterable, this function will\n * will throw an error, which should be caught and handled by the caller.\n *\n * A Source Event Stream represents a sequence of events, each of which triggers\n * a GraphQL execution for that event.\n *\n * This may be useful when hosting the stateful subscription service in a\n * different process or machine than the stateless GraphQL execution engine,\n * or otherwise separating these two steps. For more on this, see the\n * \"Supporting Subscriptions at Scale\" information in the GraphQL specification.\n */\nexport function createSourceEventStream(schema, document, rootValue, contextValue, variableValues, operationName, fieldResolver) {\n  // If arguments are missing or incorrectly typed, this is an internal\n  // developer mistake which should throw an early error.\n  assertValidExecutionArguments(schema, document, variableValues);\n\n  try {\n    // If a valid context cannot be created due to incorrect arguments,\n    // this will throw an error.\n    var exeContext = buildExecutionContext(schema, document, rootValue, contextValue, variableValues, operationName, fieldResolver);\n\n    // Return early errors if execution context failed.\n    if (Array.isArray(exeContext)) {\n      return Promise.resolve({ errors: exeContext });\n    }\n\n    var type = getOperationRootType(schema, exeContext.operation);\n    var fields = collectFields(exeContext, type, exeContext.operation.selectionSet, Object.create(null), Object.create(null));\n    var responseNames = Object.keys(fields);\n    var responseName = responseNames[0];\n    var fieldNodes = fields[responseName];\n    var fieldNode = fieldNodes[0];\n    var fieldName = fieldNode.name.value;\n    var fieldDef = getFieldDef(schema, type, fieldName);\n\n    if (!fieldDef) {\n      throw new GraphQLError('The subscription field \"' + fieldName + '\" is not defined.', fieldNodes);\n    }\n\n    // Call the `subscribe()` resolver or the default resolver to produce an\n    // AsyncIterable yielding raw payloads.\n    var resolveFn = fieldDef.subscribe || exeContext.fieldResolver;\n\n    var path = addPath(undefined, responseName);\n\n    var info = buildResolveInfo(exeContext, fieldDef, fieldNodes, type, path);\n\n    // resolveFieldValueOrError implements the \"ResolveFieldEventStream\"\n    // algorithm from GraphQL specification. It differs from\n    // \"ResolveFieldValue\" due to providing a different `resolveFn`.\n    var result = resolveFieldValueOrError(exeContext, fieldDef, fieldNodes, resolveFn, rootValue, info);\n\n    // Coerce to Promise for easier error handling and consistent return type.\n    return Promise.resolve(result).then(function (eventStream) {\n      // If eventStream is an Error, rethrow a located error.\n      if (eventStream instanceof Error) {\n        throw locatedError(eventStream, fieldNodes, responsePathAsArray(path));\n      }\n\n      // Assert field returned an event stream, otherwise yield an error.\n      if (isAsyncIterable(eventStream)) {\n        // Note: isAsyncIterable above ensures this will be correct.\n        return eventStream;\n      }\n      throw new Error('Subscription field must return Async Iterable. Received: ' + String(eventStream));\n    });\n  } catch (error) {\n    return Promise.reject(error);\n  }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.GraphQLError = GraphQLError;\n\nvar _printError = require('./printError');\n\nvar _location = require('../language/location');\n\n/**\n * A GraphQLError describes an Error found during the parse, validate, or\n * execute phases of performing a GraphQL operation. In addition to a message\n * and stack trace, it also includes information about the locations in a\n * GraphQL document and/or execution result that correspond to the Error.\n */\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction GraphQLError( // eslint-disable-line no-redeclare\nmessage, nodes, source, positions, path, originalError, extensions) {\n  // Compute list of blame nodes.\n  var _nodes = Array.isArray(nodes) ? nodes.length !== 0 ? nodes : undefined : nodes ? [nodes] : undefined;\n\n  // Compute locations in the source for the given nodes/positions.\n  var _source = source;\n  if (!_source && _nodes) {\n    var node = _nodes[0];\n    _source = node && node.loc && node.loc.source;\n  }\n\n  var _positions = positions;\n  if (!_positions && _nodes) {\n    _positions = _nodes.reduce(function (list, node) {\n      if (node.loc) {\n        list.push(node.loc.start);\n      }\n      return list;\n    }, []);\n  }\n  if (_positions && _positions.length === 0) {\n    _positions = undefined;\n  }\n\n  var _locations = void 0;\n  if (positions && source) {\n    var providedSource = source;\n    _locations = positions.map(function (pos) {\n      return (0, _location.getLocation)(providedSource, pos);\n    });\n  } else if (_nodes) {\n    _locations = _nodes.reduce(function (list, node) {\n      if (node.loc) {\n        list.push((0, _location.getLocation)(node.loc.source, node.loc.start));\n      }\n      return list;\n    }, []);\n  }\n\n  Object.defineProperties(this, {\n    message: {\n      value: message,\n      // By being enumerable, JSON.stringify will include `message` in the\n      // resulting output. This ensures that the simplest possible GraphQL\n      // service adheres to the spec.\n      enumerable: true,\n      writable: true\n    },\n    locations: {\n      // Coercing falsey values to undefined ensures they will not be included\n      // in JSON.stringify() when not provided.\n      value: _locations || undefined,\n      // By being enumerable, JSON.stringify will include `locations` in the\n      // resulting output. This ensures that the simplest possible GraphQL\n      // service adheres to the spec.\n      enumerable: true\n    },\n    path: {\n      // Coercing falsey values to undefined ensures they will not be included\n      // in JSON.stringify() when not provided.\n      value: path || undefined,\n      // By being enumerable, JSON.stringify will include `path` in the\n      // resulting output. This ensures that the simplest possible GraphQL\n      // service adheres to the spec.\n      enumerable: true\n    },\n    nodes: {\n      value: _nodes || undefined\n    },\n    source: {\n      value: _source || undefined\n    },\n    positions: {\n      value: _positions || undefined\n    },\n    originalError: {\n      value: originalError\n    },\n    extensions: {\n      value: extensions || originalError && originalError.extensions\n    }\n  });\n\n  // Include (non-enumerable) stack trace.\n  if (originalError && originalError.stack) {\n    Object.defineProperty(this, 'stack', {\n      value: originalError.stack,\n      writable: true,\n      configurable: true\n    });\n  } else if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, GraphQLError);\n  } else {\n    Object.defineProperty(this, 'stack', {\n      value: Error().stack,\n      writable: true,\n      configurable: true\n    });\n  }\n}\n\nGraphQLError.prototype = Object.create(Error.prototype, {\n  constructor: { value: GraphQLError },\n  name: { value: 'GraphQLError' },\n  toString: {\n    value: function toString() {\n      return (0, _printError.printError)(this);\n    }\n  }\n});","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\n            t[p[i]] = s[p[i]];\n    return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar Paho = require(\"../vendor/paho-mqtt\");\nvar uuid_1 = require(\"uuid\");\nvar Observable = require(\"zen-observable\");\nvar PubSubProvider_1 = require(\"./PubSubProvider\");\nvar core_1 = require(\"@aws-amplify/core\");\nvar logger = new core_1.ConsoleLogger('MqttOverWSProvider');\nfunction mqttTopicMatch(filter, topic) {\n    var filterArray = filter.split('/');\n    var length = filterArray.length;\n    var topicArray = topic.split('/');\n    for (var i = 0; i < length; ++i) {\n        var left = filterArray[i];\n        var right = topicArray[i];\n        if (left === '#')\n            return topicArray.length >= length;\n        if (left !== '+' && left !== right)\n            return false;\n    }\n    return length === topicArray.length;\n}\nexports.mqttTopicMatch = mqttTopicMatch;\nvar ClientsQueue = /** @class */ (function () {\n    function ClientsQueue() {\n        this.promises = new Map();\n    }\n    ClientsQueue.prototype.get = function (clientId, clientFactory) {\n        return __awaiter(this, void 0, void 0, function () {\n            var promise;\n            return __generator(this, function (_a) {\n                promise = this.promises.get(clientId);\n                if (promise) {\n                    return [2 /*return*/, promise];\n                }\n                promise = clientFactory(clientId);\n                this.promises.set(clientId, promise);\n                return [2 /*return*/, promise];\n            });\n        });\n    };\n    Object.defineProperty(ClientsQueue.prototype, \"allClients\", {\n        get: function () { return Array.from(this.promises.keys()); },\n        enumerable: true,\n        configurable: true\n    });\n    ClientsQueue.prototype.remove = function (clientId) {\n        this.promises.delete(clientId);\n    };\n    return ClientsQueue;\n}());\nvar topicSymbol = typeof Symbol !== 'undefined' ? Symbol('topic') : '@@topic';\nvar MqttOverWSProvider = /** @class */ (function (_super) {\n    __extends(MqttOverWSProvider, _super);\n    function MqttOverWSProvider(options) {\n        if (options === void 0) { options = {}; }\n        var _this = _super.call(this, __assign({}, options, { clientId: options.clientId || uuid_1.v4() })) || this;\n        _this._clientsQueue = new ClientsQueue();\n        _this._topicObservers = new Map();\n        return _this;\n    }\n    Object.defineProperty(MqttOverWSProvider.prototype, \"clientId\", {\n        get: function () { return this.options.clientId; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MqttOverWSProvider.prototype, \"endpoint\", {\n        get: function () { return this.options.aws_pubsub_endpoint; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(MqttOverWSProvider.prototype, \"clientsQueue\", {\n        get: function () { return this._clientsQueue; },\n        enumerable: true,\n        configurable: true\n    });\n    MqttOverWSProvider.prototype.getTopicForValue = function (value) { return typeof value === 'object' && value[topicSymbol]; };\n    MqttOverWSProvider.prototype.getProviderName = function () { return 'MqttOverWSProvider'; };\n    MqttOverWSProvider.prototype.onDisconnect = function (_a) {\n        var clientId = _a.clientId, errorCode = _a.errorCode, args = __rest(_a, [\"clientId\", \"errorCode\"]);\n        if (errorCode !== 0) {\n            logger.warn(clientId, JSON.stringify(__assign({ errorCode: errorCode }, args), null, 2));\n        }\n    };\n    MqttOverWSProvider.prototype.newClient = function (_a) {\n        var url = _a.url, clientId = _a.clientId;\n        return __awaiter(this, void 0, void 0, function () {\n            var client;\n            var _this = this;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        logger.debug('Creating new MQTT client', clientId);\n                        client = new Paho.Client(url, clientId);\n                        // client.trace = (args) => logger.debug(clientId, JSON.stringify(args, null, 2));\n                        client.onMessageArrived = function (_a) {\n                            var topic = _a.destinationName, msg = _a.payloadString;\n                            _this._onMessage(topic, msg);\n                        };\n                        client.onConnectionLost = function (_a) {\n                            var errorCode = _a.errorCode, args = __rest(_a, [\"errorCode\"]);\n                            _this.onDisconnect(__assign({ clientId: clientId, errorCode: errorCode }, args));\n                        };\n                        return [4 /*yield*/, new Promise(function (resolve, reject) {\n                                client.connect({\n                                    useSSL: true,\n                                    mqttVersion: 3,\n                                    onSuccess: function () { return resolve(client); },\n                                    onFailure: reject,\n                                });\n                            })];\n                    case 1:\n                        _b.sent();\n                        return [2 /*return*/, client];\n                }\n            });\n        });\n    };\n    MqttOverWSProvider.prototype.connect = function (clientId, options) {\n        if (options === void 0) { options = {}; }\n        return __awaiter(this, void 0, void 0, function () {\n            var _this = this;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.clientsQueue.get(clientId, function (clientId) { return _this.newClient(__assign({}, options, { clientId: clientId })); })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    MqttOverWSProvider.prototype.disconnect = function (clientId) {\n        return __awaiter(this, void 0, void 0, function () {\n            var client;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.clientsQueue.get(clientId, function () { return null; })];\n                    case 1:\n                        client = _a.sent();\n                        if (client && client.isConnected()) {\n                            client.disconnect();\n                        }\n                        this.clientsQueue.remove(clientId);\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    MqttOverWSProvider.prototype.publish = function (topics, msg) {\n        return __awaiter(this, void 0, void 0, function () {\n            var targetTopics, message, url, client;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        targetTopics = [].concat(topics);\n                        message = JSON.stringify(msg);\n                        return [4 /*yield*/, this.endpoint];\n                    case 1:\n                        url = _a.sent();\n                        return [4 /*yield*/, this.connect(this.clientId, { url: url })];\n                    case 2:\n                        client = _a.sent();\n                        logger.debug('Publishing to topic(s)', targetTopics.join(','), message);\n                        targetTopics.forEach(function (topic) { return client.send(topic, message); });\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    MqttOverWSProvider.prototype._onMessage = function (topic, msg) {\n        try {\n            var matchedTopicObservers_1 = [];\n            this._topicObservers.forEach(function (observerForTopic, observerTopic) {\n                if (mqttTopicMatch(observerTopic, topic)) {\n                    matchedTopicObservers_1.push(observerForTopic);\n                }\n            });\n            var parsedMessage_1 = JSON.parse(msg);\n            if (typeof parsedMessage_1 === 'object') {\n                parsedMessage_1[topicSymbol] = topic;\n            }\n            matchedTopicObservers_1.forEach(function (observersForTopic) {\n                observersForTopic.forEach(function (observer) { return observer.next(parsedMessage_1); });\n            });\n        }\n        catch (error) {\n            logger.warn('Error handling message', error, msg);\n        }\n    };\n    MqttOverWSProvider.prototype.subscribe = function (topics, options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        var targetTopics = [].concat(topics);\n        logger.debug('Subscribing to topic(s)', targetTopics.join(','));\n        return new Observable(function (observer) {\n            targetTopics.forEach(function (topic) {\n                var observersForTopic = _this._topicObservers.get(topic);\n                if (!observersForTopic) {\n                    observersForTopic = new Set();\n                    _this._topicObservers.set(topic, observersForTopic);\n                }\n                observersForTopic.add(observer);\n            });\n            var client;\n            var _a = options.clientId, clientId = _a === void 0 ? _this.clientId : _a;\n            (function () { return __awaiter(_this, void 0, void 0, function () {\n                var _a, url, _b, e_1;\n                return __generator(this, function (_c) {\n                    switch (_c.label) {\n                        case 0:\n                            _a = options.url;\n                            if (!(_a === void 0)) return [3 /*break*/, 2];\n                            return [4 /*yield*/, this.endpoint];\n                        case 1:\n                            _b = _c.sent();\n                            return [3 /*break*/, 3];\n                        case 2:\n                            _b = _a;\n                            _c.label = 3;\n                        case 3:\n                            url = _b;\n                            _c.label = 4;\n                        case 4:\n                            _c.trys.push([4, 6, , 7]);\n                            return [4 /*yield*/, this.connect(clientId, { url: url })];\n                        case 5:\n                            client = _c.sent();\n                            targetTopics.forEach(function (topic) { client.subscribe(topic); });\n                            return [3 /*break*/, 7];\n                        case 6:\n                            e_1 = _c.sent();\n                            observer.error(e_1);\n                            return [3 /*break*/, 7];\n                        case 7: return [2 /*return*/];\n                    }\n                });\n            }); })();\n            return function () {\n                logger.debug('Unsubscribing from topic(s)', targetTopics.join(','));\n                if (client) {\n                    targetTopics.forEach(function (topic) {\n                        if (client.isConnected()) {\n                            client.unsubscribe(topic);\n                        }\n                        var observersForTopic = _this._topicObservers.get(topic) ||\n                            new Set();\n                        observersForTopic.forEach(function (observer) { return observer.complete(); });\n                        observersForTopic.clear();\n                    });\n                    _this.disconnect(clientId);\n                }\n                return null;\n            };\n        });\n    };\n    return MqttOverWSProvider;\n}(PubSubProvider_1.AbstractPubSubProvider));\nexports.MqttOverWSProvider = MqttOverWSProvider;\n//# sourceMappingURL=MqttOverWSProvider.js.map","\"use strict\";\n/*\n * Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar XRError = /** @class */ (function (_super) {\n    __extends(XRError, _super);\n    function XRError() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return XRError;\n}(Error));\nexports.XRError = XRError;\nvar XRNoSceneConfiguredError = /** @class */ (function (_super) {\n    __extends(XRNoSceneConfiguredError, _super);\n    function XRNoSceneConfiguredError() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return XRNoSceneConfiguredError;\n}(XRError));\nexports.XRNoSceneConfiguredError = XRNoSceneConfiguredError;\nvar XRSceneNotFoundError = /** @class */ (function (_super) {\n    __extends(XRSceneNotFoundError, _super);\n    function XRSceneNotFoundError() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return XRSceneNotFoundError;\n}(XRError));\nexports.XRSceneNotFoundError = XRSceneNotFoundError;\nvar XRSceneNotLoadedError = /** @class */ (function (_super) {\n    __extends(XRSceneNotLoadedError, _super);\n    function XRSceneNotLoadedError() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return XRSceneNotLoadedError;\n}(XRError));\nexports.XRSceneNotLoadedError = XRSceneNotLoadedError;\nvar XRNoDomElement = /** @class */ (function (_super) {\n    __extends(XRNoDomElement, _super);\n    function XRNoDomElement() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return XRNoDomElement;\n}(XRError));\nexports.XRNoDomElement = XRNoDomElement;\nvar XRSceneLoadFailure = /** @class */ (function (_super) {\n    __extends(XRSceneLoadFailure, _super);\n    function XRSceneLoadFailure() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return XRSceneLoadFailure;\n}(XRError));\nexports.XRSceneLoadFailure = XRSceneLoadFailure;\nvar XRProviderNotConfigured = /** @class */ (function (_super) {\n    __extends(XRProviderNotConfigured, _super);\n    function XRProviderNotConfigured() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return XRProviderNotConfigured;\n}(XRError));\nexports.XRProviderNotConfigured = XRProviderNotConfigured;\n//# sourceMappingURL=Errors.js.map","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { GraphQLScalarType, isNamedType } from './definition';\nimport { Kind } from '../language/kinds';\n\n// As per the GraphQL Spec, Integers are only treated as valid when a valid\n// 32-bit signed integer, providing the broadest support across platforms.\n//\n// n.b. JavaScript's integers are safe between -(2^53 - 1) and 2^53 - 1 because\n// they are internally represented as IEEE 754 doubles.\nvar MAX_INT = 2147483647;\nvar MIN_INT = -2147483648;\n\nfunction coerceInt(value) {\n  if (value === '') {\n    throw new TypeError('Int cannot represent non 32-bit signed integer value: (empty string)');\n  }\n  var num = Number(value);\n  if (num !== num || num > MAX_INT || num < MIN_INT) {\n    throw new TypeError('Int cannot represent non 32-bit signed integer value: ' + String(value));\n  }\n  var int = Math.floor(num);\n  if (int !== num) {\n    throw new TypeError('Int cannot represent non-integer value: ' + String(value));\n  }\n  return int;\n}\n\nexport var GraphQLInt = new GraphQLScalarType({\n  name: 'Int',\n  description: 'The `Int` scalar type represents non-fractional signed whole numeric ' + 'values. Int can represent values between -(2^31) and 2^31 - 1. ',\n  serialize: coerceInt,\n  parseValue: coerceInt,\n  parseLiteral: function parseLiteral(ast) {\n    if (ast.kind === Kind.INT) {\n      var num = parseInt(ast.value, 10);\n      if (num <= MAX_INT && num >= MIN_INT) {\n        return num;\n      }\n    }\n    return undefined;\n  }\n});\n\nfunction coerceFloat(value) {\n  if (value === '') {\n    throw new TypeError('Float cannot represent non numeric value: (empty string)');\n  }\n  var num = Number(value);\n  if (num === num) {\n    return num;\n  }\n  throw new TypeError('Float cannot represent non numeric value: ' + String(value));\n}\n\nexport var GraphQLFloat = new GraphQLScalarType({\n  name: 'Float',\n  description: 'The `Float` scalar type represents signed double-precision fractional ' + 'values as specified by ' + '[IEEE 754](http://en.wikipedia.org/wiki/IEEE_floating_point). ',\n  serialize: coerceFloat,\n  parseValue: coerceFloat,\n  parseLiteral: function parseLiteral(ast) {\n    return ast.kind === Kind.FLOAT || ast.kind === Kind.INT ? parseFloat(ast.value) : undefined;\n  }\n});\n\nfunction coerceString(value) {\n  if (Array.isArray(value)) {\n    throw new TypeError('String cannot represent an array value: [' + String(value) + ']');\n  }\n  return String(value);\n}\n\nexport var GraphQLString = new GraphQLScalarType({\n  name: 'String',\n  description: 'The `String` scalar type represents textual data, represented as UTF-8 ' + 'character sequences. The String type is most often used by GraphQL to ' + 'represent free-form human-readable text.',\n  serialize: coerceString,\n  parseValue: coerceString,\n  parseLiteral: function parseLiteral(ast) {\n    return ast.kind === Kind.STRING ? ast.value : undefined;\n  }\n});\n\nexport var GraphQLBoolean = new GraphQLScalarType({\n  name: 'Boolean',\n  description: 'The `Boolean` scalar type represents `true` or `false`.',\n  serialize: Boolean,\n  parseValue: Boolean,\n  parseLiteral: function parseLiteral(ast) {\n    return ast.kind === Kind.BOOLEAN ? ast.value : undefined;\n  }\n});\n\nexport var GraphQLID = new GraphQLScalarType({\n  name: 'ID',\n  description: 'The `ID` scalar type represents a unique identifier, often used to ' + 'refetch an object or as key for a cache. The ID type appears in a JSON ' + 'response as a String; however, it is not intended to be human-readable. ' + 'When expected as an input type, any string (such as `\"4\"`) or integer ' + '(such as `4`) input value will be accepted as an ID.',\n  serialize: String,\n  parseValue: String,\n  parseLiteral: function parseLiteral(ast) {\n    return ast.kind === Kind.STRING || ast.kind === Kind.INT ? ast.value : undefined;\n  }\n});\n\nexport var specifiedScalarTypes = [GraphQLString, GraphQLInt, GraphQLFloat, GraphQLBoolean, GraphQLID];\n\nexport function isSpecifiedScalarType(type) {\n  return isNamedType(type) && (\n  // Would prefer to use specifiedScalarTypes.some(), however %checks needs\n  // a simple expression.\n  type.name === GraphQLString.name || type.name === GraphQLInt.name || type.name === GraphQLFloat.name || type.name === GraphQLBoolean.name || type.name === GraphQLID.name);\n}","import { join } from 'aurelia-path';\r\nimport deepExtend from './deep-extend';\r\nimport { WindowInfo } from './window-info';\r\nvar AureliaConfiguration = (function () {\r\n    function AureliaConfiguration() {\r\n        this.environment = 'default';\r\n        this.environments = null;\r\n        this.directory = 'config';\r\n        this.config_file = 'config.json';\r\n        this.cascade_mode = true;\r\n        this.base_path_mode = false;\r\n        this._config_object = {};\r\n        this._config_merge_object = {};\r\n        this.window = new WindowInfo();\r\n        this.window.hostName = window.location.hostname;\r\n        this.window.port = window.location.port;\r\n        if (window.location.pathname && window.location.pathname.length > 1) {\r\n            this.window.pathName = window.location.pathname;\r\n        }\r\n    }\r\n    AureliaConfiguration.prototype.setDirectory = function (path) {\r\n        this.directory = path;\r\n    };\r\n    AureliaConfiguration.prototype.setConfig = function (name) {\r\n        this.config_file = name;\r\n    };\r\n    AureliaConfiguration.prototype.setEnvironment = function (environment) {\r\n        this.environment = environment;\r\n    };\r\n    AureliaConfiguration.prototype.setEnvironments = function (environments) {\r\n        if (environments === void 0) { environments = null; }\r\n        if (environments !== null) {\r\n            this.environments = environments;\r\n            this.check();\r\n        }\r\n    };\r\n    AureliaConfiguration.prototype.setCascadeMode = function (bool) {\r\n        if (bool === void 0) { bool = true; }\r\n        this.cascade_mode = bool;\r\n    };\r\n    AureliaConfiguration.prototype.setWindow = function (window) {\r\n        this.window = window;\r\n    };\r\n    AureliaConfiguration.prototype.setBasePathMode = function (bool) {\r\n        if (bool === void 0) { bool = true; }\r\n        this.base_path_mode = bool;\r\n    };\r\n    Object.defineProperty(AureliaConfiguration.prototype, \"obj\", {\r\n        get: function () {\r\n            return this._config_object;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(AureliaConfiguration.prototype, \"config\", {\r\n        get: function () {\r\n            return this.config_file;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    AureliaConfiguration.prototype.is = function (environment) {\r\n        return (environment === this.environment);\r\n    };\r\n    AureliaConfiguration.prototype.check = function () {\r\n        var hostname = this.window.hostName;\r\n        if (this.window.port != '')\r\n            hostname += ':' + this.window.port;\r\n        if (this.base_path_mode)\r\n            hostname += this.window.pathName;\r\n        if (this.environments) {\r\n            for (var env in this.environments) {\r\n                var hostnames = this.environments[env];\r\n                if (hostnames) {\r\n                    for (var _i = 0, hostnames_1 = hostnames; _i < hostnames_1.length; _i++) {\r\n                        var host = hostnames_1[_i];\r\n                        if (hostname.search('(?:^|\\W)' + host + '(?:$|\\W)') !== -1) {\r\n                            this.setEnvironment(env);\r\n                            return;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    };\r\n    AureliaConfiguration.prototype.environmentEnabled = function () {\r\n        return (!(this.environment === 'default' || this.environment === '' || !this.environment));\r\n    };\r\n    AureliaConfiguration.prototype.environmentExists = function () {\r\n        return this.environment in this.obj;\r\n    };\r\n    AureliaConfiguration.prototype.getDictValue = function (baseObject, key) {\r\n        var splitKey = key.split('.');\r\n        var currentObject = baseObject;\r\n        splitKey.forEach(function (key) {\r\n            if (currentObject[key]) {\r\n                currentObject = currentObject[key];\r\n            }\r\n            else {\r\n                throw 'Key ' + key + ' not found';\r\n            }\r\n        });\r\n        return currentObject;\r\n    };\r\n    AureliaConfiguration.prototype.get = function (key, defaultValue) {\r\n        if (defaultValue === void 0) { defaultValue = null; }\r\n        var returnVal = defaultValue;\r\n        if (key.indexOf('.') === -1) {\r\n            if (!this.environmentEnabled()) {\r\n                return this.obj[key] ? this.obj[key] : defaultValue;\r\n            }\r\n            if (this.environmentEnabled()) {\r\n                if (this.environmentExists() && this.obj[this.environment][key]) {\r\n                    returnVal = this.obj[this.environment][key];\r\n                }\r\n                else if (this.cascade_mode && this.obj[key]) {\r\n                    returnVal = this.obj[key];\r\n                }\r\n                return returnVal;\r\n            }\r\n        }\r\n        else {\r\n            if (this.environmentEnabled()) {\r\n                if (this.environmentExists()) {\r\n                    try {\r\n                        return this.getDictValue(this.obj[this.environment], key);\r\n                    }\r\n                    catch (_a) {\r\n                        if (this.cascade_mode) {\r\n                            try {\r\n                                return this.getDictValue(this.obj, key);\r\n                            }\r\n                            catch (_b) { }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                try {\r\n                    return this.getDictValue(this.obj, key);\r\n                }\r\n                catch (_c) { }\r\n            }\r\n        }\r\n        return returnVal;\r\n    };\r\n    AureliaConfiguration.prototype.set = function (key, val) {\r\n        if (key.indexOf('.') === -1) {\r\n            this.obj[key] = val;\r\n        }\r\n        else {\r\n            var splitKey = key.split('.');\r\n            var parent_1 = splitKey[0];\r\n            var child = splitKey[1];\r\n            if (this.obj[parent_1] === undefined) {\r\n                this.obj[parent_1] = {};\r\n            }\r\n            this.obj[parent_1][child] = val;\r\n        }\r\n    };\r\n    AureliaConfiguration.prototype.merge = function (obj) {\r\n        var currentConfig = this._config_object;\r\n        this._config_object = deepExtend(currentConfig, obj);\r\n    };\r\n    AureliaConfiguration.prototype.lazyMerge = function (obj) {\r\n        var currentMergeConfig = (this._config_merge_object || {});\r\n        this._config_merge_object = deepExtend(currentMergeConfig, obj);\r\n    };\r\n    AureliaConfiguration.prototype.setAll = function (obj) {\r\n        this._config_object = obj;\r\n    };\r\n    AureliaConfiguration.prototype.getAll = function () {\r\n        return this.obj;\r\n    };\r\n    AureliaConfiguration.prototype.loadConfig = function () {\r\n        var _this = this;\r\n        return this.loadConfigFile(join(this.directory, this.config), function (data) { return _this.setAll(data); })\r\n            .then(function () {\r\n            if (_this._config_merge_object) {\r\n                _this.merge(_this._config_merge_object);\r\n                _this._config_merge_object = null;\r\n            }\r\n        });\r\n    };\r\n    AureliaConfiguration.prototype.loadConfigFile = function (path, action) {\r\n        return new Promise(function (resolve, reject) {\r\n            var pathClosure = path.toString();\r\n            var xhr = new XMLHttpRequest();\r\n            if (xhr.overrideMimeType) {\r\n                xhr.overrideMimeType('application/json');\r\n            }\r\n            xhr.open('GET', pathClosure, true);\r\n            xhr.onreadystatechange = function () {\r\n                if (xhr.readyState == 4 && xhr.status == 200) {\r\n                    var data = JSON.parse(this.responseText);\r\n                    action(data);\r\n                    resolve(data);\r\n                }\r\n            };\r\n            xhr.onloadend = function () {\r\n                if (xhr.status == 404) {\r\n                    reject('Configuration file could not be found: ' + path);\r\n                }\r\n            };\r\n            xhr.onerror = function () {\r\n                reject(\"Configuration file could not be found or loaded: \" + pathClosure);\r\n            };\r\n            xhr.send(null);\r\n        });\r\n    };\r\n    AureliaConfiguration.prototype.mergeConfigFile = function (path, optional) {\r\n        var _this = this;\r\n        return new Promise(function (resolve, reject) {\r\n            _this\r\n                .loadConfigFile(path, function (data) {\r\n                _this.lazyMerge(data);\r\n                resolve();\r\n            })\r\n                .catch(function (error) {\r\n                if (optional === true) {\r\n                    resolve();\r\n                }\r\n                else {\r\n                    reject(error);\r\n                }\r\n            });\r\n        });\r\n    };\r\n    return AureliaConfiguration;\r\n}());\r\nexport { AureliaConfiguration };\r\n//# sourceMappingURL=aurelia-configuration.js.map","\n\nimport { buildQueryString, parseQueryString } from 'aurelia-path';\n\nexport var State = function () {\n  function State(charSpec) {\n    \n\n    this.charSpec = charSpec;\n    this.nextStates = [];\n  }\n\n  State.prototype.get = function get(charSpec) {\n    for (var _iterator = this.nextStates, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref;\n\n      if (_isArray) {\n        if (_i >= _iterator.length) break;\n        _ref = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) break;\n        _ref = _i.value;\n      }\n\n      var child = _ref;\n\n      var isEqual = child.charSpec.validChars === charSpec.validChars && child.charSpec.invalidChars === charSpec.invalidChars;\n\n      if (isEqual) {\n        return child;\n      }\n    }\n\n    return undefined;\n  };\n\n  State.prototype.put = function put(charSpec) {\n    var state = this.get(charSpec);\n\n    if (state) {\n      return state;\n    }\n\n    state = new State(charSpec);\n\n    this.nextStates.push(state);\n\n    if (charSpec.repeat) {\n      state.nextStates.push(state);\n    }\n\n    return state;\n  };\n\n  State.prototype.match = function match(ch) {\n    var nextStates = this.nextStates;\n    var results = [];\n\n    for (var i = 0, l = nextStates.length; i < l; i++) {\n      var child = nextStates[i];\n      var charSpec = child.charSpec;\n\n      if (charSpec.validChars !== undefined) {\n        if (charSpec.validChars.indexOf(ch) !== -1) {\n          results.push(child);\n        }\n      } else if (charSpec.invalidChars !== undefined) {\n        if (charSpec.invalidChars.indexOf(ch) === -1) {\n          results.push(child);\n        }\n      }\n    }\n\n    return results;\n  };\n\n  return State;\n}();\n\nvar specials = ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\'];\n\nvar escapeRegex = new RegExp('(\\\\' + specials.join('|\\\\') + ')', 'g');\n\nexport var StaticSegment = function () {\n  function StaticSegment(string, caseSensitive) {\n    \n\n    this.string = string;\n    this.caseSensitive = caseSensitive;\n  }\n\n  StaticSegment.prototype.eachChar = function eachChar(callback) {\n    var s = this.string;\n    for (var i = 0, ii = s.length; i < ii; ++i) {\n      var ch = s[i];\n      callback({ validChars: this.caseSensitive ? ch : ch.toUpperCase() + ch.toLowerCase() });\n    }\n  };\n\n  StaticSegment.prototype.regex = function regex() {\n    return this.string.replace(escapeRegex, '\\\\$1');\n  };\n\n  StaticSegment.prototype.generate = function generate() {\n    return this.string;\n  };\n\n  return StaticSegment;\n}();\n\nexport var DynamicSegment = function () {\n  function DynamicSegment(name, optional) {\n    \n\n    this.name = name;\n    this.optional = optional;\n  }\n\n  DynamicSegment.prototype.eachChar = function eachChar(callback) {\n    callback({ invalidChars: '/', repeat: true });\n  };\n\n  DynamicSegment.prototype.regex = function regex() {\n    return '([^/]+)';\n  };\n\n  DynamicSegment.prototype.generate = function generate(params, consumed) {\n    consumed[this.name] = true;\n    return params[this.name];\n  };\n\n  return DynamicSegment;\n}();\n\nexport var StarSegment = function () {\n  function StarSegment(name) {\n    \n\n    this.name = name;\n  }\n\n  StarSegment.prototype.eachChar = function eachChar(callback) {\n    callback({ invalidChars: '', repeat: true });\n  };\n\n  StarSegment.prototype.regex = function regex() {\n    return '(.+)';\n  };\n\n  StarSegment.prototype.generate = function generate(params, consumed) {\n    consumed[this.name] = true;\n    return params[this.name];\n  };\n\n  return StarSegment;\n}();\n\nexport var EpsilonSegment = function () {\n  function EpsilonSegment() {\n    \n  }\n\n  EpsilonSegment.prototype.eachChar = function eachChar() {};\n\n  EpsilonSegment.prototype.regex = function regex() {\n    return '';\n  };\n\n  EpsilonSegment.prototype.generate = function generate() {\n    return '';\n  };\n\n  return EpsilonSegment;\n}();\n\nexport var RouteRecognizer = function () {\n  function RouteRecognizer() {\n    \n\n    this.rootState = new State();\n    this.names = {};\n    this.routes = new Map();\n  }\n\n  RouteRecognizer.prototype.add = function add(route) {\n    var _this = this;\n\n    if (Array.isArray(route)) {\n      route.forEach(function (r) {\n        return _this.add(r);\n      });\n      return undefined;\n    }\n\n    var currentState = this.rootState;\n    var skippableStates = [];\n    var regex = '^';\n    var types = { statics: 0, dynamics: 0, stars: 0 };\n    var names = [];\n    var routeName = route.handler.name;\n    var isEmpty = true;\n    var segments = parse(route.path, names, types, route.caseSensitive);\n\n    for (var i = 0, ii = segments.length; i < ii; i++) {\n      var segment = segments[i];\n      if (segment instanceof EpsilonSegment) {\n        continue;\n      }\n\n      var _addSegment = addSegment(currentState, segment),\n          firstState = _addSegment[0],\n          nextState = _addSegment[1];\n\n      for (var j = 0, jj = skippableStates.length; j < jj; j++) {\n        skippableStates[j].nextStates.push(firstState);\n      }\n\n      if (segment.optional) {\n        skippableStates.push(nextState);\n        regex += '(?:/' + segment.regex() + ')?';\n      } else {\n        currentState = nextState;\n        regex += '/' + segment.regex();\n        skippableStates.length = 0;\n        isEmpty = false;\n      }\n    }\n\n    if (isEmpty) {\n      currentState = currentState.put({ validChars: '/' });\n      regex += '/?';\n    }\n\n    var handlers = [{ handler: route.handler, names: names }];\n\n    this.routes.set(route.handler, { segments: segments, handlers: handlers });\n    if (routeName) {\n      var routeNames = Array.isArray(routeName) ? routeName : [routeName];\n      for (var _i2 = 0; _i2 < routeNames.length; _i2++) {\n        if (!(routeNames[_i2] in this.names)) {\n          this.names[routeNames[_i2]] = { segments: segments, handlers: handlers };\n        }\n      }\n    }\n\n    for (var _i3 = 0; _i3 < skippableStates.length; _i3++) {\n      var state = skippableStates[_i3];\n      state.handlers = handlers;\n      state.regex = new RegExp(regex + '$', route.caseSensitive ? '' : 'i');\n      state.types = types;\n    }\n\n    currentState.handlers = handlers;\n    currentState.regex = new RegExp(regex + '$', route.caseSensitive ? '' : 'i');\n    currentState.types = types;\n\n    return currentState;\n  };\n\n  RouteRecognizer.prototype.getRoute = function getRoute(nameOrRoute) {\n    return typeof nameOrRoute === 'string' ? this.names[nameOrRoute] : this.routes.get(nameOrRoute);\n  };\n\n  RouteRecognizer.prototype.handlersFor = function handlersFor(nameOrRoute) {\n    var route = this.getRoute(nameOrRoute);\n    if (!route) {\n      throw new Error('There is no route named ' + nameOrRoute);\n    }\n\n    return [].concat(route.handlers);\n  };\n\n  RouteRecognizer.prototype.hasRoute = function hasRoute(nameOrRoute) {\n    return !!this.getRoute(nameOrRoute);\n  };\n\n  RouteRecognizer.prototype.generate = function generate(nameOrRoute, params) {\n    var route = this.getRoute(nameOrRoute);\n    if (!route) {\n      throw new Error('There is no route named ' + nameOrRoute);\n    }\n\n    var handler = route.handlers[0].handler;\n    if (handler.generationUsesHref) {\n      return handler.href;\n    }\n\n    var routeParams = Object.assign({}, params);\n    var segments = route.segments;\n    var consumed = {};\n    var output = '';\n\n    for (var i = 0, l = segments.length; i < l; i++) {\n      var segment = segments[i];\n\n      if (segment instanceof EpsilonSegment) {\n        continue;\n      }\n\n      var segmentValue = segment.generate(routeParams, consumed);\n      if (segmentValue === null || segmentValue === undefined) {\n        if (!segment.optional) {\n          throw new Error('A value is required for route parameter \\'' + segment.name + '\\' in route \\'' + nameOrRoute + '\\'.');\n        }\n      } else {\n        output += '/';\n        output += segmentValue;\n      }\n    }\n\n    if (output.charAt(0) !== '/') {\n      output = '/' + output;\n    }\n\n    for (var param in consumed) {\n      delete routeParams[param];\n    }\n\n    var queryString = buildQueryString(routeParams);\n    output += queryString ? '?' + queryString : '';\n\n    return output;\n  };\n\n  RouteRecognizer.prototype.recognize = function recognize(path) {\n    var states = [this.rootState];\n    var queryParams = {};\n    var isSlashDropped = false;\n    var normalizedPath = path;\n\n    var queryStart = normalizedPath.indexOf('?');\n    if (queryStart !== -1) {\n      var queryString = normalizedPath.substr(queryStart + 1, normalizedPath.length);\n      normalizedPath = normalizedPath.substr(0, queryStart);\n      queryParams = parseQueryString(queryString);\n    }\n\n    normalizedPath = decodeURI(normalizedPath);\n\n    if (normalizedPath.charAt(0) !== '/') {\n      normalizedPath = '/' + normalizedPath;\n    }\n\n    var pathLen = normalizedPath.length;\n    if (pathLen > 1 && normalizedPath.charAt(pathLen - 1) === '/') {\n      normalizedPath = normalizedPath.substr(0, pathLen - 1);\n      isSlashDropped = true;\n    }\n\n    for (var i = 0, l = normalizedPath.length; i < l; i++) {\n      states = recognizeChar(states, normalizedPath.charAt(i));\n      if (!states.length) {\n        break;\n      }\n    }\n\n    var solutions = [];\n    for (var _i4 = 0, _l = states.length; _i4 < _l; _i4++) {\n      if (states[_i4].handlers) {\n        solutions.push(states[_i4]);\n      }\n    }\n\n    states = sortSolutions(solutions);\n\n    var state = solutions[0];\n    if (state && state.handlers) {\n      if (isSlashDropped && state.regex.source.slice(-5) === '(.+)$') {\n        normalizedPath = normalizedPath + '/';\n      }\n\n      return findHandler(state, normalizedPath, queryParams);\n    }\n  };\n\n  return RouteRecognizer;\n}();\n\nvar RecognizeResults = function RecognizeResults(queryParams) {\n  \n\n  this.splice = Array.prototype.splice;\n  this.slice = Array.prototype.slice;\n  this.push = Array.prototype.push;\n  this.length = 0;\n  this.queryParams = queryParams || {};\n};\n\nfunction parse(route, names, types, caseSensitive) {\n  var normalizedRoute = route;\n  if (route.charAt(0) === '/') {\n    normalizedRoute = route.substr(1);\n  }\n\n  var results = [];\n\n  var splitRoute = normalizedRoute.split('/');\n  for (var i = 0, ii = splitRoute.length; i < ii; ++i) {\n    var segment = splitRoute[i];\n\n    var match = segment.match(/^:([^?]+)(\\?)?$/);\n    if (match) {\n      var _match = match,\n          _name = _match[1],\n          optional = _match[2];\n\n      if (_name.indexOf('=') !== -1) {\n        throw new Error('Parameter ' + _name + ' in route ' + route + ' has a default value, which is not supported.');\n      }\n      results.push(new DynamicSegment(_name, !!optional));\n      names.push(_name);\n      types.dynamics++;\n      continue;\n    }\n\n    match = segment.match(/^\\*(.+)$/);\n    if (match) {\n      results.push(new StarSegment(match[1]));\n      names.push(match[1]);\n      types.stars++;\n    } else if (segment === '') {\n      results.push(new EpsilonSegment());\n    } else {\n      results.push(new StaticSegment(segment, caseSensitive));\n      types.statics++;\n    }\n  }\n\n  return results;\n}\n\nfunction sortSolutions(states) {\n  return states.sort(function (a, b) {\n    if (a.types.stars !== b.types.stars) {\n      return a.types.stars - b.types.stars;\n    }\n\n    if (a.types.stars) {\n      if (a.types.statics !== b.types.statics) {\n        return b.types.statics - a.types.statics;\n      }\n      if (a.types.dynamics !== b.types.dynamics) {\n        return b.types.dynamics - a.types.dynamics;\n      }\n    }\n\n    if (a.types.dynamics !== b.types.dynamics) {\n      return a.types.dynamics - b.types.dynamics;\n    }\n\n    if (a.types.statics !== b.types.statics) {\n      return b.types.statics - a.types.statics;\n    }\n\n    return 0;\n  });\n}\n\nfunction recognizeChar(states, ch) {\n  var nextStates = [];\n\n  for (var i = 0, l = states.length; i < l; i++) {\n    var state = states[i];\n    nextStates.push.apply(nextStates, state.match(ch));\n  }\n\n  return nextStates;\n}\n\nfunction findHandler(state, path, queryParams) {\n  var handlers = state.handlers;\n  var regex = state.regex;\n  var captures = path.match(regex);\n  var currentCapture = 1;\n  var result = new RecognizeResults(queryParams);\n\n  for (var i = 0, l = handlers.length; i < l; i++) {\n    var _handler = handlers[i];\n    var _names = _handler.names;\n    var _params = {};\n\n    for (var j = 0, m = _names.length; j < m; j++) {\n      _params[_names[j]] = captures[currentCapture++];\n    }\n\n    result.push({ handler: _handler.handler, params: _params, isDynamic: !!_names.length });\n  }\n\n  return result;\n}\n\nfunction addSegment(currentState, segment) {\n  var firstState = currentState.put({ validChars: '/' });\n  var nextState = firstState;\n  segment.eachChar(function (ch) {\n    nextState = nextState.put(ch);\n  });\n\n  return [firstState, nextState];\n}","/*!\r\n * @description Recursive object extending\r\n * @author Viacheslav Lotsmanov <lotsmanov89@gmail.com>\r\n * @license MIT\r\n *\r\n * The MIT License (MIT)\r\n *\r\n * Copyright (c) 2013-2015 Viacheslav Lotsmanov\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\r\n * this software and associated documentation files (the \"Software\"), to deal in\r\n * the Software without restriction, including without limitation the rights to\r\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\n * the Software, and to permit persons to whom the Software is furnished to do so,\r\n * subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n */\r\n'use strict';\r\nfunction isSpecificValue(val) {\r\n    return (val instanceof Buffer\r\n        || val instanceof Date\r\n        || val instanceof RegExp) ? true : false;\r\n}\r\nfunction cloneSpecificValue(val) {\r\n    if (val instanceof Buffer) {\r\n        var x = new Buffer(val.length);\r\n        val.copy(x);\r\n        return x;\r\n    }\r\n    else if (val instanceof Date) {\r\n        return new Date(val.getTime());\r\n    }\r\n    else if (val instanceof RegExp) {\r\n        return new RegExp(val);\r\n    }\r\n    else {\r\n        throw new Error('Unexpected situation');\r\n    }\r\n}\r\nfunction deepCloneArray(arr) {\r\n    var clone = [];\r\n    arr.forEach(function (item, index) {\r\n        if (typeof item === 'object' && item !== null) {\r\n            if (Array.isArray(item)) {\r\n                clone[index] = deepCloneArray(item);\r\n            }\r\n            else if (isSpecificValue(item)) {\r\n                clone[index] = cloneSpecificValue(item);\r\n            }\r\n            else {\r\n                clone[index] = deepExtend({}, item);\r\n            }\r\n        }\r\n        else {\r\n            clone[index] = item;\r\n        }\r\n    });\r\n    return clone;\r\n}\r\nvar deepExtend;\r\nexport default deepExtend = function () {\r\n    if (arguments.length < 1 || typeof arguments[0] !== 'object') {\r\n        return false;\r\n    }\r\n    if (arguments.length < 2) {\r\n        return arguments[0];\r\n    }\r\n    var target = arguments[0];\r\n    var args = Array.prototype.slice.call(arguments, 1);\r\n    var val, src;\r\n    args.forEach(function (obj) {\r\n        if (typeof obj !== 'object' || Array.isArray(obj)) {\r\n            return;\r\n        }\r\n        Object.keys(obj).forEach(function (key) {\r\n            src = target[key];\r\n            val = obj[key];\r\n            if (val === target) {\r\n                return;\r\n            }\r\n            else if (typeof val !== 'object' || val === null) {\r\n                target[key] = val;\r\n                return;\r\n            }\r\n            else if (Array.isArray(val)) {\r\n                target[key] = deepCloneArray(val);\r\n                return;\r\n            }\r\n            else if (isSpecificValue(val)) {\r\n                target[key] = cloneSpecificValue(val);\r\n                return;\r\n            }\r\n            else if (typeof src !== 'object' || src === null || Array.isArray(src)) {\r\n                target[key] = deepExtend({}, val);\r\n                return;\r\n            }\r\n            else {\r\n                target[key] = deepExtend(src, val);\r\n                return;\r\n            }\r\n        });\r\n    });\r\n    return target;\r\n};\r\n//# sourceMappingURL=deep-extend.js.map","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var af = moment.defineLocale('af', {\n        months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),\n        monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n        weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),\n        weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n        weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n        meridiemParse: /vm|nm/i,\n        isPM : function (input) {\n            return /^nm$/i.test(input);\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'vm' : 'VM';\n            } else {\n                return isLower ? 'nm' : 'NM';\n            }\n        },\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Vandag om] LT',\n            nextDay : '[Môre om] LT',\n            nextWeek : 'dddd [om] LT',\n            lastDay : '[Gister om] LT',\n            lastWeek : '[Laas] dddd [om] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'oor %s',\n            past : '%s gelede',\n            s : '\\'n paar sekondes',\n            ss : '%d sekondes',\n            m : '\\'n minuut',\n            mm : '%d minute',\n            h : '\\'n uur',\n            hh : '%d ure',\n            d : '\\'n dag',\n            dd : '%d dae',\n            M : '\\'n maand',\n            MM : '%d maande',\n            y : '\\'n jaar',\n            yy : '%d jaar'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter\n        },\n        week : {\n            dow : 1, // Maandag is die eerste dag van die week.\n            doy : 4  // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n        }\n    });\n\n    return af;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '١',\n        '2': '٢',\n        '3': '٣',\n        '4': '٤',\n        '5': '٥',\n        '6': '٦',\n        '7': '٧',\n        '8': '٨',\n        '9': '٩',\n        '0': '٠'\n    }, numberMap = {\n        '١': '1',\n        '٢': '2',\n        '٣': '3',\n        '٤': '4',\n        '٥': '5',\n        '٦': '6',\n        '٧': '7',\n        '٨': '8',\n        '٩': '9',\n        '٠': '0'\n    }, pluralForm = function (n) {\n        return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n    }, plurals = {\n        s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n        m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n        h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n        d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n        M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n        y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n    }, pluralize = function (u) {\n        return function (number, withoutSuffix, string, isFuture) {\n            var f = pluralForm(number),\n                str = plurals[u][pluralForm(number)];\n            if (f === 2) {\n                str = str[withoutSuffix ? 0 : 1];\n            }\n            return str.replace(/%d/i, number);\n        };\n    }, months = [\n        'يناير',\n        'فبراير',\n        'مارس',\n        'أبريل',\n        'مايو',\n        'يونيو',\n        'يوليو',\n        'أغسطس',\n        'سبتمبر',\n        'أكتوبر',\n        'نوفمبر',\n        'ديسمبر'\n    ];\n\n    var ar = moment.defineLocale('ar', {\n        months : months,\n        monthsShort : months,\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'D/\\u200FM/\\u200FYYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ص|م/,\n        isPM : function (input) {\n            return 'م' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar : {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'بعد %s',\n            past : 'منذ %s',\n            s : pluralize('s'),\n            ss : pluralize('s'),\n            m : pluralize('m'),\n            mm : pluralize('m'),\n            h : pluralize('h'),\n            hh : pluralize('h'),\n            d : pluralize('d'),\n            dd : pluralize('d'),\n            M : pluralize('M'),\n            MM : pluralize('M'),\n            y : pluralize('y'),\n            yy : pluralize('y')\n        },\n        preparse: function (string) {\n            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return ar;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var arDz = moment.defineLocale('ar-dz', {\n        months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return arDz;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var arKw = moment.defineLocale('ar-kw', {\n        months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return arKw;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '1',\n        '2': '2',\n        '3': '3',\n        '4': '4',\n        '5': '5',\n        '6': '6',\n        '7': '7',\n        '8': '8',\n        '9': '9',\n        '0': '0'\n    }, pluralForm = function (n) {\n        return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n    }, plurals = {\n        s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n        m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n        h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n        d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n        M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n        y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n    }, pluralize = function (u) {\n        return function (number, withoutSuffix, string, isFuture) {\n            var f = pluralForm(number),\n                str = plurals[u][pluralForm(number)];\n            if (f === 2) {\n                str = str[withoutSuffix ? 0 : 1];\n            }\n            return str.replace(/%d/i, number);\n        };\n    }, months = [\n        'يناير',\n        'فبراير',\n        'مارس',\n        'أبريل',\n        'مايو',\n        'يونيو',\n        'يوليو',\n        'أغسطس',\n        'سبتمبر',\n        'أكتوبر',\n        'نوفمبر',\n        'ديسمبر'\n    ];\n\n    var arLy = moment.defineLocale('ar-ly', {\n        months : months,\n        monthsShort : months,\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'D/\\u200FM/\\u200FYYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ص|م/,\n        isPM : function (input) {\n            return 'م' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar : {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'بعد %s',\n            past : 'منذ %s',\n            s : pluralize('s'),\n            ss : pluralize('s'),\n            m : pluralize('m'),\n            mm : pluralize('m'),\n            h : pluralize('h'),\n            hh : pluralize('h'),\n            d : pluralize('d'),\n            dd : pluralize('d'),\n            M : pluralize('M'),\n            MM : pluralize('M'),\n            y : pluralize('y'),\n            yy : pluralize('y')\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return arLy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var arMa = moment.defineLocale('ar-ma', {\n        months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return arMa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '١',\n        '2': '٢',\n        '3': '٣',\n        '4': '٤',\n        '5': '٥',\n        '6': '٦',\n        '7': '٧',\n        '8': '٨',\n        '9': '٩',\n        '0': '٠'\n    }, numberMap = {\n        '١': '1',\n        '٢': '2',\n        '٣': '3',\n        '٤': '4',\n        '٥': '5',\n        '٦': '6',\n        '٧': '7',\n        '٨': '8',\n        '٩': '9',\n        '٠': '0'\n    };\n\n    var arSa = moment.defineLocale('ar-sa', {\n        months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ص|م/,\n        isPM : function (input) {\n            return 'م' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        preparse: function (string) {\n            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return arSa;\n\n})));\n","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Facet_1 = require(\"./Facet\");\nvar Logger_1 = require(\"./Logger\");\nvar Amplify_1 = require(\"./Amplify\");\n__export(require(\"./Facet\"));\nvar ClientDevice_1 = require(\"./ClientDevice\");\nexports.ClientDevice = ClientDevice_1.default;\nvar Logger_2 = require(\"./Logger\");\nexports.ConsoleLogger = Logger_2.ConsoleLogger;\nexports.Logger = Logger_2.ConsoleLogger;\n__export(require(\"./Errors\"));\nvar Hub_1 = require(\"./Hub\");\nexports.Hub = Hub_1.default;\nvar I18n_1 = require(\"./I18n\");\nexports.I18n = I18n_1.default;\nvar JS_1 = require(\"./JS\");\nexports.JS = JS_1.default;\nvar Signer_1 = require(\"./Signer\");\nexports.Signer = Signer_1.default;\nvar Parser_1 = require(\"./Parser\");\nexports.Parser = Parser_1.default;\nvar OAuthHelper_1 = require(\"./OAuthHelper\");\nexports.FacebookOAuth = OAuthHelper_1.FacebookOAuth;\nexports.GoogleOAuth = OAuthHelper_1.GoogleOAuth;\n__export(require(\"./RNComponents\"));\nvar Credentials_1 = require(\"./Credentials\");\nexports.Credentials = Credentials_1.default;\nvar ServiceWorker_1 = require(\"./ServiceWorker\");\nexports.ServiceWorker = ServiceWorker_1.default;\nvar StorageHelper_1 = require(\"./StorageHelper\");\nexports.StorageHelper = StorageHelper_1.default;\nexports.MemoryStorage = StorageHelper_1.MemoryStorage;\nvar Platform_1 = require(\"./Platform\");\nexports.Platform = Platform_1.default;\nvar Platform_2 = require(\"./Platform\");\nexports.Constants = {\n    'userAgent': Platform_2.default.userAgent\n};\nexports.default = Amplify_1.default;\nvar logger = new Logger_1.ConsoleLogger('Core');\nif (Facet_1.AWS['util']) {\n    Facet_1.AWS['util'].userAgent = function () {\n        return exports.Constants.userAgent;\n    };\n}\nelse if (Facet_1.AWS.config) {\n    Facet_1.AWS.config.update({ 'customUserAgent': exports.Constants.userAgent });\n}\nelse {\n    logger.warn('No AWS.config');\n}\n//# sourceMappingURL=index.js.map","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var arTn = moment.defineLocale('ar-tn', {\n        months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss : '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات'\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return arTn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        1: '-inci',\n        5: '-inci',\n        8: '-inci',\n        70: '-inci',\n        80: '-inci',\n        2: '-nci',\n        7: '-nci',\n        20: '-nci',\n        50: '-nci',\n        3: '-üncü',\n        4: '-üncü',\n        100: '-üncü',\n        6: '-ncı',\n        9: '-uncu',\n        10: '-uncu',\n        30: '-uncu',\n        60: '-ıncı',\n        90: '-ıncı'\n    };\n\n    var az = moment.defineLocale('az', {\n        months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),\n        monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n        weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),\n        weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n        weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[bugün saat] LT',\n            nextDay : '[sabah saat] LT',\n            nextWeek : '[gələn həftə] dddd [saat] LT',\n            lastDay : '[dünən] LT',\n            lastWeek : '[keçən həftə] dddd [saat] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s sonra',\n            past : '%s əvvəl',\n            s : 'birneçə saniyə',\n            ss : '%d saniyə',\n            m : 'bir dəqiqə',\n            mm : '%d dəqiqə',\n            h : 'bir saat',\n            hh : '%d saat',\n            d : 'bir gün',\n            dd : '%d gün',\n            M : 'bir ay',\n            MM : '%d ay',\n            y : 'bir il',\n            yy : '%d il'\n        },\n        meridiemParse: /gecə|səhər|gündüz|axşam/,\n        isPM : function (input) {\n            return /^(gündüz|axşam)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'gecə';\n            } else if (hour < 12) {\n                return 'səhər';\n            } else if (hour < 17) {\n                return 'gündüz';\n            } else {\n                return 'axşam';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n        ordinal : function (number) {\n            if (number === 0) {  // special case for zero\n                return number + '-ıncı';\n            }\n            var a = number % 10,\n                b = number % 100 - a,\n                c = number >= 100 ? 100 : null;\n            return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return az;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n            'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n            'dd': 'дзень_дні_дзён',\n            'MM': 'месяц_месяцы_месяцаў',\n            'yy': 'год_гады_гадоў'\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвіліна' : 'хвіліну';\n        }\n        else if (key === 'h') {\n            return withoutSuffix ? 'гадзіна' : 'гадзіну';\n        }\n        else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n\n    var be = moment.defineLocale('be', {\n        months : {\n            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),\n            standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')\n        },\n        monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n        weekdays : {\n            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),\n            standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),\n            isFormat: /\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/\n        },\n        weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY г.',\n            LLL : 'D MMMM YYYY г., HH:mm',\n            LLLL : 'dddd, D MMMM YYYY г., HH:mm'\n        },\n        calendar : {\n            sameDay: '[Сёння ў] LT',\n            nextDay: '[Заўтра ў] LT',\n            lastDay: '[Учора ў] LT',\n            nextWeek: function () {\n                return '[У] dddd [ў] LT';\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return '[У мінулую] dddd [ў] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                        return '[У мінулы] dddd [ў] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'праз %s',\n            past : '%s таму',\n            s : 'некалькі секунд',\n            m : relativeTimeWithPlural,\n            mm : relativeTimeWithPlural,\n            h : relativeTimeWithPlural,\n            hh : relativeTimeWithPlural,\n            d : 'дзень',\n            dd : relativeTimeWithPlural,\n            M : 'месяц',\n            MM : relativeTimeWithPlural,\n            y : 'год',\n            yy : relativeTimeWithPlural\n        },\n        meridiemParse: /ночы|раніцы|дня|вечара/,\n        isPM : function (input) {\n            return /^(дня|вечара)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночы';\n            } else if (hour < 12) {\n                return 'раніцы';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечара';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';\n                case 'D':\n                    return number + '-га';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return be;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var bg = moment.defineLocale('bg', {\n        months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),\n        monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),\n        weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n        weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'D.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY H:mm',\n            LLLL : 'dddd, D MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay : '[Днес в] LT',\n            nextDay : '[Утре в] LT',\n            nextWeek : 'dddd [в] LT',\n            lastDay : '[Вчера в] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[В изминалата] dddd [в] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[В изминалия] dddd [в] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'след %s',\n            past : 'преди %s',\n            s : 'няколко секунди',\n            ss : '%d секунди',\n            m : 'минута',\n            mm : '%d минути',\n            h : 'час',\n            hh : '%d часа',\n            d : 'ден',\n            dd : '%d дни',\n            M : 'месец',\n            MM : '%d месеца',\n            y : 'година',\n            yy : '%d години'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal : function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return bg;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var bm = moment.defineLocale('bm', {\n        months : 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'),\n        monthsShort : 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n        weekdays : 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n        weekdaysShort : 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n        weekdaysMin : 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'MMMM [tile] D [san] YYYY',\n            LLL : 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n            LLLL : 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm'\n        },\n        calendar : {\n            sameDay : '[Bi lɛrɛ] LT',\n            nextDay : '[Sini lɛrɛ] LT',\n            nextWeek : 'dddd [don lɛrɛ] LT',\n            lastDay : '[Kunu lɛrɛ] LT',\n            lastWeek : 'dddd [tɛmɛnen lɛrɛ] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s kɔnɔ',\n            past : 'a bɛ %s bɔ',\n            s : 'sanga dama dama',\n            ss : 'sekondi %d',\n            m : 'miniti kelen',\n            mm : 'miniti %d',\n            h : 'lɛrɛ kelen',\n            hh : 'lɛrɛ %d',\n            d : 'tile kelen',\n            dd : 'tile %d',\n            M : 'kalo kelen',\n            MM : 'kalo %d',\n            y : 'san kelen',\n            yy : 'san %d'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return bm;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '১',\n        '2': '২',\n        '3': '৩',\n        '4': '৪',\n        '5': '৫',\n        '6': '৬',\n        '7': '৭',\n        '8': '৮',\n        '9': '৯',\n        '0': '০'\n    },\n    numberMap = {\n        '১': '1',\n        '২': '2',\n        '৩': '3',\n        '৪': '4',\n        '৫': '5',\n        '৬': '6',\n        '৭': '7',\n        '৮': '8',\n        '৯': '9',\n        '০': '0'\n    };\n\n    var bn = moment.defineLocale('bn', {\n        months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),\n        monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),\n        weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),\n        weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm সময়',\n            LTS : 'A h:mm:ss সময়',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm সময়',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'\n        },\n        calendar : {\n            sameDay : '[আজ] LT',\n            nextDay : '[আগামীকাল] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[গতকাল] LT',\n            lastWeek : '[গত] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s পরে',\n            past : '%s আগে',\n            s : 'কয়েক সেকেন্ড',\n            ss : '%d সেকেন্ড',\n            m : 'এক মিনিট',\n            mm : '%d মিনিট',\n            h : 'এক ঘন্টা',\n            hh : '%d ঘন্টা',\n            d : 'এক দিন',\n            dd : '%d দিন',\n            M : 'এক মাস',\n            MM : '%d মাস',\n            y : 'এক বছর',\n            yy : '%d বছর'\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if ((meridiem === 'রাত' && hour >= 4) ||\n                    (meridiem === 'দুপুর' && hour < 5) ||\n                    meridiem === 'বিকাল') {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 10) {\n                return 'সকাল';\n            } else if (hour < 17) {\n                return 'দুপুর';\n            } else if (hour < 20) {\n                return 'বিকাল';\n            } else {\n                return 'রাত';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return bn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '༡',\n        '2': '༢',\n        '3': '༣',\n        '4': '༤',\n        '5': '༥',\n        '6': '༦',\n        '7': '༧',\n        '8': '༨',\n        '9': '༩',\n        '0': '༠'\n    },\n    numberMap = {\n        '༡': '1',\n        '༢': '2',\n        '༣': '3',\n        '༤': '4',\n        '༥': '5',\n        '༦': '6',\n        '༧': '7',\n        '༨': '8',\n        '༩': '9',\n        '༠': '0'\n    };\n\n    var bo = moment.defineLocale('bo', {\n        months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n        monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n        weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),\n        weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n        weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n        },\n        calendar : {\n            sameDay : '[དི་རིང] LT',\n            nextDay : '[སང་ཉིན] LT',\n            nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',\n            lastDay : '[ཁ་སང] LT',\n            lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ལ་',\n            past : '%s སྔན་ལ',\n            s : 'ལམ་སང',\n            ss : '%d སྐར་ཆ།',\n            m : 'སྐར་མ་གཅིག',\n            mm : '%d སྐར་མ',\n            h : 'ཆུ་ཚོད་གཅིག',\n            hh : '%d ཆུ་ཚོད',\n            d : 'ཉིན་གཅིག',\n            dd : '%d ཉིན་',\n            M : 'ཟླ་བ་གཅིག',\n            MM : '%d ཟླ་བ',\n            y : 'ལོ་གཅིག',\n            yy : '%d ལོ'\n        },\n        preparse: function (string) {\n            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if ((meridiem === 'མཚན་མོ' && hour >= 4) ||\n                    (meridiem === 'ཉིན་གུང' && hour < 5) ||\n                    meridiem === 'དགོང་དག') {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'མཚན་མོ';\n            } else if (hour < 10) {\n                return 'ཞོགས་ཀས';\n            } else if (hour < 17) {\n                return 'ཉིན་གུང';\n            } else if (hour < 20) {\n                return 'དགོང་དག';\n            } else {\n                return 'མཚན་མོ';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return bo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function relativeTimeWithMutation(number, withoutSuffix, key) {\n        var format = {\n            'mm': 'munutenn',\n            'MM': 'miz',\n            'dd': 'devezh'\n        };\n        return number + ' ' + mutation(format[key], number);\n    }\n    function specialMutationForYears(number) {\n        switch (lastNumber(number)) {\n            case 1:\n            case 3:\n            case 4:\n            case 5:\n            case 9:\n                return number + ' bloaz';\n            default:\n                return number + ' vloaz';\n        }\n    }\n    function lastNumber(number) {\n        if (number > 9) {\n            return lastNumber(number % 10);\n        }\n        return number;\n    }\n    function mutation(text, number) {\n        if (number === 2) {\n            return softMutation(text);\n        }\n        return text;\n    }\n    function softMutation(text) {\n        var mutationTable = {\n            'm': 'v',\n            'b': 'v',\n            'd': 'z'\n        };\n        if (mutationTable[text.charAt(0)] === undefined) {\n            return text;\n        }\n        return mutationTable[text.charAt(0)] + text.substring(1);\n    }\n\n    var br = moment.defineLocale('br', {\n        months : 'Genver_C\\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),\n        monthsShort : 'Gen_C\\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n        weekdays : 'Sul_Lun_Meurzh_Merc\\'her_Yaou_Gwener_Sadorn'.split('_'),\n        weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n        weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h[e]mm A',\n            LTS : 'h[e]mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D [a viz] MMMM YYYY',\n            LLL : 'D [a viz] MMMM YYYY h[e]mm A',\n            LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'\n        },\n        calendar : {\n            sameDay : '[Hiziv da] LT',\n            nextDay : '[Warc\\'hoazh da] LT',\n            nextWeek : 'dddd [da] LT',\n            lastDay : '[Dec\\'h da] LT',\n            lastWeek : 'dddd [paset da] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'a-benn %s',\n            past : '%s \\'zo',\n            s : 'un nebeud segondennoù',\n            ss : '%d eilenn',\n            m : 'ur vunutenn',\n            mm : relativeTimeWithMutation,\n            h : 'un eur',\n            hh : '%d eur',\n            d : 'un devezh',\n            dd : relativeTimeWithMutation,\n            M : 'ur miz',\n            MM : relativeTimeWithMutation,\n            y : 'ur bloaz',\n            yy : specialMutationForYears\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n        ordinal : function (number) {\n            var output = (number === 1) ? 'añ' : 'vet';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return br;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var bs = moment.defineLocale('bs', {\n        months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),\n        monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[danas u] LT',\n            nextDay  : '[sutra u] LT',\n            nextWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[jučer u] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'prije %s',\n            s      : 'par sekundi',\n            ss     : translate,\n            m      : translate,\n            mm     : translate,\n            h      : translate,\n            hh     : translate,\n            d      : 'dan',\n            dd     : translate,\n            M      : 'mjesec',\n            MM     : translate,\n            y      : 'godinu',\n            yy     : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return bs;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ca = moment.defineLocale('ca', {\n        months : {\n            standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),\n            format: 'de gener_de febrer_de març_d\\'abril_de maig_de juny_de juliol_d\\'agost_de setembre_d\\'octubre_de novembre_de desembre'.split('_'),\n            isFormat: /D[oD]?(\\s)+MMMM/\n        },\n        monthsShort : 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),\n        weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin : 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM [de] YYYY',\n            ll : 'D MMM YYYY',\n            LLL : 'D MMMM [de] YYYY [a les] H:mm',\n            lll : 'D MMM YYYY, H:mm',\n            LLLL : 'dddd D MMMM [de] YYYY [a les] H:mm',\n            llll : 'ddd D MMM YYYY, H:mm'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            nextDay : function () {\n                return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            lastDay : function () {\n                return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'd\\'aquí %s',\n            past : 'fa %s',\n            s : 'uns segons',\n            ss : '%d segons',\n            m : 'un minut',\n            mm : '%d minuts',\n            h : 'una hora',\n            hh : '%d hores',\n            d : 'un dia',\n            dd : '%d dies',\n            M : 'un mes',\n            MM : '%d mesos',\n            y : 'un any',\n            yy : '%d anys'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal : function (number, period) {\n            var output = (number === 1) ? 'r' :\n                (number === 2) ? 'n' :\n                (number === 3) ? 'r' :\n                (number === 4) ? 't' : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ca;\n\n})));\n","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n/**\n * The set of allowed kind values for AST nodes.\n */\nexport var Kind = Object.freeze({\n  // Name\n  NAME: 'Name',\n\n  // Document\n  DOCUMENT: 'Document',\n  OPERATION_DEFINITION: 'OperationDefinition',\n  VARIABLE_DEFINITION: 'VariableDefinition',\n  VARIABLE: 'Variable',\n  SELECTION_SET: 'SelectionSet',\n  FIELD: 'Field',\n  ARGUMENT: 'Argument',\n\n  // Fragments\n  FRAGMENT_SPREAD: 'FragmentSpread',\n  INLINE_FRAGMENT: 'InlineFragment',\n  FRAGMENT_DEFINITION: 'FragmentDefinition',\n\n  // Values\n  INT: 'IntValue',\n  FLOAT: 'FloatValue',\n  STRING: 'StringValue',\n  BOOLEAN: 'BooleanValue',\n  NULL: 'NullValue',\n  ENUM: 'EnumValue',\n  LIST: 'ListValue',\n  OBJECT: 'ObjectValue',\n  OBJECT_FIELD: 'ObjectField',\n\n  // Directives\n  DIRECTIVE: 'Directive',\n\n  // Types\n  NAMED_TYPE: 'NamedType',\n  LIST_TYPE: 'ListType',\n  NON_NULL_TYPE: 'NonNullType',\n\n  // Type System Definitions\n  SCHEMA_DEFINITION: 'SchemaDefinition',\n  OPERATION_TYPE_DEFINITION: 'OperationTypeDefinition',\n\n  // Type Definitions\n  SCALAR_TYPE_DEFINITION: 'ScalarTypeDefinition',\n  OBJECT_TYPE_DEFINITION: 'ObjectTypeDefinition',\n  FIELD_DEFINITION: 'FieldDefinition',\n  INPUT_VALUE_DEFINITION: 'InputValueDefinition',\n  INTERFACE_TYPE_DEFINITION: 'InterfaceTypeDefinition',\n  UNION_TYPE_DEFINITION: 'UnionTypeDefinition',\n  ENUM_TYPE_DEFINITION: 'EnumTypeDefinition',\n  ENUM_VALUE_DEFINITION: 'EnumValueDefinition',\n  INPUT_OBJECT_TYPE_DEFINITION: 'InputObjectTypeDefinition',\n\n  // Type Extensions\n  SCALAR_TYPE_EXTENSION: 'ScalarTypeExtension',\n  OBJECT_TYPE_EXTENSION: 'ObjectTypeExtension',\n  INTERFACE_TYPE_EXTENSION: 'InterfaceTypeExtension',\n  UNION_TYPE_EXTENSION: 'UnionTypeExtension',\n  ENUM_TYPE_EXTENSION: 'EnumTypeExtension',\n  INPUT_OBJECT_TYPE_EXTENSION: 'InputObjectTypeExtension',\n\n  // Directive Definitions\n  DIRECTIVE_DEFINITION: 'DirectiveDefinition'\n});\n\n/**\n * The enum type representing the possible kind values of AST nodes.\n */","module.exports = global[\"$\"] = require(\"-!C:\\\\GitRepos\\\\VinFillment\\\\vinfillment-customer-portal\\\\node_modules\\\\expose-loader\\\\index.js?jQuery!.\\\\jquery.js\");","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),\n        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');\n\n    var monthsParse = [/^led/i, /^úno/i, /^bře/i, /^dub/i, /^kvě/i, /^(čvn|červen$|června)/i, /^(čvc|červenec|července)/i, /^srp/i, /^zář/i, /^říj/i, /^lis/i, /^pro/i];\n    // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n    // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n    var monthsRegex = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;\n\n    function plural(n) {\n        return (n > 1) && (n < 5) && (~~(n / 10) !== 1);\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':  // a few seconds / in a few seconds / a few seconds ago\n                return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekund');\n                } else {\n                    return result + 'sekundami';\n                }\n                break;\n            case 'm':  // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minuty' : 'minut');\n                } else {\n                    return result + 'minutami';\n                }\n                break;\n            case 'h':  // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodin');\n                } else {\n                    return result + 'hodinami';\n                }\n                break;\n            case 'd':  // a day / in a day / a day ago\n                return (withoutSuffix || isFuture) ? 'den' : 'dnem';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dny' : 'dní');\n                } else {\n                    return result + 'dny';\n                }\n                break;\n            case 'M':  // a month / in a month / a month ago\n                return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'měsíce' : 'měsíců');\n                } else {\n                    return result + 'měsíci';\n                }\n                break;\n            case 'y':  // a year / in a year / a year ago\n                return (withoutSuffix || isFuture) ? 'rok' : 'rokem';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'let');\n                } else {\n                    return result + 'lety';\n                }\n                break;\n        }\n    }\n\n    var cs = moment.defineLocale('cs', {\n        months : months,\n        monthsShort : monthsShort,\n        monthsRegex : monthsRegex,\n        monthsShortRegex : monthsRegex,\n        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n        monthsStrictRegex : /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,\n        monthsShortStrictRegex : /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n        weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n        weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),\n        weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),\n        longDateFormat : {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd D. MMMM YYYY H:mm',\n            l : 'D. M. YYYY'\n        },\n        calendar : {\n            sameDay: '[dnes v] LT',\n            nextDay: '[zítra v] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [v] LT';\n                    case 3:\n                        return '[ve středu v] LT';\n                    case 4:\n                        return '[ve čtvrtek v] LT';\n                    case 5:\n                        return '[v pátek v] LT';\n                    case 6:\n                        return '[v sobotu v] LT';\n                }\n            },\n            lastDay: '[včera v] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulou neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[minulé] dddd [v] LT';\n                    case 3:\n                        return '[minulou středu v] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [v] LT';\n                    case 6:\n                        return '[minulou sobotu v] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past : 'před %s',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return cs;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var cv = moment.defineLocale('cv', {\n        months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),\n        monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n        weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),\n        weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n        weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n            LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n            LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'\n        },\n        calendar : {\n            sameDay: '[Паян] LT [сехетре]',\n            nextDay: '[Ыран] LT [сехетре]',\n            lastDay: '[Ӗнер] LT [сехетре]',\n            nextWeek: '[Ҫитес] dddd LT [сехетре]',\n            lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : function (output) {\n                var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';\n                return output + affix;\n            },\n            past : '%s каялла',\n            s : 'пӗр-ик ҫеккунт',\n            ss : '%d ҫеккунт',\n            m : 'пӗр минут',\n            mm : '%d минут',\n            h : 'пӗр сехет',\n            hh : '%d сехет',\n            d : 'пӗр кун',\n            dd : '%d кун',\n            M : 'пӗр уйӑх',\n            MM : '%d уйӑх',\n            y : 'пӗр ҫул',\n            yy : '%d ҫул'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n        ordinal : '%d-мӗш',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return cv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var cy = moment.defineLocale('cy', {\n        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),\n        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),\n        weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),\n        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n        weekdaysParseExact : true,\n        // time formats are the same as en-gb\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[Heddiw am] LT',\n            nextDay: '[Yfory am] LT',\n            nextWeek: 'dddd [am] LT',\n            lastDay: '[Ddoe am] LT',\n            lastWeek: 'dddd [diwethaf am] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'mewn %s',\n            past: '%s yn ôl',\n            s: 'ychydig eiliadau',\n            ss: '%d eiliad',\n            m: 'munud',\n            mm: '%d munud',\n            h: 'awr',\n            hh: '%d awr',\n            d: 'diwrnod',\n            dd: '%d diwrnod',\n            M: 'mis',\n            MM: '%d mis',\n            y: 'blwyddyn',\n            yy: '%d flynedd'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n        ordinal: function (number) {\n            var b = number,\n                output = '',\n                lookup = [\n                    '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed\n                    'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed\n                ];\n            if (b > 20) {\n                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n                    output = 'fed'; // not 30ain, 70ain or 90ain\n                } else {\n                    output = 'ain';\n                }\n            } else if (b > 0) {\n                output = lookup[b];\n            }\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return cy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var da = moment.defineLocale('da', {\n        months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n        weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm'\n        },\n        calendar : {\n            sameDay : '[i dag kl.] LT',\n            nextDay : '[i morgen kl.] LT',\n            nextWeek : 'på dddd [kl.] LT',\n            lastDay : '[i går kl.] LT',\n            lastWeek : '[i] dddd[s kl.] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : '%s siden',\n            s : 'få sekunder',\n            ss : '%d sekunder',\n            m : 'et minut',\n            mm : '%d minutter',\n            h : 'en time',\n            hh : '%d timer',\n            d : 'en dag',\n            dd : '%d dage',\n            M : 'en måned',\n            MM : '%d måneder',\n            y : 'et år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return da;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eine Minute', 'einer Minute'],\n            'h': ['eine Stunde', 'einer Stunde'],\n            'd': ['ein Tag', 'einem Tag'],\n            'dd': [number + ' Tage', number + ' Tagen'],\n            'M': ['ein Monat', 'einem Monat'],\n            'MM': [number + ' Monate', number + ' Monaten'],\n            'y': ['ein Jahr', 'einem Jahr'],\n            'yy': [number + ' Jahre', number + ' Jahren']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var de = moment.defineLocale('de', {\n        months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n        weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : 'vor %s',\n            s : 'ein paar Sekunden',\n            ss : '%d Sekunden',\n            m : processRelativeTime,\n            mm : '%d Minuten',\n            h : processRelativeTime,\n            hh : '%d Stunden',\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return de;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eine Minute', 'einer Minute'],\n            'h': ['eine Stunde', 'einer Stunde'],\n            'd': ['ein Tag', 'einem Tag'],\n            'dd': [number + ' Tage', number + ' Tagen'],\n            'M': ['ein Monat', 'einem Monat'],\n            'MM': [number + ' Monate', number + ' Monaten'],\n            'y': ['ein Jahr', 'einem Jahr'],\n            'yy': [number + ' Jahre', number + ' Jahren']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deAt = moment.defineLocale('de-at', {\n        months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort : 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n        weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : 'vor %s',\n            s : 'ein paar Sekunden',\n            ss : '%d Sekunden',\n            m : processRelativeTime,\n            mm : '%d Minuten',\n            h : processRelativeTime,\n            hh : '%d Stunden',\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return deAt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eine Minute', 'einer Minute'],\n            'h': ['eine Stunde', 'einer Stunde'],\n            'd': ['ein Tag', 'einem Tag'],\n            'dd': [number + ' Tage', number + ' Tagen'],\n            'M': ['ein Monat', 'einem Monat'],\n            'MM': [number + ' Monate', number + ' Monaten'],\n            'y': ['ein Jahr', 'einem Jahr'],\n            'yy': [number + ' Jahre', number + ' Jahren']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deCh = moment.defineLocale('de-ch', {\n        months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n        weekdaysShort : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : 'vor %s',\n            s : 'ein paar Sekunden',\n            ss : '%d Sekunden',\n            m : processRelativeTime,\n            mm : '%d Minuten',\n            h : processRelativeTime,\n            hh : '%d Stunden',\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return deCh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'ޖެނުއަރީ',\n        'ފެބްރުއަރީ',\n        'މާރިޗު',\n        'އޭޕްރީލު',\n        'މޭ',\n        'ޖޫން',\n        'ޖުލައި',\n        'އޯގަސްޓު',\n        'ސެޕްޓެމްބަރު',\n        'އޮކްޓޯބަރު',\n        'ނޮވެމްބަރު',\n        'ޑިސެމްބަރު'\n    ], weekdays = [\n        'އާދިއްތަ',\n        'ހޯމަ',\n        'އަންގާރަ',\n        'ބުދަ',\n        'ބުރާސްފަތި',\n        'ހުކުރު',\n        'ހޮނިހިރު'\n    ];\n\n    var dv = moment.defineLocale('dv', {\n        months : months,\n        monthsShort : months,\n        weekdays : weekdays,\n        weekdaysShort : weekdays,\n        weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n        longDateFormat : {\n\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'D/M/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /މކ|މފ/,\n        isPM : function (input) {\n            return 'މފ' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'މކ';\n            } else {\n                return 'މފ';\n            }\n        },\n        calendar : {\n            sameDay : '[މިއަދު] LT',\n            nextDay : '[މާދަމާ] LT',\n            nextWeek : 'dddd LT',\n            lastDay : '[އިއްޔެ] LT',\n            lastWeek : '[ފާއިތުވި] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ތެރޭގައި %s',\n            past : 'ކުރިން %s',\n            s : 'ސިކުންތުކޮޅެއް',\n            ss : 'd% ސިކުންތު',\n            m : 'މިނިޓެއް',\n            mm : 'މިނިޓު %d',\n            h : 'ގަޑިއިރެއް',\n            hh : 'ގަޑިއިރު %d',\n            d : 'ދުވަހެއް',\n            dd : 'ދުވަސް %d',\n            M : 'މަހެއް',\n            MM : 'މަސް %d',\n            y : 'އަހަރެއް',\n            yy : 'އަހަރު %d'\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week : {\n            dow : 7,  // Sunday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return dv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    function isFunction(input) {\n        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n    }\n\n\n    var el = moment.defineLocale('el', {\n        monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),\n        monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),\n        months : function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return this._monthsNominativeEl;\n            } else if (typeof format === 'string' && /D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'\n                return this._monthsGenitiveEl[momentToFormat.month()];\n            } else {\n                return this._monthsNominativeEl[momentToFormat.month()];\n            }\n        },\n        monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n        weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),\n        weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n        weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'μμ' : 'ΜΜ';\n            } else {\n                return isLower ? 'πμ' : 'ΠΜ';\n            }\n        },\n        isPM : function (input) {\n            return ((input + '').toLowerCase()[0] === 'μ');\n        },\n        meridiemParse : /[ΠΜ]\\.?Μ?\\.?/i,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendarEl : {\n            sameDay : '[Σήμερα {}] LT',\n            nextDay : '[Αύριο {}] LT',\n            nextWeek : 'dddd [{}] LT',\n            lastDay : '[Χθες {}] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 6:\n                        return '[το προηγούμενο] dddd [{}] LT';\n                    default:\n                        return '[την προηγούμενη] dddd [{}] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        calendar : function (key, mom) {\n            var output = this._calendarEl[key],\n                hours = mom && mom.hours();\n            if (isFunction(output)) {\n                output = output.apply(mom);\n            }\n            return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));\n        },\n        relativeTime : {\n            future : 'σε %s',\n            past : '%s πριν',\n            s : 'λίγα δευτερόλεπτα',\n            ss : '%d δευτερόλεπτα',\n            m : 'ένα λεπτό',\n            mm : '%d λεπτά',\n            h : 'μία ώρα',\n            hh : '%d ώρες',\n            d : 'μία μέρα',\n            dd : '%d μέρες',\n            M : 'ένας μήνας',\n            MM : '%d μήνες',\n            y : 'ένας χρόνος',\n            yy : '%d χρόνια'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}η/,\n        ordinal: '%dη',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4st is the first week of the year.\n        }\n    });\n\n    return el;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enSG = moment.defineLocale('en-SG', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enSG;\n\n})));\n","var _dec, _class, _dec2, _class3, _dec3, _class5, _dec4, _class7, _dec5, _class9, _dec6, _class11, _dec7, _class13, _classInvokers;\n\n\n\nimport { protocol, metadata } from 'aurelia-metadata';\nimport { AggregateError } from 'aurelia-pal';\n\nexport var resolver = protocol.create('aurelia:resolver', function (target) {\n  if (!(typeof target.get === 'function')) {\n    return 'Resolvers must implement: get(container: Container, key: any): any';\n  }\n\n  return true;\n});\n\nexport var Lazy = (_dec = resolver(), _dec(_class = function () {\n  function Lazy(key) {\n    \n\n    this._key = key;\n  }\n\n  Lazy.prototype.get = function get(container) {\n    var _this = this;\n\n    return function () {\n      return container.get(_this._key);\n    };\n  };\n\n  Lazy.of = function of(key) {\n    return new Lazy(key);\n  };\n\n  return Lazy;\n}()) || _class);\n\nexport var All = (_dec2 = resolver(), _dec2(_class3 = function () {\n  function All(key) {\n    \n\n    this._key = key;\n  }\n\n  All.prototype.get = function get(container) {\n    return container.getAll(this._key);\n  };\n\n  All.of = function of(key) {\n    return new All(key);\n  };\n\n  return All;\n}()) || _class3);\n\nexport var Optional = (_dec3 = resolver(), _dec3(_class5 = function () {\n  function Optional(key) {\n    var checkParent = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];\n\n    \n\n    this._key = key;\n    this._checkParent = checkParent;\n  }\n\n  Optional.prototype.get = function get(container) {\n    if (container.hasResolver(this._key, this._checkParent)) {\n      return container.get(this._key);\n    }\n\n    return null;\n  };\n\n  Optional.of = function of(key) {\n    var checkParent = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];\n\n    return new Optional(key, checkParent);\n  };\n\n  return Optional;\n}()) || _class5);\n\nexport var Parent = (_dec4 = resolver(), _dec4(_class7 = function () {\n  function Parent(key) {\n    \n\n    this._key = key;\n  }\n\n  Parent.prototype.get = function get(container) {\n    return container.parent ? container.parent.get(this._key) : null;\n  };\n\n  Parent.of = function of(key) {\n    return new Parent(key);\n  };\n\n  return Parent;\n}()) || _class7);\n\nexport var StrategyResolver = (_dec5 = resolver(), _dec5(_class9 = function () {\n  function StrategyResolver(strategy, state) {\n    \n\n    this.strategy = strategy;\n    this.state = state;\n  }\n\n  StrategyResolver.prototype.get = function get(container, key) {\n    switch (this.strategy) {\n      case 0:\n        return this.state;\n      case 1:\n        var singleton = container.invoke(this.state);\n        this.state = singleton;\n        this.strategy = 0;\n        return singleton;\n      case 2:\n        return container.invoke(this.state);\n      case 3:\n        return this.state(container, key, this);\n      case 4:\n        return this.state[0].get(container, key);\n      case 5:\n        return container.get(this.state);\n      default:\n        throw new Error('Invalid strategy: ' + this.strategy);\n    }\n  };\n\n  return StrategyResolver;\n}()) || _class9);\n\nexport var Factory = (_dec6 = resolver(), _dec6(_class11 = function () {\n  function Factory(key) {\n    \n\n    this._key = key;\n  }\n\n  Factory.prototype.get = function get(container) {\n    var _this2 = this;\n\n    return function () {\n      for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) {\n        rest[_key] = arguments[_key];\n      }\n\n      return container.invoke(_this2._key, rest);\n    };\n  };\n\n  Factory.of = function of(key) {\n    return new Factory(key);\n  };\n\n  return Factory;\n}()) || _class11);\n\nexport var NewInstance = (_dec7 = resolver(), _dec7(_class13 = function () {\n  function NewInstance(key) {\n    \n\n    this.key = key;\n    this.asKey = key;\n\n    for (var _len2 = arguments.length, dynamicDependencies = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      dynamicDependencies[_key2 - 1] = arguments[_key2];\n    }\n\n    this.dynamicDependencies = dynamicDependencies;\n  }\n\n  NewInstance.prototype.get = function get(container) {\n    var dynamicDependencies = this.dynamicDependencies.length > 0 ? this.dynamicDependencies.map(function (dependency) {\n      return dependency['protocol:aurelia:resolver'] ? dependency.get(container) : container.get(dependency);\n    }) : undefined;\n    var instance = container.invoke(this.key, dynamicDependencies);\n    container.registerInstance(this.asKey, instance);\n    return instance;\n  };\n\n  NewInstance.prototype.as = function as(key) {\n    this.asKey = key;\n    return this;\n  };\n\n  NewInstance.of = function of(key) {\n    for (var _len3 = arguments.length, dynamicDependencies = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n      dynamicDependencies[_key3 - 1] = arguments[_key3];\n    }\n\n    return new (Function.prototype.bind.apply(NewInstance, [null].concat([key], dynamicDependencies)))();\n  };\n\n  return NewInstance;\n}()) || _class13);\n\nexport function getDecoratorDependencies(target, name) {\n  var dependencies = target.inject;\n  if (typeof dependencies === 'function') {\n    throw new Error('Decorator ' + name + ' cannot be used with \"inject()\".  Please use an array instead.');\n  }\n  if (!dependencies) {\n    dependencies = metadata.getOwn(metadata.paramTypes, target).slice();\n    target.inject = dependencies;\n  }\n\n  return dependencies;\n}\n\nexport function lazy(keyValue) {\n  return function (target, key, index) {\n    var params = getDecoratorDependencies(target, 'lazy');\n    params[index] = Lazy.of(keyValue);\n  };\n}\n\nexport function all(keyValue) {\n  return function (target, key, index) {\n    var params = getDecoratorDependencies(target, 'all');\n    params[index] = All.of(keyValue);\n  };\n}\n\nexport function optional() {\n  var checkParentOrTarget = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0];\n\n  var deco = function deco(checkParent) {\n    return function (target, key, index) {\n      var params = getDecoratorDependencies(target, 'optional');\n      params[index] = Optional.of(params[index], checkParent);\n    };\n  };\n  if (typeof checkParentOrTarget === 'boolean') {\n    return deco(checkParentOrTarget);\n  }\n  return deco(true);\n}\n\nexport function parent(target, key, index) {\n  var params = getDecoratorDependencies(target, 'parent');\n  params[index] = Parent.of(params[index]);\n}\n\nexport function factory(keyValue, asValue) {\n  return function (target, key, index) {\n    var params = getDecoratorDependencies(target, 'factory');\n    var factory = Factory.of(keyValue);\n    params[index] = asValue ? factory.as(asValue) : factory;\n  };\n}\n\nexport function newInstance(asKeyOrTarget) {\n  for (var _len4 = arguments.length, dynamicDependencies = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n    dynamicDependencies[_key4 - 1] = arguments[_key4];\n  }\n\n  var deco = function deco(asKey) {\n    return function (target, key, index) {\n      var params = getDecoratorDependencies(target, 'newInstance');\n      params[index] = NewInstance.of.apply(NewInstance, [params[index]].concat(dynamicDependencies));\n      if (!!asKey) {\n        params[index].as(asKey);\n      }\n    };\n  };\n  if (arguments.length >= 1) {\n    return deco(asKeyOrTarget);\n  }\n  return deco();\n}\n\nexport function invoker(value) {\n  return function (target) {\n    metadata.define(metadata.invoker, value, target);\n  };\n}\n\nexport function invokeAsFactory(potentialTarget) {\n  var deco = function deco(target) {\n    metadata.define(metadata.invoker, FactoryInvoker.instance, target);\n  };\n\n  return potentialTarget ? deco(potentialTarget) : deco;\n}\n\nexport var FactoryInvoker = function () {\n  function FactoryInvoker() {\n    \n  }\n\n  FactoryInvoker.prototype.invoke = function invoke(container, fn, dependencies) {\n    var i = dependencies.length;\n    var args = new Array(i);\n\n    while (i--) {\n      args[i] = container.get(dependencies[i]);\n    }\n\n    return fn.apply(undefined, args);\n  };\n\n  FactoryInvoker.prototype.invokeWithDynamicDependencies = function invokeWithDynamicDependencies(container, fn, staticDependencies, dynamicDependencies) {\n    var i = staticDependencies.length;\n    var args = new Array(i);\n\n    while (i--) {\n      args[i] = container.get(staticDependencies[i]);\n    }\n\n    if (dynamicDependencies !== undefined) {\n      args = args.concat(dynamicDependencies);\n    }\n\n    return fn.apply(undefined, args);\n  };\n\n  return FactoryInvoker;\n}();\n\nFactoryInvoker.instance = new FactoryInvoker();\n\nexport function registration(value) {\n  return function (target) {\n    metadata.define(metadata.registration, value, target);\n  };\n}\n\nexport function transient(key) {\n  return registration(new TransientRegistration(key));\n}\n\nexport function singleton(keyOrRegisterInChild) {\n  var registerInChild = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n\n  return registration(new SingletonRegistration(keyOrRegisterInChild, registerInChild));\n}\n\nexport var TransientRegistration = function () {\n  function TransientRegistration(key) {\n    \n\n    this._key = key;\n  }\n\n  TransientRegistration.prototype.registerResolver = function registerResolver(container, key, fn) {\n    var existingResolver = container.getResolver(this._key || key);\n    return existingResolver === undefined ? container.registerTransient(this._key || key, fn) : existingResolver;\n  };\n\n  return TransientRegistration;\n}();\n\nexport var SingletonRegistration = function () {\n  function SingletonRegistration(keyOrRegisterInChild) {\n    var registerInChild = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n\n    \n\n    if (typeof keyOrRegisterInChild === 'boolean') {\n      this._registerInChild = keyOrRegisterInChild;\n    } else {\n      this._key = keyOrRegisterInChild;\n      this._registerInChild = registerInChild;\n    }\n  }\n\n  SingletonRegistration.prototype.registerResolver = function registerResolver(container, key, fn) {\n    var targetContainer = this._registerInChild ? container : container.root;\n    var existingResolver = targetContainer.getResolver(this._key || key);\n    return existingResolver === undefined ? targetContainer.registerSingleton(this._key || key, fn) : existingResolver;\n  };\n\n  return SingletonRegistration;\n}();\n\nfunction validateKey(key) {\n  if (key === null || key === undefined) {\n    throw new Error('key/value cannot be null or undefined. Are you trying to inject/register something that doesn\\'t exist with DI?');\n  }\n}\nexport var _emptyParameters = Object.freeze([]);\n\nmetadata.registration = 'aurelia:registration';\nmetadata.invoker = 'aurelia:invoker';\n\nvar resolverDecorates = resolver.decorates;\n\nexport var InvocationHandler = function () {\n  function InvocationHandler(fn, invoker, dependencies) {\n    \n\n    this.fn = fn;\n    this.invoker = invoker;\n    this.dependencies = dependencies;\n  }\n\n  InvocationHandler.prototype.invoke = function invoke(container, dynamicDependencies) {\n    return dynamicDependencies !== undefined ? this.invoker.invokeWithDynamicDependencies(container, this.fn, this.dependencies, dynamicDependencies) : this.invoker.invoke(container, this.fn, this.dependencies);\n  };\n\n  return InvocationHandler;\n}();\n\nfunction invokeWithDynamicDependencies(container, fn, staticDependencies, dynamicDependencies) {\n  var i = staticDependencies.length;\n  var args = new Array(i);\n  var lookup = void 0;\n\n  while (i--) {\n    lookup = staticDependencies[i];\n\n    if (lookup === null || lookup === undefined) {\n      throw new Error('Constructor Parameter with index ' + i + ' cannot be null or undefined. Are you trying to inject/register something that doesn\\'t exist with DI?');\n    } else {\n      args[i] = container.get(lookup);\n    }\n  }\n\n  if (dynamicDependencies !== undefined) {\n    args = args.concat(dynamicDependencies);\n  }\n\n  return Reflect.construct(fn, args);\n}\n\nvar classInvokers = (_classInvokers = {}, _classInvokers[0] = {\n  invoke: function invoke(container, Type) {\n    return new Type();\n  },\n\n  invokeWithDynamicDependencies: invokeWithDynamicDependencies\n}, _classInvokers[1] = {\n  invoke: function invoke(container, Type, deps) {\n    return new Type(container.get(deps[0]));\n  },\n\n  invokeWithDynamicDependencies: invokeWithDynamicDependencies\n}, _classInvokers[2] = {\n  invoke: function invoke(container, Type, deps) {\n    return new Type(container.get(deps[0]), container.get(deps[1]));\n  },\n\n  invokeWithDynamicDependencies: invokeWithDynamicDependencies\n}, _classInvokers[3] = {\n  invoke: function invoke(container, Type, deps) {\n    return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]));\n  },\n\n  invokeWithDynamicDependencies: invokeWithDynamicDependencies\n}, _classInvokers[4] = {\n  invoke: function invoke(container, Type, deps) {\n    return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]), container.get(deps[3]));\n  },\n\n  invokeWithDynamicDependencies: invokeWithDynamicDependencies\n}, _classInvokers[5] = {\n  invoke: function invoke(container, Type, deps) {\n    return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]), container.get(deps[3]), container.get(deps[4]));\n  },\n\n  invokeWithDynamicDependencies: invokeWithDynamicDependencies\n}, _classInvokers.fallback = {\n  invoke: invokeWithDynamicDependencies,\n  invokeWithDynamicDependencies: invokeWithDynamicDependencies\n}, _classInvokers);\n\nfunction getDependencies(f) {\n  if (!f.hasOwnProperty('inject')) {\n    return [];\n  }\n\n  if (typeof f.inject === 'function') {\n    return f.inject();\n  }\n\n  return f.inject;\n}\n\nexport var Container = function () {\n  function Container(configuration) {\n    \n\n    if (configuration === undefined) {\n      configuration = {};\n    }\n\n    this._configuration = configuration;\n    this._onHandlerCreated = configuration.onHandlerCreated;\n    this._handlers = configuration.handlers || (configuration.handlers = new Map());\n    this._resolvers = new Map();\n    this.root = this;\n    this.parent = null;\n  }\n\n  Container.prototype.makeGlobal = function makeGlobal() {\n    Container.instance = this;\n    return this;\n  };\n\n  Container.prototype.setHandlerCreatedCallback = function setHandlerCreatedCallback(onHandlerCreated) {\n    this._onHandlerCreated = onHandlerCreated;\n    this._configuration.onHandlerCreated = onHandlerCreated;\n  };\n\n  Container.prototype.registerInstance = function registerInstance(key, instance) {\n    return this.registerResolver(key, new StrategyResolver(0, instance === undefined ? key : instance));\n  };\n\n  Container.prototype.registerSingleton = function registerSingleton(key, fn) {\n    return this.registerResolver(key, new StrategyResolver(1, fn === undefined ? key : fn));\n  };\n\n  Container.prototype.registerTransient = function registerTransient(key, fn) {\n    return this.registerResolver(key, new StrategyResolver(2, fn === undefined ? key : fn));\n  };\n\n  Container.prototype.registerHandler = function registerHandler(key, handler) {\n    return this.registerResolver(key, new StrategyResolver(3, handler));\n  };\n\n  Container.prototype.registerAlias = function registerAlias(originalKey, aliasKey) {\n    return this.registerResolver(aliasKey, new StrategyResolver(5, originalKey));\n  };\n\n  Container.prototype.registerResolver = function registerResolver(key, resolver) {\n    validateKey(key);\n\n    var allResolvers = this._resolvers;\n    var result = allResolvers.get(key);\n\n    if (result === undefined) {\n      allResolvers.set(key, resolver);\n    } else if (result.strategy === 4) {\n      result.state.push(resolver);\n    } else {\n      allResolvers.set(key, new StrategyResolver(4, [result, resolver]));\n    }\n\n    return resolver;\n  };\n\n  Container.prototype.autoRegister = function autoRegister(key, fn) {\n    fn = fn === undefined ? key : fn;\n\n    if (typeof fn === 'function') {\n      var _registration = metadata.get(metadata.registration, fn);\n\n      if (_registration === undefined) {\n        return this.registerResolver(key, new StrategyResolver(1, fn));\n      }\n\n      return _registration.registerResolver(this, key, fn);\n    }\n\n    return this.registerResolver(key, new StrategyResolver(0, fn));\n  };\n\n  Container.prototype.autoRegisterAll = function autoRegisterAll(fns) {\n    var i = fns.length;\n    while (i--) {\n      this.autoRegister(fns[i]);\n    }\n  };\n\n  Container.prototype.unregister = function unregister(key) {\n    this._resolvers.delete(key);\n  };\n\n  Container.prototype.hasResolver = function hasResolver(key) {\n    var checkParent = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n\n    validateKey(key);\n\n    return this._resolvers.has(key) || checkParent && this.parent !== null && this.parent.hasResolver(key, checkParent);\n  };\n\n  Container.prototype.getResolver = function getResolver(key) {\n    return this._resolvers.get(key);\n  };\n\n  Container.prototype.get = function get(key) {\n    validateKey(key);\n\n    if (key === Container) {\n      return this;\n    }\n\n    if (resolverDecorates(key)) {\n      return key.get(this, key);\n    }\n\n    var resolver = this._resolvers.get(key);\n\n    if (resolver === undefined) {\n      if (this.parent === null) {\n        return this.autoRegister(key).get(this, key);\n      }\n\n      var _registration2 = metadata.get(metadata.registration, key);\n\n      if (_registration2 === undefined) {\n        return this.parent._get(key);\n      }\n\n      return _registration2.registerResolver(this, key, key).get(this, key);\n    }\n\n    return resolver.get(this, key);\n  };\n\n  Container.prototype._get = function _get(key) {\n    var resolver = this._resolvers.get(key);\n\n    if (resolver === undefined) {\n      if (this.parent === null) {\n        return this.autoRegister(key).get(this, key);\n      }\n\n      return this.parent._get(key);\n    }\n\n    return resolver.get(this, key);\n  };\n\n  Container.prototype.getAll = function getAll(key) {\n    validateKey(key);\n\n    var resolver = this._resolvers.get(key);\n\n    if (resolver === undefined) {\n      if (this.parent === null) {\n        return _emptyParameters;\n      }\n\n      return this.parent.getAll(key);\n    }\n\n    if (resolver.strategy === 4) {\n      var state = resolver.state;\n      var i = state.length;\n      var results = new Array(i);\n\n      while (i--) {\n        results[i] = state[i].get(this, key);\n      }\n\n      return results;\n    }\n\n    return [resolver.get(this, key)];\n  };\n\n  Container.prototype.createChild = function createChild() {\n    var child = new Container(this._configuration);\n    child.root = this.root;\n    child.parent = this;\n    return child;\n  };\n\n  Container.prototype.invoke = function invoke(fn, dynamicDependencies) {\n    try {\n      var _handler = this._handlers.get(fn);\n\n      if (_handler === undefined) {\n        _handler = this._createInvocationHandler(fn);\n        this._handlers.set(fn, _handler);\n      }\n\n      return _handler.invoke(this, dynamicDependencies);\n    } catch (e) {\n      throw new AggregateError('Error invoking ' + fn.name + '. Check the inner error for details.', e, true);\n    }\n  };\n\n  Container.prototype._createInvocationHandler = function _createInvocationHandler(fn) {\n    var dependencies = void 0;\n\n    if (fn.inject === undefined) {\n      dependencies = metadata.getOwn(metadata.paramTypes, fn) || _emptyParameters;\n    } else {\n      dependencies = [];\n      var ctor = fn;\n      while (typeof ctor === 'function') {\n        var _dependencies;\n\n        (_dependencies = dependencies).push.apply(_dependencies, getDependencies(ctor));\n        ctor = Object.getPrototypeOf(ctor);\n      }\n    }\n\n    var invoker = metadata.getOwn(metadata.invoker, fn) || classInvokers[dependencies.length] || classInvokers.fallback;\n\n    var handler = new InvocationHandler(fn, invoker, dependencies);\n    return this._onHandlerCreated !== undefined ? this._onHandlerCreated(handler) : handler;\n  };\n\n  return Container;\n}();\n\nexport function autoinject(potentialTarget) {\n  var deco = function deco(target) {\n    var previousInject = target.inject ? target.inject.slice() : null;\n    var autoInject = metadata.getOwn(metadata.paramTypes, target) || _emptyParameters;\n    if (!previousInject) {\n      target.inject = autoInject;\n    } else {\n      for (var i = 0; i < autoInject.length; i++) {\n        if (previousInject[i] && previousInject[i] !== autoInject[i]) {\n          var prevIndex = previousInject.indexOf(autoInject[i]);\n          if (prevIndex > -1) {\n            previousInject.splice(prevIndex, 1);\n          }\n          previousInject.splice(prevIndex > -1 && prevIndex < i ? i - 1 : i, 0, autoInject[i]);\n        } else if (!previousInject[i]) {\n          previousInject[i] = autoInject[i];\n        }\n      }\n      target.inject = previousInject;\n    }\n  };\n\n  return potentialTarget ? deco(potentialTarget) : deco;\n}\n\nexport function inject() {\n  for (var _len5 = arguments.length, rest = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n    rest[_key5] = arguments[_key5];\n  }\n\n  return function (target, key, descriptor) {\n    if (typeof descriptor === 'number' && rest.length === 1) {\n      var params = target.inject;\n      if (typeof params === 'function') {\n        throw new Error('Decorator inject cannot be used with \"inject()\".  Please use an array instead.');\n      }\n      if (!params) {\n        params = metadata.getOwn(metadata.paramTypes, target).slice();\n        target.inject = params;\n      }\n      params[descriptor] = rest[0];\n      return;\n    }\n\n    if (descriptor) {\n      var _fn = descriptor.value;\n      _fn.inject = rest;\n    } else {\n      target.inject = rest;\n    }\n  };\n}","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enAu = moment.defineLocale('en-au', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enAu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enCa = moment.defineLocale('en-ca', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'YYYY-MM-DD',\n            LL : 'MMMM D, YYYY',\n            LLL : 'MMMM D, YYYY h:mm A',\n            LLLL : 'dddd, MMMM D, YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    return enCa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enGb = moment.defineLocale('en-gb', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enGb;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enIe = moment.defineLocale('en-ie', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enIe;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enIl = moment.defineLocale('en-il', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    return enIl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enNz = moment.defineLocale('en-nz', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enNz;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var eo = moment.defineLocale('eo', {\n        months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),\n        weekdays : 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n        weekdaysShort : 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'D[-a de] MMMM, YYYY',\n            LLL : 'D[-a de] MMMM, YYYY HH:mm',\n            LLLL : 'dddd, [la] D[-a de] MMMM, YYYY HH:mm'\n        },\n        meridiemParse: /[ap]\\.t\\.m/i,\n        isPM: function (input) {\n            return input.charAt(0).toLowerCase() === 'p';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'p.t.m.' : 'P.T.M.';\n            } else {\n                return isLower ? 'a.t.m.' : 'A.T.M.';\n            }\n        },\n        calendar : {\n            sameDay : '[Hodiaŭ je] LT',\n            nextDay : '[Morgaŭ je] LT',\n            nextWeek : 'dddd [je] LT',\n            lastDay : '[Hieraŭ je] LT',\n            lastWeek : '[pasinta] dddd [je] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'post %s',\n            past : 'antaŭ %s',\n            s : 'sekundoj',\n            ss : '%d sekundoj',\n            m : 'minuto',\n            mm : '%d minutoj',\n            h : 'horo',\n            hh : '%d horoj',\n            d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo\n            dd : '%d tagoj',\n            M : 'monato',\n            MM : '%d monatoj',\n            y : 'jaro',\n            yy : '%d jaroj'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}a/,\n        ordinal : '%da',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return eo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n    var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n    var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var es = moment.defineLocale('es', {\n        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex : monthsRegex,\n        monthsShortRegex : monthsRegex,\n        monthsStrictRegex : /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex : /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY H:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastDay : function () {\n                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'en %s',\n            past : 'hace %s',\n            s : 'unos segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'una hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un año',\n            yy : '%d años'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return es;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n    var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n    var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esDo = moment.defineLocale('es-do', {\n        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastDay : function () {\n                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'en %s',\n            past : 'hace %s',\n            s : 'unos segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'una hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un año',\n            yy : '%d años'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return esDo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n    var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n    var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esUs = moment.defineLocale('es-us', {\n        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'MM/DD/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastDay : function () {\n                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'en %s',\n            past : 'hace %s',\n            s : 'unos segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'una hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un año',\n            yy : '%d años'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return esUs;\n\n})));\n","import {autoinject} from \"aurelia-dependency-injection\";\nimport { Logger } from \"aurelia-logging\";\nimport { LogManager, Container } from \"aurelia-framework\";\nimport { API, Auth } from \"aws-amplify\";\nimport moment from 'moment';\nimport { UserSession } from \"user/models/user-session\";\n\n@autoinject\nexport class DefaultService {\n    static readonly API_NAME = \"CustomerPortalBackend\";\n    logger: Logger;\n    protected userSession: UserSession\n    constructor(className:string) {\n        this.logger = LogManager.getLogger(className);\n        this.userSession = Container.instance.get(UserSession);\n    }\n\n    private async getBearerToken(): Promise<string>{\n        return `Bearer ${(await Auth.currentSession()).getIdToken().getJwtToken()}`;\n    }\n\n    async get(uri: String): Promise<any> {\n        let response =  await API.get(DefaultService.API_NAME, `${uri}`, {\n            headers: {\n                Authorization: await this.getBearerToken(),\n                \"Winery-Id\": this.userSession.currentWinery ? this.userSession.currentWinery.id : \"\"\n            }\n        });\n        return response;\n    }\n\n    async post(uri: String, requestData: any): Promise<any> {\n        requestData = requestData || {};\n        return await API.post(DefaultService.API_NAME, `${uri}`, {\n            headers: {\n                Authorization: await this.getBearerToken(),\n                \"Winery-Id\": this.userSession.currentWinery ? this.userSession.currentWinery.id : \"\"                \n            },\n            body: requestData\n        });\n    }\n\n    async put(uri: String, requestData: any): Promise<any> {\n        requestData = requestData || {};\n        return await API.put(DefaultService.API_NAME, `${uri}`, {\n            headers: {\n                Authorization: await this.getBearerToken(),\n                \"Winery-Id\": this.userSession.currentWinery ? this.userSession.currentWinery.id : \"\"\n            },\n            body: requestData\n        });\n    }\n\n    getRecordArrayFieldValue(value): any{\n        return value && value.length === 2 ? { id: value[0], name: value[1] } : null;\n    }\n\n    _convertValueToDate(dateValue): Date{\n        return moment(dateValue, \"YYYY-MM-DD\").toDate();\n    }\n\n    _convertValueToDateTime(dateTimeValue): Date{\n        return moment.utc(dateTimeValue, \"YYYY-MM-DD hh:mm:ss\").toDate();\n    }\n}","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n            'ss': [number + 'sekundi', number + 'sekundit'],\n            'm' : ['ühe minuti', 'üks minut'],\n            'mm': [number + ' minuti', number + ' minutit'],\n            'h' : ['ühe tunni', 'tund aega', 'üks tund'],\n            'hh': [number + ' tunni', number + ' tundi'],\n            'd' : ['ühe päeva', 'üks päev'],\n            'M' : ['kuu aja', 'kuu aega', 'üks kuu'],\n            'MM': [number + ' kuu', number + ' kuud'],\n            'y' : ['ühe aasta', 'aasta', 'üks aasta'],\n            'yy': [number + ' aasta', number + ' aastat']\n        };\n        if (withoutSuffix) {\n            return format[key][2] ? format[key][2] : format[key][1];\n        }\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var et = moment.defineLocale('et', {\n        months        : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),\n        monthsShort   : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n        weekdays      : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),\n        weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),\n        weekdaysMin   : 'P_E_T_K_N_R_L'.split('_'),\n        longDateFormat : {\n            LT   : 'H:mm',\n            LTS : 'H:mm:ss',\n            L    : 'DD.MM.YYYY',\n            LL   : 'D. MMMM YYYY',\n            LLL  : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[Täna,] LT',\n            nextDay  : '[Homme,] LT',\n            nextWeek : '[Järgmine] dddd LT',\n            lastDay  : '[Eile,] LT',\n            lastWeek : '[Eelmine] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s pärast',\n            past   : '%s tagasi',\n            s      : processRelativeTime,\n            ss     : processRelativeTime,\n            m      : processRelativeTime,\n            mm     : processRelativeTime,\n            h      : processRelativeTime,\n            hh     : processRelativeTime,\n            d      : processRelativeTime,\n            dd     : '%d päeva',\n            M      : processRelativeTime,\n            MM     : processRelativeTime,\n            y      : processRelativeTime,\n            yy     : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return et;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var eu = moment.defineLocale('eu', {\n        months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),\n        monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),\n        weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),\n        weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'YYYY[ko] MMMM[ren] D[a]',\n            LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n            LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n            l : 'YYYY-M-D',\n            ll : 'YYYY[ko] MMM D[a]',\n            lll : 'YYYY[ko] MMM D[a] HH:mm',\n            llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'\n        },\n        calendar : {\n            sameDay : '[gaur] LT[etan]',\n            nextDay : '[bihar] LT[etan]',\n            nextWeek : 'dddd LT[etan]',\n            lastDay : '[atzo] LT[etan]',\n            lastWeek : '[aurreko] dddd LT[etan]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s barru',\n            past : 'duela %s',\n            s : 'segundo batzuk',\n            ss : '%d segundo',\n            m : 'minutu bat',\n            mm : '%d minutu',\n            h : 'ordu bat',\n            hh : '%d ordu',\n            d : 'egun bat',\n            dd : '%d egun',\n            M : 'hilabete bat',\n            MM : '%d hilabete',\n            y : 'urte bat',\n            yy : '%d urte'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return eu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '۱',\n        '2': '۲',\n        '3': '۳',\n        '4': '۴',\n        '5': '۵',\n        '6': '۶',\n        '7': '۷',\n        '8': '۸',\n        '9': '۹',\n        '0': '۰'\n    }, numberMap = {\n        '۱': '1',\n        '۲': '2',\n        '۳': '3',\n        '۴': '4',\n        '۵': '5',\n        '۶': '6',\n        '۷': '7',\n        '۸': '8',\n        '۹': '9',\n        '۰': '0'\n    };\n\n    var fa = moment.defineLocale('fa', {\n        months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n        monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n        weekdays : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n        weekdaysShort : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n        weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /قبل از ظهر|بعد از ظهر/,\n        isPM: function (input) {\n            return /بعد از ظهر/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'قبل از ظهر';\n            } else {\n                return 'بعد از ظهر';\n            }\n        },\n        calendar : {\n            sameDay : '[امروز ساعت] LT',\n            nextDay : '[فردا ساعت] LT',\n            nextWeek : 'dddd [ساعت] LT',\n            lastDay : '[دیروز ساعت] LT',\n            lastWeek : 'dddd [پیش] [ساعت] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'در %s',\n            past : '%s پیش',\n            s : 'چند ثانیه',\n            ss : 'ثانیه d%',\n            m : 'یک دقیقه',\n            mm : '%d دقیقه',\n            h : 'یک ساعت',\n            hh : '%d ساعت',\n            d : 'یک روز',\n            dd : '%d روز',\n            M : 'یک ماه',\n            MM : '%d ماه',\n            y : 'یک سال',\n            yy : '%d سال'\n        },\n        preparse: function (string) {\n            return string.replace(/[۰-۹]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}م/,\n        ordinal : '%dم',\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12 // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return fa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),\n        numbersFuture = [\n            'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',\n            numbersPast[7], numbersPast[8], numbersPast[9]\n        ];\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = '';\n        switch (key) {\n            case 's':\n                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n            case 'ss':\n                return isFuture ? 'sekunnin' : 'sekuntia';\n            case 'm':\n                return isFuture ? 'minuutin' : 'minuutti';\n            case 'mm':\n                result = isFuture ? 'minuutin' : 'minuuttia';\n                break;\n            case 'h':\n                return isFuture ? 'tunnin' : 'tunti';\n            case 'hh':\n                result = isFuture ? 'tunnin' : 'tuntia';\n                break;\n            case 'd':\n                return isFuture ? 'päivän' : 'päivä';\n            case 'dd':\n                result = isFuture ? 'päivän' : 'päivää';\n                break;\n            case 'M':\n                return isFuture ? 'kuukauden' : 'kuukausi';\n            case 'MM':\n                result = isFuture ? 'kuukauden' : 'kuukautta';\n                break;\n            case 'y':\n                return isFuture ? 'vuoden' : 'vuosi';\n            case 'yy':\n                result = isFuture ? 'vuoden' : 'vuotta';\n                break;\n        }\n        result = verbalNumber(number, isFuture) + ' ' + result;\n        return result;\n    }\n    function verbalNumber(number, isFuture) {\n        return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;\n    }\n\n    var fi = moment.defineLocale('fi', {\n        months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),\n        monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),\n        weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),\n        weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),\n        weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD.MM.YYYY',\n            LL : 'Do MMMM[ta] YYYY',\n            LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',\n            LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n            l : 'D.M.YYYY',\n            ll : 'Do MMM YYYY',\n            lll : 'Do MMM YYYY, [klo] HH.mm',\n            llll : 'ddd, Do MMM YYYY, [klo] HH.mm'\n        },\n        calendar : {\n            sameDay : '[tänään] [klo] LT',\n            nextDay : '[huomenna] [klo] LT',\n            nextWeek : 'dddd [klo] LT',\n            lastDay : '[eilen] [klo] LT',\n            lastWeek : '[viime] dddd[na] [klo] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s päästä',\n            past : '%s sitten',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var fo = moment.defineLocale('fo', {\n        months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),\n        weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n        weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D. MMMM, YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Í dag kl.] LT',\n            nextDay : '[Í morgin kl.] LT',\n            nextWeek : 'dddd [kl.] LT',\n            lastDay : '[Í gjár kl.] LT',\n            lastWeek : '[síðstu] dddd [kl] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'um %s',\n            past : '%s síðani',\n            s : 'fá sekund',\n            ss : '%d sekundir',\n            m : 'ein minuttur',\n            mm : '%d minuttir',\n            h : 'ein tími',\n            hh : '%d tímar',\n            d : 'ein dagur',\n            dd : '%d dagar',\n            M : 'ein mánaður',\n            MM : '%d mánaðir',\n            y : 'eitt ár',\n            yy : '%d ár'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var fr = moment.defineLocale('fr', {\n        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Aujourd’hui à] LT',\n            nextDay : '[Demain à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[Hier à] LT',\n            lastWeek : 'dddd [dernier à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dans %s',\n            past : 'il y a %s',\n            s : 'quelques secondes',\n            ss : '%d secondes',\n            m : 'une minute',\n            mm : '%d minutes',\n            h : 'une heure',\n            hh : '%d heures',\n            d : 'un jour',\n            dd : '%d jours',\n            M : 'un mois',\n            MM : '%d mois',\n            y : 'un an',\n            yy : '%d ans'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // TODO: Return 'e' when day of month > 1. Move this case inside\n                // block for masculine words below.\n                // See https://github.com/moment/moment/issues/3375\n                case 'D':\n                    return number + (number === 1 ? 'er' : '');\n\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var frCa = moment.defineLocale('fr-ca', {\n        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Aujourd’hui à] LT',\n            nextDay : '[Demain à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[Hier à] LT',\n            lastWeek : 'dddd [dernier à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dans %s',\n            past : 'il y a %s',\n            s : 'quelques secondes',\n            ss : '%d secondes',\n            m : 'une minute',\n            mm : '%d minutes',\n            h : 'une heure',\n            hh : '%d heures',\n            d : 'un jour',\n            dd : '%d jours',\n            M : 'un mois',\n            MM : '%d mois',\n            y : 'un an',\n            yy : '%d ans'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        }\n    });\n\n    return frCa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var frCh = moment.defineLocale('fr-ch', {\n        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Aujourd’hui à] LT',\n            nextDay : '[Demain à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[Hier à] LT',\n            lastWeek : 'dddd [dernier à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dans %s',\n            past : 'il y a %s',\n            s : 'quelques secondes',\n            ss : '%d secondes',\n            m : 'une minute',\n            mm : '%d minutes',\n            h : 'une heure',\n            hh : '%d heures',\n            d : 'un jour',\n            dd : '%d jours',\n            M : 'un mois',\n            MM : '%d mois',\n            y : 'un an',\n            yy : '%d ans'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return frCh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\n    var fy = moment.defineLocale('fy', {\n        months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n        monthsParseExact : true,\n        weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),\n        weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),\n        weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[hjoed om] LT',\n            nextDay: '[moarn om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[juster om] LT',\n            lastWeek: '[ôfrûne] dddd [om] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'oer %s',\n            past : '%s lyn',\n            s : 'in pear sekonden',\n            ss : '%d sekonden',\n            m : 'ien minút',\n            mm : '%d minuten',\n            h : 'ien oere',\n            hh : '%d oeren',\n            d : 'ien dei',\n            dd : '%d dagen',\n            M : 'ien moanne',\n            MM : '%d moannen',\n            y : 'ien jier',\n            yy : '%d jierren'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n\n    var months = [\n        'Eanáir', 'Feabhra', 'Márta', 'Aibreán', 'Bealtaine', 'Méitheamh', 'Iúil', 'Lúnasa', 'Meán Fómhair', 'Deaireadh Fómhair', 'Samhain', 'Nollaig'\n    ];\n\n    var monthsShort = ['Eaná', 'Feab', 'Márt', 'Aibr', 'Beal', 'Méit', 'Iúil', 'Lúna', 'Meán', 'Deai', 'Samh', 'Noll'];\n\n    var weekdays = ['Dé Domhnaigh', 'Dé Luain', 'Dé Máirt', 'Dé Céadaoin', 'Déardaoin', 'Dé hAoine', 'Dé Satharn'];\n\n    var weekdaysShort = ['Dom', 'Lua', 'Mái', 'Céa', 'Déa', 'hAo', 'Sat'];\n\n    var weekdaysMin = ['Do', 'Lu', 'Má', 'Ce', 'Dé', 'hA', 'Sa'];\n\n    var ga = moment.defineLocale('ga', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsParseExact: true,\n        weekdays: weekdays,\n        weekdaysShort: weekdaysShort,\n        weekdaysMin: weekdaysMin,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[Inniu ag] LT',\n            nextDay: '[Amárach ag] LT',\n            nextWeek: 'dddd [ag] LT',\n            lastDay: '[Inné aig] LT',\n            lastWeek: 'dddd [seo caite] [ag] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'i %s',\n            past: '%s ó shin',\n            s: 'cúpla soicind',\n            ss: '%d soicind',\n            m: 'nóiméad',\n            mm: '%d nóiméad',\n            h: 'uair an chloig',\n            hh: '%d uair an chloig',\n            d: 'lá',\n            dd: '%d lá',\n            M: 'mí',\n            MM: '%d mí',\n            y: 'bliain',\n            yy: '%d bliain'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ga;\n\n})));\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  var actual = that.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual)\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array)\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'\n    ];\n\n    var monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];\n\n    var weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];\n\n    var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];\n\n    var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n    var gd = moment.defineLocale('gd', {\n        months : months,\n        monthsShort : monthsShort,\n        monthsParseExact : true,\n        weekdays : weekdays,\n        weekdaysShort : weekdaysShort,\n        weekdaysMin : weekdaysMin,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[An-diugh aig] LT',\n            nextDay : '[A-màireach aig] LT',\n            nextWeek : 'dddd [aig] LT',\n            lastDay : '[An-dè aig] LT',\n            lastWeek : 'dddd [seo chaidh] [aig] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ann an %s',\n            past : 'bho chionn %s',\n            s : 'beagan diogan',\n            ss : '%d diogan',\n            m : 'mionaid',\n            mm : '%d mionaidean',\n            h : 'uair',\n            hh : '%d uairean',\n            d : 'latha',\n            dd : '%d latha',\n            M : 'mìos',\n            MM : '%d mìosan',\n            y : 'bliadhna',\n            yy : '%d bliadhna'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}(d|na|mh)/,\n        ordinal : function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return gd;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var gl = moment.defineLocale('gl', {\n        months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),\n        monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY H:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n            },\n            lastDay : function () {\n                return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';\n            },\n            lastWeek : function () {\n                return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : function (str) {\n                if (str.indexOf('un') === 0) {\n                    return 'n' + str;\n                }\n                return 'en ' + str;\n            },\n            past : 'hai %s',\n            s : 'uns segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'unha hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un ano',\n            yy : '%d anos'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return gl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            's': ['thodde secondanim', 'thodde second'],\n            'ss': [number + ' secondanim', number + ' second'],\n            'm': ['eka mintan', 'ek minute'],\n            'mm': [number + ' mintanim', number + ' mintam'],\n            'h': ['eka voran', 'ek vor'],\n            'hh': [number + ' voranim', number + ' voram'],\n            'd': ['eka disan', 'ek dis'],\n            'dd': [number + ' disanim', number + ' dis'],\n            'M': ['eka mhoinean', 'ek mhoino'],\n            'MM': [number + ' mhoineanim', number + ' mhoine'],\n            'y': ['eka vorsan', 'ek voros'],\n            'yy': [number + ' vorsanim', number + ' vorsam']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var gomLatn = moment.defineLocale('gom-latn', {\n        months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'),\n        monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\\'var'.split('_'),\n        weekdaysShort : 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n        weekdaysMin : 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'A h:mm [vazta]',\n            LTS : 'A h:mm:ss [vazta]',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY A h:mm [vazta]',\n            LLLL : 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]',\n            llll: 'ddd, D MMM YYYY, A h:mm [vazta]'\n        },\n        calendar : {\n            sameDay: '[Aiz] LT',\n            nextDay: '[Faleam] LT',\n            nextWeek: '[Ieta to] dddd[,] LT',\n            lastDay: '[Kal] LT',\n            lastWeek: '[Fatlo] dddd[,] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s',\n            past : '%s adim',\n            s : processRelativeTime,\n            ss : processRelativeTime,\n            m : processRelativeTime,\n            mm : processRelativeTime,\n            h : processRelativeTime,\n            hh : processRelativeTime,\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}(er)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // the ordinal 'er' only applies to day of the month\n                case 'D':\n                    return number + 'er';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        },\n        meridiemParse: /rati|sokalli|donparam|sanje/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'rati') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'sokalli') {\n                return hour;\n            } else if (meridiem === 'donparam') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'sanje') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'rati';\n            } else if (hour < 12) {\n                return 'sokalli';\n            } else if (hour < 16) {\n                return 'donparam';\n            } else if (hour < 20) {\n                return 'sanje';\n            } else {\n                return 'rati';\n            }\n        }\n    });\n\n    return gomLatn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n            '1': '૧',\n            '2': '૨',\n            '3': '૩',\n            '4': '૪',\n            '5': '૫',\n            '6': '૬',\n            '7': '૭',\n            '8': '૮',\n            '9': '૯',\n            '0': '૦'\n        },\n        numberMap = {\n            '૧': '1',\n            '૨': '2',\n            '૩': '3',\n            '૪': '4',\n            '૫': '5',\n            '૬': '6',\n            '૭': '7',\n            '૮': '8',\n            '૯': '9',\n            '૦': '0'\n        };\n\n    var gu = moment.defineLocale('gu', {\n        months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split('_'),\n        monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split('_'),\n        weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n        weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm વાગ્યે',\n            LTS: 'A h:mm:ss વાગ્યે',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે'\n        },\n        calendar: {\n            sameDay: '[આજ] LT',\n            nextDay: '[કાલે] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ગઇકાલે] LT',\n            lastWeek: '[પાછલા] dddd, LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: '%s મા',\n            past: '%s પેહલા',\n            s: 'અમુક પળો',\n            ss: '%d સેકંડ',\n            m: 'એક મિનિટ',\n            mm: '%d મિનિટ',\n            h: 'એક કલાક',\n            hh: '%d કલાક',\n            d: 'એક દિવસ',\n            dd: '%d દિવસ',\n            M: 'એક મહિનો',\n            MM: '%d મહિનો',\n            y: 'એક વર્ષ',\n            yy: '%d વર્ષ'\n        },\n        preparse: function (string) {\n            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n        meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'રાત') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'સવાર') {\n                return hour;\n            } else if (meridiem === 'બપોર') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'સાંજ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'રાત';\n            } else if (hour < 10) {\n                return 'સવાર';\n            } else if (hour < 17) {\n                return 'બપોર';\n            } else if (hour < 20) {\n                return 'સાંજ';\n            } else {\n                return 'રાત';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6 // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return gu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var he = moment.defineLocale('he', {\n        months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),\n        monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n        weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n        weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n        weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [ב]MMMM YYYY',\n            LLL : 'D [ב]MMMM YYYY HH:mm',\n            LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',\n            l : 'D/M/YYYY',\n            ll : 'D MMM YYYY',\n            lll : 'D MMM YYYY HH:mm',\n            llll : 'ddd, D MMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[היום ב־]LT',\n            nextDay : '[מחר ב־]LT',\n            nextWeek : 'dddd [בשעה] LT',\n            lastDay : '[אתמול ב־]LT',\n            lastWeek : '[ביום] dddd [האחרון בשעה] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'בעוד %s',\n            past : 'לפני %s',\n            s : 'מספר שניות',\n            ss : '%d שניות',\n            m : 'דקה',\n            mm : '%d דקות',\n            h : 'שעה',\n            hh : function (number) {\n                if (number === 2) {\n                    return 'שעתיים';\n                }\n                return number + ' שעות';\n            },\n            d : 'יום',\n            dd : function (number) {\n                if (number === 2) {\n                    return 'יומיים';\n                }\n                return number + ' ימים';\n            },\n            M : 'חודש',\n            MM : function (number) {\n                if (number === 2) {\n                    return 'חודשיים';\n                }\n                return number + ' חודשים';\n            },\n            y : 'שנה',\n            yy : function (number) {\n                if (number === 2) {\n                    return 'שנתיים';\n                } else if (number % 10 === 0 && number !== 10) {\n                    return number + ' שנה';\n                }\n                return number + ' שנים';\n            }\n        },\n        meridiemParse: /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n        isPM : function (input) {\n            return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 5) {\n                return 'לפנות בוקר';\n            } else if (hour < 10) {\n                return 'בבוקר';\n            } else if (hour < 12) {\n                return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n            } else if (hour < 18) {\n                return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n            } else {\n                return 'בערב';\n            }\n        }\n    });\n\n    return he;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '१',\n        '2': '२',\n        '3': '३',\n        '4': '४',\n        '5': '५',\n        '6': '६',\n        '7': '७',\n        '8': '८',\n        '9': '९',\n        '0': '०'\n    },\n    numberMap = {\n        '१': '1',\n        '२': '2',\n        '३': '3',\n        '४': '4',\n        '५': '5',\n        '६': '6',\n        '७': '7',\n        '८': '8',\n        '९': '9',\n        '०': '0'\n    };\n\n    var hi = moment.defineLocale('hi', {\n        months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),\n        monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm बजे',\n            LTS : 'A h:mm:ss बजे',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm बजे',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'\n        },\n        calendar : {\n            sameDay : '[आज] LT',\n            nextDay : '[कल] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[कल] LT',\n            lastWeek : '[पिछले] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s में',\n            past : '%s पहले',\n            s : 'कुछ ही क्षण',\n            ss : '%d सेकंड',\n            m : 'एक मिनट',\n            mm : '%d मिनट',\n            h : 'एक घंटा',\n            hh : '%d घंटे',\n            d : 'एक दिन',\n            dd : '%d दिन',\n            M : 'एक महीने',\n            MM : '%d महीने',\n            y : 'एक वर्ष',\n            yy : '%d वर्ष'\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n        meridiemParse: /रात|सुबह|दोपहर|शाम/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सुबह') {\n                return hour;\n            } else if (meridiem === 'दोपहर') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'शाम') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात';\n            } else if (hour < 10) {\n                return 'सुबह';\n            } else if (hour < 17) {\n                return 'दोपहर';\n            } else if (hour < 20) {\n                return 'शाम';\n            } else {\n                return 'रात';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return hi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var hr = moment.defineLocale('hr', {\n        months : {\n            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),\n            standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')\n        },\n        monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[danas u] LT',\n            nextDay  : '[sutra u] LT',\n            nextWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[jučer u] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'prije %s',\n            s      : 'par sekundi',\n            ss     : translate,\n            m      : translate,\n            mm     : translate,\n            h      : translate,\n            hh     : translate,\n            d      : 'dan',\n            dd     : translate,\n            M      : 'mjesec',\n            MM     : translate,\n            y      : 'godinu',\n            yy     : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return hr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n    function translate(number, withoutSuffix, key, isFuture) {\n        var num = number;\n        switch (key) {\n            case 's':\n                return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';\n            case 'ss':\n                return num + (isFuture || withoutSuffix) ? ' másodperc' : ' másodperce';\n            case 'm':\n                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'mm':\n                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'h':\n                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'hh':\n                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'd':\n                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'dd':\n                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'M':\n                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'MM':\n                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'y':\n                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n            case 'yy':\n                return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n        }\n        return '';\n    }\n    function week(isFuture) {\n        return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';\n    }\n\n    var hu = moment.defineLocale('hu', {\n        months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),\n        monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),\n        weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n        weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n        weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'YYYY.MM.DD.',\n            LL : 'YYYY. MMMM D.',\n            LLL : 'YYYY. MMMM D. H:mm',\n            LLLL : 'YYYY. MMMM D., dddd H:mm'\n        },\n        meridiemParse: /de|du/i,\n        isPM: function (input) {\n            return input.charAt(1).toLowerCase() === 'u';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower === true ? 'de' : 'DE';\n            } else {\n                return isLower === true ? 'du' : 'DU';\n            }\n        },\n        calendar : {\n            sameDay : '[ma] LT[-kor]',\n            nextDay : '[holnap] LT[-kor]',\n            nextWeek : function () {\n                return week.call(this, true);\n            },\n            lastDay : '[tegnap] LT[-kor]',\n            lastWeek : function () {\n                return week.call(this, false);\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s múlva',\n            past : '%s',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return hu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var hyAm = moment.defineLocale('hy-am', {\n        months : {\n            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),\n            standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')\n        },\n        monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n        weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),\n        weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY թ.',\n            LLL : 'D MMMM YYYY թ., HH:mm',\n            LLLL : 'dddd, D MMMM YYYY թ., HH:mm'\n        },\n        calendar : {\n            sameDay: '[այսօր] LT',\n            nextDay: '[վաղը] LT',\n            lastDay: '[երեկ] LT',\n            nextWeek: function () {\n                return 'dddd [օրը ժամը] LT';\n            },\n            lastWeek: function () {\n                return '[անցած] dddd [օրը ժամը] LT';\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s հետո',\n            past : '%s առաջ',\n            s : 'մի քանի վայրկյան',\n            ss : '%d վայրկյան',\n            m : 'րոպե',\n            mm : '%d րոպե',\n            h : 'ժամ',\n            hh : '%d ժամ',\n            d : 'օր',\n            dd : '%d օր',\n            M : 'ամիս',\n            MM : '%d ամիս',\n            y : 'տարի',\n            yy : '%d տարի'\n        },\n        meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n        isPM: function (input) {\n            return /^(ցերեկվա|երեկոյան)$/.test(input);\n        },\n        meridiem : function (hour) {\n            if (hour < 4) {\n                return 'գիշերվա';\n            } else if (hour < 12) {\n                return 'առավոտվա';\n            } else if (hour < 17) {\n                return 'ցերեկվա';\n            } else {\n                return 'երեկոյան';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'DDD':\n                case 'w':\n                case 'W':\n                case 'DDDo':\n                    if (number === 1) {\n                        return number + '-ին';\n                    }\n                    return number + '-րդ';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return hyAm;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var id = moment.defineLocale('id', {\n        months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n        weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n        weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n        weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /pagi|siang|sore|malam/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'siang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sore' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'siang';\n            } else if (hours < 19) {\n                return 'sore';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar : {\n            sameDay : '[Hari ini pukul] LT',\n            nextDay : '[Besok pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kemarin pukul] LT',\n            lastWeek : 'dddd [lalu pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dalam %s',\n            past : '%s yang lalu',\n            s : 'beberapa detik',\n            ss : '%d detik',\n            m : 'semenit',\n            mm : '%d menit',\n            h : 'sejam',\n            hh : '%d jam',\n            d : 'sehari',\n            dd : '%d hari',\n            M : 'sebulan',\n            MM : '%d bulan',\n            y : 'setahun',\n            yy : '%d tahun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return id;\n\n})));\n","\n\nexport var logLevel = {\n  none: 0,\n  error: 10,\n  warn: 20,\n  info: 30,\n  debug: 40\n};\n\nvar loggers = {};\nvar appenders = [];\nvar globalDefaultLevel = logLevel.none;\n\nvar standardLevels = ['none', 'error', 'warn', 'info', 'debug'];\nfunction isStandardLevel(level) {\n  return standardLevels.filter(function (l) {\n    return l === level;\n  }).length > 0;\n}\n\nfunction appendArgs() {\n  return [this].concat(Array.prototype.slice.call(arguments));\n}\n\nfunction logFactory(level) {\n  var threshold = logLevel[level];\n  return function () {\n    if (this.level < threshold) {\n      return;\n    }\n\n    var args = appendArgs.apply(this, arguments);\n    var i = appenders.length;\n    while (i--) {\n      var _appenders$i;\n\n      (_appenders$i = appenders[i])[level].apply(_appenders$i, args);\n    }\n  };\n}\n\nfunction logFactoryCustom(level) {\n  var threshold = logLevel[level];\n  return function () {\n    if (this.level < threshold) {\n      return;\n    }\n\n    var args = appendArgs.apply(this, arguments);\n    var i = appenders.length;\n    while (i--) {\n      var appender = appenders[i];\n      if (appender[level] !== undefined) {\n        appender[level].apply(appender, args);\n      }\n    }\n  };\n}\n\nfunction connectLoggers() {\n  var proto = Logger.prototype;\n  for (var _level in logLevel) {\n    if (isStandardLevel(_level)) {\n      if (_level !== 'none') {\n        proto[_level] = logFactory(_level);\n      }\n    } else {\n      proto[_level] = logFactoryCustom(_level);\n    }\n  }\n}\n\nfunction disconnectLoggers() {\n  var proto = Logger.prototype;\n  for (var _level2 in logLevel) {\n    if (_level2 !== 'none') {\n      proto[_level2] = function () {};\n    }\n  }\n}\n\nexport function getLogger(id) {\n  return loggers[id] || new Logger(id);\n}\n\nexport function addAppender(appender) {\n  if (appenders.push(appender) === 1) {\n    connectLoggers();\n  }\n}\n\nexport function removeAppender(appender) {\n  appenders = appenders.filter(function (a) {\n    return a !== appender;\n  });\n}\n\nexport function getAppenders() {\n  return [].concat(appenders);\n}\n\nexport function clearAppenders() {\n  appenders = [];\n  disconnectLoggers();\n}\n\nexport function addCustomLevel(name, value) {\n  if (logLevel[name] !== undefined) {\n    throw Error('Log level \"' + name + '\" already exists.');\n  }\n\n  if (isNaN(value)) {\n    throw Error('Value must be a number.');\n  }\n\n  logLevel[name] = value;\n\n  if (appenders.length > 0) {\n    connectLoggers();\n  } else {\n    Logger.prototype[name] = function () {};\n  }\n}\n\nexport function removeCustomLevel(name) {\n  if (logLevel[name] === undefined) {\n    return;\n  }\n\n  if (isStandardLevel(name)) {\n    throw Error('Built-in log level \"' + name + '\" cannot be removed.');\n  }\n\n  delete logLevel[name];\n  delete Logger.prototype[name];\n}\n\nexport function setLevel(level) {\n  globalDefaultLevel = level;\n  for (var key in loggers) {\n    loggers[key].setLevel(level);\n  }\n}\n\nexport function getLevel() {\n  return globalDefaultLevel;\n}\n\nexport var Logger = function () {\n  function Logger(id) {\n    \n\n    var cached = loggers[id];\n    if (cached) {\n      return cached;\n    }\n\n    loggers[id] = this;\n    this.id = id;\n    this.level = globalDefaultLevel;\n  }\n\n  Logger.prototype.debug = function debug(message) {};\n\n  Logger.prototype.info = function info(message) {};\n\n  Logger.prototype.warn = function warn(message) {};\n\n  Logger.prototype.error = function error(message) {};\n\n  Logger.prototype.setLevel = function setLevel(level) {\n    this.level = level;\n  };\n\n  return Logger;\n}();","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(n) {\n        if (n % 100 === 11) {\n            return true;\n        } else if (n % 10 === 1) {\n            return false;\n        }\n        return true;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';\n            case 'ss':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum');\n                }\n                return result + 'sekúnda';\n            case 'm':\n                return withoutSuffix ? 'mínúta' : 'mínútu';\n            case 'mm':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');\n                } else if (withoutSuffix) {\n                    return result + 'mínúta';\n                }\n                return result + 'mínútu';\n            case 'hh':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');\n                }\n                return result + 'klukkustund';\n            case 'd':\n                if (withoutSuffix) {\n                    return 'dagur';\n                }\n                return isFuture ? 'dag' : 'degi';\n            case 'dd':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'dagar';\n                    }\n                    return result + (isFuture ? 'daga' : 'dögum');\n                } else if (withoutSuffix) {\n                    return result + 'dagur';\n                }\n                return result + (isFuture ? 'dag' : 'degi');\n            case 'M':\n                if (withoutSuffix) {\n                    return 'mánuður';\n                }\n                return isFuture ? 'mánuð' : 'mánuði';\n            case 'MM':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'mánuðir';\n                    }\n                    return result + (isFuture ? 'mánuði' : 'mánuðum');\n                } else if (withoutSuffix) {\n                    return result + 'mánuður';\n                }\n                return result + (isFuture ? 'mánuð' : 'mánuði');\n            case 'y':\n                return withoutSuffix || isFuture ? 'ár' : 'ári';\n            case 'yy':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n                }\n                return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n        }\n    }\n\n    var is = moment.defineLocale('is', {\n        months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n        weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),\n        weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n        weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY [kl.] H:mm',\n            LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'\n        },\n        calendar : {\n            sameDay : '[í dag kl.] LT',\n            nextDay : '[á morgun kl.] LT',\n            nextWeek : 'dddd [kl.] LT',\n            lastDay : '[í gær kl.] LT',\n            lastWeek : '[síðasta] dddd [kl.] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'eftir %s',\n            past : 'fyrir %s síðan',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : 'klukkustund',\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return is;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var it = moment.defineLocale('it', {\n        months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n        monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n        weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Oggi alle] LT',\n            nextDay: '[Domani alle] LT',\n            nextWeek: 'dddd [alle] LT',\n            lastDay: '[Ieri alle] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[la scorsa] dddd [alle] LT';\n                    default:\n                        return '[lo scorso] dddd [alle] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : function (s) {\n                return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;\n            },\n            past : '%s fa',\n            s : 'alcuni secondi',\n            ss : '%d secondi',\n            m : 'un minuto',\n            mm : '%d minuti',\n            h : 'un\\'ora',\n            hh : '%d ore',\n            d : 'un giorno',\n            dd : '%d giorni',\n            M : 'un mese',\n            MM : '%d mesi',\n            y : 'un anno',\n            yy : '%d anni'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return it;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var itCh = moment.defineLocale('it-ch', {\n        months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n        monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n        weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Oggi alle] LT',\n            nextDay: '[Domani alle] LT',\n            nextWeek: 'dddd [alle] LT',\n            lastDay: '[Ieri alle] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[la scorsa] dddd [alle] LT';\n                    default:\n                        return '[lo scorso] dddd [alle] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : function (s) {\n                return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;\n            },\n            past : '%s fa',\n            s : 'alcuni secondi',\n            ss : '%d secondi',\n            m : 'un minuto',\n            mm : '%d minuti',\n            h : 'un\\'ora',\n            hh : '%d ore',\n            d : 'un giorno',\n            dd : '%d giorni',\n            M : 'un mese',\n            MM : '%d mesi',\n            y : 'un anno',\n            yy : '%d anni'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return itCh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ja = moment.defineLocale('ja', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n        weekdaysShort : '日_月_火_水_木_金_土'.split('_'),\n        weekdaysMin : '日_月_火_水_木_金_土'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日 HH:mm',\n            LLLL : 'YYYY年M月D日 dddd HH:mm',\n            l : 'YYYY/MM/DD',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日(ddd) HH:mm'\n        },\n        meridiemParse: /午前|午後/i,\n        isPM : function (input) {\n            return input === '午後';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return '午前';\n            } else {\n                return '午後';\n            }\n        },\n        calendar : {\n            sameDay : '[今日] LT',\n            nextDay : '[明日] LT',\n            nextWeek : function (now) {\n                if (now.week() < this.week()) {\n                    return '[来週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            lastDay : '[昨日] LT',\n            lastWeek : function (now) {\n                if (this.week() < now.week()) {\n                    return '[先週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}日/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                default:\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s後',\n            past : '%s前',\n            s : '数秒',\n            ss : '%d秒',\n            m : '1分',\n            mm : '%d分',\n            h : '1時間',\n            hh : '%d時間',\n            d : '1日',\n            dd : '%d日',\n            M : '1ヶ月',\n            MM : '%dヶ月',\n            y : '1年',\n            yy : '%d年'\n        }\n    });\n\n    return ja;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var jv = moment.defineLocale('jv', {\n        months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n        weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n        weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n        weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /enjing|siyang|sonten|ndalu/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'enjing') {\n                return hour;\n            } else if (meridiem === 'siyang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'enjing';\n            } else if (hours < 15) {\n                return 'siyang';\n            } else if (hours < 19) {\n                return 'sonten';\n            } else {\n                return 'ndalu';\n            }\n        },\n        calendar : {\n            sameDay : '[Dinten puniko pukul] LT',\n            nextDay : '[Mbenjang pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kala wingi pukul] LT',\n            lastWeek : 'dddd [kepengker pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'wonten ing %s',\n            past : '%s ingkang kepengker',\n            s : 'sawetawis detik',\n            ss : '%d detik',\n            m : 'setunggal menit',\n            mm : '%d menit',\n            h : 'setunggal jam',\n            hh : '%d jam',\n            d : 'sedinten',\n            dd : '%d dinten',\n            M : 'sewulan',\n            MM : '%d wulan',\n            y : 'setaun',\n            yy : '%d taun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return jv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ka = moment.defineLocale('ka', {\n        months : {\n            standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),\n            format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')\n        },\n        monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n        weekdays : {\n            standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),\n            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),\n            isFormat: /(წინა|შემდეგ)/\n        },\n        weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n        weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[დღეს] LT[-ზე]',\n            nextDay : '[ხვალ] LT[-ზე]',\n            lastDay : '[გუშინ] LT[-ზე]',\n            nextWeek : '[შემდეგ] dddd LT[-ზე]',\n            lastWeek : '[წინა] dddd LT-ზე',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : function (s) {\n                return (/(წამი|წუთი|საათი|წელი)/).test(s) ?\n                    s.replace(/ი$/, 'ში') :\n                    s + 'ში';\n            },\n            past : function (s) {\n                if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {\n                    return s.replace(/(ი|ე)$/, 'ის წინ');\n                }\n                if ((/წელი/).test(s)) {\n                    return s.replace(/წელი$/, 'წლის წინ');\n                }\n            },\n            s : 'რამდენიმე წამი',\n            ss : '%d წამი',\n            m : 'წუთი',\n            mm : '%d წუთი',\n            h : 'საათი',\n            hh : '%d საათი',\n            d : 'დღე',\n            dd : '%d დღე',\n            M : 'თვე',\n            MM : '%d თვე',\n            y : 'წელი',\n            yy : '%d წელი'\n        },\n        dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n        ordinal : function (number) {\n            if (number === 0) {\n                return number;\n            }\n            if (number === 1) {\n                return number + '-ლი';\n            }\n            if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {\n                return 'მე-' + number;\n            }\n            return number + '-ე';\n        },\n        week : {\n            dow : 1,\n            doy : 7\n        }\n    });\n\n    return ka;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        0: '-ші',\n        1: '-ші',\n        2: '-ші',\n        3: '-ші',\n        4: '-ші',\n        5: '-ші',\n        6: '-шы',\n        7: '-ші',\n        8: '-ші',\n        9: '-шы',\n        10: '-шы',\n        20: '-шы',\n        30: '-шы',\n        40: '-шы',\n        50: '-ші',\n        60: '-шы',\n        70: '-ші',\n        80: '-ші',\n        90: '-шы',\n        100: '-ші'\n    };\n\n    var kk = moment.defineLocale('kk', {\n        months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),\n        monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n        weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),\n        weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n        weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Бүгін сағат] LT',\n            nextDay : '[Ертең сағат] LT',\n            nextWeek : 'dddd [сағат] LT',\n            lastDay : '[Кеше сағат] LT',\n            lastWeek : '[Өткен аптаның] dddd [сағат] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ішінде',\n            past : '%s бұрын',\n            s : 'бірнеше секунд',\n            ss : '%d секунд',\n            m : 'бір минут',\n            mm : '%d минут',\n            h : 'бір сағат',\n            hh : '%d сағат',\n            d : 'бір күн',\n            dd : '%d күн',\n            M : 'бір ай',\n            MM : '%d ай',\n            y : 'бір жыл',\n            yy : '%d жыл'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n        ordinal : function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return kk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '១',\n        '2': '២',\n        '3': '៣',\n        '4': '៤',\n        '5': '៥',\n        '6': '៦',\n        '7': '៧',\n        '8': '៨',\n        '9': '៩',\n        '0': '០'\n    }, numberMap = {\n        '១': '1',\n        '២': '2',\n        '៣': '3',\n        '៤': '4',\n        '៥': '5',\n        '៦': '6',\n        '៧': '7',\n        '៨': '8',\n        '៩': '9',\n        '០': '0'\n    };\n\n    var km = moment.defineLocale('km', {\n        months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n        weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ព្រឹក|ល្ងាច/,\n        isPM: function (input) {\n            return input === 'ល្ងាច';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ព្រឹក';\n            } else {\n                return 'ល្ងាច';\n            }\n        },\n        calendar: {\n            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n            nextDay: '[ស្អែក ម៉ោង] LT',\n            nextWeek: 'dddd [ម៉ោង] LT',\n            lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: '%sទៀត',\n            past: '%sមុន',\n            s: 'ប៉ុន្មានវិនាទី',\n            ss: '%d វិនាទី',\n            m: 'មួយនាទី',\n            mm: '%d នាទី',\n            h: 'មួយម៉ោង',\n            hh: '%d ម៉ោង',\n            d: 'មួយថ្ងៃ',\n            dd: '%d ថ្ងៃ',\n            M: 'មួយខែ',\n            MM: '%d ខែ',\n            y: 'មួយឆ្នាំ',\n            yy: '%d ឆ្នាំ'\n        },\n        dayOfMonthOrdinalParse : /ទី\\d{1,2}/,\n        ordinal : 'ទី%d',\n        preparse: function (string) {\n            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return km;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '೧',\n        '2': '೨',\n        '3': '೩',\n        '4': '೪',\n        '5': '೫',\n        '6': '೬',\n        '7': '೭',\n        '8': '೮',\n        '9': '೯',\n        '0': '೦'\n    },\n    numberMap = {\n        '೧': '1',\n        '೨': '2',\n        '೩': '3',\n        '೪': '4',\n        '೫': '5',\n        '೬': '6',\n        '೭': '7',\n        '೮': '8',\n        '೯': '9',\n        '೦': '0'\n    };\n\n    var kn = moment.defineLocale('kn', {\n        months : 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'),\n        monthsShort : 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'),\n        weekdaysShort : 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n        weekdaysMin : 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n        },\n        calendar : {\n            sameDay : '[ಇಂದು] LT',\n            nextDay : '[ನಾಳೆ] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[ನಿನ್ನೆ] LT',\n            lastWeek : '[ಕೊನೆಯ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ನಂತರ',\n            past : '%s ಹಿಂದೆ',\n            s : 'ಕೆಲವು ಕ್ಷಣಗಳು',\n            ss : '%d ಸೆಕೆಂಡುಗಳು',\n            m : 'ಒಂದು ನಿಮಿಷ',\n            mm : '%d ನಿಮಿಷ',\n            h : 'ಒಂದು ಗಂಟೆ',\n            hh : '%d ಗಂಟೆ',\n            d : 'ಒಂದು ದಿನ',\n            dd : '%d ದಿನ',\n            M : 'ಒಂದು ತಿಂಗಳು',\n            MM : '%d ತಿಂಗಳು',\n            y : 'ಒಂದು ವರ್ಷ',\n            yy : '%d ವರ್ಷ'\n        },\n        preparse: function (string) {\n            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ರಾತ್ರಿ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n                return hour;\n            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ಸಂಜೆ') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ರಾತ್ರಿ';\n            } else if (hour < 10) {\n                return 'ಬೆಳಿಗ್ಗೆ';\n            } else if (hour < 17) {\n                return 'ಮಧ್ಯಾಹ್ನ';\n            } else if (hour < 20) {\n                return 'ಸಂಜೆ';\n            } else {\n                return 'ರಾತ್ರಿ';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n        ordinal : function (number) {\n            return number + 'ನೇ';\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return kn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ko = moment.defineLocale('ko', {\n        months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n        weekdaysShort : '일_월_화_수_목_금_토'.split('_'),\n        weekdaysMin : '일_월_화_수_목_금_토'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'YYYY.MM.DD.',\n            LL : 'YYYY년 MMMM D일',\n            LLL : 'YYYY년 MMMM D일 A h:mm',\n            LLLL : 'YYYY년 MMMM D일 dddd A h:mm',\n            l : 'YYYY.MM.DD.',\n            ll : 'YYYY년 MMMM D일',\n            lll : 'YYYY년 MMMM D일 A h:mm',\n            llll : 'YYYY년 MMMM D일 dddd A h:mm'\n        },\n        calendar : {\n            sameDay : '오늘 LT',\n            nextDay : '내일 LT',\n            nextWeek : 'dddd LT',\n            lastDay : '어제 LT',\n            lastWeek : '지난주 dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s 후',\n            past : '%s 전',\n            s : '몇 초',\n            ss : '%d초',\n            m : '1분',\n            mm : '%d분',\n            h : '한 시간',\n            hh : '%d시간',\n            d : '하루',\n            dd : '%d일',\n            M : '한 달',\n            MM : '%d달',\n            y : '일 년',\n            yy : '%d년'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}(일|월|주)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '일';\n                case 'M':\n                    return number + '월';\n                case 'w':\n                case 'W':\n                    return number + '주';\n                default:\n                    return number;\n            }\n        },\n        meridiemParse : /오전|오후/,\n        isPM : function (token) {\n            return token === '오후';\n        },\n        meridiem : function (hour, minute, isUpper) {\n            return hour < 12 ? '오전' : '오후';\n        }\n    });\n\n    return ko;\n\n})));\n","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { GraphQLNonNull } from './wrappers'; /**\n                                              * Copyright (c) 2015-present, Facebook, Inc.\n                                              *\n                                              * This source code is licensed under the MIT license found in the\n                                              * LICENSE file in the root directory of this source tree.\n                                              *\n                                              * \n                                              */\n\nimport { GraphQLString, GraphQLBoolean } from './scalars';\nimport instanceOf from '../jsutils/instanceOf';\nimport invariant from '../jsutils/invariant';\n\nimport { DirectiveLocation } from '../language/directiveLocation';\n\n/**\n * Test if the given value is a GraphQL directive.\n */\n\n// eslint-disable-next-line no-redeclare\nexport function isDirective(directive) {\n  return instanceOf(directive, GraphQLDirective);\n}\n\n/**\n * Directives are used by the GraphQL runtime as a way of modifying execution\n * behavior. Type system creators will usually not create these directly.\n */\nexport var GraphQLDirective = function GraphQLDirective(config) {\n  _classCallCheck(this, GraphQLDirective);\n\n  this.name = config.name;\n  this.description = config.description;\n  this.locations = config.locations;\n  this.astNode = config.astNode;\n  !config.name ? invariant(0, 'Directive must be named.') : void 0;\n  !Array.isArray(config.locations) ? invariant(0, 'Must provide locations for directive.') : void 0;\n\n  var args = config.args;\n  if (!args) {\n    this.args = [];\n  } else {\n    !!Array.isArray(args) ? invariant(0, '@' + config.name + ' args must be an object with argument names as keys.') : void 0;\n    this.args = Object.keys(args).map(function (argName) {\n      var arg = args[argName];\n      return {\n        name: argName,\n        description: arg.description === undefined ? null : arg.description,\n        type: arg.type,\n        defaultValue: arg.defaultValue,\n        astNode: arg.astNode\n      };\n    });\n  }\n};\n\n/**\n * Used to conditionally include fields or fragments.\n */\nexport var GraphQLIncludeDirective = new GraphQLDirective({\n  name: 'include',\n  description: 'Directs the executor to include this field or fragment only when ' + 'the `if` argument is true.',\n  locations: [DirectiveLocation.FIELD, DirectiveLocation.FRAGMENT_SPREAD, DirectiveLocation.INLINE_FRAGMENT],\n  args: {\n    if: {\n      type: GraphQLNonNull(GraphQLBoolean),\n      description: 'Included when true.'\n    }\n  }\n});\n\n/**\n * Used to conditionally skip (exclude) fields or fragments.\n */\nexport var GraphQLSkipDirective = new GraphQLDirective({\n  name: 'skip',\n  description: 'Directs the executor to skip this field or fragment when the `if` ' + 'argument is true.',\n  locations: [DirectiveLocation.FIELD, DirectiveLocation.FRAGMENT_SPREAD, DirectiveLocation.INLINE_FRAGMENT],\n  args: {\n    if: {\n      type: GraphQLNonNull(GraphQLBoolean),\n      description: 'Skipped when true.'\n    }\n  }\n});\n\n/**\n * Constant string used for default reason for a deprecation.\n */\nexport var DEFAULT_DEPRECATION_REASON = 'No longer supported';\n\n/**\n * Used to declare element of a GraphQL schema as deprecated.\n */\nexport var GraphQLDeprecatedDirective = new GraphQLDirective({\n  name: 'deprecated',\n  description: 'Marks an element of a GraphQL schema as no longer supported.',\n  locations: [DirectiveLocation.FIELD_DEFINITION, DirectiveLocation.ENUM_VALUE],\n  args: {\n    reason: {\n      type: GraphQLString,\n      description: 'Explains why this element was deprecated, usually also including a ' + 'suggestion for how to access supported similar data. Formatted ' + 'in [Markdown](https://daringfireball.net/projects/markdown/).',\n      defaultValue: DEFAULT_DEPRECATION_REASON\n    }\n  }\n});\n\n/**\n * The full list of specified directives.\n */\nexport var specifiedDirectives = [GraphQLIncludeDirective, GraphQLSkipDirective, GraphQLDeprecatedDirective];\n\nexport function isSpecifiedDirective(directive) {\n  return specifiedDirectives.some(function (specifiedDirective) {\n    return specifiedDirective.name === directive.name;\n  });\n}","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '١',\n        '2': '٢',\n        '3': '٣',\n        '4': '٤',\n        '5': '٥',\n        '6': '٦',\n        '7': '٧',\n        '8': '٨',\n        '9': '٩',\n        '0': '٠'\n    }, numberMap = {\n        '١': '1',\n        '٢': '2',\n        '٣': '3',\n        '٤': '4',\n        '٥': '5',\n        '٦': '6',\n        '٧': '7',\n        '٨': '8',\n        '٩': '9',\n        '٠': '0'\n    },\n    months = [\n        'کانونی دووەم',\n        'شوبات',\n        'ئازار',\n        'نیسان',\n        'ئایار',\n        'حوزەیران',\n        'تەمموز',\n        'ئاب',\n        'ئەیلوول',\n        'تشرینی یەكەم',\n        'تشرینی دووەم',\n        'كانونی یەکەم'\n    ];\n\n\n    var ku = moment.defineLocale('ku', {\n        months : months,\n        monthsShort : months,\n        weekdays : 'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split('_'),\n        weekdaysShort : 'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split('_'),\n        weekdaysMin : 'ی_د_س_چ_پ_ه_ش'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ئێواره‌|به‌یانی/,\n        isPM: function (input) {\n            return /ئێواره‌/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'به‌یانی';\n            } else {\n                return 'ئێواره‌';\n            }\n        },\n        calendar : {\n            sameDay : '[ئه‌مرۆ كاتژمێر] LT',\n            nextDay : '[به‌یانی كاتژمێر] LT',\n            nextWeek : 'dddd [كاتژمێر] LT',\n            lastDay : '[دوێنێ كاتژمێر] LT',\n            lastWeek : 'dddd [كاتژمێر] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'له‌ %s',\n            past : '%s',\n            s : 'چه‌ند چركه‌یه‌ك',\n            ss : 'چركه‌ %d',\n            m : 'یه‌ك خوله‌ك',\n            mm : '%d خوله‌ك',\n            h : 'یه‌ك كاتژمێر',\n            hh : '%d كاتژمێر',\n            d : 'یه‌ك ڕۆژ',\n            dd : '%d ڕۆژ',\n            M : 'یه‌ك مانگ',\n            MM : '%d مانگ',\n            y : 'یه‌ك ساڵ',\n            yy : '%d ساڵ'\n        },\n        preparse: function (string) {\n            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12 // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return ku;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        0: '-чү',\n        1: '-чи',\n        2: '-чи',\n        3: '-чү',\n        4: '-чү',\n        5: '-чи',\n        6: '-чы',\n        7: '-чи',\n        8: '-чи',\n        9: '-чу',\n        10: '-чу',\n        20: '-чы',\n        30: '-чу',\n        40: '-чы',\n        50: '-чү',\n        60: '-чы',\n        70: '-чи',\n        80: '-чи',\n        90: '-чу',\n        100: '-чү'\n    };\n\n    var ky = moment.defineLocale('ky', {\n        months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),\n        monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),\n        weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n        weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Бүгүн саат] LT',\n            nextDay : '[Эртең саат] LT',\n            nextWeek : 'dddd [саат] LT',\n            lastDay : '[Кечээ саат] LT',\n            lastWeek : '[Өткөн аптанын] dddd [күнү] [саат] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ичинде',\n            past : '%s мурун',\n            s : 'бирнече секунд',\n            ss : '%d секунд',\n            m : 'бир мүнөт',\n            mm : '%d мүнөт',\n            h : 'бир саат',\n            hh : '%d саат',\n            d : 'бир күн',\n            dd : '%d күн',\n            M : 'бир ай',\n            MM : '%d ай',\n            y : 'бир жыл',\n            yy : '%d жыл'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n        ordinal : function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return ky;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eng Minutt', 'enger Minutt'],\n            'h': ['eng Stonn', 'enger Stonn'],\n            'd': ['een Dag', 'engem Dag'],\n            'M': ['ee Mount', 'engem Mount'],\n            'y': ['ee Joer', 'engem Joer']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n    function processFutureTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'a ' + string;\n        }\n        return 'an ' + string;\n    }\n    function processPastTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'viru ' + string;\n        }\n        return 'virun ' + string;\n    }\n    /**\n     * Returns true if the word before the given number loses the '-n' ending.\n     * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n     *\n     * @param number {integer}\n     * @returns {boolean}\n     */\n    function eifelerRegelAppliesToNumber(number) {\n        number = parseInt(number, 10);\n        if (isNaN(number)) {\n            return false;\n        }\n        if (number < 0) {\n            // Negative Number --> always true\n            return true;\n        } else if (number < 10) {\n            // Only 1 digit\n            if (4 <= number && number <= 7) {\n                return true;\n            }\n            return false;\n        } else if (number < 100) {\n            // 2 digits\n            var lastDigit = number % 10, firstDigit = number / 10;\n            if (lastDigit === 0) {\n                return eifelerRegelAppliesToNumber(firstDigit);\n            }\n            return eifelerRegelAppliesToNumber(lastDigit);\n        } else if (number < 10000) {\n            // 3 or 4 digits --> recursively check first digit\n            while (number >= 10) {\n                number = number / 10;\n            }\n            return eifelerRegelAppliesToNumber(number);\n        } else {\n            // Anything larger than 4 digits: recursively check first n-3 digits\n            number = number / 1000;\n            return eifelerRegelAppliesToNumber(number);\n        }\n    }\n\n    var lb = moment.defineLocale('lb', {\n        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),\n        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm [Auer]',\n            LTS: 'H:mm:ss [Auer]',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm [Auer]',\n            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'\n        },\n        calendar: {\n            sameDay: '[Haut um] LT',\n            sameElse: 'L',\n            nextDay: '[Muer um] LT',\n            nextWeek: 'dddd [um] LT',\n            lastDay: '[Gëschter um] LT',\n            lastWeek: function () {\n                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n                switch (this.day()) {\n                    case 2:\n                    case 4:\n                        return '[Leschten] dddd [um] LT';\n                    default:\n                        return '[Leschte] dddd [um] LT';\n                }\n            }\n        },\n        relativeTime : {\n            future : processFutureTime,\n            past : processPastTime,\n            s : 'e puer Sekonnen',\n            ss : '%d Sekonnen',\n            m : processRelativeTime,\n            mm : '%d Minutten',\n            h : processRelativeTime,\n            hh : '%d Stonnen',\n            d : processRelativeTime,\n            dd : '%d Deeg',\n            M : processRelativeTime,\n            MM : '%d Méint',\n            y : processRelativeTime,\n            yy : '%d Joer'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return lb;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var lo = moment.defineLocale('lo', {\n        months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n        monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n        weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'ວັນdddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n        isPM: function (input) {\n            return input === 'ຕອນແລງ';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ຕອນເຊົ້າ';\n            } else {\n                return 'ຕອນແລງ';\n            }\n        },\n        calendar : {\n            sameDay : '[ມື້ນີ້ເວລາ] LT',\n            nextDay : '[ມື້ອື່ນເວລາ] LT',\n            nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',\n            lastDay : '[ມື້ວານນີ້ເວລາ] LT',\n            lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ອີກ %s',\n            past : '%sຜ່ານມາ',\n            s : 'ບໍ່ເທົ່າໃດວິນາທີ',\n            ss : '%d ວິນາທີ' ,\n            m : '1 ນາທີ',\n            mm : '%d ນາທີ',\n            h : '1 ຊົ່ວໂມງ',\n            hh : '%d ຊົ່ວໂມງ',\n            d : '1 ມື້',\n            dd : '%d ມື້',\n            M : '1 ເດືອນ',\n            MM : '%d ເດືອນ',\n            y : '1 ປີ',\n            yy : '%d ປີ'\n        },\n        dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n        ordinal : function (number) {\n            return 'ທີ່' + number;\n        }\n    });\n\n    return lo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var units = {\n        'ss' : 'sekundė_sekundžių_sekundes',\n        'm' : 'minutė_minutės_minutę',\n        'mm': 'minutės_minučių_minutes',\n        'h' : 'valanda_valandos_valandą',\n        'hh': 'valandos_valandų_valandas',\n        'd' : 'diena_dienos_dieną',\n        'dd': 'dienos_dienų_dienas',\n        'M' : 'mėnuo_mėnesio_mėnesį',\n        'MM': 'mėnesiai_mėnesių_mėnesius',\n        'y' : 'metai_metų_metus',\n        'yy': 'metai_metų_metus'\n    };\n    function translateSeconds(number, withoutSuffix, key, isFuture) {\n        if (withoutSuffix) {\n            return 'kelios sekundės';\n        } else {\n            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n        }\n    }\n    function translateSingular(number, withoutSuffix, key, isFuture) {\n        return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);\n    }\n    function special(number) {\n        return number % 10 === 0 || (number > 10 && number < 20);\n    }\n    function forms(key) {\n        return units[key].split('_');\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        if (number === 1) {\n            return result + translateSingular(number, withoutSuffix, key[0], isFuture);\n        } else if (withoutSuffix) {\n            return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n        } else {\n            if (isFuture) {\n                return result + forms(key)[1];\n            } else {\n                return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n            }\n        }\n    }\n    var lt = moment.defineLocale('lt', {\n        months : {\n            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),\n            standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),\n            isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/\n        },\n        monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n        weekdays : {\n            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),\n            standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),\n            isFormat: /dddd HH:mm/\n        },\n        weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n        weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'YYYY [m.] MMMM D [d.]',\n            LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n            l : 'YYYY-MM-DD',\n            ll : 'YYYY [m.] MMMM D [d.]',\n            lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'\n        },\n        calendar : {\n            sameDay : '[Šiandien] LT',\n            nextDay : '[Rytoj] LT',\n            nextWeek : 'dddd LT',\n            lastDay : '[Vakar] LT',\n            lastWeek : '[Praėjusį] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'po %s',\n            past : 'prieš %s',\n            s : translateSeconds,\n            ss : translate,\n            m : translateSingular,\n            mm : translate,\n            h : translateSingular,\n            hh : translate,\n            d : translateSingular,\n            dd : translate,\n            M : translateSingular,\n            MM : translate,\n            y : translateSingular,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n        ordinal : function (number) {\n            return number + '-oji';\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return lt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var units = {\n        'ss': 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n        'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        'h': 'stundas_stundām_stunda_stundas'.split('_'),\n        'hh': 'stundas_stundām_stunda_stundas'.split('_'),\n        'd': 'dienas_dienām_diena_dienas'.split('_'),\n        'dd': 'dienas_dienām_diena_dienas'.split('_'),\n        'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        'y': 'gada_gadiem_gads_gadi'.split('_'),\n        'yy': 'gada_gadiem_gads_gadi'.split('_')\n    };\n    /**\n     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n     */\n    function format(forms, number, withoutSuffix) {\n        if (withoutSuffix) {\n            // E.g. \"21 minūte\", \"3 minūtes\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n        } else {\n            // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n            // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n        }\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        return number + ' ' + format(units[key], number, withoutSuffix);\n    }\n    function relativeTimeWithSingular(number, withoutSuffix, key) {\n        return format(units[key], number, withoutSuffix);\n    }\n    function relativeSeconds(number, withoutSuffix) {\n        return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n    }\n\n    var lv = moment.defineLocale('lv', {\n        months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n        weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),\n        weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY.',\n            LL : 'YYYY. [gada] D. MMMM',\n            LLL : 'YYYY. [gada] D. MMMM, HH:mm',\n            LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'\n        },\n        calendar : {\n            sameDay : '[Šodien pulksten] LT',\n            nextDay : '[Rīt pulksten] LT',\n            nextWeek : 'dddd [pulksten] LT',\n            lastDay : '[Vakar pulksten] LT',\n            lastWeek : '[Pagājušā] dddd [pulksten] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'pēc %s',\n            past : 'pirms %s',\n            s : relativeSeconds,\n            ss : relativeTimeWithPlural,\n            m : relativeTimeWithSingular,\n            mm : relativeTimeWithPlural,\n            h : relativeTimeWithSingular,\n            hh : relativeTimeWithPlural,\n            d : relativeTimeWithSingular,\n            dd : relativeTimeWithPlural,\n            M : relativeTimeWithSingular,\n            MM : relativeTimeWithPlural,\n            y : relativeTimeWithSingular,\n            yy : relativeTimeWithPlural\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return lv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var translator = {\n        words: { //Different grammatical cases\n            ss: ['sekund', 'sekunda', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mjesec', 'mjeseca', 'mjeseci'],\n            yy: ['godina', 'godine', 'godina']\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n            }\n        }\n    };\n\n    var me = moment.defineLocale('me', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact : true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sjutra u] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[juče u] LT',\n            lastWeek : function () {\n                var lastWeekDays = [\n                    '[prošle] [nedjelje] [u] LT',\n                    '[prošlog] [ponedjeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srijede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT'\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'prije %s',\n            s      : 'nekoliko sekundi',\n            ss     : translator.translate,\n            m      : translator.translate,\n            mm     : translator.translate,\n            h      : translator.translate,\n            hh     : translator.translate,\n            d      : 'dan',\n            dd     : translator.translate,\n            M      : 'mjesec',\n            MM     : translator.translate,\n            y      : 'godinu',\n            yy     : translator.translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return me;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var mi = moment.defineLocale('mi', {\n        months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),\n        monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),\n        monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n        weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n        weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [i] HH:mm',\n            LLLL: 'dddd, D MMMM YYYY [i] HH:mm'\n        },\n        calendar: {\n            sameDay: '[i teie mahana, i] LT',\n            nextDay: '[apopo i] LT',\n            nextWeek: 'dddd [i] LT',\n            lastDay: '[inanahi i] LT',\n            lastWeek: 'dddd [whakamutunga i] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'i roto i %s',\n            past: '%s i mua',\n            s: 'te hēkona ruarua',\n            ss: '%d hēkona',\n            m: 'he meneti',\n            mm: '%d meneti',\n            h: 'te haora',\n            hh: '%d haora',\n            d: 'he ra',\n            dd: '%d ra',\n            M: 'he marama',\n            MM: '%d marama',\n            y: 'he tau',\n            yy: '%d tau'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return mi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var mk = moment.defineLocale('mk', {\n        months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),\n        monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),\n        weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n        weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'D.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY H:mm',\n            LLLL : 'dddd, D MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay : '[Денес во] LT',\n            nextDay : '[Утре во] LT',\n            nextWeek : '[Во] dddd [во] LT',\n            lastDay : '[Вчера во] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Изминатата] dddd [во] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Изминатиот] dddd [во] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'после %s',\n            past : 'пред %s',\n            s : 'неколку секунди',\n            ss : '%d секунди',\n            m : 'минута',\n            mm : '%d минути',\n            h : 'час',\n            hh : '%d часа',\n            d : 'ден',\n            dd : '%d дена',\n            M : 'месец',\n            MM : '%d месеци',\n            y : 'година',\n            yy : '%d години'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal : function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return mk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ml = moment.defineLocale('ml', {\n        months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),\n        monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),\n        weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n        weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm -നു',\n            LTS : 'A h:mm:ss -നു',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm -നു',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'\n        },\n        calendar : {\n            sameDay : '[ഇന്ന്] LT',\n            nextDay : '[നാളെ] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[ഇന്നലെ] LT',\n            lastWeek : '[കഴിഞ്ഞ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s കഴിഞ്ഞ്',\n            past : '%s മുൻപ്',\n            s : 'അൽപ നിമിഷങ്ങൾ',\n            ss : '%d സെക്കൻഡ്',\n            m : 'ഒരു മിനിറ്റ്',\n            mm : '%d മിനിറ്റ്',\n            h : 'ഒരു മണിക്കൂർ',\n            hh : '%d മണിക്കൂർ',\n            d : 'ഒരു ദിവസം',\n            dd : '%d ദിവസം',\n            M : 'ഒരു മാസം',\n            MM : '%d മാസം',\n            y : 'ഒരു വർഷം',\n            yy : '%d വർഷം'\n        },\n        meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if ((meridiem === 'രാത്രി' && hour >= 4) ||\n                    meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n                    meridiem === 'വൈകുന്നേരം') {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'രാത്രി';\n            } else if (hour < 12) {\n                return 'രാവിലെ';\n            } else if (hour < 17) {\n                return 'ഉച്ച കഴിഞ്ഞ്';\n            } else if (hour < 20) {\n                return 'വൈകുന്നേരം';\n            } else {\n                return 'രാത്രി';\n            }\n        }\n    });\n\n    return ml;\n\n})));\n","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n/**\n * Returns true if a value is undefined, or NaN.\n */\nexport default function isInvalid(value) {\n  return value === undefined || value !== value;\n}","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function translate(number, withoutSuffix, key, isFuture) {\n        switch (key) {\n            case 's':\n                return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n            case 'ss':\n                return number + (withoutSuffix ? ' секунд' : ' секундын');\n            case 'm':\n            case 'mm':\n                return number + (withoutSuffix ? ' минут' : ' минутын');\n            case 'h':\n            case 'hh':\n                return number + (withoutSuffix ? ' цаг' : ' цагийн');\n            case 'd':\n            case 'dd':\n                return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n            case 'M':\n            case 'MM':\n                return number + (withoutSuffix ? ' сар' : ' сарын');\n            case 'y':\n            case 'yy':\n                return number + (withoutSuffix ? ' жил' : ' жилийн');\n            default:\n                return number;\n        }\n    }\n\n    var mn = moment.defineLocale('mn', {\n        months : 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split('_'),\n        monthsShort : '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n        weekdaysShort : 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n        weekdaysMin : 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'YYYY оны MMMMын D',\n            LLL : 'YYYY оны MMMMын D HH:mm',\n            LLLL : 'dddd, YYYY оны MMMMын D HH:mm'\n        },\n        meridiemParse: /ҮӨ|ҮХ/i,\n        isPM : function (input) {\n            return input === 'ҮХ';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ҮӨ';\n            } else {\n                return 'ҮХ';\n            }\n        },\n        calendar : {\n            sameDay : '[Өнөөдөр] LT',\n            nextDay : '[Маргааш] LT',\n            nextWeek : '[Ирэх] dddd LT',\n            lastDay : '[Өчигдөр] LT',\n            lastWeek : '[Өнгөрсөн] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s дараа',\n            past : '%s өмнө',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + ' өдөр';\n                default:\n                    return number;\n            }\n        }\n    });\n\n    return mn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '१',\n        '2': '२',\n        '3': '३',\n        '4': '४',\n        '5': '५',\n        '6': '६',\n        '7': '७',\n        '8': '८',\n        '9': '९',\n        '0': '०'\n    },\n    numberMap = {\n        '१': '1',\n        '२': '2',\n        '३': '3',\n        '४': '4',\n        '५': '5',\n        '६': '6',\n        '७': '7',\n        '८': '8',\n        '९': '9',\n        '०': '0'\n    };\n\n    function relativeTimeMr(number, withoutSuffix, string, isFuture)\n    {\n        var output = '';\n        if (withoutSuffix) {\n            switch (string) {\n                case 's': output = 'काही सेकंद'; break;\n                case 'ss': output = '%d सेकंद'; break;\n                case 'm': output = 'एक मिनिट'; break;\n                case 'mm': output = '%d मिनिटे'; break;\n                case 'h': output = 'एक तास'; break;\n                case 'hh': output = '%d तास'; break;\n                case 'd': output = 'एक दिवस'; break;\n                case 'dd': output = '%d दिवस'; break;\n                case 'M': output = 'एक महिना'; break;\n                case 'MM': output = '%d महिने'; break;\n                case 'y': output = 'एक वर्ष'; break;\n                case 'yy': output = '%d वर्षे'; break;\n            }\n        }\n        else {\n            switch (string) {\n                case 's': output = 'काही सेकंदां'; break;\n                case 'ss': output = '%d सेकंदां'; break;\n                case 'm': output = 'एका मिनिटा'; break;\n                case 'mm': output = '%d मिनिटां'; break;\n                case 'h': output = 'एका तासा'; break;\n                case 'hh': output = '%d तासां'; break;\n                case 'd': output = 'एका दिवसा'; break;\n                case 'dd': output = '%d दिवसां'; break;\n                case 'M': output = 'एका महिन्या'; break;\n                case 'MM': output = '%d महिन्यां'; break;\n                case 'y': output = 'एका वर्षा'; break;\n                case 'yy': output = '%d वर्षां'; break;\n            }\n        }\n        return output.replace(/%d/i, number);\n    }\n\n    var mr = moment.defineLocale('mr', {\n        months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),\n        monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm वाजता',\n            LTS : 'A h:mm:ss वाजता',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm वाजता',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'\n        },\n        calendar : {\n            sameDay : '[आज] LT',\n            nextDay : '[उद्या] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[काल] LT',\n            lastWeek: '[मागील] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future: '%sमध्ये',\n            past: '%sपूर्वी',\n            s: relativeTimeMr,\n            ss: relativeTimeMr,\n            m: relativeTimeMr,\n            mm: relativeTimeMr,\n            h: relativeTimeMr,\n            hh: relativeTimeMr,\n            d: relativeTimeMr,\n            dd: relativeTimeMr,\n            M: relativeTimeMr,\n            MM: relativeTimeMr,\n            y: relativeTimeMr,\n            yy: relativeTimeMr\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात्री') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सकाळी') {\n                return hour;\n            } else if (meridiem === 'दुपारी') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'सायंकाळी') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात्री';\n            } else if (hour < 10) {\n                return 'सकाळी';\n            } else if (hour < 17) {\n                return 'दुपारी';\n            } else if (hour < 20) {\n                return 'सायंकाळी';\n            } else {\n                return 'रात्री';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return mr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ms = moment.defineLocale('ms', {\n        months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar : {\n            sameDay : '[Hari ini pukul] LT',\n            nextDay : '[Esok pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kelmarin pukul] LT',\n            lastWeek : 'dddd [lepas pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dalam %s',\n            past : '%s yang lepas',\n            s : 'beberapa saat',\n            ss : '%d saat',\n            m : 'seminit',\n            mm : '%d minit',\n            h : 'sejam',\n            hh : '%d jam',\n            d : 'sehari',\n            dd : '%d hari',\n            M : 'sebulan',\n            MM : '%d bulan',\n            y : 'setahun',\n            yy : '%d tahun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return ms;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var msMy = moment.defineLocale('ms-my', {\n        months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar : {\n            sameDay : '[Hari ini pukul] LT',\n            nextDay : '[Esok pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kelmarin pukul] LT',\n            lastWeek : 'dddd [lepas pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dalam %s',\n            past : '%s yang lepas',\n            s : 'beberapa saat',\n            ss : '%d saat',\n            m : 'seminit',\n            mm : '%d minit',\n            h : 'sejam',\n            hh : '%d jam',\n            d : 'sehari',\n            dd : '%d hari',\n            M : 'sebulan',\n            MM : '%d bulan',\n            y : 'setahun',\n            yy : '%d tahun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return msMy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var mt = moment.defineLocale('mt', {\n        months : 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split('_'),\n        monthsShort : 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n        weekdays : 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split('_'),\n        weekdaysShort : 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n        weekdaysMin : 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Illum fil-]LT',\n            nextDay : '[Għada fil-]LT',\n            nextWeek : 'dddd [fil-]LT',\n            lastDay : '[Il-bieraħ fil-]LT',\n            lastWeek : 'dddd [li għadda] [fil-]LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'f’ %s',\n            past : '%s ilu',\n            s : 'ftit sekondi',\n            ss : '%d sekondi',\n            m : 'minuta',\n            mm : '%d minuti',\n            h : 'siegħa',\n            hh : '%d siegħat',\n            d : 'ġurnata',\n            dd : '%d ġranet',\n            M : 'xahar',\n            MM : '%d xhur',\n            y : 'sena',\n            yy : '%d sni'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return mt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '၁',\n        '2': '၂',\n        '3': '၃',\n        '4': '၄',\n        '5': '၅',\n        '6': '၆',\n        '7': '၇',\n        '8': '၈',\n        '9': '၉',\n        '0': '၀'\n    }, numberMap = {\n        '၁': '1',\n        '၂': '2',\n        '၃': '3',\n        '၄': '4',\n        '၅': '5',\n        '၆': '6',\n        '၇': '7',\n        '၈': '8',\n        '၉': '9',\n        '၀': '0'\n    };\n\n    var my = moment.defineLocale('my', {\n        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),\n        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),\n        weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n        weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[ယနေ.] LT [မှာ]',\n            nextDay: '[မနက်ဖြန်] LT [မှာ]',\n            nextWeek: 'dddd LT [မှာ]',\n            lastDay: '[မနေ.က] LT [မှာ]',\n            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'လာမည့် %s မှာ',\n            past: 'လွန်ခဲ့သော %s က',\n            s: 'စက္ကန်.အနည်းငယ်',\n            ss : '%d စက္ကန့်',\n            m: 'တစ်မိနစ်',\n            mm: '%d မိနစ်',\n            h: 'တစ်နာရီ',\n            hh: '%d နာရီ',\n            d: 'တစ်ရက်',\n            dd: '%d ရက်',\n            M: 'တစ်လ',\n            MM: '%d လ',\n            y: 'တစ်နှစ်',\n            yy: '%d နှစ်'\n        },\n        preparse: function (string) {\n            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return my;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var nb = moment.defineLocale('nb', {\n        months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n        monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n        weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY [kl.] HH:mm',\n            LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n        },\n        calendar : {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[forrige] dddd [kl.] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : '%s siden',\n            s : 'noen sekunder',\n            ss : '%d sekunder',\n            m : 'ett minutt',\n            mm : '%d minutter',\n            h : 'en time',\n            hh : '%d timer',\n            d : 'en dag',\n            dd : '%d dager',\n            M : 'en måned',\n            MM : '%d måneder',\n            y : 'ett år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nb;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '१',\n        '2': '२',\n        '3': '३',\n        '4': '४',\n        '5': '५',\n        '6': '६',\n        '7': '७',\n        '8': '८',\n        '9': '९',\n        '0': '०'\n    },\n    numberMap = {\n        '१': '1',\n        '२': '2',\n        '३': '3',\n        '४': '4',\n        '५': '5',\n        '६': '6',\n        '७': '7',\n        '८': '8',\n        '९': '9',\n        '०': '0'\n    };\n\n    var ne = moment.defineLocale('ne', {\n        months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),\n        monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),\n        weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n        weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'Aको h:mm बजे',\n            LTS : 'Aको h:mm:ss बजे',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, Aको h:mm बजे',\n            LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राति') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'बिहान') {\n                return hour;\n            } else if (meridiem === 'दिउँसो') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'साँझ') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 3) {\n                return 'राति';\n            } else if (hour < 12) {\n                return 'बिहान';\n            } else if (hour < 16) {\n                return 'दिउँसो';\n            } else if (hour < 20) {\n                return 'साँझ';\n            } else {\n                return 'राति';\n            }\n        },\n        calendar : {\n            sameDay : '[आज] LT',\n            nextDay : '[भोलि] LT',\n            nextWeek : '[आउँदो] dddd[,] LT',\n            lastDay : '[हिजो] LT',\n            lastWeek : '[गएको] dddd[,] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%sमा',\n            past : '%s अगाडि',\n            s : 'केही क्षण',\n            ss : '%d सेकेण्ड',\n            m : 'एक मिनेट',\n            mm : '%d मिनेट',\n            h : 'एक घण्टा',\n            hh : '%d घण्टा',\n            d : 'एक दिन',\n            dd : '%d दिन',\n            M : 'एक महिना',\n            MM : '%d महिना',\n            y : 'एक बर्ष',\n            yy : '%d बर्ष'\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return ne;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n    var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n    var monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nl = moment.defineLocale('nl', {\n        months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n\n        weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'over %s',\n            past : '%s geleden',\n            s : 'een paar seconden',\n            ss : '%d seconden',\n            m : 'één minuut',\n            mm : '%d minuten',\n            h : 'één uur',\n            hh : '%d uur',\n            d : 'één dag',\n            dd : '%d dagen',\n            M : 'één maand',\n            MM : '%d maanden',\n            y : 'één jaar',\n            yy : '%d jaar'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n    var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n    var monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nlBe = moment.defineLocale('nl-be', {\n        months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n\n        weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'over %s',\n            past : '%s geleden',\n            s : 'een paar seconden',\n            ss : '%d seconden',\n            m : 'één minuut',\n            mm : '%d minuten',\n            h : 'één uur',\n            hh : '%d uur',\n            d : 'één dag',\n            dd : '%d dagen',\n            M : 'één maand',\n            MM : '%d maanden',\n            y : 'één jaar',\n            yy : '%d jaar'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nlBe;\n\n})));\n","/* @license\nPapa Parse\nv5.3.0\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\n!function(e,t){\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof module&&\"undefined\"!=typeof exports?module.exports=t():e.Papa=t()}(this,function s(){\"use strict\";var f=\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:void 0!==f?f:{};var n=!f.document&&!!f.postMessage,o=n&&/blob:/i.test((f.location||{}).protocol),a={},h=0,b={parse:function(e,t){var i=(t=t||{}).dynamicTyping||!1;U(i)&&(t.dynamicTypingFunction=i,i={});if(t.dynamicTyping=i,t.transform=!!U(t.transform)&&t.transform,t.worker&&b.WORKERS_SUPPORTED){var r=function(){if(!b.WORKERS_SUPPORTED)return!1;var e=(i=f.URL||f.webkitURL||null,r=s.toString(),b.BLOB_URL||(b.BLOB_URL=i.createObjectURL(new Blob([\"(\",r,\")();\"],{type:\"text/javascript\"})))),t=new f.Worker(e);var i,r;return t.onmessage=m,t.id=h++,a[t.id]=t}();return r.userStep=t.step,r.userChunk=t.chunk,r.userComplete=t.complete,r.userError=t.error,t.step=U(t.step),t.chunk=U(t.chunk),t.complete=U(t.complete),t.error=U(t.error),delete t.worker,void r.postMessage({input:e,config:t,workerId:r.id})}var n=null;b.NODE_STREAM_INPUT,\"string\"==typeof e?n=t.download?new l(t):new p(t):!0===e.readable&&U(e.read)&&U(e.on)?n=new g(t):(f.File&&e instanceof File||e instanceof Object)&&(n=new c(t));return n.stream(e)},unparse:function(e,t){var n=!1,m=!0,_=\",\",v=\"\\r\\n\",s='\"',a=s+s,i=!1,r=null,o=!1;!function(){if(\"object\"!=typeof t)return;\"string\"!=typeof t.delimiter||b.BAD_DELIMITERS.filter(function(e){return-1!==t.delimiter.indexOf(e)}).length||(_=t.delimiter);(\"boolean\"==typeof t.quotes||\"function\"==typeof t.quotes||Array.isArray(t.quotes))&&(n=t.quotes);\"boolean\"!=typeof t.skipEmptyLines&&\"string\"!=typeof t.skipEmptyLines||(i=t.skipEmptyLines);\"string\"==typeof t.newline&&(v=t.newline);\"string\"==typeof t.quoteChar&&(s=t.quoteChar);\"boolean\"==typeof t.header&&(m=t.header);if(Array.isArray(t.columns)){if(0===t.columns.length)throw new Error(\"Option columns is empty\");r=t.columns}void 0!==t.escapeChar&&(a=t.escapeChar+s);\"boolean\"==typeof t.escapeFormulae&&(o=t.escapeFormulae)}();var h=new RegExp(q(s),\"g\");\"string\"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return f(null,e,i);if(\"object\"==typeof e[0])return f(r||u(e[0]),e,i)}else if(\"object\"==typeof e)return\"string\"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:u(e.data[0])),Array.isArray(e.data[0])||\"object\"==typeof e.data[0]||(e.data=[e.data])),f(e.fields||[],e.data||[],i);throw new Error(\"Unable to serialize unrecognized input\");function u(e){if(\"object\"!=typeof e)return[];var t=[];for(var i in e)t.push(i);return t}function f(e,t,i){var r=\"\";\"string\"==typeof e&&(e=JSON.parse(e)),\"string\"==typeof t&&(t=JSON.parse(t));var n=Array.isArray(e)&&0<e.length,s=!Array.isArray(t[0]);if(n&&m){for(var a=0;a<e.length;a++)0<a&&(r+=_),r+=y(e[a],a);0<t.length&&(r+=v)}for(var o=0;o<t.length;o++){var h=n?e.length:t[o].length,u=!1,f=n?0===Object.keys(t[o]).length:0===t[o].length;if(i&&!n&&(u=\"greedy\"===i?\"\"===t[o].join(\"\").trim():1===t[o].length&&0===t[o][0].length),\"greedy\"===i&&n){for(var d=[],l=0;l<h;l++){var c=s?e[l]:l;d.push(t[o][c])}u=\"\"===d.join(\"\").trim()}if(!u){for(var p=0;p<h;p++){0<p&&!f&&(r+=_);var g=n&&s?e[p]:p;r+=y(t[o][g],p)}o<t.length-1&&(!i||0<h&&!f)&&(r+=v)}}return r}function y(e,t){if(null==e)return\"\";if(e.constructor===Date)return JSON.stringify(e).slice(1,25);!0===o&&\"string\"==typeof e&&null!==e.match(/^[=+\\-@].*$/)&&(e=\"'\"+e);var i=e.toString().replace(h,a),r=\"boolean\"==typeof n&&n||\"function\"==typeof n&&n(e,t)||Array.isArray(n)&&n[t]||function(e,t){for(var i=0;i<t.length;i++)if(-1<e.indexOf(t[i]))return!0;return!1}(i,b.BAD_DELIMITERS)||-1<i.indexOf(_)||\" \"===i.charAt(0)||\" \"===i.charAt(i.length-1);return r?s+i+s:i}}};if(b.RECORD_SEP=String.fromCharCode(30),b.UNIT_SEP=String.fromCharCode(31),b.BYTE_ORDER_MARK=\"\\ufeff\",b.BAD_DELIMITERS=[\"\\r\",\"\\n\",'\"',b.BYTE_ORDER_MARK],b.WORKERS_SUPPORTED=!n&&!!f.Worker,b.NODE_STREAM_INPUT=1,b.LocalChunkSize=10485760,b.RemoteChunkSize=5242880,b.DefaultDelimiter=\",\",b.Parser=w,b.ParserHandle=i,b.NetworkStreamer=l,b.FileStreamer=c,b.StringStreamer=p,b.ReadableStreamStreamer=g,f.jQuery){var d=f.jQuery;d.fn.parse=function(o){var i=o.config||{},h=[];return this.each(function(e){if(!(\"INPUT\"===d(this).prop(\"tagName\").toUpperCase()&&\"file\"===d(this).attr(\"type\").toLowerCase()&&f.FileReader)||!this.files||0===this.files.length)return!0;for(var t=0;t<this.files.length;t++)h.push({file:this.files[t],inputElem:this,instanceConfig:d.extend({},i)})}),e(),this;function e(){if(0!==h.length){var e,t,i,r,n=h[0];if(U(o.before)){var s=o.before(n.file,n.inputElem);if(\"object\"==typeof s){if(\"abort\"===s.action)return e=\"AbortError\",t=n.file,i=n.inputElem,r=s.reason,void(U(o.error)&&o.error({name:e},t,i,r));if(\"skip\"===s.action)return void u();\"object\"==typeof s.config&&(n.instanceConfig=d.extend(n.instanceConfig,s.config))}else if(\"skip\"===s)return void u()}var a=n.instanceConfig.complete;n.instanceConfig.complete=function(e){U(a)&&a(e,n.file,n.inputElem),u()},b.parse(n.file,n.instanceConfig)}else U(o.complete)&&o.complete()}function u(){h.splice(0,1),e()}}}function u(e){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine=\"\",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},function(e){var t=E(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null);this._handle=new i(t),(this._handle.streamer=this)._config=t}.call(this,e),this.parseChunk=function(e,t){if(this.isFirstChunk&&U(this._config.beforeFirstChunk)){var i=this._config.beforeFirstChunk(e);void 0!==i&&(e=i)}this.isFirstChunk=!1,this._halted=!1;var r=this._partialLine+e;this._partialLine=\"\";var n=this._handle.parse(r,this._baseIndex,!this._finished);if(!this._handle.paused()&&!this._handle.aborted()){var s=n.meta.cursor;this._finished||(this._partialLine=r.substring(s-this._baseIndex),this._baseIndex=s),n&&n.data&&(this._rowCount+=n.data.length);var a=this._finished||this._config.preview&&this._rowCount>=this._config.preview;if(o)f.postMessage({results:n,workerId:b.WORKER_ID,finished:a});else if(U(this._config.chunk)&&!t){if(this._config.chunk(n,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);n=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(n.data),this._completeResults.errors=this._completeResults.errors.concat(n.errors),this._completeResults.meta=n.meta),this._completed||!a||!U(this._config.complete)||n&&n.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),a||n&&n.meta.paused||this._nextChunk(),n}this._halted=!0},this._sendError=function(e){U(this._config.error)?this._config.error(e):o&&this._config.error&&f.postMessage({workerId:b.WORKER_ID,error:e,finished:!1})}}function l(e){var r;(e=e||{}).chunkSize||(e.chunkSize=b.RemoteChunkSize),u.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(r=new XMLHttpRequest,this._config.withCredentials&&(r.withCredentials=this._config.withCredentials),n||(r.onload=y(this._chunkLoaded,this),r.onerror=y(this._chunkError,this)),r.open(this._config.downloadRequestBody?\"POST\":\"GET\",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var t in e)r.setRequestHeader(t,e[t])}if(this._config.chunkSize){var i=this._start+this._config.chunkSize-1;r.setRequestHeader(\"Range\",\"bytes=\"+this._start+\"-\"+i)}try{r.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}n&&0===r.status&&this._chunkError()}},this._chunkLoaded=function(){4===r.readyState&&(r.status<200||400<=r.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:r.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader(\"Content-Range\");if(null===t)return-1;return parseInt(t.substring(t.lastIndexOf(\"/\")+1))}(r),this.parseChunk(r.responseText)))},this._chunkError=function(e){var t=r.statusText||e;this._sendError(new Error(t))}}function c(e){var r,n;(e=e||{}).chunkSize||(e.chunkSize=b.LocalChunkSize),u.call(this,e);var s=\"undefined\"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,s?((r=new FileReader).onload=y(this._chunkLoaded,this),r.onerror=y(this._chunkError,this)):r=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount<this._config.preview)||this._readChunk()},this._readChunk=function(){var e=this._input;if(this._config.chunkSize){var t=Math.min(this._start+this._config.chunkSize,this._input.size);e=n.call(e,this._start,t)}var i=r.readAsText(e,this._config.encoding);s||this._chunkLoaded({target:{result:i}})},this._chunkLoaded=function(e){this._start+=this._config.chunkSize,this._finished=!this._config.chunkSize||this._start>=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(r.error)}}function p(e){var i;u.call(this,e=e||{}),this.stream=function(e){return i=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,t=this._config.chunkSize;return t?(e=i.substring(0,t),i=i.substring(t)):(e=i,i=\"\"),this._finished=!i,this.parseChunk(e)}}}function g(e){u.call(this,e=e||{});var t=[],i=!0,r=!1;this.pause=function(){u.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){u.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on(\"data\",this._streamData),this._input.on(\"end\",this._streamEnd),this._input.on(\"error\",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):i=!0},this._streamData=y(function(e){try{t.push(\"string\"==typeof e?e:e.toString(this._config.encoding)),i&&(i=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=y(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=y(function(){this._streamCleanUp(),r=!0,this._streamData(\"\")},this),this._streamCleanUp=y(function(){this._input.removeListener(\"data\",this._streamData),this._input.removeListener(\"end\",this._streamEnd),this._input.removeListener(\"error\",this._streamError)},this)}function i(_){var a,o,h,r=Math.pow(2,53),n=-r,s=/^\\s*-?(\\d+\\.?|\\.\\d+|\\d+\\.\\d+)(e[-+]?\\d+)?\\s*$/,u=/(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))/,t=this,i=0,f=0,d=!1,e=!1,l=[],c={data:[],errors:[],meta:{}};if(U(_.step)){var p=_.step;_.step=function(e){if(c=e,m())g();else{if(g(),0===c.data.length)return;i+=e.data.length,_.preview&&i>_.preview?o.abort():(c.data=c.data[0],p(c,t))}}}function v(e){return\"greedy\"===_.skipEmptyLines?\"\"===e.join(\"\").trim():1===e.length&&0===e[0].length}function g(){if(c&&h&&(k(\"Delimiter\",\"UndetectableDelimiter\",\"Unable to auto-detect delimiting character; defaulted to '\"+b.DefaultDelimiter+\"'\"),h=!1),_.skipEmptyLines)for(var e=0;e<c.data.length;e++)v(c.data[e])&&c.data.splice(e--,1);return m()&&function(){if(!c)return;function e(e,t){U(_.transformHeader)&&(e=_.transformHeader(e,t)),l.push(e)}if(Array.isArray(c.data[0])){for(var t=0;m()&&t<c.data.length;t++)c.data[t].forEach(e);c.data.splice(0,1)}else c.data.forEach(e)}(),function(){if(!c||!_.header&&!_.dynamicTyping&&!_.transform)return c;function e(e,t){var i,r=_.header?{}:[];for(i=0;i<e.length;i++){var n=i,s=e[i];_.header&&(n=i>=l.length?\"__parsed_extra\":l[i]),_.transform&&(s=_.transform(s,n)),s=y(n,s),\"__parsed_extra\"===n?(r[n]=r[n]||[],r[n].push(s)):r[n]=s}return _.header&&(i>l.length?k(\"FieldMismatch\",\"TooManyFields\",\"Too many fields: expected \"+l.length+\" fields but parsed \"+i,f+t):i<l.length&&k(\"FieldMismatch\",\"TooFewFields\",\"Too few fields: expected \"+l.length+\" fields but parsed \"+i,f+t)),r}var t=1;!c.data.length||Array.isArray(c.data[0])?(c.data=c.data.map(e),t=c.data.length):c.data=e(c.data,0);_.header&&c.meta&&(c.meta.fields=l);return f+=t,c}()}function m(){return _.header&&0===l.length}function y(e,t){return i=e,_.dynamicTypingFunction&&void 0===_.dynamicTyping[i]&&(_.dynamicTyping[i]=_.dynamicTypingFunction(i)),!0===(_.dynamicTyping[i]||_.dynamicTyping)?\"true\"===t||\"TRUE\"===t||\"false\"!==t&&\"FALSE\"!==t&&(function(e){if(s.test(e)){var t=parseFloat(e);if(n<t&&t<r)return!0}return!1}(t)?parseFloat(t):u.test(t)?new Date(t):\"\"===t?null:t):t;var i}function k(e,t,i,r){var n={type:e,code:t,message:i};void 0!==r&&(n.row=r),c.errors.push(n)}this.parse=function(e,t,i){var r=_.quoteChar||'\"';if(_.newline||(_.newline=function(e,t){e=e.substring(0,1048576);var i=new RegExp(q(t)+\"([^]*?)\"+q(t),\"gm\"),r=(e=e.replace(i,\"\")).split(\"\\r\"),n=e.split(\"\\n\"),s=1<n.length&&n[0].length<r[0].length;if(1===r.length||s)return\"\\n\";for(var a=0,o=0;o<r.length;o++)\"\\n\"===r[o][0]&&a++;return a>=r.length/2?\"\\r\\n\":\"\\r\"}(e,r)),h=!1,_.delimiter)U(_.delimiter)&&(_.delimiter=_.delimiter(e),c.meta.delimiter=_.delimiter);else{var n=function(e,t,i,r,n){var s,a,o,h;n=n||[\",\",\"\\t\",\"|\",\";\",b.RECORD_SEP,b.UNIT_SEP];for(var u=0;u<n.length;u++){var f=n[u],d=0,l=0,c=0;o=void 0;for(var p=new w({comments:r,delimiter:f,newline:t,preview:10}).parse(e),g=0;g<p.data.length;g++)if(i&&v(p.data[g]))c++;else{var m=p.data[g].length;l+=m,void 0!==o?0<m&&(d+=Math.abs(m-o),o=m):o=m}0<p.data.length&&(l/=p.data.length-c),(void 0===a||d<=a)&&(void 0===h||h<l)&&1.99<l&&(a=d,s=f,h=l)}return{successful:!!(_.delimiter=s),bestDelimiter:s}}(e,_.newline,_.skipEmptyLines,_.comments,_.delimitersToGuess);n.successful?_.delimiter=n.bestDelimiter:(h=!0,_.delimiter=b.DefaultDelimiter),c.meta.delimiter=_.delimiter}var s=E(_);return _.preview&&_.header&&s.preview++,a=e,o=new w(s),c=o.parse(a,t,i),g(),d?{meta:{paused:!0}}:c||{meta:{paused:!1}}},this.paused=function(){return d},this.pause=function(){d=!0,o.abort(),a=U(_.chunk)?\"\":a.substring(o.getCharIndex())},this.resume=function(){t.streamer._halted?(d=!1,t.streamer.parseChunk(a,!0)):setTimeout(t.resume,3)},this.aborted=function(){return e},this.abort=function(){e=!0,o.abort(),c.meta.aborted=!0,U(_.complete)&&_.complete(c),a=\"\"}}function q(e){return e.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function w(e){var O,D=(e=e||{}).delimiter,I=e.newline,T=e.comments,A=e.step,L=e.preview,F=e.fastMode,z=O=void 0===e.quoteChar?'\"':e.quoteChar;if(void 0!==e.escapeChar&&(z=e.escapeChar),(\"string\"!=typeof D||-1<b.BAD_DELIMITERS.indexOf(D))&&(D=\",\"),T===D)throw new Error(\"Comment character same as delimiter\");!0===T?T=\"#\":(\"string\"!=typeof T||-1<b.BAD_DELIMITERS.indexOf(T))&&(T=!1),\"\\n\"!==I&&\"\\r\"!==I&&\"\\r\\n\"!==I&&(I=\"\\n\");var M=0,j=!1;this.parse=function(a,t,i){if(\"string\"!=typeof a)throw new Error(\"Input must be a string\");var r=a.length,e=D.length,n=I.length,s=T.length,o=U(A),h=[],u=[],f=[],d=M=0;if(!a)return R();if(F||!1!==F&&-1===a.indexOf(O)){for(var l=a.split(I),c=0;c<l.length;c++){if(f=l[c],M+=f.length,c!==l.length-1)M+=I.length;else if(i)return R();if(!T||f.substring(0,s)!==T){if(o){if(h=[],b(f.split(D)),S(),j)return R()}else b(f.split(D));if(L&&L<=c)return h=h.slice(0,L),R(!0)}}return R()}for(var p=a.indexOf(D,M),g=a.indexOf(I,M),m=new RegExp(q(z)+q(O),\"g\"),_=a.indexOf(O,M);;)if(a[M]!==O)if(T&&0===f.length&&a.substring(M,M+s)===T){if(-1===g)return R();M=g+n,g=a.indexOf(I,M),p=a.indexOf(D,M)}else{if(-1!==p&&(p<g||-1===g)){if(!(p<_)){f.push(a.substring(M,p)),M=p+e,p=a.indexOf(D,M);continue}var v=x(p,_,g);if(v&&void 0!==v.nextDelim){p=v.nextDelim,_=v.quoteSearch,f.push(a.substring(M,p)),M=p+e,p=a.indexOf(D,M);continue}}if(-1===g)break;if(f.push(a.substring(M,g)),C(g+n),o&&(S(),j))return R();if(L&&h.length>=L)return R(!0)}else for(_=M,M++;;){if(-1===(_=a.indexOf(O,_+1)))return i||u.push({type:\"Quotes\",code:\"MissingQuotes\",message:\"Quoted field unterminated\",row:h.length,index:M}),E();if(_===r-1)return E(a.substring(M,_).replace(m,O));if(O!==z||a[_+1]!==z){if(O===z||0===_||a[_-1]!==z){-1!==p&&p<_+1&&(p=a.indexOf(D,_+1)),-1!==g&&g<_+1&&(g=a.indexOf(I,_+1));var y=w(-1===g?p:Math.min(p,g));if(a[_+1+y]===D){f.push(a.substring(M,_).replace(m,O)),a[M=_+1+y+e]!==O&&(_=a.indexOf(O,M)),p=a.indexOf(D,M),g=a.indexOf(I,M);break}var k=w(g);if(a.substring(_+1+k,_+1+k+n)===I){if(f.push(a.substring(M,_).replace(m,O)),C(_+1+k+n),p=a.indexOf(D,M),_=a.indexOf(O,M),o&&(S(),j))return R();if(L&&h.length>=L)return R(!0);break}u.push({type:\"Quotes\",code:\"InvalidQuotes\",message:\"Trailing quote on quoted field is malformed\",row:h.length,index:M}),_++}}else _++}return E();function b(e){h.push(e),d=M}function w(e){var t=0;if(-1!==e){var i=a.substring(_+1,e);i&&\"\"===i.trim()&&(t=i.length)}return t}function E(e){return i||(void 0===e&&(e=a.substring(M)),f.push(e),M=r,b(f),o&&S()),R()}function C(e){M=e,b(f),f=[],g=a.indexOf(I,M)}function R(e){return{data:h,errors:u,meta:{delimiter:D,linebreak:I,aborted:j,truncated:!!e,cursor:d+(t||0)}}}function S(){A(R()),h=[],u=[]}function x(e,t,i){var r={nextDelim:void 0,quoteSearch:void 0},n=a.indexOf(O,t+1);if(t<e&&e<n&&(n<i||-1===i)){var s=a.indexOf(D,n);if(-1===s)return r;n<s&&(n=a.indexOf(O,n+1)),r=x(s,n,i)}else r={nextDelim:e,quoteSearch:t};return r}},this.abort=function(){j=!0},this.getCharIndex=function(){return M}}function m(e){var t=e.data,i=a[t.workerId],r=!1;if(t.error)i.userError(t.error,t.file);else if(t.results&&t.results.data){var n={abort:function(){r=!0,_(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:v,resume:v};if(U(i.userStep)){for(var s=0;s<t.results.data.length&&(i.userStep({data:t.results.data[s],errors:t.results.errors,meta:t.results.meta},n),!r);s++);delete t.results}else U(i.userChunk)&&(i.userChunk(t.results,n,t.file),delete t.results)}t.finished&&!r&&_(t.workerId,t.results)}function _(e,t){var i=a[e];U(i.userComplete)&&i.userComplete(t),i.terminate(),delete a[e]}function v(){throw new Error(\"Not implemented.\")}function E(e){if(\"object\"!=typeof e||null===e)return e;var t=Array.isArray(e)?[]:{};for(var i in e)t[i]=E(e[i]);return t}function y(e,t){return function(){e.apply(t,arguments)}}function U(e){return\"function\"==typeof e}return o&&(f.onmessage=function(e){var t=e.data;void 0===b.WORKER_ID&&t&&(b.WORKER_ID=t.workerId);if(\"string\"==typeof t.input)f.postMessage({workerId:b.WORKER_ID,results:b.parse(t.input,t.config),finished:!0});else if(f.File&&t.input instanceof File||t.input instanceof Object){var i=b.parse(t.input,t.config);i&&f.postMessage({workerId:b.WORKER_ID,results:i,finished:!0})}}),(l.prototype=Object.create(u.prototype)).constructor=l,(c.prototype=Object.create(u.prototype)).constructor=c,(p.prototype=Object.create(p.prototype)).constructor=p,(g.prototype=Object.create(u.prototype)).constructor=g,b});","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var nn = moment.defineLocale('nn', {\n        months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n        weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),\n        weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY [kl.] H:mm',\n            LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n        },\n        calendar : {\n            sameDay: '[I dag klokka] LT',\n            nextDay: '[I morgon klokka] LT',\n            nextWeek: 'dddd [klokka] LT',\n            lastDay: '[I går klokka] LT',\n            lastWeek: '[Føregåande] dddd [klokka] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : '%s sidan',\n            s : 'nokre sekund',\n            ss : '%d sekund',\n            m : 'eit minutt',\n            mm : '%d minutt',\n            h : 'ein time',\n            hh : '%d timar',\n            d : 'ein dag',\n            dd : '%d dagar',\n            M : 'ein månad',\n            MM : '%d månader',\n            y : 'eit år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '੧',\n        '2': '੨',\n        '3': '੩',\n        '4': '੪',\n        '5': '੫',\n        '6': '੬',\n        '7': '੭',\n        '8': '੮',\n        '9': '੯',\n        '0': '੦'\n    },\n    numberMap = {\n        '੧': '1',\n        '੨': '2',\n        '੩': '3',\n        '੪': '4',\n        '੫': '5',\n        '੬': '6',\n        '੭': '7',\n        '੮': '8',\n        '੯': '9',\n        '੦': '0'\n    };\n\n    var paIn = moment.defineLocale('pa-in', {\n        // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n        months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n        monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n        weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),\n        weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm ਵਜੇ',\n            LTS : 'A h:mm:ss ਵਜੇ',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'\n        },\n        calendar : {\n            sameDay : '[ਅਜ] LT',\n            nextDay : '[ਕਲ] LT',\n            nextWeek : '[ਅਗਲਾ] dddd, LT',\n            lastDay : '[ਕਲ] LT',\n            lastWeek : '[ਪਿਛਲੇ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ਵਿੱਚ',\n            past : '%s ਪਿਛਲੇ',\n            s : 'ਕੁਝ ਸਕਿੰਟ',\n            ss : '%d ਸਕਿੰਟ',\n            m : 'ਇਕ ਮਿੰਟ',\n            mm : '%d ਮਿੰਟ',\n            h : 'ਇੱਕ ਘੰਟਾ',\n            hh : '%d ਘੰਟੇ',\n            d : 'ਇੱਕ ਦਿਨ',\n            dd : '%d ਦਿਨ',\n            M : 'ਇੱਕ ਮਹੀਨਾ',\n            MM : '%d ਮਹੀਨੇ',\n            y : 'ਇੱਕ ਸਾਲ',\n            yy : '%d ਸਾਲ'\n        },\n        preparse: function (string) {\n            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n        meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ਰਾਤ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ਸਵੇਰ') {\n                return hour;\n            } else if (meridiem === 'ਦੁਪਹਿਰ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ਸ਼ਾਮ') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ਰਾਤ';\n            } else if (hour < 10) {\n                return 'ਸਵੇਰ';\n            } else if (hour < 17) {\n                return 'ਦੁਪਹਿਰ';\n            } else if (hour < 20) {\n                return 'ਸ਼ਾਮ';\n            } else {\n                return 'ਰਾਤ';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return paIn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),\n        monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');\n    function plural(n) {\n        return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);\n    }\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                return result + (plural(number) ? 'sekundy' : 'sekund');\n            case 'm':\n                return withoutSuffix ? 'minuta' : 'minutę';\n            case 'mm':\n                return result + (plural(number) ? 'minuty' : 'minut');\n            case 'h':\n                return withoutSuffix  ? 'godzina'  : 'godzinę';\n            case 'hh':\n                return result + (plural(number) ? 'godziny' : 'godzin');\n            case 'MM':\n                return result + (plural(number) ? 'miesiące' : 'miesięcy');\n            case 'yy':\n                return result + (plural(number) ? 'lata' : 'lat');\n        }\n    }\n\n    var pl = moment.defineLocale('pl', {\n        months : function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return monthsNominative;\n            } else if (format === '') {\n                // Hack: if format empty we know this is used to generate\n                // RegExp by moment. Give then back both valid forms of months\n                // in RegExp ready format.\n                return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';\n            } else if (/D MMMM/.test(format)) {\n                return monthsSubjective[momentToFormat.month()];\n            } else {\n                return monthsNominative[momentToFormat.month()];\n            }\n        },\n        monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n        weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n        weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n        weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Dziś o] LT',\n            nextDay: '[Jutro o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W niedzielę o] LT';\n\n                    case 2:\n                        return '[We wtorek o] LT';\n\n                    case 3:\n                        return '[W środę o] LT';\n\n                    case 6:\n                        return '[W sobotę o] LT';\n\n                    default:\n                        return '[W] dddd [o] LT';\n                }\n            },\n            lastDay: '[Wczoraj o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W zeszłą niedzielę o] LT';\n                    case 3:\n                        return '[W zeszłą środę o] LT';\n                    case 6:\n                        return '[W zeszłą sobotę o] LT';\n                    default:\n                        return '[W zeszły] dddd [o] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past : '%s temu',\n            s : 'kilka sekund',\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : '1 dzień',\n            dd : '%d dni',\n            M : 'miesiąc',\n            MM : translate,\n            y : 'rok',\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return pl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var pt = moment.defineLocale('pt', {\n        months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n        weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY HH:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return (this.day() === 0 || this.day() === 6) ?\n                    '[Último] dddd [às] LT' : // Saturday + Sunday\n                    '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'em %s',\n            past : 'há %s',\n            s : 'segundos',\n            ss : '%d segundos',\n            m : 'um minuto',\n            mm : '%d minutos',\n            h : 'uma hora',\n            hh : '%d horas',\n            d : 'um dia',\n            dd : '%d dias',\n            M : 'um mês',\n            MM : '%d meses',\n            y : 'um ano',\n            yy : '%d anos'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return pt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ptBr = moment.defineLocale('pt-br', {\n        months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n        weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'\n        },\n        calendar : {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return (this.day() === 0 || this.day() === 6) ?\n                    '[Último] dddd [às] LT' : // Saturday + Sunday\n                    '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'em %s',\n            past : 'há %s',\n            s : 'poucos segundos',\n            ss : '%d segundos',\n            m : 'um minuto',\n            mm : '%d minutos',\n            h : 'uma hora',\n            hh : '%d horas',\n            d : 'um dia',\n            dd : '%d dias',\n            M : 'um mês',\n            MM : '%d meses',\n            y : 'um ano',\n            yy : '%d anos'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal : '%dº'\n    });\n\n    return ptBr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n                'ss': 'secunde',\n                'mm': 'minute',\n                'hh': 'ore',\n                'dd': 'zile',\n                'MM': 'luni',\n                'yy': 'ani'\n            },\n            separator = ' ';\n        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n            separator = ' de ';\n        }\n        return number + separator + format[key];\n    }\n\n    var ro = moment.defineLocale('ro', {\n        months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),\n        monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n        weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n        weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY H:mm',\n            LLLL : 'dddd, D MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay: '[azi la] LT',\n            nextDay: '[mâine la] LT',\n            nextWeek: 'dddd [la] LT',\n            lastDay: '[ieri la] LT',\n            lastWeek: '[fosta] dddd [la] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'peste %s',\n            past : '%s în urmă',\n            s : 'câteva secunde',\n            ss : relativeTimeWithPlural,\n            m : 'un minut',\n            mm : relativeTimeWithPlural,\n            h : 'o oră',\n            hh : relativeTimeWithPlural,\n            d : 'o zi',\n            dd : relativeTimeWithPlural,\n            M : 'o lună',\n            MM : relativeTimeWithPlural,\n            y : 'un an',\n            yy : relativeTimeWithPlural\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return ro;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n            'hh': 'час_часа_часов',\n            'dd': 'день_дня_дней',\n            'MM': 'месяц_месяца_месяцев',\n            'yy': 'год_года_лет'\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'минута' : 'минуту';\n        }\n        else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    var monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];\n\n    // http://new.gramota.ru/spravka/rules/139-prop : § 103\n    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n    var ru = moment.defineLocale('ru', {\n        months : {\n            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),\n            standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')\n        },\n        monthsShort : {\n            // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку ?\n            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),\n            standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')\n        },\n        weekdays : {\n            standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),\n            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),\n            isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\\] ?dddd/\n        },\n        weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n\n        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n        monthsRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // копия предыдущего\n        monthsShortRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // полные названия с падежами\n        monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n        // Выражение, которое соотвествует только сокращённым формам\n        monthsShortStrictRegex: /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY г.',\n            LLL : 'D MMMM YYYY г., H:mm',\n            LLLL : 'dddd, D MMMM YYYY г., H:mm'\n        },\n        calendar : {\n            sameDay: '[Сегодня, в] LT',\n            nextDay: '[Завтра, в] LT',\n            lastDay: '[Вчера, в] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В следующее] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В следующий] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В следующую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            lastWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В прошлое] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В прошлый] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В прошлую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'через %s',\n            past : '%s назад',\n            s : 'несколько секунд',\n            ss : relativeTimeWithPlural,\n            m : relativeTimeWithPlural,\n            mm : relativeTimeWithPlural,\n            h : 'час',\n            hh : relativeTimeWithPlural,\n            d : 'день',\n            dd : relativeTimeWithPlural,\n            M : 'месяц',\n            MM : relativeTimeWithPlural,\n            y : 'год',\n            yy : relativeTimeWithPlural\n        },\n        meridiemParse: /ночи|утра|дня|вечера/i,\n        isPM : function (input) {\n            return /^(дня|вечера)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночи';\n            } else if (hour < 12) {\n                return 'утра';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечера';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                case 'w':\n                case 'W':\n                    return number + '-я';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ru;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'جنوري',\n        'فيبروري',\n        'مارچ',\n        'اپريل',\n        'مئي',\n        'جون',\n        'جولاءِ',\n        'آگسٽ',\n        'سيپٽمبر',\n        'آڪٽوبر',\n        'نومبر',\n        'ڊسمبر'\n    ];\n    var days = [\n        'آچر',\n        'سومر',\n        'اڱارو',\n        'اربع',\n        'خميس',\n        'جمع',\n        'ڇنڇر'\n    ];\n\n    var sd = moment.defineLocale('sd', {\n        months : months,\n        monthsShort : months,\n        weekdays : days,\n        weekdaysShort : days,\n        weekdaysMin : days,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd، D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /صبح|شام/,\n        isPM : function (input) {\n            return 'شام' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar : {\n            sameDay : '[اڄ] LT',\n            nextDay : '[سڀاڻي] LT',\n            nextWeek : 'dddd [اڳين هفتي تي] LT',\n            lastDay : '[ڪالهه] LT',\n            lastWeek : '[گزريل هفتي] dddd [تي] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s پوء',\n            past : '%s اڳ',\n            s : 'چند سيڪنڊ',\n            ss : '%d سيڪنڊ',\n            m : 'هڪ منٽ',\n            mm : '%d منٽ',\n            h : 'هڪ ڪلاڪ',\n            hh : '%d ڪلاڪ',\n            d : 'هڪ ڏينهن',\n            dd : '%d ڏينهن',\n            M : 'هڪ مهينو',\n            MM : '%d مهينا',\n            y : 'هڪ سال',\n            yy : '%d سال'\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sd;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var se = moment.defineLocale('se', {\n        months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),\n        monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n        weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),\n        weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n        weekdaysMin : 's_v_m_g_d_b_L'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'MMMM D. [b.] YYYY',\n            LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',\n            LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'\n        },\n        calendar : {\n            sameDay: '[otne ti] LT',\n            nextDay: '[ihttin ti] LT',\n            nextWeek: 'dddd [ti] LT',\n            lastDay: '[ikte ti] LT',\n            lastWeek: '[ovddit] dddd [ti] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s geažes',\n            past : 'maŋit %s',\n            s : 'moadde sekunddat',\n            ss: '%d sekunddat',\n            m : 'okta minuhta',\n            mm : '%d minuhtat',\n            h : 'okta diimmu',\n            hh : '%d diimmut',\n            d : 'okta beaivi',\n            dd : '%d beaivvit',\n            M : 'okta mánnu',\n            MM : '%d mánut',\n            y : 'okta jahki',\n            yy : '%d jagit'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return se;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    /*jshint -W100*/\n    var si = moment.defineLocale('si', {\n        months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),\n        monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),\n        weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),\n        weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n        weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'a h:mm',\n            LTS : 'a h:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY MMMM D',\n            LLL : 'YYYY MMMM D, a h:mm',\n            LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'\n        },\n        calendar : {\n            sameDay : '[අද] LT[ට]',\n            nextDay : '[හෙට] LT[ට]',\n            nextWeek : 'dddd LT[ට]',\n            lastDay : '[ඊයේ] LT[ට]',\n            lastWeek : '[පසුගිය] dddd LT[ට]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%sකින්',\n            past : '%sකට පෙර',\n            s : 'තත්පර කිහිපය',\n            ss : 'තත්පර %d',\n            m : 'මිනිත්තුව',\n            mm : 'මිනිත්තු %d',\n            h : 'පැය',\n            hh : 'පැය %d',\n            d : 'දිනය',\n            dd : 'දින %d',\n            M : 'මාසය',\n            MM : 'මාස %d',\n            y : 'වසර',\n            yy : 'වසර %d'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n        ordinal : function (number) {\n            return number + ' වැනි';\n        },\n        meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n        isPM : function (input) {\n            return input === 'ප.ව.' || input === 'පස් වරු';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'ප.ව.' : 'පස් වරු';\n            } else {\n                return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n            }\n        }\n    });\n\n    return si;\n\n})));\n","import { IRecordReference, RecordReference } from \"shared-models/record-reference\";\nimport { Order, OrderItem, IAddress, Address } from \"orders/models/order\";\nimport { CarrierReference, ShippingMethodReference } from \"orders/models/carrier-record\";\nimport { ItemReference } from \"items/models/item-record\";\nimport { observable } from \"aurelia-framework\";\n\nenum CHANGE_ORDER_TYPES {\n    ADD_ICE = \"Add Ice\",\n    REMOVE_ICE = \"Remove Ice\",\n    PLACE_WEATHER_HOLD = \"Place On Weather Hold\",\n    REMOVE_WEATHER_HOLD = \"Remove From Weather Hold\",\n    CHANGE_SHIP_METHOD = \"Change Shipping Method\",\n    CHANGE_ADDRESS = \"Change Address\",\n    CHANGE_SHIP_INST = \"Change Shipping Instructions\",\n    CHANGE_SHIP_DATE = \"Change Ship Date\",\n    CHANGE_EMAIL = \"Change Email\",\n    CHANGE_GIFT_MESSAGE = \"Change Gift Message\",\n    VOID_ORDER = \"Void Order\",\n    CHANGE_ITEMS = \"Change Items\",\n    RETURN_TO_SHIPPER = \"Return To Shipper\"\n}\n\nexport interface IChangeOrderType extends IRecordReference { description?: string, statusesNotAllowed?: string[], doNotAllowOtherChanges?: boolean};\nexport class ChangeOrderType extends RecordReference {\n    description?: string;\n    statusesNotAllowed?: string[];\n    doNotAllowOtherChanges?: boolean;\n    constructor(data: IChangeOrderType) {\n        super(data); \n        this.description = data.description || \"\";\n        this.statusesNotAllowed = data.statusesNotAllowed || [];\n        this.doNotAllowOtherChanges = data.doNotAllowOtherChanges || false;\n    }   \n\n    isAllowedForOrder(order: Order): boolean{\n        return this._isStatusAllowed(order.status) && this._isWeatherHoldValid(order) && this._isIceValid(order);\n    }\n\n    _isIceValid(order: Order): boolean{\n        if(this._isAddIce()){\n            return !order.includeIce;\n        } else if(this._isRemoveIce()){\n            return order.includeIce;\n        }\n        return true;\n    }\n\n    _isWeatherHoldValid(order: Order): boolean{\n        if(this._isPlaceWeatherHold()){\n            return !order.weatherHold;\n        } else if(this._isRemoveWeatherHold()){\n            return order.weatherHold;\n        }\n        return true;\n    }\n\n    _isStatusAllowed(status: string){\n        return this.statusesNotAllowed.indexOf(status) === -1;\n    }\n\n    _isAddIce(){\n        return this.name === CHANGE_ORDER_TYPES.ADD_ICE;\n    }\n\n    _isRemoveIce(){\n        return this.name === CHANGE_ORDER_TYPES.REMOVE_ICE;\n    }\n\n    _isPlaceWeatherHold(){\n        return this.name === CHANGE_ORDER_TYPES.PLACE_WEATHER_HOLD;\n    }\n\n    _isRemoveWeatherHold(){\n        return this.name === CHANGE_ORDER_TYPES.REMOVE_WEATHER_HOLD;\n    }\n\n    _isChangeAddress(){\n        return this.name === CHANGE_ORDER_TYPES.CHANGE_ADDRESS;\n    }\n\n    _isChangeShipMethod(){\n        return this.name === CHANGE_ORDER_TYPES.CHANGE_SHIP_METHOD;\n    }\n\n    _isChangeShipInstructions(){\n        return this.name === CHANGE_ORDER_TYPES.CHANGE_SHIP_INST;\n    }\n\n    _isChangeShipDate(){\n        return this.name === CHANGE_ORDER_TYPES.CHANGE_SHIP_DATE;\n    }\n\n    _isChangeEmail(){\n        return this.name === CHANGE_ORDER_TYPES.CHANGE_EMAIL;\n    }\n\n    _isChangeGiftMessage(){\n        return this.name === CHANGE_ORDER_TYPES.CHANGE_GIFT_MESSAGE;\n    }\n\n    _isChangeItems(){\n        return this.name === CHANGE_ORDER_TYPES.CHANGE_ITEMS;\n    }\n\n    getNewRequest(order: Order): ChangeOrderRequest{\n        if(this._isChangeAddress()){\n            return new ChangeOrderAddressRequest({\n                changeOrderType: this,\n                currentAddress: order.shippingAddress\n            });\n        }\n        if(this._isChangeShipMethod()){\n            return new ChangeOrderShipMethodRequest({\n                changeOrderType: this,\n                currentCarrier: order.carrier,\n                currentShipMethod: order.shippingMethod\n            });\n        }\n        if(this._isChangeShipInstructions()){\n            return new ChangeOrderShipInstructionsRequest({\n                changeOrderType: this,\n                currentInstructions: order.shippingInstructions\n            });\n        }\n        if(this._isChangeShipDate()){\n            return new ChangeOrderShipDateRequest({\n                changeOrderType: this,\n                currentShipDate: order.futureShipDate\n            });\n        }\n        if(this._isChangeEmail()){\n            return new ChangeOrderEmailRequest({\n                changeOrderType: this,\n                currentEmail: order.email\n            });\n        }\n        if(this._isChangeGiftMessage()){\n            return new ChangeOrderGiftMsgRequest({\n                changeOrderType: this,\n                currentGiftMessage: order.giftMessage\n            });\n        }\n        if(this._isChangeItems()){\n            return new ChangeOrderItemsRequest({\n                changeOrderType: this,\n                items: order.items.map((orderItem)=> {\n                    return new ChangeOrderItemLine({\n                        orderItem: orderItem,\n                        newQuantity: orderItem.quantity\n                    })\n                })\n            });\n        }\n        return new ChangeOrderRequest({\n            changeOrderType: this\n        });\n    }\n}\n\nexport interface IChangeOrderRequest extends IRecordReference { changeOrderType?: ChangeOrderType};\nexport class ChangeOrderRequest extends RecordReference {    \n    changeOrderType?: ChangeOrderType;   \n    viewModelPath: string = \"change-orders/views/change-order-standard-task\";\n    constructor(data: IChangeOrderRequest) {\n        super(data);\n        this.changeOrderType = data.changeOrderType? new ChangeOrderType(data.changeOrderType) : null;\n    }\n    \n    convertToData(): any{\n        return {\n            \"change_order_type\": this.changeOrderType.id\n        }\n    }\n    \n    getValidationErrors(): string[]{\n        return [];\n    }    \n}\n\nexport interface IChangeOrderItemsRequest extends IChangeOrderRequest {items?: ChangeOrderItemLine[], newItems?: ChangeOrderNewItem[]};\nexport class ChangeOrderItemsRequest extends ChangeOrderRequest { \n    items?: ChangeOrderItemLine[];\n    newItems?: ChangeOrderNewItem[];\n    constructor(data: IChangeOrderItemsRequest) {\n        super(data);\n        this.items = (data.items || []).map((item)=> new ChangeOrderItemLine(item));\n        this.newItems = (data.newItems || []).map((item)=> new ChangeOrderNewItem(item));\n        this.viewModelPath = \"change-orders/views/change-order-items\";\n    }\n    \n    convertToData(): any{\n        return {\n            \"change_order_type\": this.changeOrderType.id,\n            \"current_items\": this.items.map((currentItem)=>{\n                return {\n                    \"item\": currentItem.orderItem.itemId,\n                    \"old_quantity\": currentItem.orderItem.quantity,\n                    \"new_quantity\": currentItem.newQuantity,\n                    \"remove_item\": currentItem.removeItem\n                };\n            }),\n            \"new_items\": this.newItems.map((newItem)=>{\n                return {\n                    \"item\": newItem.item.id,\n                    \"old_quantity\": 0,\n                    \"new_quantity\": newItem.quantity,\n                    \"remove_item\": false\n                };\n            })\n        };\n    }\n\n    getValidationErrors(): string[]{\n        return [];\n    }\n}\n\nexport interface IChangeOrderNewItem { item: ItemReference, quantity: number, lineNumber: number };\nexport class ChangeOrderNewItem {\n  item: ItemReference;\n  quantity: number;\n  lineNumber: number\n  constructor(data: IChangeOrderNewItem) {\n    this.item = new ItemReference(data.item);\n    this.lineNumber = data.lineNumber;\n    this.quantity = data.quantity || 0;\n  }\n}\n\nexport interface IChangeOrderItemLine {orderItem?: OrderItem, removeItem?: boolean, newQuantity?: number};\nexport class ChangeOrderItemLine { \n    orderItem?: OrderItem;\n    @observable removeItem?: boolean;\n    @observable newQuantity?: number;\n    constructor(data: IChangeOrderItemLine) {\n        this.orderItem = data.orderItem ? new OrderItem(data.orderItem) : null;\n        this.removeItem = data.removeItem || false;\n        this.newQuantity = data.newQuantity;\n    } \n\n    removeItemChanged(newValue, oldValue) {\n        if(newValue){\n            this.newQuantity = 0;\n        } else{\n            this.newQuantity = this.orderItem.quantity;\n        }        \n    }\n\n    newQuantityChanged(newValue, oldValue) {\n        if(newValue == 0 && !this.removeItem){\n            this.removeItem = true;\n        }     \n    }\n}\n\nexport interface IChangeOrderShipDateRequest extends IChangeOrderRequest { currentShipDate?: Date, newShipDate?: Date};\nexport class ChangeOrderShipDateRequest extends ChangeOrderRequest {    \n    currentShipDate?: Date;\n    newShipDate?: Date;\n    constructor(data: IChangeOrderShipDateRequest) {\n        super(data); \n        this.currentShipDate = data.currentShipDate;\n        this.newShipDate = data.newShipDate;\n        this.viewModelPath = \"change-orders/views/change-order-ship-date\";\n    } \n\n    convertToData(): any{\n        return {\n            \"change_order_type\": this.changeOrderType.id,           \n            \"current_ship_date\": this.currentShipDate,           \n            \"new_ship_date\": this.newShipDate        \n        }\n    }\n    \n    getValidationErrors(): string[]{\n        let errors = [];\n        if(!this.newShipDate){\n            errors.push(\"Need to provide a new Ship Date.\")\n        }\n        if(this.newShipDate === this.currentShipDate){\n            errors.push(\"The New Ship Date must be different from the Current Ship Date.\")\n        }\n        return errors;\n    }\n}\n\nexport interface IChangeOrderShipInstructionsRequest extends IChangeOrderRequest { currentInstructions?: string, newInstructions?: string};\nexport class ChangeOrderShipInstructionsRequest extends ChangeOrderRequest {    \n    currentInstructions?: string;\n    newInstructions?: string;\n    constructor(data: IChangeOrderShipInstructionsRequest) {\n        super(data); \n        this.currentInstructions = data.currentInstructions || \"\";\n        this.newInstructions = data.newInstructions || \"\";\n        this.viewModelPath = \"change-orders/views/change-order-ship-instructions\";\n    } \n\n    convertToData(): any{\n        return {\n            \"change_order_type\": this.changeOrderType.id,\n            \"current_instructions\": this.currentInstructions,\n            \"new_instructions\": this.newInstructions       \n        }\n    }\n\n    getValidationErrors(): string[]{\n        let errors = [];       \n        if(this.newInstructions === this.currentInstructions){\n            errors.push(\"The New Shipping Instruction must be different from the Current Shipping Instructions.\")\n        }\n        return errors;\n    }\n}\n\nexport interface IChangeOrderShipMethodRequest extends IChangeOrderRequest { currentCarrier?: CarrierReference,currentShipMethod?: ShippingMethodReference, newCarrier?: CarrierReference, newShipMethod?: ShippingMethodReference};\nexport class ChangeOrderShipMethodRequest extends ChangeOrderRequest {    \n    currentCarrier?: CarrierReference;\n    currentShipMethod?: ShippingMethodReference;\n    newCarrier?: CarrierReference;\n    newShipMethod?: ShippingMethodReference;\n    constructor(data: IChangeOrderShipMethodRequest) {\n        super(data); \n        this.currentCarrier = data.currentCarrier ? new CarrierReference(data.currentCarrier) : null;   \n        this.currentShipMethod = data.currentShipMethod ? new ShippingMethodReference(data.currentShipMethod) : null;   \n        this.newCarrier = data.newCarrier ? new CarrierReference(data.newCarrier) : null;   \n        this.newShipMethod = data.newShipMethod ? new ShippingMethodReference(data.newShipMethod) : null;   \n        this.viewModelPath = \"change-orders/views/change-order-ship-method\";\n    } \n\n    convertToData(): any{\n        return {\n            \"change_order_type\": this.changeOrderType.id,           \n            \"current_carrier\": this.currentCarrier.id,           \n            \"new_carrier\": this.newCarrier.id,           \n            \"current_ship_method\": this.currentShipMethod.id,           \n            \"new_ship_method\": this.newShipMethod.id         \n        }\n    }\n    \n    getValidationErrors(): string[]{\n        let errors = [];\n        if(!this.newCarrier){\n            errors.push(\"Need to provide a shipping Carrier.\")\n        }\n        if(!this.newShipMethod){\n            errors.push(\"Need to provide a shipping Method.\")\n        }\n        if(this.newShipMethod.id === this.currentShipMethod.id){\n            errors.push(\"The New Ship Method must be different from the Current Ship Method.\")\n        }\n        return errors;\n    }\n}\n\nexport interface IChangeOrderAddressRequest extends IChangeOrderRequest { currentAddress?: IAddress, newAddress?: IAddress};\nexport class ChangeOrderAddressRequest extends ChangeOrderRequest {    \n    currentAddress?: Address;\n    newAddress?: Address;\n    constructor(data: IChangeOrderAddressRequest) {\n        super(data); \n        this.currentAddress = data.currentAddress ? new Address(data.currentAddress) : new Address({});\n        this.newAddress = data.newAddress ? new Address(data.newAddress) : new Address(data.currentAddress);\n        this.viewModelPath = \"change-orders/views/change-order-address\";\n    }\n\n    convertToData(): any{\n        return {\n            \"change_order_type\": this.changeOrderType.id,\n            \"current_address\": {\n                \"attention\": this.currentAddress.attention,\n                \"addressee\": this.currentAddress.addressee,\n                \"street\": this.currentAddress.address1,\n                \"street2\": this.currentAddress.address2,\n                \"zipcode\": this.currentAddress.zip,\n                \"city\": this.currentAddress.city,\n                \"state\": this.currentAddress.state ? this.currentAddress.state.id : null,\n                \"country\": this.currentAddress.country ? this.currentAddress.country.id : null,\n                \"phone\": this.currentAddress.phone\n            },\n            \"new_address\": {\n                \"attention\": this.newAddress.attention,\n                \"addressee\": this.newAddress.addressee,\n                \"street\": this.newAddress.address1,\n                \"street2\": this.newAddress.address2,\n                \"zipcode\": this.newAddress.zip,\n                \"city\": this.newAddress.city,\n                \"state\": this.newAddress.state ? this.newAddress.state.id : null,\n                \"country\": this.newAddress.country ? this.newAddress.country.id : null,\n                \"phone\": this.newAddress.phone\n            }\n                  \n        }\n    }\n    \n    getValidationErrors(): string[]{\n        let errors = [];\n        if(!this.newAddress.addressee){\n            errors.push(\"Need to provide an addressee value on the address.\")\n        }\n        return errors;\n    }\n}\n\nexport interface IChangeOrderEmailRequest extends IChangeOrderRequest { currentEmail?: string, newEmail?: string };\nexport class ChangeOrderEmailRequest extends ChangeOrderRequest {    \n    currentEmail?: string;\n    newEmail?: string;\n    constructor(data: IChangeOrderEmailRequest) {\n        super(data); \n        this.currentEmail = data.currentEmail || \"\";\n        this.newEmail = data.newEmail || \"\";\n        this.viewModelPath = \"change-orders/views/change-order-email\";\n    }\n\n    convertToData(): any{\n        return {\n            \"change_order_type\": this.changeOrderType.id,\n            \"current_email\": this.currentEmail,\n            \"new_email\": this.newEmail      \n        }\n    }\n    \n    getValidationErrors(): string[]{\n        let errors = [];\n        if(!this.newEmail){\n            errors.push(\"Need to provide a New Email value.\")\n        }\n        if(this.newEmail === this.currentEmail){\n            errors.push(\"The New Email must be different from the Current Email.\")\n        }\n        return errors;\n    }\n}\n\nexport interface IChangeOrderGiftMsgRequest extends IChangeOrderRequest { currentGiftMessage?: string, newGiftMessage?: string };\nexport class ChangeOrderGiftMsgRequest extends ChangeOrderRequest {    \n    currentGiftMessage?: string;\n    newGiftMessage?: string;\n    constructor(data: IChangeOrderGiftMsgRequest) {\n        super(data); \n        this.currentGiftMessage = data.currentGiftMessage || \"\";\n        this.newGiftMessage = data.newGiftMessage || \"\";\n        this.viewModelPath = \"change-orders/views/change-order-gift-message\";\n    }   \n\n    convertToData(): any{\n        return {\n            \"change_order_type\": this.changeOrderType.id,\n            \"current_gift_message\": this.currentGiftMessage,        \n            \"new_gift_message\": this.newGiftMessage        \n        }\n    }\n    \n    getValidationErrors(): string[]{\n        let errors = [];       \n        if(this.newGiftMessage === this.currentGiftMessage){\n            errors.push(\"The New Gift Message must be different from the Current Gift Message.\")\n        }\n        return errors;\n    }\n}","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),\n        monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n    function plural(n) {\n        return (n > 1) && (n < 5);\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':  // a few seconds / in a few seconds / a few seconds ago\n                return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekúnd');\n                } else {\n                    return result + 'sekundami';\n                }\n                break;\n            case 'm':  // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minúty' : 'minút');\n                } else {\n                    return result + 'minútami';\n                }\n                break;\n            case 'h':  // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodín');\n                } else {\n                    return result + 'hodinami';\n                }\n                break;\n            case 'd':  // a day / in a day / a day ago\n                return (withoutSuffix || isFuture) ? 'deň' : 'dňom';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dni' : 'dní');\n                } else {\n                    return result + 'dňami';\n                }\n                break;\n            case 'M':  // a month / in a month / a month ago\n                return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'mesiace' : 'mesiacov');\n                } else {\n                    return result + 'mesiacmi';\n                }\n                break;\n            case 'y':  // a year / in a year / a year ago\n                return (withoutSuffix || isFuture) ? 'rok' : 'rokom';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'rokov');\n                } else {\n                    return result + 'rokmi';\n                }\n                break;\n        }\n    }\n\n    var sk = moment.defineLocale('sk', {\n        months : months,\n        monthsShort : monthsShort,\n        weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n        weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),\n        weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),\n        longDateFormat : {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay: '[dnes o] LT',\n            nextDay: '[zajtra o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [o] LT';\n                    case 3:\n                        return '[v stredu o] LT';\n                    case 4:\n                        return '[vo štvrtok o] LT';\n                    case 5:\n                        return '[v piatok o] LT';\n                    case 6:\n                        return '[v sobotu o] LT';\n                }\n            },\n            lastDay: '[včera o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulú nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[minulý] dddd [o] LT';\n                    case 3:\n                        return '[minulú stredu o] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [o] LT';\n                    case 6:\n                        return '[minulú sobotu o] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past : 'pred %s',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';\n            case 'ss':\n                if (number === 1) {\n                    result += withoutSuffix ? 'sekundo' : 'sekundi';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n                } else {\n                    result += 'sekund';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'ena minuta' : 'eno minuto';\n            case 'mm':\n                if (number === 1) {\n                    result += withoutSuffix ? 'minuta' : 'minuto';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'ena ura' : 'eno uro';\n            case 'hh':\n                if (number === 1) {\n                    result += withoutSuffix ? 'ura' : 'uro';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'uri' : 'urama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'ure' : 'urami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'ur' : 'urami';\n                }\n                return result;\n            case 'd':\n                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n            case 'dd':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n                } else {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n                }\n                return result;\n            case 'M':\n                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n            case 'MM':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n                } else {\n                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n                }\n                return result;\n            case 'y':\n                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n            case 'yy':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'leto' : 'letom';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'leta' : 'leti';\n                } else {\n                    result += withoutSuffix || isFuture ? 'let' : 'leti';\n                }\n                return result;\n        }\n    }\n\n    var sl = moment.defineLocale('sl', {\n        months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),\n        monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n        weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n        weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[danes ob] LT',\n            nextDay  : '[jutri ob] LT',\n\n            nextWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[v] [sredo] [ob] LT';\n                    case 6:\n                        return '[v] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[v] dddd [ob] LT';\n                }\n            },\n            lastDay  : '[včeraj ob] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prejšnjo] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[prejšnjo] [sredo] [ob] LT';\n                    case 6:\n                        return '[prejšnjo] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prejšnji] dddd [ob] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'čez %s',\n            past   : 'pred %s',\n            s      : processRelativeTime,\n            ss     : processRelativeTime,\n            m      : processRelativeTime,\n            mm     : processRelativeTime,\n            h      : processRelativeTime,\n            hh     : processRelativeTime,\n            d      : processRelativeTime,\n            dd     : processRelativeTime,\n            M      : processRelativeTime,\n            MM     : processRelativeTime,\n            y      : processRelativeTime,\n            yy     : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return sl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var sq = moment.defineLocale('sq', {\n        months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),\n        monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n        weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),\n        weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n        weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),\n        weekdaysParseExact : true,\n        meridiemParse: /PD|MD/,\n        isPM: function (input) {\n            return input.charAt(0) === 'M';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            return hours < 12 ? 'PD' : 'MD';\n        },\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Sot në] LT',\n            nextDay : '[Nesër në] LT',\n            nextWeek : 'dddd [në] LT',\n            lastDay : '[Dje në] LT',\n            lastWeek : 'dddd [e kaluar në] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'në %s',\n            past : '%s më parë',\n            s : 'disa sekonda',\n            ss : '%d sekonda',\n            m : 'një minutë',\n            mm : '%d minuta',\n            h : 'një orë',\n            hh : '%d orë',\n            d : 'një ditë',\n            dd : '%d ditë',\n            M : 'një muaj',\n            MM : '%d muaj',\n            y : 'një vit',\n            yy : '%d vite'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sq;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var translator = {\n        words: { //Different grammatical cases\n            ss: ['sekunda', 'sekunde', 'sekundi'],\n            m: ['jedan minut', 'jedne minute'],\n            mm: ['minut', 'minute', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mesec', 'meseca', 'meseci'],\n            yy: ['godina', 'godine', 'godina']\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n            }\n        }\n    };\n\n    var sr = moment.defineLocale('sr', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedelju] [u] LT';\n                    case 3:\n                        return '[u] [sredu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[juče u] LT',\n            lastWeek : function () {\n                var lastWeekDays = [\n                    '[prošle] [nedelje] [u] LT',\n                    '[prošlog] [ponedeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT'\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'pre %s',\n            s      : 'nekoliko sekundi',\n            ss     : translator.translate,\n            m      : translator.translate,\n            mm     : translator.translate,\n            h      : translator.translate,\n            hh     : translator.translate,\n            d      : 'dan',\n            dd     : translator.translate,\n            M      : 'mesec',\n            MM     : translator.translate,\n            y      : 'godinu',\n            yy     : translator.translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return sr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var translator = {\n        words: { //Different grammatical cases\n            ss: ['секунда', 'секунде', 'секунди'],\n            m: ['један минут', 'једне минуте'],\n            mm: ['минут', 'минуте', 'минута'],\n            h: ['један сат', 'једног сата'],\n            hh: ['сат', 'сата', 'сати'],\n            dd: ['дан', 'дана', 'дана'],\n            MM: ['месец', 'месеца', 'месеци'],\n            yy: ['година', 'године', 'година']\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n            }\n        }\n    };\n\n    var srCyrl = moment.defineLocale('sr-cyrl', {\n        months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),\n        monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n        weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n        weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar: {\n            sameDay: '[данас у] LT',\n            nextDay: '[сутра у] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[у] [недељу] [у] LT';\n                    case 3:\n                        return '[у] [среду] [у] LT';\n                    case 6:\n                        return '[у] [суботу] [у] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[у] dddd [у] LT';\n                }\n            },\n            lastDay  : '[јуче у] LT',\n            lastWeek : function () {\n                var lastWeekDays = [\n                    '[прошле] [недеље] [у] LT',\n                    '[прошлог] [понедељка] [у] LT',\n                    '[прошлог] [уторка] [у] LT',\n                    '[прошле] [среде] [у] LT',\n                    '[прошлог] [четвртка] [у] LT',\n                    '[прошлог] [петка] [у] LT',\n                    '[прошле] [суботе] [у] LT'\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'за %s',\n            past   : 'пре %s',\n            s      : 'неколико секунди',\n            ss     : translator.translate,\n            m      : translator.translate,\n            mm     : translator.translate,\n            h      : translator.translate,\n            hh     : translator.translate,\n            d      : 'дан',\n            dd     : translator.translate,\n            M      : 'месец',\n            MM     : translator.translate,\n            y      : 'годину',\n            yy     : translator.translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return srCyrl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ss = moment.defineLocale('ss', {\n        months : \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split('_'),\n        monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n        weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),\n        weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n        weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Namuhla nga] LT',\n            nextDay : '[Kusasa nga] LT',\n            nextWeek : 'dddd [nga] LT',\n            lastDay : '[Itolo nga] LT',\n            lastWeek : 'dddd [leliphelile] [nga] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'nga %s',\n            past : 'wenteka nga %s',\n            s : 'emizuzwana lomcane',\n            ss : '%d mzuzwana',\n            m : 'umzuzu',\n            mm : '%d emizuzu',\n            h : 'lihora',\n            hh : '%d emahora',\n            d : 'lilanga',\n            dd : '%d emalanga',\n            M : 'inyanga',\n            MM : '%d tinyanga',\n            y : 'umnyaka',\n            yy : '%d iminyaka'\n        },\n        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'ekuseni';\n            } else if (hours < 15) {\n                return 'emini';\n            } else if (hours < 19) {\n                return 'entsambama';\n            } else {\n                return 'ebusuku';\n            }\n        },\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ekuseni') {\n                return hour;\n            } else if (meridiem === 'emini') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n                if (hour === 0) {\n                    return 0;\n                }\n                return hour + 12;\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal : '%d',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ss;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var sv = moment.defineLocale('sv', {\n        months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n        weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n        weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [kl.] HH:mm',\n            LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',\n            lll : 'D MMM YYYY HH:mm',\n            llll : 'ddd D MMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Idag] LT',\n            nextDay: '[Imorgon] LT',\n            lastDay: '[Igår] LT',\n            nextWeek: '[På] dddd LT',\n            lastWeek: '[I] dddd[s] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : 'för %s sedan',\n            s : 'några sekunder',\n            ss : '%d sekunder',\n            m : 'en minut',\n            mm : '%d minuter',\n            h : 'en timme',\n            hh : '%d timmar',\n            d : 'en dag',\n            dd : '%d dagar',\n            M : 'en månad',\n            MM : '%d månader',\n            y : 'ett år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(e|a)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'e' :\n                (b === 1) ? 'a' :\n                (b === 2) ? 'a' :\n                (b === 3) ? 'e' : 'e';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var sw = moment.defineLocale('sw', {\n        months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),\n        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n        weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),\n        weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n        weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[leo saa] LT',\n            nextDay : '[kesho saa] LT',\n            nextWeek : '[wiki ijayo] dddd [saat] LT',\n            lastDay : '[jana] LT',\n            lastWeek : '[wiki iliyopita] dddd [saat] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s baadaye',\n            past : 'tokea %s',\n            s : 'hivi punde',\n            ss : 'sekunde %d',\n            m : 'dakika moja',\n            mm : 'dakika %d',\n            h : 'saa limoja',\n            hh : 'masaa %d',\n            d : 'siku moja',\n            dd : 'masiku %d',\n            M : 'mwezi mmoja',\n            MM : 'miezi %d',\n            y : 'mwaka mmoja',\n            yy : 'miaka %d'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return sw;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '௧',\n        '2': '௨',\n        '3': '௩',\n        '4': '௪',\n        '5': '௫',\n        '6': '௬',\n        '7': '௭',\n        '8': '௮',\n        '9': '௯',\n        '0': '௦'\n    }, numberMap = {\n        '௧': '1',\n        '௨': '2',\n        '௩': '3',\n        '௪': '4',\n        '௫': '5',\n        '௬': '6',\n        '௭': '7',\n        '௮': '8',\n        '௯': '9',\n        '௦': '0'\n    };\n\n    var ta = moment.defineLocale('ta', {\n        months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n        monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n        weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),\n        weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),\n        weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, HH:mm',\n            LLLL : 'dddd, D MMMM YYYY, HH:mm'\n        },\n        calendar : {\n            sameDay : '[இன்று] LT',\n            nextDay : '[நாளை] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[நேற்று] LT',\n            lastWeek : '[கடந்த வாரம்] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s இல்',\n            past : '%s முன்',\n            s : 'ஒரு சில விநாடிகள்',\n            ss : '%d விநாடிகள்',\n            m : 'ஒரு நிமிடம்',\n            mm : '%d நிமிடங்கள்',\n            h : 'ஒரு மணி நேரம்',\n            hh : '%d மணி நேரம்',\n            d : 'ஒரு நாள்',\n            dd : '%d நாட்கள்',\n            M : 'ஒரு மாதம்',\n            MM : '%d மாதங்கள்',\n            y : 'ஒரு வருடம்',\n            yy : '%d ஆண்டுகள்'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n        ordinal : function (number) {\n            return number + 'வது';\n        },\n        preparse: function (string) {\n            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // refer http://ta.wikipedia.org/s/1er1\n        meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 2) {\n                return ' யாமம்';\n            } else if (hour < 6) {\n                return ' வைகறை';  // வைகறை\n            } else if (hour < 10) {\n                return ' காலை'; // காலை\n            } else if (hour < 14) {\n                return ' நண்பகல்'; // நண்பகல்\n            } else if (hour < 18) {\n                return ' எற்பாடு'; // எற்பாடு\n            } else if (hour < 22) {\n                return ' மாலை'; // மாலை\n            } else {\n                return ' யாமம்';\n            }\n        },\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'யாமம்') {\n                return hour < 2 ? hour : hour + 12;\n            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n                return hour;\n            } else if (meridiem === 'நண்பகல்') {\n                return hour >= 10 ? hour : hour + 12;\n            } else {\n                return hour + 12;\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return ta;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var te = moment.defineLocale('te', {\n        months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),\n        monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),\n        weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n        weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n        },\n        calendar : {\n            sameDay : '[నేడు] LT',\n            nextDay : '[రేపు] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[నిన్న] LT',\n            lastWeek : '[గత] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s లో',\n            past : '%s క్రితం',\n            s : 'కొన్ని క్షణాలు',\n            ss : '%d సెకన్లు',\n            m : 'ఒక నిమిషం',\n            mm : '%d నిమిషాలు',\n            h : 'ఒక గంట',\n            hh : '%d గంటలు',\n            d : 'ఒక రోజు',\n            dd : '%d రోజులు',\n            M : 'ఒక నెల',\n            MM : '%d నెలలు',\n            y : 'ఒక సంవత్సరం',\n            yy : '%d సంవత్సరాలు'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}వ/,\n        ordinal : '%dవ',\n        meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'రాత్రి') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ఉదయం') {\n                return hour;\n            } else if (meridiem === 'మధ్యాహ్నం') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'సాయంత్రం') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'రాత్రి';\n            } else if (hour < 10) {\n                return 'ఉదయం';\n            } else if (hour < 17) {\n                return 'మధ్యాహ్నం';\n            } else if (hour < 20) {\n                return 'సాయంత్రం';\n            } else {\n                return 'రాత్రి';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return te;\n\n})));\n","export interface ISearchRequest {recordType: string, pageSize?: number, page?: number, filter?: string, fieldFilters?: any[]};\nexport class SearchRequest{\n    recordType: string;\n    pageSize?: number;\n    page?: number;\n    filter?: string;\n    fieldFilters?: any[];\n    constructor(data: ISearchRequest){\n        this.recordType = data.recordType;\n        this.pageSize = data.pageSize || 50;\n        this.page = data.page || 1;        \n        this.filter = data.filter || \"\";\n        this.fieldFilters = data.fieldFilters || [];\n    }\n}","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var tet = moment.defineLocale('tet', {\n        months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n        weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n        weekdaysMin : 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Ohin iha] LT',\n            nextDay: '[Aban iha] LT',\n            nextWeek: 'dddd [iha] LT',\n            lastDay: '[Horiseik iha] LT',\n            lastWeek: 'dddd [semana kotuk] [iha] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'iha %s',\n            past : '%s liuba',\n            s : 'minutu balun',\n            ss : 'minutu %d',\n            m : 'minutu ida',\n            mm : 'minutu %d',\n            h : 'oras ida',\n            hh : 'oras %d',\n            d : 'loron ida',\n            dd : 'loron %d',\n            M : 'fulan ida',\n            MM : 'fulan %d',\n            y : 'tinan ida',\n            yy : 'tinan %d'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return tet;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        0: '-ум',\n        1: '-ум',\n        2: '-юм',\n        3: '-юм',\n        4: '-ум',\n        5: '-ум',\n        6: '-ум',\n        7: '-ум',\n        8: '-ум',\n        9: '-ум',\n        10: '-ум',\n        12: '-ум',\n        13: '-ум',\n        20: '-ум',\n        30: '-юм',\n        40: '-ум',\n        50: '-ум',\n        60: '-ум',\n        70: '-ум',\n        80: '-ум',\n        90: '-ум',\n        100: '-ум'\n    };\n\n    var tg = moment.defineLocale('tg', {\n        months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n        monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays : 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split('_'),\n        weekdaysShort : 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n        weekdaysMin : 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Имрӯз соати] LT',\n            nextDay : '[Пагоҳ соати] LT',\n            lastDay : '[Дирӯз соати] LT',\n            nextWeek : 'dddd[и] [ҳафтаи оянда соати] LT',\n            lastWeek : 'dddd[и] [ҳафтаи гузашта соати] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'баъди %s',\n            past : '%s пеш',\n            s : 'якчанд сония',\n            m : 'як дақиқа',\n            mm : '%d дақиқа',\n            h : 'як соат',\n            hh : '%d соат',\n            d : 'як рӯз',\n            dd : '%d рӯз',\n            M : 'як моҳ',\n            MM : '%d моҳ',\n            y : 'як сол',\n            yy : '%d сол'\n        },\n        meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'шаб') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'субҳ') {\n                return hour;\n            } else if (meridiem === 'рӯз') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'бегоҳ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'шаб';\n            } else if (hour < 11) {\n                return 'субҳ';\n            } else if (hour < 16) {\n                return 'рӯз';\n            } else if (hour < 19) {\n                return 'бегоҳ';\n            } else {\n                return 'шаб';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1th is the first week of the year.\n        }\n    });\n\n    return tg;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var th = moment.defineLocale('th', {\n        months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),\n        monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n        weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n        weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY เวลา H:mm',\n            LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'\n        },\n        meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n        isPM: function (input) {\n            return input === 'หลังเที่ยง';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ก่อนเที่ยง';\n            } else {\n                return 'หลังเที่ยง';\n            }\n        },\n        calendar : {\n            sameDay : '[วันนี้ เวลา] LT',\n            nextDay : '[พรุ่งนี้ เวลา] LT',\n            nextWeek : 'dddd[หน้า เวลา] LT',\n            lastDay : '[เมื่อวานนี้ เวลา] LT',\n            lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'อีก %s',\n            past : '%sที่แล้ว',\n            s : 'ไม่กี่วินาที',\n            ss : '%d วินาที',\n            m : '1 นาที',\n            mm : '%d นาที',\n            h : '1 ชั่วโมง',\n            hh : '%d ชั่วโมง',\n            d : '1 วัน',\n            dd : '%d วัน',\n            M : '1 เดือน',\n            MM : '%d เดือน',\n            y : '1 ปี',\n            yy : '%d ปี'\n        }\n    });\n\n    return th;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var tlPh = moment.defineLocale('tl-ph', {\n        months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),\n        monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),\n        weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'MM/D/YYYY',\n            LL : 'MMMM D, YYYY',\n            LLL : 'MMMM D, YYYY HH:mm',\n            LLLL : 'dddd, MMMM DD, YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'sa loob ng %s',\n            past : '%s ang nakalipas',\n            s : 'ilang segundo',\n            ss : '%d segundo',\n            m : 'isang minuto',\n            mm : '%d minuto',\n            h : 'isang oras',\n            hh : '%d oras',\n            d : 'isang araw',\n            dd : '%d araw',\n            M : 'isang buwan',\n            MM : '%d buwan',\n            y : 'isang taon',\n            yy : '%d taon'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal : function (number) {\n            return number;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return tlPh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n    function translateFuture(output) {\n        var time = output;\n        time = (output.indexOf('jaj') !== -1) ?\n        time.slice(0, -3) + 'leS' :\n        (output.indexOf('jar') !== -1) ?\n        time.slice(0, -3) + 'waQ' :\n        (output.indexOf('DIS') !== -1) ?\n        time.slice(0, -3) + 'nem' :\n        time + ' pIq';\n        return time;\n    }\n\n    function translatePast(output) {\n        var time = output;\n        time = (output.indexOf('jaj') !== -1) ?\n        time.slice(0, -3) + 'Hu’' :\n        (output.indexOf('jar') !== -1) ?\n        time.slice(0, -3) + 'wen' :\n        (output.indexOf('DIS') !== -1) ?\n        time.slice(0, -3) + 'ben' :\n        time + ' ret';\n        return time;\n    }\n\n    function translate(number, withoutSuffix, string, isFuture) {\n        var numberNoun = numberAsNoun(number);\n        switch (string) {\n            case 'ss':\n                return numberNoun + ' lup';\n            case 'mm':\n                return numberNoun + ' tup';\n            case 'hh':\n                return numberNoun + ' rep';\n            case 'dd':\n                return numberNoun + ' jaj';\n            case 'MM':\n                return numberNoun + ' jar';\n            case 'yy':\n                return numberNoun + ' DIS';\n        }\n    }\n\n    function numberAsNoun(number) {\n        var hundred = Math.floor((number % 1000) / 100),\n        ten = Math.floor((number % 100) / 10),\n        one = number % 10,\n        word = '';\n        if (hundred > 0) {\n            word += numbersNouns[hundred] + 'vatlh';\n        }\n        if (ten > 0) {\n            word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';\n        }\n        if (one > 0) {\n            word += ((word !== '') ? ' ' : '') + numbersNouns[one];\n        }\n        return (word === '') ? 'pagh' : word;\n    }\n\n    var tlh = moment.defineLocale('tlh', {\n        months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),\n        monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[DaHjaj] LT',\n            nextDay: '[wa’leS] LT',\n            nextWeek: 'LLL',\n            lastDay: '[wa’Hu’] LT',\n            lastWeek: 'LLL',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : translateFuture,\n            past : translatePast,\n            s : 'puS lup',\n            ss : translate,\n            m : 'wa’ tup',\n            mm : translate,\n            h : 'wa’ rep',\n            hh : translate,\n            d : 'wa’ jaj',\n            dd : translate,\n            M : 'wa’ jar',\n            MM : translate,\n            y : 'wa’ DIS',\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return tlh;\n\n})));\n","\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    var suffixes = {\n        1: '\\'inci',\n        5: '\\'inci',\n        8: '\\'inci',\n        70: '\\'inci',\n        80: '\\'inci',\n        2: '\\'nci',\n        7: '\\'nci',\n        20: '\\'nci',\n        50: '\\'nci',\n        3: '\\'üncü',\n        4: '\\'üncü',\n        100: '\\'üncü',\n        6: '\\'ncı',\n        9: '\\'uncu',\n        10: '\\'uncu',\n        30: '\\'uncu',\n        60: '\\'ıncı',\n        90: '\\'ıncı'\n    };\n\n    var tr = moment.defineLocale('tr', {\n        months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),\n        monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n        weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),\n        weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),\n        weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[bugün saat] LT',\n            nextDay : '[yarın saat] LT',\n            nextWeek : '[gelecek] dddd [saat] LT',\n            lastDay : '[dün] LT',\n            lastWeek : '[geçen] dddd [saat] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s sonra',\n            past : '%s önce',\n            s : 'birkaç saniye',\n            ss : '%d saniye',\n            m : 'bir dakika',\n            mm : '%d dakika',\n            h : 'bir saat',\n            hh : '%d saat',\n            d : 'bir gün',\n            dd : '%d gün',\n            M : 'bir ay',\n            MM : '%d ay',\n            y : 'bir yıl',\n            yy : '%d yıl'\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {  // special case for zero\n                        return number + '\\'ıncı';\n                    }\n                    var a = number % 10,\n                        b = number % 100 - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return tr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n    // This is currently too difficult (maybe even impossible) to add.\n    var tzl = moment.defineLocale('tzl', {\n        months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n        weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n        weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n        weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM [dallas] YYYY',\n            LLL : 'D. MMMM [dallas] YYYY HH.mm',\n            LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'\n        },\n        meridiemParse: /d\\'o|d\\'a/i,\n        isPM : function (input) {\n            return 'd\\'o' === input.toLowerCase();\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'd\\'o' : 'D\\'O';\n            } else {\n                return isLower ? 'd\\'a' : 'D\\'A';\n            }\n        },\n        calendar : {\n            sameDay : '[oxhi à] LT',\n            nextDay : '[demà à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[ieiri à] LT',\n            lastWeek : '[sür el] dddd [lasteu à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'osprei %s',\n            past : 'ja%s',\n            s : processRelativeTime,\n            ss : processRelativeTime,\n            m : processRelativeTime,\n            mm : processRelativeTime,\n            h : processRelativeTime,\n            hh : processRelativeTime,\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            's': ['viensas secunds', '\\'iensas secunds'],\n            'ss': [number + ' secunds', '' + number + ' secunds'],\n            'm': ['\\'n míut', '\\'iens míut'],\n            'mm': [number + ' míuts', '' + number + ' míuts'],\n            'h': ['\\'n þora', '\\'iensa þora'],\n            'hh': [number + ' þoras', '' + number + ' þoras'],\n            'd': ['\\'n ziua', '\\'iensa ziua'],\n            'dd': [number + ' ziuas', '' + number + ' ziuas'],\n            'M': ['\\'n mes', '\\'iens mes'],\n            'MM': [number + ' mesen', '' + number + ' mesen'],\n            'y': ['\\'n ar', '\\'iens ar'],\n            'yy': [number + ' ars', '' + number + ' ars']\n        };\n        return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);\n    }\n\n    return tzl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var tzm = moment.defineLocale('tzm', {\n        months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n        monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n        weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n            nextWeek: 'dddd [ⴴ] LT',\n            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n            lastWeek: 'dddd [ⴴ] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n            past : 'ⵢⴰⵏ %s',\n            s : 'ⵉⵎⵉⴽ',\n            ss : '%d ⵉⵎⵉⴽ',\n            m : 'ⵎⵉⵏⵓⴺ',\n            mm : '%d ⵎⵉⵏⵓⴺ',\n            h : 'ⵙⴰⵄⴰ',\n            hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n            d : 'ⴰⵙⵙ',\n            dd : '%d oⵙⵙⴰⵏ',\n            M : 'ⴰⵢoⵓⵔ',\n            MM : '%d ⵉⵢⵢⵉⵔⵏ',\n            y : 'ⴰⵙⴳⴰⵙ',\n            yy : '%d ⵉⵙⴳⴰⵙⵏ'\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return tzm;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var tzmLatn = moment.defineLocale('tzm-latn', {\n        months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n        monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n        weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[asdkh g] LT',\n            nextDay: '[aska g] LT',\n            nextWeek: 'dddd [g] LT',\n            lastDay: '[assant g] LT',\n            lastWeek: 'dddd [g] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'dadkh s yan %s',\n            past : 'yan %s',\n            s : 'imik',\n            ss : '%d imik',\n            m : 'minuḍ',\n            mm : '%d minuḍ',\n            h : 'saɛa',\n            hh : '%d tassaɛin',\n            d : 'ass',\n            dd : '%d ossan',\n            M : 'ayowr',\n            MM : '%d iyyirn',\n            y : 'asgas',\n            yy : '%d isgasn'\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return tzmLatn;\n\n})));\n","//! moment.js language configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ugCn = moment.defineLocale('ug-cn', {\n        months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n            '_'\n        ),\n        weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm'\n        },\n        meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                meridiem === 'يېرىم كېچە' ||\n                meridiem === 'سەھەر' ||\n                meridiem === 'چۈشتىن بۇرۇن'\n            ) {\n                return hour;\n            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n                return hour + 12;\n            } else {\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return 'يېرىم كېچە';\n            } else if (hm < 900) {\n                return 'سەھەر';\n            } else if (hm < 1130) {\n                return 'چۈشتىن بۇرۇن';\n            } else if (hm < 1230) {\n                return 'چۈش';\n            } else if (hm < 1800) {\n                return 'چۈشتىن كېيىن';\n            } else {\n                return 'كەچ';\n            }\n        },\n        calendar: {\n            sameDay: '[بۈگۈن سائەت] LT',\n            nextDay: '[ئەتە سائەت] LT',\n            nextWeek: '[كېلەركى] dddd [سائەت] LT',\n            lastDay: '[تۆنۈگۈن] LT',\n            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: '%s كېيىن',\n            past: '%s بۇرۇن',\n            s: 'نەچچە سېكونت',\n            ss: '%d سېكونت',\n            m: 'بىر مىنۇت',\n            mm: '%d مىنۇت',\n            h: 'بىر سائەت',\n            hh: '%d سائەت',\n            d: 'بىر كۈن',\n            dd: '%d كۈن',\n            M: 'بىر ئاي',\n            MM: '%d ئاي',\n            y: 'بىر يىل',\n            yy: '%d يىل'\n        },\n\n        dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '-كۈنى';\n                case 'w':\n                case 'W':\n                    return number + '-ھەپتە';\n                default:\n                    return number;\n            }\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 7 // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ugCn;\n\n})));\n","export { _getArrayObserver as getArrayObserver };\nexport { _getMapObserver as getMapObserver };\nexport { _getSetObserver as getSetObserver };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _dec2, _class, _dec3, _class2, _dec4, _class3, _dec5, _class5, _dec6, _class7, _dec7, _class8, _dec8, _class9, _dec9, _class10, _class12, _temp, _dec10, _class13, _class14, _temp2;\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\nimport * as LogManager from 'aurelia-logging';\nimport { PLATFORM, DOM } from 'aurelia-pal';\nimport { TaskQueue } from 'aurelia-task-queue';\nimport { metadata } from 'aurelia-metadata';\n\nexport var targetContext = 'Binding:target';\nexport var sourceContext = 'Binding:source';\n\nvar map = Object.create(null);\n\nexport function camelCase(name) {\n  if (name in map) {\n    return map[name];\n  }\n  var result = name.charAt(0).toLowerCase() + name.slice(1).replace(/[_.-](\\w|$)/g, function (_, x) {\n    return x.toUpperCase();\n  });\n  map[name] = result;\n  return result;\n}\n\nexport function createOverrideContext(bindingContext, parentOverrideContext) {\n  return {\n    bindingContext: bindingContext,\n    parentOverrideContext: parentOverrideContext || null\n  };\n}\n\nexport function getContextFor(name, scope, ancestor) {\n  var oc = scope.overrideContext;\n\n  if (ancestor) {\n    while (ancestor && oc) {\n      ancestor--;\n      oc = oc.parentOverrideContext;\n    }\n    if (ancestor || !oc) {\n      return undefined;\n    }\n    return name in oc ? oc : oc.bindingContext;\n  }\n\n  while (oc && !(name in oc) && !(oc.bindingContext && name in oc.bindingContext)) {\n    oc = oc.parentOverrideContext;\n  }\n  if (oc) {\n    return name in oc ? oc : oc.bindingContext;\n  }\n\n  return scope.bindingContext || scope.overrideContext;\n}\n\nexport function createScopeForTest(bindingContext, parentBindingContext) {\n  if (parentBindingContext) {\n    return {\n      bindingContext: bindingContext,\n      overrideContext: createOverrideContext(bindingContext, createOverrideContext(parentBindingContext))\n    };\n  }\n  return {\n    bindingContext: bindingContext,\n    overrideContext: createOverrideContext(bindingContext)\n  };\n}\n\nvar slotNames = [];\nvar versionSlotNames = [];\n\nfor (var i = 0; i < 100; i++) {\n  slotNames.push('_observer' + i);\n  versionSlotNames.push('_observerVersion' + i);\n}\n\nfunction addObserver(observer) {\n  var observerSlots = this._observerSlots === undefined ? 0 : this._observerSlots;\n  var i = observerSlots;\n  while (i-- && this[slotNames[i]] !== observer) {}\n\n  if (i === -1) {\n    i = 0;\n    while (this[slotNames[i]]) {\n      i++;\n    }\n    this[slotNames[i]] = observer;\n    observer.subscribe(sourceContext, this);\n\n    if (i === observerSlots) {\n      this._observerSlots = i + 1;\n    }\n  }\n\n  if (this._version === undefined) {\n    this._version = 0;\n  }\n  this[versionSlotNames[i]] = this._version;\n}\n\nfunction observeProperty(obj, propertyName) {\n  var observer = this.observerLocator.getObserver(obj, propertyName);\n  addObserver.call(this, observer);\n}\n\nfunction observeArray(array) {\n  var observer = this.observerLocator.getArrayObserver(array);\n  addObserver.call(this, observer);\n}\n\nfunction unobserve(all) {\n  var i = this._observerSlots;\n  while (i--) {\n    if (all || this[versionSlotNames[i]] !== this._version) {\n      var observer = this[slotNames[i]];\n      this[slotNames[i]] = null;\n      if (observer) {\n        observer.unsubscribe(sourceContext, this);\n      }\n    }\n  }\n}\n\nexport function connectable() {\n  return function (target) {\n    target.prototype.observeProperty = observeProperty;\n    target.prototype.observeArray = observeArray;\n    target.prototype.unobserve = unobserve;\n    target.prototype.addObserver = addObserver;\n  };\n}\n\nvar queue = [];\nvar queued = {};\nvar nextId = 0;\nvar minimumImmediate = 100;\nvar frameBudget = 15;\n\nvar isFlushRequested = false;\nvar immediate = 0;\n\nfunction flush(animationFrameStart) {\n  var length = queue.length;\n  var i = 0;\n  while (i < length) {\n    var binding = queue[i];\n    queued[binding.__connectQueueId] = false;\n    binding.connect(true);\n    i++;\n\n    if (i % 100 === 0 && PLATFORM.performance.now() - animationFrameStart > frameBudget) {\n      break;\n    }\n  }\n  queue.splice(0, i);\n\n  if (queue.length) {\n    PLATFORM.requestAnimationFrame(flush);\n  } else {\n    isFlushRequested = false;\n    immediate = 0;\n  }\n}\n\nexport function enqueueBindingConnect(binding) {\n  if (immediate < minimumImmediate) {\n    immediate++;\n    binding.connect(false);\n  } else {\n    var id = binding.__connectQueueId;\n    if (id === undefined) {\n      id = nextId;\n      nextId++;\n      binding.__connectQueueId = id;\n    }\n\n    if (!queued[id]) {\n      queue.push(binding);\n      queued[id] = true;\n    }\n  }\n  if (!isFlushRequested) {\n    isFlushRequested = true;\n    PLATFORM.requestAnimationFrame(flush);\n  }\n}\n\nfunction addSubscriber(context, callable) {\n  if (this.hasSubscriber(context, callable)) {\n    return false;\n  }\n  if (!this._context0) {\n    this._context0 = context;\n    this._callable0 = callable;\n    return true;\n  }\n  if (!this._context1) {\n    this._context1 = context;\n    this._callable1 = callable;\n    return true;\n  }\n  if (!this._context2) {\n    this._context2 = context;\n    this._callable2 = callable;\n    return true;\n  }\n  if (!this._contextsRest) {\n    this._contextsRest = [context];\n    this._callablesRest = [callable];\n    return true;\n  }\n  this._contextsRest.push(context);\n  this._callablesRest.push(callable);\n  return true;\n}\n\nfunction removeSubscriber(context, callable) {\n  if (this._context0 === context && this._callable0 === callable) {\n    this._context0 = null;\n    this._callable0 = null;\n    return true;\n  }\n  if (this._context1 === context && this._callable1 === callable) {\n    this._context1 = null;\n    this._callable1 = null;\n    return true;\n  }\n  if (this._context2 === context && this._callable2 === callable) {\n    this._context2 = null;\n    this._callable2 = null;\n    return true;\n  }\n  var callables = this._callablesRest;\n  if (callables === undefined || callables.length === 0) {\n    return false;\n  }\n  var contexts = this._contextsRest;\n  var i = 0;\n  while (!(callables[i] === callable && contexts[i] === context) && callables.length > i) {\n    i++;\n  }\n  if (i >= callables.length) {\n    return false;\n  }\n  contexts.splice(i, 1);\n  callables.splice(i, 1);\n  return true;\n}\n\nvar arrayPool1 = [];\nvar arrayPool2 = [];\nvar poolUtilization = [];\n\nfunction callSubscribers(newValue, oldValue) {\n  var context0 = this._context0;\n  var callable0 = this._callable0;\n  var context1 = this._context1;\n  var callable1 = this._callable1;\n  var context2 = this._context2;\n  var callable2 = this._callable2;\n  var length = this._contextsRest ? this._contextsRest.length : 0;\n  var contextsRest = void 0;\n  var callablesRest = void 0;\n  var poolIndex = void 0;\n  var i = void 0;\n  if (length) {\n    poolIndex = poolUtilization.length;\n    while (poolIndex-- && poolUtilization[poolIndex]) {}\n    if (poolIndex < 0) {\n      poolIndex = poolUtilization.length;\n      contextsRest = [];\n      callablesRest = [];\n      poolUtilization.push(true);\n      arrayPool1.push(contextsRest);\n      arrayPool2.push(callablesRest);\n    } else {\n      poolUtilization[poolIndex] = true;\n      contextsRest = arrayPool1[poolIndex];\n      callablesRest = arrayPool2[poolIndex];\n    }\n\n    i = length;\n    while (i--) {\n      contextsRest[i] = this._contextsRest[i];\n      callablesRest[i] = this._callablesRest[i];\n    }\n  }\n\n  if (context0) {\n    if (callable0) {\n      callable0.call(context0, newValue, oldValue);\n    } else {\n      context0(newValue, oldValue);\n    }\n  }\n  if (context1) {\n    if (callable1) {\n      callable1.call(context1, newValue, oldValue);\n    } else {\n      context1(newValue, oldValue);\n    }\n  }\n  if (context2) {\n    if (callable2) {\n      callable2.call(context2, newValue, oldValue);\n    } else {\n      context2(newValue, oldValue);\n    }\n  }\n  if (length) {\n    for (i = 0; i < length; i++) {\n      var callable = callablesRest[i];\n      var context = contextsRest[i];\n      if (callable) {\n        callable.call(context, newValue, oldValue);\n      } else {\n        context(newValue, oldValue);\n      }\n      contextsRest[i] = null;\n      callablesRest[i] = null;\n    }\n    poolUtilization[poolIndex] = false;\n  }\n}\n\nfunction hasSubscribers() {\n  return !!(this._context0 || this._context1 || this._context2 || this._contextsRest && this._contextsRest.length);\n}\n\nfunction hasSubscriber(context, callable) {\n  var has = this._context0 === context && this._callable0 === callable || this._context1 === context && this._callable1 === callable || this._context2 === context && this._callable2 === callable;\n  if (has) {\n    return true;\n  }\n  var index = void 0;\n  var contexts = this._contextsRest;\n  if (!contexts || (index = contexts.length) === 0) {\n    return false;\n  }\n  var callables = this._callablesRest;\n  while (index--) {\n    if (contexts[index] === context && callables[index] === callable) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function subscriberCollection() {\n  return function (target) {\n    target.prototype.addSubscriber = addSubscriber;\n    target.prototype.removeSubscriber = removeSubscriber;\n    target.prototype.callSubscribers = callSubscribers;\n    target.prototype.hasSubscribers = hasSubscribers;\n    target.prototype.hasSubscriber = hasSubscriber;\n  };\n}\n\nexport var ExpressionObserver = (_dec = connectable(), _dec2 = subscriberCollection(), _dec(_class = _dec2(_class = function () {\n  function ExpressionObserver(scope, expression, observerLocator, lookupFunctions) {\n    \n\n    this.scope = scope;\n    this.expression = expression;\n    this.observerLocator = observerLocator;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  ExpressionObserver.prototype.getValue = function getValue() {\n    return this.expression.evaluate(this.scope, this.lookupFunctions);\n  };\n\n  ExpressionObserver.prototype.setValue = function setValue(newValue) {\n    this.expression.assign(this.scope, newValue);\n  };\n\n  ExpressionObserver.prototype.subscribe = function subscribe(context, callable) {\n    var _this = this;\n\n    if (!this.hasSubscribers()) {\n      this.oldValue = this.expression.evaluate(this.scope, this.lookupFunctions);\n      this.expression.connect(this, this.scope);\n    }\n    this.addSubscriber(context, callable);\n    if (arguments.length === 1 && context instanceof Function) {\n      return {\n        dispose: function dispose() {\n          _this.unsubscribe(context, callable);\n        }\n      };\n    }\n  };\n\n  ExpressionObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n      this.unobserve(true);\n      this.oldValue = undefined;\n    }\n  };\n\n  ExpressionObserver.prototype.call = function call() {\n    var newValue = this.expression.evaluate(this.scope, this.lookupFunctions);\n    var oldValue = this.oldValue;\n    if (newValue !== oldValue) {\n      this.oldValue = newValue;\n      this.callSubscribers(newValue, oldValue);\n    }\n    this._version++;\n    this.expression.connect(this, this.scope);\n    this.unobserve(false);\n  };\n\n  return ExpressionObserver;\n}()) || _class) || _class);\n\nfunction isIndex(s) {\n  return +s === s >>> 0;\n}\n\nfunction toNumber(s) {\n  return +s;\n}\n\nfunction newSplice(index, removed, addedCount) {\n  return {\n    index: index,\n    removed: removed,\n    addedCount: addedCount\n  };\n}\n\nvar EDIT_LEAVE = 0;\nvar EDIT_UPDATE = 1;\nvar EDIT_ADD = 2;\nvar EDIT_DELETE = 3;\n\nfunction ArraySplice() {}\n\nArraySplice.prototype = {\n  calcEditDistances: function calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd) {\n    var rowCount = oldEnd - oldStart + 1;\n    var columnCount = currentEnd - currentStart + 1;\n    var distances = new Array(rowCount);\n    var north = void 0;\n    var west = void 0;\n\n    for (var _i = 0; _i < rowCount; ++_i) {\n      distances[_i] = new Array(columnCount);\n      distances[_i][0] = _i;\n    }\n\n    for (var j = 0; j < columnCount; ++j) {\n      distances[0][j] = j;\n    }\n\n    for (var _i2 = 1; _i2 < rowCount; ++_i2) {\n      for (var _j = 1; _j < columnCount; ++_j) {\n        if (this.equals(current[currentStart + _j - 1], old[oldStart + _i2 - 1])) {\n          distances[_i2][_j] = distances[_i2 - 1][_j - 1];\n        } else {\n          north = distances[_i2 - 1][_j] + 1;\n          west = distances[_i2][_j - 1] + 1;\n          distances[_i2][_j] = north < west ? north : west;\n        }\n      }\n    }\n\n    return distances;\n  },\n\n  spliceOperationsFromEditDistances: function spliceOperationsFromEditDistances(distances) {\n    var i = distances.length - 1;\n    var j = distances[0].length - 1;\n    var current = distances[i][j];\n    var edits = [];\n    while (i > 0 || j > 0) {\n      if (i === 0) {\n        edits.push(EDIT_ADD);\n        j--;\n        continue;\n      }\n      if (j === 0) {\n        edits.push(EDIT_DELETE);\n        i--;\n        continue;\n      }\n      var northWest = distances[i - 1][j - 1];\n      var west = distances[i - 1][j];\n      var north = distances[i][j - 1];\n\n      var min = void 0;\n      if (west < north) {\n        min = west < northWest ? west : northWest;\n      } else {\n        min = north < northWest ? north : northWest;\n      }\n\n      if (min === northWest) {\n        if (northWest === current) {\n          edits.push(EDIT_LEAVE);\n        } else {\n          edits.push(EDIT_UPDATE);\n          current = northWest;\n        }\n        i--;\n        j--;\n      } else if (min === west) {\n        edits.push(EDIT_DELETE);\n        i--;\n        current = west;\n      } else {\n        edits.push(EDIT_ADD);\n        j--;\n        current = north;\n      }\n    }\n\n    edits.reverse();\n    return edits;\n  },\n\n  calcSplices: function calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd) {\n    var prefixCount = 0;\n    var suffixCount = 0;\n\n    var minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);\n    if (currentStart === 0 && oldStart === 0) {\n      prefixCount = this.sharedPrefix(current, old, minLength);\n    }\n\n    if (currentEnd === current.length && oldEnd === old.length) {\n      suffixCount = this.sharedSuffix(current, old, minLength - prefixCount);\n    }\n\n    currentStart += prefixCount;\n    oldStart += prefixCount;\n    currentEnd -= suffixCount;\n    oldEnd -= suffixCount;\n\n    if (currentEnd - currentStart === 0 && oldEnd - oldStart === 0) {\n      return [];\n    }\n\n    if (currentStart === currentEnd) {\n      var _splice = newSplice(currentStart, [], 0);\n      while (oldStart < oldEnd) {\n        _splice.removed.push(old[oldStart++]);\n      }\n\n      return [_splice];\n    } else if (oldStart === oldEnd) {\n      return [newSplice(currentStart, [], currentEnd - currentStart)];\n    }\n\n    var ops = this.spliceOperationsFromEditDistances(this.calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd));\n\n    var splice = undefined;\n    var splices = [];\n    var index = currentStart;\n    var oldIndex = oldStart;\n    for (var _i3 = 0; _i3 < ops.length; ++_i3) {\n      switch (ops[_i3]) {\n        case EDIT_LEAVE:\n          if (splice) {\n            splices.push(splice);\n            splice = undefined;\n          }\n\n          index++;\n          oldIndex++;\n          break;\n        case EDIT_UPDATE:\n          if (!splice) {\n            splice = newSplice(index, [], 0);\n          }\n\n          splice.addedCount++;\n          index++;\n\n          splice.removed.push(old[oldIndex]);\n          oldIndex++;\n          break;\n        case EDIT_ADD:\n          if (!splice) {\n            splice = newSplice(index, [], 0);\n          }\n\n          splice.addedCount++;\n          index++;\n          break;\n        case EDIT_DELETE:\n          if (!splice) {\n            splice = newSplice(index, [], 0);\n          }\n\n          splice.removed.push(old[oldIndex]);\n          oldIndex++;\n          break;\n      }\n    }\n\n    if (splice) {\n      splices.push(splice);\n    }\n    return splices;\n  },\n\n  sharedPrefix: function sharedPrefix(current, old, searchLength) {\n    for (var _i4 = 0; _i4 < searchLength; ++_i4) {\n      if (!this.equals(current[_i4], old[_i4])) {\n        return _i4;\n      }\n    }\n\n    return searchLength;\n  },\n\n  sharedSuffix: function sharedSuffix(current, old, searchLength) {\n    var index1 = current.length;\n    var index2 = old.length;\n    var count = 0;\n    while (count < searchLength && this.equals(current[--index1], old[--index2])) {\n      count++;\n    }\n\n    return count;\n  },\n\n  calculateSplices: function calculateSplices(current, previous) {\n    return this.calcSplices(current, 0, current.length, previous, 0, previous.length);\n  },\n\n  equals: function equals(currentValue, previousValue) {\n    return currentValue === previousValue;\n  }\n};\n\nvar arraySplice = new ArraySplice();\n\nexport function calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd) {\n  return arraySplice.calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd);\n}\n\nfunction intersect(start1, end1, start2, end2) {\n  if (end1 < start2 || end2 < start1) {\n    return -1;\n  }\n\n  if (end1 === start2 || end2 === start1) {\n    return 0;\n  }\n\n  if (start1 < start2) {\n    if (end1 < end2) {\n      return end1 - start2;\n    }\n\n    return end2 - start2;\n  }\n\n  if (end2 < end1) {\n    return end2 - start1;\n  }\n\n  return end1 - start1;\n}\n\nexport function mergeSplice(splices, index, removed, addedCount) {\n  var splice = newSplice(index, removed, addedCount);\n\n  var inserted = false;\n  var insertionOffset = 0;\n\n  for (var _i5 = 0; _i5 < splices.length; _i5++) {\n    var current = splices[_i5];\n    current.index += insertionOffset;\n\n    if (inserted) {\n      continue;\n    }\n\n    var intersectCount = intersect(splice.index, splice.index + splice.removed.length, current.index, current.index + current.addedCount);\n\n    if (intersectCount >= 0) {\n\n      splices.splice(_i5, 1);\n      _i5--;\n\n      insertionOffset -= current.addedCount - current.removed.length;\n\n      splice.addedCount += current.addedCount - intersectCount;\n      var deleteCount = splice.removed.length + current.removed.length - intersectCount;\n\n      if (!splice.addedCount && !deleteCount) {\n        inserted = true;\n      } else {\n        var currentRemoved = current.removed;\n\n        if (splice.index < current.index) {\n          var prepend = splice.removed.slice(0, current.index - splice.index);\n          Array.prototype.push.apply(prepend, currentRemoved);\n          currentRemoved = prepend;\n        }\n\n        if (splice.index + splice.removed.length > current.index + current.addedCount) {\n          var append = splice.removed.slice(current.index + current.addedCount - splice.index);\n          Array.prototype.push.apply(currentRemoved, append);\n        }\n\n        splice.removed = currentRemoved;\n        if (current.index < splice.index) {\n          splice.index = current.index;\n        }\n      }\n    } else if (splice.index < current.index) {\n\n      inserted = true;\n\n      splices.splice(_i5, 0, splice);\n      _i5++;\n\n      var offset = splice.addedCount - splice.removed.length;\n      current.index += offset;\n      insertionOffset += offset;\n    }\n  }\n\n  if (!inserted) {\n    splices.push(splice);\n  }\n}\n\nfunction createInitialSplices(array, changeRecords) {\n  var splices = [];\n\n  for (var _i6 = 0; _i6 < changeRecords.length; _i6++) {\n    var record = changeRecords[_i6];\n    switch (record.type) {\n      case 'splice':\n        mergeSplice(splices, record.index, record.removed.slice(), record.addedCount);\n        break;\n      case 'add':\n      case 'update':\n      case 'delete':\n        if (!isIndex(record.name)) {\n          continue;\n        }\n\n        var index = toNumber(record.name);\n        if (index < 0) {\n          continue;\n        }\n\n        mergeSplice(splices, index, [record.oldValue], record.type === 'delete' ? 0 : 1);\n        break;\n      default:\n        console.error('Unexpected record type: ' + JSON.stringify(record));\n        break;\n    }\n  }\n\n  return splices;\n}\n\nexport function projectArraySplices(array, changeRecords) {\n  var splices = [];\n\n  createInitialSplices(array, changeRecords).forEach(function (splice) {\n    if (splice.addedCount === 1 && splice.removed.length === 1) {\n      if (splice.removed[0] !== array[splice.index]) {\n        splices.push(splice);\n      }\n\n      return;\n    }\n\n    splices = splices.concat(calcSplices(array, splice.index, splice.index + splice.addedCount, splice.removed, 0, splice.removed.length));\n  });\n\n  return splices;\n}\n\nfunction newRecord(type, object, key, oldValue) {\n  return {\n    type: type,\n    object: object,\n    key: key,\n    oldValue: oldValue\n  };\n}\n\nexport function getChangeRecords(map) {\n  var entries = new Array(map.size);\n  var keys = map.keys();\n  var i = 0;\n  var item = void 0;\n\n  while (item = keys.next()) {\n    if (item.done) {\n      break;\n    }\n\n    entries[i] = newRecord('added', map, item.value);\n    i++;\n  }\n\n  return entries;\n}\n\nexport var ModifyCollectionObserver = (_dec3 = subscriberCollection(), _dec3(_class2 = function () {\n  function ModifyCollectionObserver(taskQueue, collection) {\n    \n\n    this.taskQueue = taskQueue;\n    this.queued = false;\n    this.changeRecords = null;\n    this.oldCollection = null;\n    this.collection = collection;\n    this.lengthPropertyName = collection instanceof Map || collection instanceof Set ? 'size' : 'length';\n  }\n\n  ModifyCollectionObserver.prototype.subscribe = function subscribe(context, callable) {\n    this.addSubscriber(context, callable);\n  };\n\n  ModifyCollectionObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    this.removeSubscriber(context, callable);\n  };\n\n  ModifyCollectionObserver.prototype.addChangeRecord = function addChangeRecord(changeRecord) {\n    if (!this.hasSubscribers() && !this.lengthObserver) {\n      return;\n    }\n\n    if (changeRecord.type === 'splice') {\n      var index = changeRecord.index;\n      var arrayLength = changeRecord.object.length;\n      if (index > arrayLength) {\n        index = arrayLength - changeRecord.addedCount;\n      } else if (index < 0) {\n        index = arrayLength + changeRecord.removed.length + index - changeRecord.addedCount;\n      }\n      if (index < 0) {\n        index = 0;\n      }\n      changeRecord.index = index;\n    }\n\n    if (this.changeRecords === null) {\n      this.changeRecords = [changeRecord];\n    } else {\n      this.changeRecords.push(changeRecord);\n    }\n\n    if (!this.queued) {\n      this.queued = true;\n      this.taskQueue.queueMicroTask(this);\n    }\n  };\n\n  ModifyCollectionObserver.prototype.flushChangeRecords = function flushChangeRecords() {\n    if (this.changeRecords && this.changeRecords.length || this.oldCollection) {\n      this.call();\n    }\n  };\n\n  ModifyCollectionObserver.prototype.reset = function reset(oldCollection) {\n    this.oldCollection = oldCollection;\n\n    if (this.hasSubscribers() && !this.queued) {\n      this.queued = true;\n      this.taskQueue.queueMicroTask(this);\n    }\n  };\n\n  ModifyCollectionObserver.prototype.getLengthObserver = function getLengthObserver() {\n    return this.lengthObserver || (this.lengthObserver = new CollectionLengthObserver(this.collection));\n  };\n\n  ModifyCollectionObserver.prototype.call = function call() {\n    var changeRecords = this.changeRecords;\n    var oldCollection = this.oldCollection;\n    var records = void 0;\n\n    this.queued = false;\n    this.changeRecords = [];\n    this.oldCollection = null;\n\n    if (this.hasSubscribers()) {\n      if (oldCollection) {\n        if (this.collection instanceof Map || this.collection instanceof Set) {\n          records = getChangeRecords(oldCollection);\n        } else {\n          records = calcSplices(this.collection, 0, this.collection.length, oldCollection, 0, oldCollection.length);\n        }\n      } else {\n        if (this.collection instanceof Map || this.collection instanceof Set) {\n          records = changeRecords;\n        } else {\n          records = projectArraySplices(this.collection, changeRecords);\n        }\n      }\n\n      this.callSubscribers(records);\n    }\n\n    if (this.lengthObserver) {\n      this.lengthObserver.call(this.collection[this.lengthPropertyName]);\n    }\n  };\n\n  return ModifyCollectionObserver;\n}()) || _class2);\n\nexport var CollectionLengthObserver = (_dec4 = subscriberCollection(), _dec4(_class3 = function () {\n  function CollectionLengthObserver(collection) {\n    \n\n    this.collection = collection;\n    this.lengthPropertyName = collection instanceof Map || collection instanceof Set ? 'size' : 'length';\n    this.currentValue = collection[this.lengthPropertyName];\n  }\n\n  CollectionLengthObserver.prototype.getValue = function getValue() {\n    return this.collection[this.lengthPropertyName];\n  };\n\n  CollectionLengthObserver.prototype.setValue = function setValue(newValue) {\n    this.collection[this.lengthPropertyName] = newValue;\n  };\n\n  CollectionLengthObserver.prototype.subscribe = function subscribe(context, callable) {\n    this.addSubscriber(context, callable);\n  };\n\n  CollectionLengthObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    this.removeSubscriber(context, callable);\n  };\n\n  CollectionLengthObserver.prototype.call = function call(newValue) {\n    var oldValue = this.currentValue;\n    this.callSubscribers(newValue, oldValue);\n    this.currentValue = newValue;\n  };\n\n  return CollectionLengthObserver;\n}()) || _class3);\n\nvar pop = Array.prototype.pop;\nvar push = Array.prototype.push;\nvar reverse = Array.prototype.reverse;\nvar shift = Array.prototype.shift;\nvar sort = Array.prototype.sort;\nvar splice = Array.prototype.splice;\nvar unshift = Array.prototype.unshift;\n\nArray.prototype.pop = function () {\n  var notEmpty = this.length > 0;\n  var methodCallResult = pop.apply(this, arguments);\n  if (notEmpty && this.__array_observer__ !== undefined) {\n    this.__array_observer__.addChangeRecord({\n      type: 'delete',\n      object: this,\n      name: this.length,\n      oldValue: methodCallResult\n    });\n  }\n  return methodCallResult;\n};\n\nArray.prototype.push = function () {\n  var methodCallResult = push.apply(this, arguments);\n  if (this.__array_observer__ !== undefined) {\n    this.__array_observer__.addChangeRecord({\n      type: 'splice',\n      object: this,\n      index: this.length - arguments.length,\n      removed: [],\n      addedCount: arguments.length\n    });\n  }\n  return methodCallResult;\n};\n\nArray.prototype.reverse = function () {\n  var oldArray = void 0;\n  if (this.__array_observer__ !== undefined) {\n    this.__array_observer__.flushChangeRecords();\n    oldArray = this.slice();\n  }\n  var methodCallResult = reverse.apply(this, arguments);\n  if (this.__array_observer__ !== undefined) {\n    this.__array_observer__.reset(oldArray);\n  }\n  return methodCallResult;\n};\n\nArray.prototype.shift = function () {\n  var notEmpty = this.length > 0;\n  var methodCallResult = shift.apply(this, arguments);\n  if (notEmpty && this.__array_observer__ !== undefined) {\n    this.__array_observer__.addChangeRecord({\n      type: 'delete',\n      object: this,\n      name: 0,\n      oldValue: methodCallResult\n    });\n  }\n  return methodCallResult;\n};\n\nArray.prototype.sort = function () {\n  var oldArray = void 0;\n  if (this.__array_observer__ !== undefined) {\n    this.__array_observer__.flushChangeRecords();\n    oldArray = this.slice();\n  }\n  var methodCallResult = sort.apply(this, arguments);\n  if (this.__array_observer__ !== undefined) {\n    this.__array_observer__.reset(oldArray);\n  }\n  return methodCallResult;\n};\n\nArray.prototype.splice = function () {\n  var methodCallResult = splice.apply(this, arguments);\n  if (this.__array_observer__ !== undefined) {\n    this.__array_observer__.addChangeRecord({\n      type: 'splice',\n      object: this,\n      index: +arguments[0],\n      removed: methodCallResult,\n      addedCount: arguments.length > 2 ? arguments.length - 2 : 0\n    });\n  }\n  return methodCallResult;\n};\n\nArray.prototype.unshift = function () {\n  var methodCallResult = unshift.apply(this, arguments);\n  if (this.__array_observer__ !== undefined) {\n    this.__array_observer__.addChangeRecord({\n      type: 'splice',\n      object: this,\n      index: 0,\n      removed: [],\n      addedCount: arguments.length\n    });\n  }\n  return methodCallResult;\n};\n\nfunction _getArrayObserver(taskQueue, array) {\n  return ModifyArrayObserver.for(taskQueue, array);\n}\n\nvar ModifyArrayObserver = function (_ModifyCollectionObse) {\n  _inherits(ModifyArrayObserver, _ModifyCollectionObse);\n\n  function ModifyArrayObserver(taskQueue, array) {\n    \n\n    return _possibleConstructorReturn(this, _ModifyCollectionObse.call(this, taskQueue, array));\n  }\n\n  ModifyArrayObserver.for = function _for(taskQueue, array) {\n    if (!('__array_observer__' in array)) {\n      Reflect.defineProperty(array, '__array_observer__', {\n        value: ModifyArrayObserver.create(taskQueue, array),\n        enumerable: false, configurable: false\n      });\n    }\n    return array.__array_observer__;\n  };\n\n  ModifyArrayObserver.create = function create(taskQueue, array) {\n    return new ModifyArrayObserver(taskQueue, array);\n  };\n\n  return ModifyArrayObserver;\n}(ModifyCollectionObserver);\n\nexport var Expression = function () {\n  function Expression() {\n    \n\n    this.isChain = false;\n    this.isAssignable = false;\n  }\n\n  Expression.prototype.evaluate = function evaluate(scope, lookupFunctions, args) {\n    throw new Error('Binding expression \"' + this + '\" cannot be evaluated.');\n  };\n\n  Expression.prototype.assign = function assign(scope, value, lookupFunctions) {\n    throw new Error('Binding expression \"' + this + '\" cannot be assigned to.');\n  };\n\n  Expression.prototype.toString = function toString() {\n    return typeof FEATURE_NO_UNPARSER === 'undefined' ? _Unparser.unparse(this) : Function.prototype.toString.call(this);\n  };\n\n  return Expression;\n}();\n\nexport var Chain = function (_Expression) {\n  _inherits(Chain, _Expression);\n\n  function Chain(expressions) {\n    \n\n    var _this3 = _possibleConstructorReturn(this, _Expression.call(this));\n\n    _this3.expressions = expressions;\n    _this3.isChain = true;\n    return _this3;\n  }\n\n  Chain.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var result = void 0;\n    var expressions = this.expressions;\n    var last = void 0;\n\n    for (var _i7 = 0, length = expressions.length; _i7 < length; ++_i7) {\n      last = expressions[_i7].evaluate(scope, lookupFunctions);\n\n      if (last !== null) {\n        result = last;\n      }\n    }\n\n    return result;\n  };\n\n  Chain.prototype.accept = function accept(visitor) {\n    return visitor.visitChain(this);\n  };\n\n  return Chain;\n}(Expression);\n\nexport var BindingBehavior = function (_Expression2) {\n  _inherits(BindingBehavior, _Expression2);\n\n  function BindingBehavior(expression, name, args) {\n    \n\n    var _this4 = _possibleConstructorReturn(this, _Expression2.call(this));\n\n    _this4.expression = expression;\n    _this4.name = name;\n    _this4.args = args;\n    return _this4;\n  }\n\n  BindingBehavior.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return this.expression.evaluate(scope, lookupFunctions);\n  };\n\n  BindingBehavior.prototype.assign = function assign(scope, value, lookupFunctions) {\n    return this.expression.assign(scope, value, lookupFunctions);\n  };\n\n  BindingBehavior.prototype.accept = function accept(visitor) {\n    return visitor.visitBindingBehavior(this);\n  };\n\n  BindingBehavior.prototype.connect = function connect(binding, scope) {\n    this.expression.connect(binding, scope);\n  };\n\n  BindingBehavior.prototype.bind = function bind(binding, scope, lookupFunctions) {\n    if (this.expression.expression && this.expression.bind) {\n      this.expression.bind(binding, scope, lookupFunctions);\n    }\n    var behavior = lookupFunctions.bindingBehaviors(this.name);\n    if (!behavior) {\n      throw new Error('No BindingBehavior named \"' + this.name + '\" was found!');\n    }\n    var behaviorKey = 'behavior-' + this.name;\n    if (binding[behaviorKey]) {\n      throw new Error('A binding behavior named \"' + this.name + '\" has already been applied to \"' + this.expression + '\"');\n    }\n    binding[behaviorKey] = behavior;\n    behavior.bind.apply(behavior, [binding, scope].concat(evalList(scope, this.args, binding.lookupFunctions)));\n  };\n\n  BindingBehavior.prototype.unbind = function unbind(binding, scope) {\n    var behaviorKey = 'behavior-' + this.name;\n    binding[behaviorKey].unbind(binding, scope);\n    binding[behaviorKey] = null;\n    if (this.expression.expression && this.expression.unbind) {\n      this.expression.unbind(binding, scope);\n    }\n  };\n\n  return BindingBehavior;\n}(Expression);\n\nexport var ValueConverter = function (_Expression3) {\n  _inherits(ValueConverter, _Expression3);\n\n  function ValueConverter(expression, name, args, allArgs) {\n    \n\n    var _this5 = _possibleConstructorReturn(this, _Expression3.call(this));\n\n    _this5.expression = expression;\n    _this5.name = name;\n    _this5.args = args;\n    _this5.allArgs = allArgs;\n    return _this5;\n  }\n\n  ValueConverter.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var converter = lookupFunctions.valueConverters(this.name);\n    if (!converter) {\n      throw new Error('No ValueConverter named \"' + this.name + '\" was found!');\n    }\n\n    if ('toView' in converter) {\n      return converter.toView.apply(converter, evalList(scope, this.allArgs, lookupFunctions));\n    }\n\n    return this.allArgs[0].evaluate(scope, lookupFunctions);\n  };\n\n  ValueConverter.prototype.assign = function assign(scope, value, lookupFunctions) {\n    var converter = lookupFunctions.valueConverters(this.name);\n    if (!converter) {\n      throw new Error('No ValueConverter named \"' + this.name + '\" was found!');\n    }\n\n    if ('fromView' in converter) {\n      value = converter.fromView.apply(converter, [value].concat(evalList(scope, this.args, lookupFunctions)));\n    }\n\n    return this.allArgs[0].assign(scope, value, lookupFunctions);\n  };\n\n  ValueConverter.prototype.accept = function accept(visitor) {\n    return visitor.visitValueConverter(this);\n  };\n\n  ValueConverter.prototype.connect = function connect(binding, scope) {\n    var expressions = this.allArgs;\n    var i = expressions.length;\n    while (i--) {\n      expressions[i].connect(binding, scope);\n    }\n    var converter = binding.lookupFunctions.valueConverters(this.name);\n    if (!converter) {\n      throw new Error('No ValueConverter named \"' + this.name + '\" was found!');\n    }\n    var signals = converter.signals;\n    if (signals === undefined) {\n      return;\n    }\n    i = signals.length;\n    while (i--) {\n      connectBindingToSignal(binding, signals[i]);\n    }\n  };\n\n  return ValueConverter;\n}(Expression);\n\nexport var Assign = function (_Expression4) {\n  _inherits(Assign, _Expression4);\n\n  function Assign(target, value) {\n    \n\n    var _this6 = _possibleConstructorReturn(this, _Expression4.call(this));\n\n    _this6.target = target;\n    _this6.value = value;\n    _this6.isAssignable = true;\n    return _this6;\n  }\n\n  Assign.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return this.target.assign(scope, this.value.evaluate(scope, lookupFunctions));\n  };\n\n  Assign.prototype.accept = function accept(vistor) {\n    vistor.visitAssign(this);\n  };\n\n  Assign.prototype.connect = function connect(binding, scope) {};\n\n  Assign.prototype.assign = function assign(scope, value) {\n    this.value.assign(scope, value);\n    this.target.assign(scope, value);\n  };\n\n  return Assign;\n}(Expression);\n\nexport var Conditional = function (_Expression5) {\n  _inherits(Conditional, _Expression5);\n\n  function Conditional(condition, yes, no) {\n    \n\n    var _this7 = _possibleConstructorReturn(this, _Expression5.call(this));\n\n    _this7.condition = condition;\n    _this7.yes = yes;\n    _this7.no = no;\n    return _this7;\n  }\n\n  Conditional.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return !!this.condition.evaluate(scope, lookupFunctions) ? this.yes.evaluate(scope, lookupFunctions) : this.no.evaluate(scope, lookupFunctions);\n  };\n\n  Conditional.prototype.accept = function accept(visitor) {\n    return visitor.visitConditional(this);\n  };\n\n  Conditional.prototype.connect = function connect(binding, scope) {\n    this.condition.connect(binding, scope);\n    if (this.condition.evaluate(scope)) {\n      this.yes.connect(binding, scope);\n    } else {\n      this.no.connect(binding, scope);\n    }\n  };\n\n  return Conditional;\n}(Expression);\n\nexport var AccessThis = function (_Expression6) {\n  _inherits(AccessThis, _Expression6);\n\n  function AccessThis(ancestor) {\n    \n\n    var _this8 = _possibleConstructorReturn(this, _Expression6.call(this));\n\n    _this8.ancestor = ancestor;\n    return _this8;\n  }\n\n  AccessThis.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var oc = scope.overrideContext;\n    var i = this.ancestor;\n    while (i-- && oc) {\n      oc = oc.parentOverrideContext;\n    }\n    return i < 1 && oc ? oc.bindingContext : undefined;\n  };\n\n  AccessThis.prototype.accept = function accept(visitor) {\n    return visitor.visitAccessThis(this);\n  };\n\n  AccessThis.prototype.connect = function connect(binding, scope) {};\n\n  return AccessThis;\n}(Expression);\n\nexport var AccessScope = function (_Expression7) {\n  _inherits(AccessScope, _Expression7);\n\n  function AccessScope(name, ancestor) {\n    \n\n    var _this9 = _possibleConstructorReturn(this, _Expression7.call(this));\n\n    _this9.name = name;\n    _this9.ancestor = ancestor;\n    _this9.isAssignable = true;\n    return _this9;\n  }\n\n  AccessScope.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var context = getContextFor(this.name, scope, this.ancestor);\n    return context[this.name];\n  };\n\n  AccessScope.prototype.assign = function assign(scope, value) {\n    var context = getContextFor(this.name, scope, this.ancestor);\n    return context ? context[this.name] = value : undefined;\n  };\n\n  AccessScope.prototype.accept = function accept(visitor) {\n    return visitor.visitAccessScope(this);\n  };\n\n  AccessScope.prototype.connect = function connect(binding, scope) {\n    var context = getContextFor(this.name, scope, this.ancestor);\n    binding.observeProperty(context, this.name);\n  };\n\n  return AccessScope;\n}(Expression);\n\nexport var AccessMember = function (_Expression8) {\n  _inherits(AccessMember, _Expression8);\n\n  function AccessMember(object, name) {\n    \n\n    var _this10 = _possibleConstructorReturn(this, _Expression8.call(this));\n\n    _this10.object = object;\n    _this10.name = name;\n    _this10.isAssignable = true;\n    return _this10;\n  }\n\n  AccessMember.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var instance = this.object.evaluate(scope, lookupFunctions);\n    return instance === null || instance === undefined ? instance : instance[this.name];\n  };\n\n  AccessMember.prototype.assign = function assign(scope, value) {\n    var instance = this.object.evaluate(scope);\n\n    if (instance === null || instance === undefined) {\n      instance = {};\n      this.object.assign(scope, instance);\n    }\n\n    instance[this.name] = value;\n    return value;\n  };\n\n  AccessMember.prototype.accept = function accept(visitor) {\n    return visitor.visitAccessMember(this);\n  };\n\n  AccessMember.prototype.connect = function connect(binding, scope) {\n    this.object.connect(binding, scope);\n    var obj = this.object.evaluate(scope);\n    if (obj) {\n      binding.observeProperty(obj, this.name);\n    }\n  };\n\n  return AccessMember;\n}(Expression);\n\nexport var AccessKeyed = function (_Expression9) {\n  _inherits(AccessKeyed, _Expression9);\n\n  function AccessKeyed(object, key) {\n    \n\n    var _this11 = _possibleConstructorReturn(this, _Expression9.call(this));\n\n    _this11.object = object;\n    _this11.key = key;\n    _this11.isAssignable = true;\n    return _this11;\n  }\n\n  AccessKeyed.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var instance = this.object.evaluate(scope, lookupFunctions);\n    var lookup = this.key.evaluate(scope, lookupFunctions);\n    return getKeyed(instance, lookup);\n  };\n\n  AccessKeyed.prototype.assign = function assign(scope, value) {\n    var instance = this.object.evaluate(scope);\n    var lookup = this.key.evaluate(scope);\n    return setKeyed(instance, lookup, value);\n  };\n\n  AccessKeyed.prototype.accept = function accept(visitor) {\n    return visitor.visitAccessKeyed(this);\n  };\n\n  AccessKeyed.prototype.connect = function connect(binding, scope) {\n    this.object.connect(binding, scope);\n    var obj = this.object.evaluate(scope);\n    if (obj instanceof Object) {\n      this.key.connect(binding, scope);\n      var key = this.key.evaluate(scope);\n\n      if (key !== null && key !== undefined && !(Array.isArray(obj) && typeof key === 'number')) {\n        binding.observeProperty(obj, key);\n      }\n    }\n  };\n\n  return AccessKeyed;\n}(Expression);\n\nexport var CallScope = function (_Expression10) {\n  _inherits(CallScope, _Expression10);\n\n  function CallScope(name, args, ancestor) {\n    \n\n    var _this12 = _possibleConstructorReturn(this, _Expression10.call(this));\n\n    _this12.name = name;\n    _this12.args = args;\n    _this12.ancestor = ancestor;\n    return _this12;\n  }\n\n  CallScope.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {\n    var args = evalList(scope, this.args, lookupFunctions);\n    var context = getContextFor(this.name, scope, this.ancestor);\n    var func = getFunction(context, this.name, mustEvaluate);\n    if (func) {\n      return func.apply(context, args);\n    }\n    return undefined;\n  };\n\n  CallScope.prototype.accept = function accept(visitor) {\n    return visitor.visitCallScope(this);\n  };\n\n  CallScope.prototype.connect = function connect(binding, scope) {\n    var args = this.args;\n    var i = args.length;\n    while (i--) {\n      args[i].connect(binding, scope);\n    }\n  };\n\n  return CallScope;\n}(Expression);\n\nexport var CallMember = function (_Expression11) {\n  _inherits(CallMember, _Expression11);\n\n  function CallMember(object, name, args) {\n    \n\n    var _this13 = _possibleConstructorReturn(this, _Expression11.call(this));\n\n    _this13.object = object;\n    _this13.name = name;\n    _this13.args = args;\n    return _this13;\n  }\n\n  CallMember.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {\n    var instance = this.object.evaluate(scope, lookupFunctions);\n    var args = evalList(scope, this.args, lookupFunctions);\n    var func = getFunction(instance, this.name, mustEvaluate);\n    if (func) {\n      return func.apply(instance, args);\n    }\n    return undefined;\n  };\n\n  CallMember.prototype.accept = function accept(visitor) {\n    return visitor.visitCallMember(this);\n  };\n\n  CallMember.prototype.connect = function connect(binding, scope) {\n    this.object.connect(binding, scope);\n    var obj = this.object.evaluate(scope);\n    if (getFunction(obj, this.name, false)) {\n      var args = this.args;\n      var _i8 = args.length;\n      while (_i8--) {\n        args[_i8].connect(binding, scope);\n      }\n    }\n  };\n\n  return CallMember;\n}(Expression);\n\nexport var CallFunction = function (_Expression12) {\n  _inherits(CallFunction, _Expression12);\n\n  function CallFunction(func, args) {\n    \n\n    var _this14 = _possibleConstructorReturn(this, _Expression12.call(this));\n\n    _this14.func = func;\n    _this14.args = args;\n    return _this14;\n  }\n\n  CallFunction.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {\n    var func = this.func.evaluate(scope, lookupFunctions);\n    if (typeof func === 'function') {\n      return func.apply(null, evalList(scope, this.args, lookupFunctions));\n    }\n    if (!mustEvaluate && (func === null || func === undefined)) {\n      return undefined;\n    }\n    throw new Error(this.func + ' is not a function');\n  };\n\n  CallFunction.prototype.accept = function accept(visitor) {\n    return visitor.visitCallFunction(this);\n  };\n\n  CallFunction.prototype.connect = function connect(binding, scope) {\n    this.func.connect(binding, scope);\n    var func = this.func.evaluate(scope);\n    if (typeof func === 'function') {\n      var args = this.args;\n      var _i9 = args.length;\n      while (_i9--) {\n        args[_i9].connect(binding, scope);\n      }\n    }\n  };\n\n  return CallFunction;\n}(Expression);\n\nexport var Binary = function (_Expression13) {\n  _inherits(Binary, _Expression13);\n\n  function Binary(operation, left, right) {\n    \n\n    var _this15 = _possibleConstructorReturn(this, _Expression13.call(this));\n\n    _this15.operation = operation;\n    _this15.left = left;\n    _this15.right = right;\n    return _this15;\n  }\n\n  Binary.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var left = this.left.evaluate(scope, lookupFunctions);\n\n    switch (this.operation) {\n      case '&&':\n        return left && this.right.evaluate(scope, lookupFunctions);\n      case '||':\n        return left || this.right.evaluate(scope, lookupFunctions);\n    }\n\n    var right = this.right.evaluate(scope, lookupFunctions);\n\n    switch (this.operation) {\n      case '==':\n        return left == right;\n      case '===':\n        return left === right;\n      case '!=':\n        return left != right;\n      case '!==':\n        return left !== right;\n    }\n\n    if (left === null || right === null || left === undefined || right === undefined) {\n      switch (this.operation) {\n        case '+':\n          if (left !== null && left !== undefined) return left;\n          if (right !== null && right !== undefined) return right;\n          return 0;\n        case '-':\n          if (left !== null && left !== undefined) return left;\n          if (right !== null && right !== undefined) return 0 - right;\n          return 0;\n      }\n\n      return null;\n    }\n\n    switch (this.operation) {\n      case '+':\n        return autoConvertAdd(left, right);\n      case '-':\n        return left - right;\n      case '*':\n        return left * right;\n      case '/':\n        return left / right;\n      case '%':\n        return left % right;\n      case '<':\n        return left < right;\n      case '>':\n        return left > right;\n      case '<=':\n        return left <= right;\n      case '>=':\n        return left >= right;\n      case '^':\n        return left ^ right;\n    }\n\n    throw new Error('Internal error [' + this.operation + '] not handled');\n  };\n\n  Binary.prototype.accept = function accept(visitor) {\n    return visitor.visitBinary(this);\n  };\n\n  Binary.prototype.connect = function connect(binding, scope) {\n    this.left.connect(binding, scope);\n    var left = this.left.evaluate(scope);\n    if (this.operation === '&&' && !left || this.operation === '||' && left) {\n      return;\n    }\n    this.right.connect(binding, scope);\n  };\n\n  return Binary;\n}(Expression);\n\nexport var PrefixNot = function (_Expression14) {\n  _inherits(PrefixNot, _Expression14);\n\n  function PrefixNot(operation, expression) {\n    \n\n    var _this16 = _possibleConstructorReturn(this, _Expression14.call(this));\n\n    _this16.operation = operation;\n    _this16.expression = expression;\n    return _this16;\n  }\n\n  PrefixNot.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return !this.expression.evaluate(scope, lookupFunctions);\n  };\n\n  PrefixNot.prototype.accept = function accept(visitor) {\n    return visitor.visitPrefix(this);\n  };\n\n  PrefixNot.prototype.connect = function connect(binding, scope) {\n    this.expression.connect(binding, scope);\n  };\n\n  return PrefixNot;\n}(Expression);\n\nexport var LiteralPrimitive = function (_Expression15) {\n  _inherits(LiteralPrimitive, _Expression15);\n\n  function LiteralPrimitive(value) {\n    \n\n    var _this17 = _possibleConstructorReturn(this, _Expression15.call(this));\n\n    _this17.value = value;\n    return _this17;\n  }\n\n  LiteralPrimitive.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return this.value;\n  };\n\n  LiteralPrimitive.prototype.accept = function accept(visitor) {\n    return visitor.visitLiteralPrimitive(this);\n  };\n\n  LiteralPrimitive.prototype.connect = function connect(binding, scope) {};\n\n  return LiteralPrimitive;\n}(Expression);\n\nexport var LiteralString = function (_Expression16) {\n  _inherits(LiteralString, _Expression16);\n\n  function LiteralString(value) {\n    \n\n    var _this18 = _possibleConstructorReturn(this, _Expression16.call(this));\n\n    _this18.value = value;\n    return _this18;\n  }\n\n  LiteralString.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return this.value;\n  };\n\n  LiteralString.prototype.accept = function accept(visitor) {\n    return visitor.visitLiteralString(this);\n  };\n\n  LiteralString.prototype.connect = function connect(binding, scope) {};\n\n  return LiteralString;\n}(Expression);\n\nexport var LiteralArray = function (_Expression17) {\n  _inherits(LiteralArray, _Expression17);\n\n  function LiteralArray(elements) {\n    \n\n    var _this19 = _possibleConstructorReturn(this, _Expression17.call(this));\n\n    _this19.elements = elements;\n    return _this19;\n  }\n\n  LiteralArray.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var elements = this.elements;\n    var result = [];\n\n    for (var _i10 = 0, length = elements.length; _i10 < length; ++_i10) {\n      result[_i10] = elements[_i10].evaluate(scope, lookupFunctions);\n    }\n\n    return result;\n  };\n\n  LiteralArray.prototype.accept = function accept(visitor) {\n    return visitor.visitLiteralArray(this);\n  };\n\n  LiteralArray.prototype.connect = function connect(binding, scope) {\n    var length = this.elements.length;\n    for (var _i11 = 0; _i11 < length; _i11++) {\n      this.elements[_i11].connect(binding, scope);\n    }\n  };\n\n  return LiteralArray;\n}(Expression);\n\nexport var LiteralObject = function (_Expression18) {\n  _inherits(LiteralObject, _Expression18);\n\n  function LiteralObject(keys, values) {\n    \n\n    var _this20 = _possibleConstructorReturn(this, _Expression18.call(this));\n\n    _this20.keys = keys;\n    _this20.values = values;\n    return _this20;\n  }\n\n  LiteralObject.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var instance = {};\n    var keys = this.keys;\n    var values = this.values;\n\n    for (var _i12 = 0, length = keys.length; _i12 < length; ++_i12) {\n      instance[keys[_i12]] = values[_i12].evaluate(scope, lookupFunctions);\n    }\n\n    return instance;\n  };\n\n  LiteralObject.prototype.accept = function accept(visitor) {\n    return visitor.visitLiteralObject(this);\n  };\n\n  LiteralObject.prototype.connect = function connect(binding, scope) {\n    var length = this.keys.length;\n    for (var _i13 = 0; _i13 < length; _i13++) {\n      this.values[_i13].connect(binding, scope);\n    }\n  };\n\n  return LiteralObject;\n}(Expression);\n\nfunction evalList(scope, list, lookupFunctions) {\n  var length = list.length;\n  var result = [];\n  for (var _i14 = 0; _i14 < length; _i14++) {\n    result[_i14] = list[_i14].evaluate(scope, lookupFunctions);\n  }\n  return result;\n}\n\nfunction autoConvertAdd(a, b) {\n  if (a !== null && b !== null) {\n    if (typeof a === 'string' && typeof b !== 'string') {\n      return a + b.toString();\n    }\n\n    if (typeof a !== 'string' && typeof b === 'string') {\n      return a.toString() + b;\n    }\n\n    return a + b;\n  }\n\n  if (a !== null) {\n    return a;\n  }\n\n  if (b !== null) {\n    return b;\n  }\n\n  return 0;\n}\n\nfunction getFunction(obj, name, mustExist) {\n  var func = obj === null || obj === undefined ? null : obj[name];\n  if (typeof func === 'function') {\n    return func;\n  }\n  if (!mustExist && (func === null || func === undefined)) {\n    return null;\n  }\n  throw new Error(name + ' is not a function');\n}\n\nfunction getKeyed(obj, key) {\n  if (Array.isArray(obj)) {\n    return obj[parseInt(key, 10)];\n  } else if (obj) {\n    return obj[key];\n  } else if (obj === null || obj === undefined) {\n    return undefined;\n  }\n\n  return obj[key];\n}\n\nfunction setKeyed(obj, key, value) {\n  if (Array.isArray(obj)) {\n    var index = parseInt(key, 10);\n\n    if (obj.length <= index) {\n      obj.length = index + 1;\n    }\n\n    obj[index] = value;\n  } else {\n    obj[key] = value;\n  }\n\n  return value;\n}\n\nvar _Unparser = null;\n\nexport { _Unparser as Unparser };\nif (typeof FEATURE_NO_UNPARSER === 'undefined') {\n  _Unparser = function () {\n    function Unparser(buffer) {\n      \n\n      this.buffer = buffer;\n    }\n\n    Unparser.unparse = function unparse(expression) {\n      var buffer = [];\n      var visitor = new _Unparser(buffer);\n\n      expression.accept(visitor);\n\n      return buffer.join('');\n    };\n\n    Unparser.prototype.write = function write(text) {\n      this.buffer.push(text);\n    };\n\n    Unparser.prototype.writeArgs = function writeArgs(args) {\n      this.write('(');\n\n      for (var _i15 = 0, length = args.length; _i15 < length; ++_i15) {\n        if (_i15 !== 0) {\n          this.write(',');\n        }\n\n        args[_i15].accept(this);\n      }\n\n      this.write(')');\n    };\n\n    Unparser.prototype.visitChain = function visitChain(chain) {\n      var expressions = chain.expressions;\n\n      for (var _i16 = 0, length = expressions.length; _i16 < length; ++_i16) {\n        if (_i16 !== 0) {\n          this.write(';');\n        }\n\n        expressions[_i16].accept(this);\n      }\n    };\n\n    Unparser.prototype.visitBindingBehavior = function visitBindingBehavior(behavior) {\n      var args = behavior.args;\n\n      behavior.expression.accept(this);\n      this.write('&' + behavior.name);\n\n      for (var _i17 = 0, length = args.length; _i17 < length; ++_i17) {\n        this.write(':');\n        args[_i17].accept(this);\n      }\n    };\n\n    Unparser.prototype.visitValueConverter = function visitValueConverter(converter) {\n      var args = converter.args;\n\n      converter.expression.accept(this);\n      this.write('|' + converter.name);\n\n      for (var _i18 = 0, length = args.length; _i18 < length; ++_i18) {\n        this.write(':');\n        args[_i18].accept(this);\n      }\n    };\n\n    Unparser.prototype.visitAssign = function visitAssign(assign) {\n      assign.target.accept(this);\n      this.write('=');\n      assign.value.accept(this);\n    };\n\n    Unparser.prototype.visitConditional = function visitConditional(conditional) {\n      conditional.condition.accept(this);\n      this.write('?');\n      conditional.yes.accept(this);\n      this.write(':');\n      conditional.no.accept(this);\n    };\n\n    Unparser.prototype.visitAccessThis = function visitAccessThis(access) {\n      if (access.ancestor === 0) {\n        this.write('$this');\n        return;\n      }\n      this.write('$parent');\n      var i = access.ancestor - 1;\n      while (i--) {\n        this.write('.$parent');\n      }\n    };\n\n    Unparser.prototype.visitAccessScope = function visitAccessScope(access) {\n      var i = access.ancestor;\n      while (i--) {\n        this.write('$parent.');\n      }\n      this.write(access.name);\n    };\n\n    Unparser.prototype.visitAccessMember = function visitAccessMember(access) {\n      access.object.accept(this);\n      this.write('.' + access.name);\n    };\n\n    Unparser.prototype.visitAccessKeyed = function visitAccessKeyed(access) {\n      access.object.accept(this);\n      this.write('[');\n      access.key.accept(this);\n      this.write(']');\n    };\n\n    Unparser.prototype.visitCallScope = function visitCallScope(call) {\n      var i = call.ancestor;\n      while (i--) {\n        this.write('$parent.');\n      }\n      this.write(call.name);\n      this.writeArgs(call.args);\n    };\n\n    Unparser.prototype.visitCallFunction = function visitCallFunction(call) {\n      call.func.accept(this);\n      this.writeArgs(call.args);\n    };\n\n    Unparser.prototype.visitCallMember = function visitCallMember(call) {\n      call.object.accept(this);\n      this.write('.' + call.name);\n      this.writeArgs(call.args);\n    };\n\n    Unparser.prototype.visitPrefix = function visitPrefix(prefix) {\n      this.write('(' + prefix.operation);\n      prefix.expression.accept(this);\n      this.write(')');\n    };\n\n    Unparser.prototype.visitBinary = function visitBinary(binary) {\n      binary.left.accept(this);\n      this.write(binary.operation);\n      binary.right.accept(this);\n    };\n\n    Unparser.prototype.visitLiteralPrimitive = function visitLiteralPrimitive(literal) {\n      this.write('' + literal.value);\n    };\n\n    Unparser.prototype.visitLiteralArray = function visitLiteralArray(literal) {\n      var elements = literal.elements;\n\n      this.write('[');\n\n      for (var _i19 = 0, length = elements.length; _i19 < length; ++_i19) {\n        if (_i19 !== 0) {\n          this.write(',');\n        }\n\n        elements[_i19].accept(this);\n      }\n\n      this.write(']');\n    };\n\n    Unparser.prototype.visitLiteralObject = function visitLiteralObject(literal) {\n      var keys = literal.keys;\n      var values = literal.values;\n\n      this.write('{');\n\n      for (var _i20 = 0, length = keys.length; _i20 < length; ++_i20) {\n        if (_i20 !== 0) {\n          this.write(',');\n        }\n\n        this.write('\\'' + keys[_i20] + '\\':');\n        values[_i20].accept(this);\n      }\n\n      this.write('}');\n    };\n\n    Unparser.prototype.visitLiteralString = function visitLiteralString(literal) {\n      var escaped = literal.value.replace(/'/g, \"\\'\");\n      this.write('\\'' + escaped + '\\'');\n    };\n\n    return Unparser;\n  }();\n}\n\nexport var ExpressionCloner = function () {\n  function ExpressionCloner() {\n    \n  }\n\n  ExpressionCloner.prototype.cloneExpressionArray = function cloneExpressionArray(array) {\n    var clonedArray = [];\n    var i = array.length;\n    while (i--) {\n      clonedArray[i] = array[i].accept(this);\n    }\n    return clonedArray;\n  };\n\n  ExpressionCloner.prototype.visitChain = function visitChain(chain) {\n    return new Chain(this.cloneExpressionArray(chain.expressions));\n  };\n\n  ExpressionCloner.prototype.visitBindingBehavior = function visitBindingBehavior(behavior) {\n    return new BindingBehavior(behavior.expression.accept(this), behavior.name, this.cloneExpressionArray(behavior.args));\n  };\n\n  ExpressionCloner.prototype.visitValueConverter = function visitValueConverter(converter) {\n    return new ValueConverter(converter.expression.accept(this), converter.name, this.cloneExpressionArray(converter.args));\n  };\n\n  ExpressionCloner.prototype.visitAssign = function visitAssign(assign) {\n    return new Assign(assign.target.accept(this), assign.value.accept(this));\n  };\n\n  ExpressionCloner.prototype.visitConditional = function visitConditional(conditional) {\n    return new Conditional(conditional.condition.accept(this), conditional.yes.accept(this), conditional.no.accept(this));\n  };\n\n  ExpressionCloner.prototype.visitAccessThis = function visitAccessThis(access) {\n    return new AccessThis(access.ancestor);\n  };\n\n  ExpressionCloner.prototype.visitAccessScope = function visitAccessScope(access) {\n    return new AccessScope(access.name, access.ancestor);\n  };\n\n  ExpressionCloner.prototype.visitAccessMember = function visitAccessMember(access) {\n    return new AccessMember(access.object.accept(this), access.name);\n  };\n\n  ExpressionCloner.prototype.visitAccessKeyed = function visitAccessKeyed(access) {\n    return new AccessKeyed(access.object.accept(this), access.key.accept(this));\n  };\n\n  ExpressionCloner.prototype.visitCallScope = function visitCallScope(call) {\n    return new CallScope(call.name, this.cloneExpressionArray(call.args), call.ancestor);\n  };\n\n  ExpressionCloner.prototype.visitCallFunction = function visitCallFunction(call) {\n    return new CallFunction(call.func.accept(this), this.cloneExpressionArray(call.args));\n  };\n\n  ExpressionCloner.prototype.visitCallMember = function visitCallMember(call) {\n    return new CallMember(call.object.accept(this), call.name, this.cloneExpressionArray(call.args));\n  };\n\n  ExpressionCloner.prototype.visitPrefix = function visitPrefix(prefix) {\n    return new PrefixNot(prefix.operation, prefix.expression.accept(this));\n  };\n\n  ExpressionCloner.prototype.visitBinary = function visitBinary(binary) {\n    return new Binary(binary.operation, binary.left.accept(this), binary.right.accept(this));\n  };\n\n  ExpressionCloner.prototype.visitLiteralPrimitive = function visitLiteralPrimitive(literal) {\n    return new LiteralPrimitive(literal);\n  };\n\n  ExpressionCloner.prototype.visitLiteralArray = function visitLiteralArray(literal) {\n    return new LiteralArray(this.cloneExpressionArray(literal.elements));\n  };\n\n  ExpressionCloner.prototype.visitLiteralObject = function visitLiteralObject(literal) {\n    return new LiteralObject(literal.keys, this.cloneExpressionArray(literal.values));\n  };\n\n  ExpressionCloner.prototype.visitLiteralString = function visitLiteralString(literal) {\n    return new LiteralString(literal.value);\n  };\n\n  return ExpressionCloner;\n}();\n\nexport function cloneExpression(expression) {\n  var visitor = new ExpressionCloner();\n  return expression.accept(visitor);\n}\n\nexport var bindingMode = {\n  oneTime: 0,\n  toView: 1,\n  oneWay: 1,\n  twoWay: 2,\n  fromView: 3\n};\n\nexport var Token = function () {\n  function Token(index, text) {\n    \n\n    this.index = index;\n    this.text = text;\n  }\n\n  Token.prototype.withOp = function withOp(op) {\n    this.opKey = op;\n    return this;\n  };\n\n  Token.prototype.withGetterSetter = function withGetterSetter(key) {\n    this.key = key;\n    return this;\n  };\n\n  Token.prototype.withValue = function withValue(value) {\n    this.value = value;\n    return this;\n  };\n\n  Token.prototype.toString = function toString() {\n    return 'Token(' + this.text + ')';\n  };\n\n  return Token;\n}();\n\nexport var Lexer = function () {\n  function Lexer() {\n    \n  }\n\n  Lexer.prototype.lex = function lex(text) {\n    var scanner = new Scanner(text);\n    var tokens = [];\n    var token = scanner.scanToken();\n\n    while (token) {\n      tokens.push(token);\n      token = scanner.scanToken();\n    }\n\n    return tokens;\n  };\n\n  return Lexer;\n}();\n\nexport var Scanner = function () {\n  function Scanner(input) {\n    \n\n    this.input = input;\n    this.length = input.length;\n    this.peek = 0;\n    this.index = -1;\n\n    this.advance();\n  }\n\n  Scanner.prototype.scanToken = function scanToken() {\n    while (this.peek <= $SPACE) {\n      if (++this.index >= this.length) {\n        this.peek = $EOF;\n        return null;\n      }\n\n      this.peek = this.input.charCodeAt(this.index);\n    }\n\n    if (isIdentifierStart(this.peek)) {\n      return this.scanIdentifier();\n    }\n\n    if (isDigit(this.peek)) {\n      return this.scanNumber(this.index);\n    }\n\n    var start = this.index;\n\n    switch (this.peek) {\n      case $PERIOD:\n        this.advance();\n        return isDigit(this.peek) ? this.scanNumber(start) : new Token(start, '.');\n      case $LPAREN:\n      case $RPAREN:\n      case $LBRACE:\n      case $RBRACE:\n      case $LBRACKET:\n      case $RBRACKET:\n      case $COMMA:\n      case $COLON:\n      case $SEMICOLON:\n        return this.scanCharacter(start, String.fromCharCode(this.peek));\n      case $SQ:\n      case $DQ:\n        return this.scanString();\n      case $PLUS:\n      case $MINUS:\n      case $STAR:\n      case $SLASH:\n      case $PERCENT:\n      case $CARET:\n      case $QUESTION:\n        return this.scanOperator(start, String.fromCharCode(this.peek));\n      case $LT:\n      case $GT:\n      case $BANG:\n      case $EQ:\n        return this.scanComplexOperator(start, $EQ, String.fromCharCode(this.peek), '=');\n      case $AMPERSAND:\n        return this.scanComplexOperator(start, $AMPERSAND, '&', '&');\n      case $BAR:\n        return this.scanComplexOperator(start, $BAR, '|', '|');\n      case $NBSP:\n        while (isWhitespace(this.peek)) {\n          this.advance();\n        }\n\n        return this.scanToken();\n    }\n\n    var character = String.fromCharCode(this.peek);\n    this.error('Unexpected character [' + character + ']');\n    return null;\n  };\n\n  Scanner.prototype.scanCharacter = function scanCharacter(start, text) {\n    assert(this.peek === text.charCodeAt(0));\n    this.advance();\n    return new Token(start, text);\n  };\n\n  Scanner.prototype.scanOperator = function scanOperator(start, text) {\n    assert(this.peek === text.charCodeAt(0));\n    assert(OPERATORS[text] === 1);\n    this.advance();\n    return new Token(start, text).withOp(text);\n  };\n\n  Scanner.prototype.scanComplexOperator = function scanComplexOperator(start, code, one, two) {\n    assert(this.peek === one.charCodeAt(0));\n    this.advance();\n\n    var text = one;\n\n    if (this.peek === code) {\n      this.advance();\n      text += two;\n    }\n\n    if (this.peek === code) {\n      this.advance();\n      text += two;\n    }\n\n    assert(OPERATORS[text] === 1);\n\n    return new Token(start, text).withOp(text);\n  };\n\n  Scanner.prototype.scanIdentifier = function scanIdentifier() {\n    assert(isIdentifierStart(this.peek));\n    var start = this.index;\n\n    this.advance();\n\n    while (isIdentifierPart(this.peek)) {\n      this.advance();\n    }\n\n    var text = this.input.substring(start, this.index);\n    var result = new Token(start, text);\n\n    if (OPERATORS[text] === 1) {\n      result.withOp(text);\n    } else {\n      result.withGetterSetter(text);\n    }\n\n    return result;\n  };\n\n  Scanner.prototype.scanNumber = function scanNumber(start) {\n    assert(isDigit(this.peek));\n    var simple = this.index === start;\n    this.advance();\n\n    while (true) {\n      if (!isDigit(this.peek)) {\n        if (this.peek === $PERIOD) {\n          simple = false;\n        } else if (isExponentStart(this.peek)) {\n          this.advance();\n\n          if (isExponentSign(this.peek)) {\n            this.advance();\n          }\n\n          if (!isDigit(this.peek)) {\n            this.error('Invalid exponent', -1);\n          }\n\n          simple = false;\n        } else {\n          break;\n        }\n      }\n\n      this.advance();\n    }\n\n    var text = this.input.substring(start, this.index);\n    var value = simple ? parseInt(text, 10) : parseFloat(text);\n    return new Token(start, text).withValue(value);\n  };\n\n  Scanner.prototype.scanString = function scanString() {\n    assert(this.peek === $SQ || this.peek === $DQ);\n\n    var start = this.index;\n    var quote = this.peek;\n\n    this.advance();\n\n    var buffer = void 0;\n    var marker = this.index;\n\n    while (this.peek !== quote) {\n      if (this.peek === $BACKSLASH) {\n        if (!buffer) {\n          buffer = [];\n        }\n\n        buffer.push(this.input.substring(marker, this.index));\n        this.advance();\n\n        var _unescaped = void 0;\n\n        if (this.peek === $u) {\n          var hex = this.input.substring(this.index + 1, this.index + 5);\n\n          if (!/[A-Z0-9]{4}/.test(hex)) {\n            this.error('Invalid unicode escape [\\\\u' + hex + ']');\n          }\n\n          _unescaped = parseInt(hex, 16);\n\n          for (var _i21 = 0; _i21 < 5; ++_i21) {\n            this.advance();\n          }\n        } else {\n          _unescaped = unescape(this.peek);\n          this.advance();\n        }\n\n        buffer.push(String.fromCharCode(_unescaped));\n        marker = this.index;\n      } else if (this.peek === $EOF) {\n        this.error('Unterminated quote');\n      } else {\n        this.advance();\n      }\n    }\n\n    var last = this.input.substring(marker, this.index);\n    this.advance();\n    var text = this.input.substring(start, this.index);\n\n    var unescaped = last;\n\n    if (buffer !== null && buffer !== undefined) {\n      buffer.push(last);\n      unescaped = buffer.join('');\n    }\n\n    return new Token(start, text).withValue(unescaped);\n  };\n\n  Scanner.prototype.advance = function advance() {\n    if (++this.index >= this.length) {\n      this.peek = $EOF;\n    } else {\n      this.peek = this.input.charCodeAt(this.index);\n    }\n  };\n\n  Scanner.prototype.error = function error(message) {\n    var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n    var position = this.index + offset;\n    throw new Error('Lexer Error: ' + message + ' at column ' + position + ' in expression [' + this.input + ']');\n  };\n\n  return Scanner;\n}();\n\nvar OPERATORS = {\n  'undefined': 1,\n  'null': 1,\n  'true': 1,\n  'false': 1,\n  '+': 1,\n  '-': 1,\n  '*': 1,\n  '/': 1,\n  '%': 1,\n  '^': 1,\n  '=': 1,\n  '==': 1,\n  '===': 1,\n  '!=': 1,\n  '!==': 1,\n  '<': 1,\n  '>': 1,\n  '<=': 1,\n  '>=': 1,\n  '&&': 1,\n  '||': 1,\n  '&': 1,\n  '|': 1,\n  '!': 1,\n  '?': 1\n};\n\nvar $EOF = 0;\nvar $TAB = 9;\nvar $LF = 10;\nvar $VTAB = 11;\nvar $FF = 12;\nvar $CR = 13;\nvar $SPACE = 32;\nvar $BANG = 33;\nvar $DQ = 34;\nvar $$ = 36;\nvar $PERCENT = 37;\nvar $AMPERSAND = 38;\nvar $SQ = 39;\nvar $LPAREN = 40;\nvar $RPAREN = 41;\nvar $STAR = 42;\nvar $PLUS = 43;\nvar $COMMA = 44;\nvar $MINUS = 45;\nvar $PERIOD = 46;\nvar $SLASH = 47;\nvar $COLON = 58;\nvar $SEMICOLON = 59;\nvar $LT = 60;\nvar $EQ = 61;\nvar $GT = 62;\nvar $QUESTION = 63;\n\nvar $0 = 48;\nvar $9 = 57;\n\nvar $A = 65;\nvar $E = 69;\nvar $Z = 90;\n\nvar $LBRACKET = 91;\nvar $BACKSLASH = 92;\nvar $RBRACKET = 93;\nvar $CARET = 94;\nvar $_ = 95;\n\nvar $a = 97;\nvar $e = 101;\nvar $f = 102;\nvar $n = 110;\nvar $r = 114;\nvar $t = 116;\nvar $u = 117;\nvar $v = 118;\nvar $z = 122;\n\nvar $LBRACE = 123;\nvar $BAR = 124;\nvar $RBRACE = 125;\nvar $NBSP = 160;\n\nfunction isWhitespace(code) {\n  return code >= $TAB && code <= $SPACE || code === $NBSP;\n}\n\nfunction isIdentifierStart(code) {\n  return $a <= code && code <= $z || $A <= code && code <= $Z || code === $_ || code === $$;\n}\n\nfunction isIdentifierPart(code) {\n  return $a <= code && code <= $z || $A <= code && code <= $Z || $0 <= code && code <= $9 || code === $_ || code === $$;\n}\n\nfunction isDigit(code) {\n  return $0 <= code && code <= $9;\n}\n\nfunction isExponentStart(code) {\n  return code === $e || code === $E;\n}\n\nfunction isExponentSign(code) {\n  return code === $MINUS || code === $PLUS;\n}\n\nfunction unescape(code) {\n  switch (code) {\n    case $n:\n      return $LF;\n    case $f:\n      return $FF;\n    case $r:\n      return $CR;\n    case $t:\n      return $TAB;\n    case $v:\n      return $VTAB;\n    default:\n      return code;\n  }\n}\n\nfunction assert(condition, message) {\n  if (!condition) {\n    throw message || 'Assertion failed';\n  }\n}\n\nvar EOF = new Token(-1, null);\n\nexport var Parser = function () {\n  function Parser() {\n    \n\n    this.cache = {};\n    this.lexer = new Lexer();\n  }\n\n  Parser.prototype.parse = function parse(input) {\n    input = input || '';\n\n    return this.cache[input] || (this.cache[input] = new ParserImplementation(this.lexer, input).parseChain());\n  };\n\n  return Parser;\n}();\n\nexport var ParserImplementation = function () {\n  function ParserImplementation(lexer, input) {\n    \n\n    this.index = 0;\n    this.input = input;\n    this.tokens = lexer.lex(input);\n  }\n\n  ParserImplementation.prototype.parseChain = function parseChain() {\n    var isChain = false;\n    var expressions = [];\n\n    while (this.optional(';')) {\n      isChain = true;\n    }\n\n    while (this.index < this.tokens.length) {\n      if (this.peek.text === ')' || this.peek.text === '}' || this.peek.text === ']') {\n        this.error('Unconsumed token ' + this.peek.text);\n      }\n\n      var expr = this.parseBindingBehavior();\n      expressions.push(expr);\n\n      while (this.optional(';')) {\n        isChain = true;\n      }\n\n      if (isChain) {\n        this.error('Multiple expressions are not allowed.');\n      }\n    }\n\n    return expressions.length === 1 ? expressions[0] : new Chain(expressions);\n  };\n\n  ParserImplementation.prototype.parseBindingBehavior = function parseBindingBehavior() {\n    var result = this.parseValueConverter();\n\n    while (this.optional('&')) {\n      var name = this.peek.text;\n      var args = [];\n\n      this.advance();\n\n      while (this.optional(':')) {\n        args.push(this.parseExpression());\n      }\n\n      result = new BindingBehavior(result, name, args);\n    }\n\n    return result;\n  };\n\n  ParserImplementation.prototype.parseValueConverter = function parseValueConverter() {\n    var result = this.parseExpression();\n\n    while (this.optional('|')) {\n      var name = this.peek.text;\n      var args = [];\n\n      this.advance();\n\n      while (this.optional(':')) {\n        args.push(this.parseExpression());\n      }\n\n      result = new ValueConverter(result, name, args, [result].concat(args));\n    }\n\n    return result;\n  };\n\n  ParserImplementation.prototype.parseExpression = function parseExpression() {\n    var start = this.peek.index;\n    var result = this.parseConditional();\n\n    while (this.peek.text === '=') {\n      if (!result.isAssignable) {\n        var end = this.index < this.tokens.length ? this.peek.index : this.input.length;\n        var expression = this.input.substring(start, end);\n\n        this.error('Expression ' + expression + ' is not assignable');\n      }\n\n      this.expect('=');\n      result = new Assign(result, this.parseConditional());\n    }\n\n    return result;\n  };\n\n  ParserImplementation.prototype.parseConditional = function parseConditional() {\n    var start = this.peek.index;\n    var result = this.parseLogicalOr();\n\n    if (this.optional('?')) {\n      var yes = this.parseExpression();\n\n      if (!this.optional(':')) {\n        var end = this.index < this.tokens.length ? this.peek.index : this.input.length;\n        var expression = this.input.substring(start, end);\n\n        this.error('Conditional expression ' + expression + ' requires all 3 expressions');\n      }\n\n      var no = this.parseExpression();\n      result = new Conditional(result, yes, no);\n    }\n\n    return result;\n  };\n\n  ParserImplementation.prototype.parseLogicalOr = function parseLogicalOr() {\n    var result = this.parseLogicalAnd();\n\n    while (this.optional('||')) {\n      result = new Binary('||', result, this.parseLogicalAnd());\n    }\n\n    return result;\n  };\n\n  ParserImplementation.prototype.parseLogicalAnd = function parseLogicalAnd() {\n    var result = this.parseEquality();\n\n    while (this.optional('&&')) {\n      result = new Binary('&&', result, this.parseEquality());\n    }\n\n    return result;\n  };\n\n  ParserImplementation.prototype.parseEquality = function parseEquality() {\n    var result = this.parseRelational();\n\n    while (true) {\n      if (this.optional('==')) {\n        result = new Binary('==', result, this.parseRelational());\n      } else if (this.optional('!=')) {\n        result = new Binary('!=', result, this.parseRelational());\n      } else if (this.optional('===')) {\n        result = new Binary('===', result, this.parseRelational());\n      } else if (this.optional('!==')) {\n        result = new Binary('!==', result, this.parseRelational());\n      } else {\n        return result;\n      }\n    }\n  };\n\n  ParserImplementation.prototype.parseRelational = function parseRelational() {\n    var result = this.parseAdditive();\n\n    while (true) {\n      if (this.optional('<')) {\n        result = new Binary('<', result, this.parseAdditive());\n      } else if (this.optional('>')) {\n        result = new Binary('>', result, this.parseAdditive());\n      } else if (this.optional('<=')) {\n        result = new Binary('<=', result, this.parseAdditive());\n      } else if (this.optional('>=')) {\n        result = new Binary('>=', result, this.parseAdditive());\n      } else {\n        return result;\n      }\n    }\n  };\n\n  ParserImplementation.prototype.parseAdditive = function parseAdditive() {\n    var result = this.parseMultiplicative();\n\n    while (true) {\n      if (this.optional('+')) {\n        result = new Binary('+', result, this.parseMultiplicative());\n      } else if (this.optional('-')) {\n        result = new Binary('-', result, this.parseMultiplicative());\n      } else {\n        return result;\n      }\n    }\n  };\n\n  ParserImplementation.prototype.parseMultiplicative = function parseMultiplicative() {\n    var result = this.parsePrefix();\n\n    while (true) {\n      if (this.optional('*')) {\n        result = new Binary('*', result, this.parsePrefix());\n      } else if (this.optional('%')) {\n        result = new Binary('%', result, this.parsePrefix());\n      } else if (this.optional('/')) {\n        result = new Binary('/', result, this.parsePrefix());\n      } else {\n        return result;\n      }\n    }\n  };\n\n  ParserImplementation.prototype.parsePrefix = function parsePrefix() {\n    if (this.optional('+')) {\n      return this.parsePrefix();\n    } else if (this.optional('-')) {\n      return new Binary('-', new LiteralPrimitive(0), this.parsePrefix());\n    } else if (this.optional('!')) {\n      return new PrefixNot('!', this.parsePrefix());\n    }\n\n    return this.parseAccessOrCallMember();\n  };\n\n  ParserImplementation.prototype.parseAccessOrCallMember = function parseAccessOrCallMember() {\n    var result = this.parsePrimary();\n\n    while (true) {\n      if (this.optional('.')) {\n        var name = this.peek.text;\n\n        this.advance();\n\n        if (this.optional('(')) {\n          var args = this.parseExpressionList(')');\n          this.expect(')');\n          if (result instanceof AccessThis) {\n            result = new CallScope(name, args, result.ancestor);\n          } else {\n            result = new CallMember(result, name, args);\n          }\n        } else {\n          if (result instanceof AccessThis) {\n            result = new AccessScope(name, result.ancestor);\n          } else {\n            result = new AccessMember(result, name);\n          }\n        }\n      } else if (this.optional('[')) {\n        var key = this.parseExpression();\n        this.expect(']');\n        result = new AccessKeyed(result, key);\n      } else if (this.optional('(')) {\n        var _args = this.parseExpressionList(')');\n        this.expect(')');\n        result = new CallFunction(result, _args);\n      } else {\n        return result;\n      }\n    }\n  };\n\n  ParserImplementation.prototype.parsePrimary = function parsePrimary() {\n    if (this.optional('(')) {\n      var result = this.parseExpression();\n      this.expect(')');\n      return result;\n    } else if (this.optional('null')) {\n      return new LiteralPrimitive(null);\n    } else if (this.optional('undefined')) {\n      return new LiteralPrimitive(undefined);\n    } else if (this.optional('true')) {\n      return new LiteralPrimitive(true);\n    } else if (this.optional('false')) {\n      return new LiteralPrimitive(false);\n    } else if (this.optional('[')) {\n      var _elements = this.parseExpressionList(']');\n      this.expect(']');\n      return new LiteralArray(_elements);\n    } else if (this.peek.text === '{') {\n      return this.parseObject();\n    } else if (this.peek.key !== null && this.peek.key !== undefined) {\n      return this.parseAccessOrCallScope();\n    } else if (this.peek.value !== null && this.peek.value !== undefined) {\n      var value = this.peek.value;\n      this.advance();\n      return value instanceof String || typeof value === 'string' ? new LiteralString(value) : new LiteralPrimitive(value);\n    } else if (this.index >= this.tokens.length) {\n      throw new Error('Unexpected end of expression: ' + this.input);\n    } else {\n      this.error('Unexpected token ' + this.peek.text);\n    }\n  };\n\n  ParserImplementation.prototype.parseAccessOrCallScope = function parseAccessOrCallScope() {\n    var name = this.peek.key;\n\n    this.advance();\n\n    if (name === '$this') {\n      return new AccessThis(0);\n    }\n\n    var ancestor = 0;\n    while (name === '$parent') {\n      ancestor++;\n      if (this.optional('.')) {\n        name = this.peek.key;\n        this.advance();\n      } else if (this.peek === EOF || this.peek.text === '(' || this.peek.text === ')' || this.peek.text === '[' || this.peek.text === '}' || this.peek.text === ',' || this.peek.text === '|' || this.peek.text === '&') {\n        return new AccessThis(ancestor);\n      } else {\n        this.error('Unexpected token ' + this.peek.text);\n      }\n    }\n\n    if (this.optional('(')) {\n      var args = this.parseExpressionList(')');\n      this.expect(')');\n      return new CallScope(name, args, ancestor);\n    }\n\n    return new AccessScope(name, ancestor);\n  };\n\n  ParserImplementation.prototype.parseObject = function parseObject() {\n    var keys = [];\n    var values = [];\n\n    this.expect('{');\n\n    if (this.peek.text !== '}') {\n      do {\n        var peek = this.peek;\n        var value = peek.value;\n        keys.push(typeof value === 'string' ? value : peek.text);\n\n        this.advance();\n        if (peek.key && (this.peek.text === ',' || this.peek.text === '}')) {\n          --this.index;\n          values.push(this.parseAccessOrCallScope());\n        } else {\n          this.expect(':');\n          values.push(this.parseExpression());\n        }\n      } while (this.optional(','));\n    }\n\n    this.expect('}');\n\n    return new LiteralObject(keys, values);\n  };\n\n  ParserImplementation.prototype.parseExpressionList = function parseExpressionList(terminator) {\n    var result = [];\n\n    if (this.peek.text !== terminator) {\n      do {\n        result.push(this.parseExpression());\n      } while (this.optional(','));\n    }\n\n    return result;\n  };\n\n  ParserImplementation.prototype.optional = function optional(text) {\n    if (this.peek.text === text) {\n      this.advance();\n      return true;\n    }\n\n    return false;\n  };\n\n  ParserImplementation.prototype.expect = function expect(text) {\n    if (this.peek.text === text) {\n      this.advance();\n    } else {\n      this.error('Missing expected ' + text);\n    }\n  };\n\n  ParserImplementation.prototype.advance = function advance() {\n    this.index++;\n  };\n\n  ParserImplementation.prototype.error = function error(message) {\n    var location = this.index < this.tokens.length ? 'at column ' + (this.tokens[this.index].index + 1) + ' in' : 'at the end of the expression';\n\n    throw new Error('Parser Error: ' + message + ' ' + location + ' [' + this.input + ']');\n  };\n\n  _createClass(ParserImplementation, [{\n    key: 'peek',\n    get: function get() {\n      return this.index < this.tokens.length ? this.tokens[this.index] : EOF;\n    }\n  }]);\n\n  return ParserImplementation;\n}();\n\nvar mapProto = Map.prototype;\n\nfunction _getMapObserver(taskQueue, map) {\n  return ModifyMapObserver.for(taskQueue, map);\n}\n\nvar ModifyMapObserver = function (_ModifyCollectionObse2) {\n  _inherits(ModifyMapObserver, _ModifyCollectionObse2);\n\n  function ModifyMapObserver(taskQueue, map) {\n    \n\n    return _possibleConstructorReturn(this, _ModifyCollectionObse2.call(this, taskQueue, map));\n  }\n\n  ModifyMapObserver.for = function _for(taskQueue, map) {\n    if (!('__map_observer__' in map)) {\n      Reflect.defineProperty(map, '__map_observer__', {\n        value: ModifyMapObserver.create(taskQueue, map),\n        enumerable: false, configurable: false\n      });\n    }\n    return map.__map_observer__;\n  };\n\n  ModifyMapObserver.create = function create(taskQueue, map) {\n    var observer = new ModifyMapObserver(taskQueue, map);\n\n    var proto = mapProto;\n    if (proto.set !== map.set || proto.delete !== map.delete || proto.clear !== map.clear) {\n      proto = {\n        set: map.set,\n        delete: map.delete,\n        clear: map.clear\n      };\n    }\n\n    map.set = function () {\n      var hasValue = map.has(arguments[0]);\n      var type = hasValue ? 'update' : 'add';\n      var oldValue = map.get(arguments[0]);\n      var methodCallResult = proto.set.apply(map, arguments);\n      if (!hasValue || oldValue !== map.get(arguments[0])) {\n        observer.addChangeRecord({\n          type: type,\n          object: map,\n          key: arguments[0],\n          oldValue: oldValue\n        });\n      }\n      return methodCallResult;\n    };\n\n    map.delete = function () {\n      var hasValue = map.has(arguments[0]);\n      var oldValue = map.get(arguments[0]);\n      var methodCallResult = proto.delete.apply(map, arguments);\n      if (hasValue) {\n        observer.addChangeRecord({\n          type: 'delete',\n          object: map,\n          key: arguments[0],\n          oldValue: oldValue\n        });\n      }\n      return methodCallResult;\n    };\n\n    map.clear = function () {\n      var methodCallResult = proto.clear.apply(map, arguments);\n      observer.addChangeRecord({\n        type: 'clear',\n        object: map\n      });\n      return methodCallResult;\n    };\n\n    return observer;\n  };\n\n  return ModifyMapObserver;\n}(ModifyCollectionObserver);\n\nfunction findOriginalEventTarget(event) {\n  return event.path && event.path[0] || event.deepPath && event.deepPath[0] || event.target;\n}\n\nfunction stopPropagation() {\n  this.standardStopPropagation();\n  this.propagationStopped = true;\n}\n\nfunction handleCapturedEvent(event) {\n  event.propagationStopped = false;\n  var target = findOriginalEventTarget(event);\n\n  var orderedCallbacks = [];\n\n  while (target) {\n    if (target.capturedCallbacks) {\n      var callback = target.capturedCallbacks[event.type];\n      if (callback) {\n        if (event.stopPropagation !== stopPropagation) {\n          event.standardStopPropagation = event.stopPropagation;\n          event.stopPropagation = stopPropagation;\n        }\n        orderedCallbacks.push(callback);\n      }\n    }\n    target = target.parentNode;\n  }\n  for (var _i22 = orderedCallbacks.length - 1; _i22 >= 0 && !event.propagationStopped; _i22--) {\n    var orderedCallback = orderedCallbacks[_i22];\n    if ('handleEvent' in orderedCallback) {\n      orderedCallback.handleEvent(event);\n    } else {\n      orderedCallback(event);\n    }\n  }\n}\n\nvar CapturedHandlerEntry = function () {\n  function CapturedHandlerEntry(eventName) {\n    \n\n    this.eventName = eventName;\n    this.count = 0;\n  }\n\n  CapturedHandlerEntry.prototype.increment = function increment() {\n    this.count++;\n\n    if (this.count === 1) {\n      DOM.addEventListener(this.eventName, handleCapturedEvent, true);\n    }\n  };\n\n  CapturedHandlerEntry.prototype.decrement = function decrement() {\n    this.count--;\n\n    if (this.count === 0) {\n      DOM.removeEventListener(this.eventName, handleCapturedEvent, true);\n    }\n  };\n\n  return CapturedHandlerEntry;\n}();\n\nfunction handleDelegatedEvent(event) {\n  event.propagationStopped = false;\n  var target = findOriginalEventTarget(event);\n\n  while (target && !event.propagationStopped) {\n    if (target.delegatedCallbacks) {\n      var callback = target.delegatedCallbacks[event.type];\n      if (callback) {\n        if (event.stopPropagation !== stopPropagation) {\n          event.standardStopPropagation = event.stopPropagation;\n          event.stopPropagation = stopPropagation;\n        }\n        if ('handleEvent' in callback) {\n          callback.handleEvent(event);\n        } else {\n          callback(event);\n        }\n      }\n    }\n\n    target = target.parentNode;\n  }\n}\n\nvar DelegateHandlerEntry = function () {\n  function DelegateHandlerEntry(eventName) {\n    \n\n    this.eventName = eventName;\n    this.count = 0;\n  }\n\n  DelegateHandlerEntry.prototype.increment = function increment() {\n    this.count++;\n\n    if (this.count === 1) {\n      DOM.addEventListener(this.eventName, handleDelegatedEvent, false);\n    }\n  };\n\n  DelegateHandlerEntry.prototype.decrement = function decrement() {\n    this.count--;\n\n    if (this.count === 0) {\n      DOM.removeEventListener(this.eventName, handleDelegatedEvent, false);\n    }\n  };\n\n  return DelegateHandlerEntry;\n}();\n\nvar DelegationEntryHandler = function () {\n  function DelegationEntryHandler(entry, lookup, targetEvent) {\n    \n\n    this.entry = entry;\n    this.lookup = lookup;\n    this.targetEvent = targetEvent;\n  }\n\n  DelegationEntryHandler.prototype.dispose = function dispose() {\n    this.entry.decrement();\n    this.lookup[this.targetEvent] = null;\n    this.entry = this.lookup = this.targetEvent = null;\n  };\n\n  return DelegationEntryHandler;\n}();\n\nvar EventHandler = function () {\n  function EventHandler(target, targetEvent, callback) {\n    \n\n    this.target = target;\n    this.targetEvent = targetEvent;\n    this.callback = callback;\n  }\n\n  EventHandler.prototype.dispose = function dispose() {\n    this.target.removeEventListener(this.targetEvent, this.callback);\n    this.target = this.targetEvent = this.callback = null;\n  };\n\n  return EventHandler;\n}();\n\nvar DefaultEventStrategy = function () {\n  function DefaultEventStrategy() {\n    \n\n    this.delegatedHandlers = {};\n    this.capturedHandlers = {};\n  }\n\n  DefaultEventStrategy.prototype.subscribe = function subscribe(target, targetEvent, callback, strategy, disposable) {\n    var delegatedHandlers = void 0;\n    var capturedHandlers = void 0;\n    var handlerEntry = void 0;\n\n    if (strategy === delegationStrategy.bubbling) {\n      delegatedHandlers = this.delegatedHandlers;\n      handlerEntry = delegatedHandlers[targetEvent] || (delegatedHandlers[targetEvent] = new DelegateHandlerEntry(targetEvent));\n      var delegatedCallbacks = target.delegatedCallbacks || (target.delegatedCallbacks = {});\n\n      handlerEntry.increment();\n      delegatedCallbacks[targetEvent] = callback;\n\n      if (disposable === true) {\n        return new DelegationEntryHandler(handlerEntry, delegatedCallbacks, targetEvent);\n      }\n\n      return function () {\n        handlerEntry.decrement();\n        delegatedCallbacks[targetEvent] = null;\n      };\n    }\n    if (strategy === delegationStrategy.capturing) {\n      capturedHandlers = this.capturedHandlers;\n      handlerEntry = capturedHandlers[targetEvent] || (capturedHandlers[targetEvent] = new CapturedHandlerEntry(targetEvent));\n      var capturedCallbacks = target.capturedCallbacks || (target.capturedCallbacks = {});\n\n      handlerEntry.increment();\n      capturedCallbacks[targetEvent] = callback;\n\n      if (disposable === true) {\n        return new DelegationEntryHandler(handlerEntry, capturedCallbacks, targetEvent);\n      }\n\n      return function () {\n        handlerEntry.decrement();\n        capturedCallbacks[targetEvent] = null;\n      };\n    }\n\n    target.addEventListener(targetEvent, callback);\n\n    if (disposable === true) {\n      return new EventHandler(target, targetEvent, callback);\n    }\n\n    return function () {\n      target.removeEventListener(targetEvent, callback);\n    };\n  };\n\n  return DefaultEventStrategy;\n}();\n\nexport var delegationStrategy = {\n  none: 0,\n  capturing: 1,\n  bubbling: 2\n};\n\nexport var EventManager = function () {\n  function EventManager() {\n    \n\n    this.elementHandlerLookup = {};\n    this.eventStrategyLookup = {};\n\n    this.registerElementConfig({\n      tagName: 'input',\n      properties: {\n        value: ['change', 'input'],\n        checked: ['change', 'input'],\n        files: ['change', 'input']\n      }\n    });\n\n    this.registerElementConfig({\n      tagName: 'textarea',\n      properties: {\n        value: ['change', 'input']\n      }\n    });\n\n    this.registerElementConfig({\n      tagName: 'select',\n      properties: {\n        value: ['change']\n      }\n    });\n\n    this.registerElementConfig({\n      tagName: 'content editable',\n      properties: {\n        value: ['change', 'input', 'blur', 'keyup', 'paste']\n      }\n    });\n\n    this.registerElementConfig({\n      tagName: 'scrollable element',\n      properties: {\n        scrollTop: ['scroll'],\n        scrollLeft: ['scroll']\n      }\n    });\n\n    this.defaultEventStrategy = new DefaultEventStrategy();\n  }\n\n  EventManager.prototype.registerElementConfig = function registerElementConfig(config) {\n    var tagName = config.tagName.toLowerCase();\n    var properties = config.properties;\n    var propertyName = void 0;\n\n    var lookup = this.elementHandlerLookup[tagName] = {};\n\n    for (propertyName in properties) {\n      if (properties.hasOwnProperty(propertyName)) {\n        lookup[propertyName] = properties[propertyName];\n      }\n    }\n  };\n\n  EventManager.prototype.registerEventStrategy = function registerEventStrategy(eventName, strategy) {\n    this.eventStrategyLookup[eventName] = strategy;\n  };\n\n  EventManager.prototype.getElementHandler = function getElementHandler(target, propertyName) {\n    var tagName = void 0;\n    var lookup = this.elementHandlerLookup;\n\n    if (target.tagName) {\n      tagName = target.tagName.toLowerCase();\n\n      if (lookup[tagName] && lookup[tagName][propertyName]) {\n        return new EventSubscriber(lookup[tagName][propertyName]);\n      }\n\n      if (propertyName === 'textContent' || propertyName === 'innerHTML') {\n        return new EventSubscriber(lookup['content editable'].value);\n      }\n\n      if (propertyName === 'scrollTop' || propertyName === 'scrollLeft') {\n        return new EventSubscriber(lookup['scrollable element'][propertyName]);\n      }\n    }\n\n    return null;\n  };\n\n  EventManager.prototype.addEventListener = function addEventListener(target, targetEvent, callbackOrListener, delegate, disposable) {\n    return (this.eventStrategyLookup[targetEvent] || this.defaultEventStrategy).subscribe(target, targetEvent, callbackOrListener, delegate, disposable);\n  };\n\n  return EventManager;\n}();\n\nexport var EventSubscriber = function () {\n  function EventSubscriber(events) {\n    \n\n    this.events = events;\n    this.element = null;\n    this.handler = null;\n  }\n\n  EventSubscriber.prototype.subscribe = function subscribe(element, callbackOrListener) {\n    this.element = element;\n    this.handler = callbackOrListener;\n\n    var events = this.events;\n    for (var _i23 = 0, ii = events.length; ii > _i23; ++_i23) {\n      element.addEventListener(events[_i23], callbackOrListener);\n    }\n  };\n\n  EventSubscriber.prototype.dispose = function dispose() {\n    if (this.element === null) {\n      return;\n    }\n    var element = this.element;\n    var callbackOrListener = this.handler;\n    var events = this.events;\n    for (var _i24 = 0, ii = events.length; ii > _i24; ++_i24) {\n      element.removeEventListener(events[_i24], callbackOrListener);\n    }\n    this.element = this.handler = null;\n  };\n\n  return EventSubscriber;\n}();\n\nexport var DirtyChecker = function () {\n  function DirtyChecker() {\n    \n\n    this.tracked = [];\n    this.checkDelay = 120;\n  }\n\n  DirtyChecker.prototype.addProperty = function addProperty(property) {\n    var tracked = this.tracked;\n\n    tracked.push(property);\n\n    if (tracked.length === 1) {\n      this.scheduleDirtyCheck();\n    }\n  };\n\n  DirtyChecker.prototype.removeProperty = function removeProperty(property) {\n    var tracked = this.tracked;\n    tracked.splice(tracked.indexOf(property), 1);\n  };\n\n  DirtyChecker.prototype.scheduleDirtyCheck = function scheduleDirtyCheck() {\n    var _this22 = this;\n\n    setTimeout(function () {\n      return _this22.check();\n    }, this.checkDelay);\n  };\n\n  DirtyChecker.prototype.check = function check() {\n    var tracked = this.tracked;\n    var i = tracked.length;\n\n    while (i--) {\n      var current = tracked[i];\n\n      if (current.isDirty()) {\n        current.call();\n      }\n    }\n\n    if (tracked.length) {\n      this.scheduleDirtyCheck();\n    }\n  };\n\n  return DirtyChecker;\n}();\n\nexport var DirtyCheckProperty = (_dec5 = subscriberCollection(), _dec5(_class5 = function () {\n  function DirtyCheckProperty(dirtyChecker, obj, propertyName) {\n    \n\n    this.dirtyChecker = dirtyChecker;\n    this.obj = obj;\n    this.propertyName = propertyName;\n  }\n\n  DirtyCheckProperty.prototype.getValue = function getValue() {\n    return this.obj[this.propertyName];\n  };\n\n  DirtyCheckProperty.prototype.setValue = function setValue(newValue) {\n    this.obj[this.propertyName] = newValue;\n  };\n\n  DirtyCheckProperty.prototype.call = function call() {\n    var oldValue = this.oldValue;\n    var newValue = this.getValue();\n\n    this.callSubscribers(newValue, oldValue);\n\n    this.oldValue = newValue;\n  };\n\n  DirtyCheckProperty.prototype.isDirty = function isDirty() {\n    return this.oldValue !== this.obj[this.propertyName];\n  };\n\n  DirtyCheckProperty.prototype.subscribe = function subscribe(context, callable) {\n    if (!this.hasSubscribers()) {\n      this.oldValue = this.getValue();\n      this.dirtyChecker.addProperty(this);\n    }\n    this.addSubscriber(context, callable);\n  };\n\n  DirtyCheckProperty.prototype.unsubscribe = function unsubscribe(context, callable) {\n    if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n      this.dirtyChecker.removeProperty(this);\n    }\n  };\n\n  return DirtyCheckProperty;\n}()) || _class5);\n\nvar logger = LogManager.getLogger('property-observation');\n\nexport var propertyAccessor = {\n  getValue: function getValue(obj, propertyName) {\n    return obj[propertyName];\n  },\n  setValue: function setValue(value, obj, propertyName) {\n    obj[propertyName] = value;\n  }\n};\n\nexport var PrimitiveObserver = function () {\n  function PrimitiveObserver(primitive, propertyName) {\n    \n\n    this.doNotCache = true;\n\n    this.primitive = primitive;\n    this.propertyName = propertyName;\n  }\n\n  PrimitiveObserver.prototype.getValue = function getValue() {\n    return this.primitive[this.propertyName];\n  };\n\n  PrimitiveObserver.prototype.setValue = function setValue() {\n    var type = _typeof(this.primitive);\n    throw new Error('The ' + this.propertyName + ' property of a ' + type + ' (' + this.primitive + ') cannot be assigned.');\n  };\n\n  PrimitiveObserver.prototype.subscribe = function subscribe() {};\n\n  PrimitiveObserver.prototype.unsubscribe = function unsubscribe() {};\n\n  return PrimitiveObserver;\n}();\n\nexport var SetterObserver = (_dec6 = subscriberCollection(), _dec6(_class7 = function () {\n  function SetterObserver(taskQueue, obj, propertyName) {\n    \n\n    this.taskQueue = taskQueue;\n    this.obj = obj;\n    this.propertyName = propertyName;\n    this.queued = false;\n    this.observing = false;\n  }\n\n  SetterObserver.prototype.getValue = function getValue() {\n    return this.obj[this.propertyName];\n  };\n\n  SetterObserver.prototype.setValue = function setValue(newValue) {\n    this.obj[this.propertyName] = newValue;\n  };\n\n  SetterObserver.prototype.getterValue = function getterValue() {\n    return this.currentValue;\n  };\n\n  SetterObserver.prototype.setterValue = function setterValue(newValue) {\n    var oldValue = this.currentValue;\n\n    if (oldValue !== newValue) {\n      if (!this.queued) {\n        this.oldValue = oldValue;\n        this.queued = true;\n        this.taskQueue.queueMicroTask(this);\n      }\n\n      this.currentValue = newValue;\n    }\n  };\n\n  SetterObserver.prototype.call = function call() {\n    var oldValue = this.oldValue;\n    var newValue = this.currentValue;\n\n    this.queued = false;\n\n    this.callSubscribers(newValue, oldValue);\n  };\n\n  SetterObserver.prototype.subscribe = function subscribe(context, callable) {\n    if (!this.observing) {\n      this.convertProperty();\n    }\n    this.addSubscriber(context, callable);\n  };\n\n  SetterObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    this.removeSubscriber(context, callable);\n  };\n\n  SetterObserver.prototype.convertProperty = function convertProperty() {\n    this.observing = true;\n    this.currentValue = this.obj[this.propertyName];\n    this.setValue = this.setterValue;\n    this.getValue = this.getterValue;\n\n    if (!Reflect.defineProperty(this.obj, this.propertyName, {\n      configurable: true,\n      enumerable: this.propertyName in this.obj ? this.obj.propertyIsEnumerable(this.propertyName) : true,\n      get: this.getValue.bind(this),\n      set: this.setValue.bind(this)\n    })) {\n      logger.warn('Cannot observe property \\'' + this.propertyName + '\\' of object', this.obj);\n    }\n  };\n\n  return SetterObserver;\n}()) || _class7);\n\nexport var XLinkAttributeObserver = function () {\n  function XLinkAttributeObserver(element, propertyName, attributeName) {\n    \n\n    this.element = element;\n    this.propertyName = propertyName;\n    this.attributeName = attributeName;\n  }\n\n  XLinkAttributeObserver.prototype.getValue = function getValue() {\n    return this.element.getAttributeNS('http://www.w3.org/1999/xlink', this.attributeName);\n  };\n\n  XLinkAttributeObserver.prototype.setValue = function setValue(newValue) {\n    return this.element.setAttributeNS('http://www.w3.org/1999/xlink', this.attributeName, newValue);\n  };\n\n  XLinkAttributeObserver.prototype.subscribe = function subscribe() {\n    throw new Error('Observation of a \"' + this.element.nodeName + '\" element\\'s \"' + this.propertyName + '\" property is not supported.');\n  };\n\n  return XLinkAttributeObserver;\n}();\n\nexport var dataAttributeAccessor = {\n  getValue: function getValue(obj, propertyName) {\n    return obj.getAttribute(propertyName);\n  },\n  setValue: function setValue(value, obj, propertyName) {\n    if (value === null || value === undefined) {\n      obj.removeAttribute(propertyName);\n    } else {\n      obj.setAttribute(propertyName, value);\n    }\n  }\n};\n\nexport var DataAttributeObserver = function () {\n  function DataAttributeObserver(element, propertyName) {\n    \n\n    this.element = element;\n    this.propertyName = propertyName;\n  }\n\n  DataAttributeObserver.prototype.getValue = function getValue() {\n    return this.element.getAttribute(this.propertyName);\n  };\n\n  DataAttributeObserver.prototype.setValue = function setValue(newValue) {\n    if (newValue === null || newValue === undefined) {\n      return this.element.removeAttribute(this.propertyName);\n    }\n    return this.element.setAttribute(this.propertyName, newValue);\n  };\n\n  DataAttributeObserver.prototype.subscribe = function subscribe() {\n    throw new Error('Observation of a \"' + this.element.nodeName + '\" element\\'s \"' + this.propertyName + '\" property is not supported.');\n  };\n\n  return DataAttributeObserver;\n}();\n\nexport var StyleObserver = function () {\n  function StyleObserver(element, propertyName) {\n    \n\n    this.element = element;\n    this.propertyName = propertyName;\n\n    this.styles = null;\n    this.version = 0;\n  }\n\n  StyleObserver.prototype.getValue = function getValue() {\n    return this.element.style.cssText;\n  };\n\n  StyleObserver.prototype._setProperty = function _setProperty(style, value) {\n    var priority = '';\n\n    if (value !== null && value !== undefined && typeof value.indexOf === 'function' && value.indexOf('!important') !== -1) {\n      priority = 'important';\n      value = value.replace('!important', '');\n    }\n    this.element.style.setProperty(style, value, priority);\n  };\n\n  StyleObserver.prototype.setValue = function setValue(newValue) {\n    var styles = this.styles || {};\n    var style = void 0;\n    var version = this.version;\n\n    if (newValue !== null && newValue !== undefined) {\n      if (newValue instanceof Object) {\n        var value = void 0;\n        for (style in newValue) {\n          if (newValue.hasOwnProperty(style)) {\n            value = newValue[style];\n            style = style.replace(/([A-Z])/g, function (m) {\n              return '-' + m.toLowerCase();\n            });\n            styles[style] = version;\n            this._setProperty(style, value);\n          }\n        }\n      } else if (newValue.length) {\n        var rx = /\\s*([\\w\\-]+)\\s*:\\s*((?:(?:[\\w\\-]+\\(\\s*(?:\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|[\\w\\-]+\\(\\s*(?:^\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|[^\\)]*)\\),?|[^\\)]*)\\),?|\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|[^;]*),?\\s*)+);?/g;\n        var pair = void 0;\n        while ((pair = rx.exec(newValue)) !== null) {\n          style = pair[1];\n          if (!style) {\n            continue;\n          }\n\n          styles[style] = version;\n          this._setProperty(style, pair[2]);\n        }\n      }\n    }\n\n    this.styles = styles;\n    this.version += 1;\n\n    if (version === 0) {\n      return;\n    }\n\n    version -= 1;\n    for (style in styles) {\n      if (!styles.hasOwnProperty(style) || styles[style] !== version) {\n        continue;\n      }\n\n      this.element.style.removeProperty(style);\n    }\n  };\n\n  StyleObserver.prototype.subscribe = function subscribe() {\n    throw new Error('Observation of a \"' + this.element.nodeName + '\" element\\'s \"' + this.propertyName + '\" property is not supported.');\n  };\n\n  return StyleObserver;\n}();\n\nexport var ValueAttributeObserver = (_dec7 = subscriberCollection(), _dec7(_class8 = function () {\n  function ValueAttributeObserver(element, propertyName, handler) {\n    \n\n    this.element = element;\n    this.propertyName = propertyName;\n    this.handler = handler;\n    if (propertyName === 'files') {\n      this.setValue = function () {};\n    }\n  }\n\n  ValueAttributeObserver.prototype.getValue = function getValue() {\n    return this.element[this.propertyName];\n  };\n\n  ValueAttributeObserver.prototype.setValue = function setValue(newValue) {\n    newValue = newValue === undefined || newValue === null ? '' : newValue;\n    if (this.element[this.propertyName] !== newValue) {\n      this.element[this.propertyName] = newValue;\n      this.notify();\n    }\n  };\n\n  ValueAttributeObserver.prototype.notify = function notify() {\n    var oldValue = this.oldValue;\n    var newValue = this.getValue();\n\n    this.callSubscribers(newValue, oldValue);\n\n    this.oldValue = newValue;\n  };\n\n  ValueAttributeObserver.prototype.handleEvent = function handleEvent() {\n    this.notify();\n  };\n\n  ValueAttributeObserver.prototype.subscribe = function subscribe(context, callable) {\n    if (!this.hasSubscribers()) {\n      this.oldValue = this.getValue();\n      this.handler.subscribe(this.element, this);\n    }\n\n    this.addSubscriber(context, callable);\n  };\n\n  ValueAttributeObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n      this.handler.dispose();\n    }\n  };\n\n  return ValueAttributeObserver;\n}()) || _class8);\n\nvar checkedArrayContext = 'CheckedObserver:array';\nvar checkedValueContext = 'CheckedObserver:value';\n\nexport var CheckedObserver = (_dec8 = subscriberCollection(), _dec8(_class9 = function () {\n  function CheckedObserver(element, handler, observerLocator) {\n    \n\n    this.element = element;\n    this.handler = handler;\n    this.observerLocator = observerLocator;\n  }\n\n  CheckedObserver.prototype.getValue = function getValue() {\n    return this.value;\n  };\n\n  CheckedObserver.prototype.setValue = function setValue(newValue) {\n    if (this.initialSync && this.value === newValue) {\n      return;\n    }\n\n    if (this.arrayObserver) {\n      this.arrayObserver.unsubscribe(checkedArrayContext, this);\n      this.arrayObserver = null;\n    }\n\n    if (this.element.type === 'checkbox' && Array.isArray(newValue)) {\n      this.arrayObserver = this.observerLocator.getArrayObserver(newValue);\n      this.arrayObserver.subscribe(checkedArrayContext, this);\n    }\n\n    this.oldValue = this.value;\n    this.value = newValue;\n    this.synchronizeElement();\n    this.notify();\n\n    if (!this.initialSync) {\n      this.initialSync = true;\n      this.observerLocator.taskQueue.queueMicroTask(this);\n    }\n  };\n\n  CheckedObserver.prototype.call = function call(context, splices) {\n    this.synchronizeElement();\n\n    if (!this.valueObserver) {\n      this.valueObserver = this.element.__observers__.model || this.element.__observers__.value;\n      if (this.valueObserver) {\n        this.valueObserver.subscribe(checkedValueContext, this);\n      }\n    }\n  };\n\n  CheckedObserver.prototype.synchronizeElement = function synchronizeElement() {\n    var value = this.value;\n    var element = this.element;\n    var elementValue = element.hasOwnProperty('model') ? element.model : element.value;\n    var isRadio = element.type === 'radio';\n    var matcher = element.matcher || function (a, b) {\n      return a === b;\n    };\n\n    element.checked = isRadio && !!matcher(value, elementValue) || !isRadio && value === true || !isRadio && Array.isArray(value) && value.findIndex(function (item) {\n      return !!matcher(item, elementValue);\n    }) !== -1;\n  };\n\n  CheckedObserver.prototype.synchronizeValue = function synchronizeValue() {\n    var value = this.value;\n    var element = this.element;\n    var elementValue = element.hasOwnProperty('model') ? element.model : element.value;\n    var index = void 0;\n    var matcher = element.matcher || function (a, b) {\n      return a === b;\n    };\n\n    if (element.type === 'checkbox') {\n      if (Array.isArray(value)) {\n        index = value.findIndex(function (item) {\n          return !!matcher(item, elementValue);\n        });\n        if (element.checked && index === -1) {\n          value.push(elementValue);\n        } else if (!element.checked && index !== -1) {\n          value.splice(index, 1);\n        }\n\n        return;\n      }\n\n      value = element.checked;\n    } else if (element.checked) {\n      value = elementValue;\n    } else {\n      return;\n    }\n\n    this.oldValue = this.value;\n    this.value = value;\n    this.notify();\n  };\n\n  CheckedObserver.prototype.notify = function notify() {\n    var oldValue = this.oldValue;\n    var newValue = this.value;\n\n    if (newValue === oldValue) {\n      return;\n    }\n\n    this.callSubscribers(newValue, oldValue);\n  };\n\n  CheckedObserver.prototype.handleEvent = function handleEvent() {\n    this.synchronizeValue();\n  };\n\n  CheckedObserver.prototype.subscribe = function subscribe(context, callable) {\n    if (!this.hasSubscribers()) {\n      this.handler.subscribe(this.element, this);\n    }\n    this.addSubscriber(context, callable);\n  };\n\n  CheckedObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n      this.handler.dispose();\n    }\n  };\n\n  CheckedObserver.prototype.unbind = function unbind() {\n    if (this.arrayObserver) {\n      this.arrayObserver.unsubscribe(checkedArrayContext, this);\n      this.arrayObserver = null;\n    }\n    if (this.valueObserver) {\n      this.valueObserver.unsubscribe(checkedValueContext, this);\n    }\n  };\n\n  return CheckedObserver;\n}()) || _class9);\n\nvar selectArrayContext = 'SelectValueObserver:array';\n\nexport var SelectValueObserver = (_dec9 = subscriberCollection(), _dec9(_class10 = function () {\n  function SelectValueObserver(element, handler, observerLocator) {\n    \n\n    this.element = element;\n    this.handler = handler;\n    this.observerLocator = observerLocator;\n  }\n\n  SelectValueObserver.prototype.getValue = function getValue() {\n    return this.value;\n  };\n\n  SelectValueObserver.prototype.setValue = function setValue(newValue) {\n    if (newValue !== null && newValue !== undefined && this.element.multiple && !Array.isArray(newValue)) {\n      throw new Error('Only null or Array instances can be bound to a multi-select.');\n    }\n    if (this.value === newValue) {\n      return;\n    }\n\n    if (this.arrayObserver) {\n      this.arrayObserver.unsubscribe(selectArrayContext, this);\n      this.arrayObserver = null;\n    }\n\n    if (Array.isArray(newValue)) {\n      this.arrayObserver = this.observerLocator.getArrayObserver(newValue);\n      this.arrayObserver.subscribe(selectArrayContext, this);\n    }\n\n    this.oldValue = this.value;\n    this.value = newValue;\n    this.synchronizeOptions();\n    this.notify();\n\n    if (!this.initialSync) {\n      this.initialSync = true;\n      this.observerLocator.taskQueue.queueMicroTask(this);\n    }\n  };\n\n  SelectValueObserver.prototype.call = function call(context, splices) {\n    this.synchronizeOptions();\n  };\n\n  SelectValueObserver.prototype.synchronizeOptions = function synchronizeOptions() {\n    var value = this.value;\n    var isArray = void 0;\n\n    if (Array.isArray(value)) {\n      isArray = true;\n    }\n\n    var options = this.element.options;\n    var i = options.length;\n    var matcher = this.element.matcher || function (a, b) {\n      return a === b;\n    };\n\n    var _loop = function _loop() {\n      var option = options.item(i);\n      var optionValue = option.hasOwnProperty('model') ? option.model : option.value;\n      if (isArray) {\n        option.selected = value.findIndex(function (item) {\n          return !!matcher(optionValue, item);\n        }) !== -1;\n        return 'continue';\n      }\n      option.selected = !!matcher(optionValue, value);\n    };\n\n    while (i--) {\n      var _ret = _loop();\n\n      if (_ret === 'continue') continue;\n    }\n  };\n\n  SelectValueObserver.prototype.synchronizeValue = function synchronizeValue() {\n    var _this23 = this;\n\n    var options = this.element.options;\n    var count = 0;\n    var value = [];\n\n    for (var _i25 = 0, ii = options.length; _i25 < ii; _i25++) {\n      var _option = options.item(_i25);\n      if (!_option.selected) {\n        continue;\n      }\n      value.push(_option.hasOwnProperty('model') ? _option.model : _option.value);\n      count++;\n    }\n\n    if (this.element.multiple) {\n      if (Array.isArray(this.value)) {\n        var _ret2 = function () {\n          var matcher = _this23.element.matcher || function (a, b) {\n            return a === b;\n          };\n\n          var i = 0;\n\n          var _loop2 = function _loop2() {\n            var a = _this23.value[i];\n            if (value.findIndex(function (b) {\n              return matcher(a, b);\n            }) === -1) {\n              _this23.value.splice(i, 1);\n            } else {\n              i++;\n            }\n          };\n\n          while (i < _this23.value.length) {\n            _loop2();\n          }\n\n          i = 0;\n\n          var _loop3 = function _loop3() {\n            var a = value[i];\n            if (_this23.value.findIndex(function (b) {\n              return matcher(a, b);\n            }) === -1) {\n              _this23.value.push(a);\n            }\n            i++;\n          };\n\n          while (i < value.length) {\n            _loop3();\n          }\n          return {\n            v: void 0\n          };\n        }();\n\n        if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === \"object\") return _ret2.v;\n      }\n    } else {\n      if (count === 0) {\n        value = null;\n      } else {\n        value = value[0];\n      }\n    }\n\n    if (value !== this.value) {\n      this.oldValue = this.value;\n      this.value = value;\n      this.notify();\n    }\n  };\n\n  SelectValueObserver.prototype.notify = function notify() {\n    var oldValue = this.oldValue;\n    var newValue = this.value;\n\n    this.callSubscribers(newValue, oldValue);\n  };\n\n  SelectValueObserver.prototype.handleEvent = function handleEvent() {\n    this.synchronizeValue();\n  };\n\n  SelectValueObserver.prototype.subscribe = function subscribe(context, callable) {\n    if (!this.hasSubscribers()) {\n      this.handler.subscribe(this.element, this);\n    }\n    this.addSubscriber(context, callable);\n  };\n\n  SelectValueObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n      this.handler.dispose();\n    }\n  };\n\n  SelectValueObserver.prototype.bind = function bind() {\n    var _this24 = this;\n\n    this.domObserver = DOM.createMutationObserver(function () {\n      _this24.synchronizeOptions();\n      _this24.synchronizeValue();\n    });\n    this.domObserver.observe(this.element, { childList: true, subtree: true });\n  };\n\n  SelectValueObserver.prototype.unbind = function unbind() {\n    this.domObserver.disconnect();\n    this.domObserver = null;\n\n    if (this.arrayObserver) {\n      this.arrayObserver.unsubscribe(selectArrayContext, this);\n      this.arrayObserver = null;\n    }\n  };\n\n  return SelectValueObserver;\n}()) || _class10);\n\nexport var ClassObserver = function () {\n  function ClassObserver(element) {\n    \n\n    this.element = element;\n    this.doNotCache = true;\n    this.value = '';\n    this.version = 0;\n  }\n\n  ClassObserver.prototype.getValue = function getValue() {\n    return this.value;\n  };\n\n  ClassObserver.prototype.setValue = function setValue(newValue) {\n    var nameIndex = this.nameIndex || {};\n    var version = this.version;\n    var names = void 0;\n    var name = void 0;\n\n    if (newValue !== null && newValue !== undefined && newValue.length) {\n      names = newValue.split(/\\s+/);\n      for (var _i26 = 0, length = names.length; _i26 < length; _i26++) {\n        name = names[_i26];\n        if (name === '') {\n          continue;\n        }\n        nameIndex[name] = version;\n        this.element.classList.add(name);\n      }\n    }\n\n    this.value = newValue;\n    this.nameIndex = nameIndex;\n    this.version += 1;\n\n    if (version === 0) {\n      return;\n    }\n\n    version -= 1;\n    for (name in nameIndex) {\n      if (!nameIndex.hasOwnProperty(name) || nameIndex[name] !== version) {\n        continue;\n      }\n      this.element.classList.remove(name);\n    }\n  };\n\n  ClassObserver.prototype.subscribe = function subscribe() {\n    throw new Error('Observation of a \"' + this.element.nodeName + '\" element\\'s \"class\" property is not supported.');\n  };\n\n  return ClassObserver;\n}();\n\nexport function hasDeclaredDependencies(descriptor) {\n  return !!(descriptor && descriptor.get && descriptor.get.dependencies);\n}\n\nexport function declarePropertyDependencies(ctor, propertyName, dependencies) {\n  var descriptor = Object.getOwnPropertyDescriptor(ctor.prototype, propertyName);\n  descriptor.get.dependencies = dependencies;\n}\n\nexport function computedFrom() {\n  for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) {\n    rest[_key] = arguments[_key];\n  }\n\n  return function (target, key, descriptor) {\n    descriptor.get.dependencies = rest;\n    return descriptor;\n  };\n}\n\nexport var ComputedExpression = function (_Expression19) {\n  _inherits(ComputedExpression, _Expression19);\n\n  function ComputedExpression(name, dependencies) {\n    \n\n    var _this25 = _possibleConstructorReturn(this, _Expression19.call(this));\n\n    _this25.name = name;\n    _this25.dependencies = dependencies;\n    _this25.isAssignable = true;\n    return _this25;\n  }\n\n  ComputedExpression.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return scope.bindingContext[this.name];\n  };\n\n  ComputedExpression.prototype.assign = function assign(scope, value) {\n    scope.bindingContext[this.name] = value;\n  };\n\n  ComputedExpression.prototype.accept = function accept(visitor) {\n    throw new Error('not implemented');\n  };\n\n  ComputedExpression.prototype.connect = function connect(binding, scope) {\n    var dependencies = this.dependencies;\n    var i = dependencies.length;\n    while (i--) {\n      dependencies[i].connect(binding, scope);\n    }\n  };\n\n  return ComputedExpression;\n}(Expression);\n\nexport function createComputedObserver(obj, propertyName, descriptor, observerLocator) {\n  var dependencies = descriptor.get.dependencies;\n  if (!(dependencies instanceof ComputedExpression)) {\n    var _i27 = dependencies.length;\n    while (_i27--) {\n      dependencies[_i27] = observerLocator.parser.parse(dependencies[_i27]);\n    }\n    dependencies = descriptor.get.dependencies = new ComputedExpression(propertyName, dependencies);\n  }\n\n  var scope = { bindingContext: obj, overrideContext: createOverrideContext(obj) };\n  return new ExpressionObserver(scope, dependencies, observerLocator);\n}\n\nvar svgElements = void 0;\nvar svgPresentationElements = void 0;\nvar svgPresentationAttributes = void 0;\nvar svgAnalyzer = void 0;\n\nif (typeof FEATURE_NO_SVG === 'undefined') {\n  svgElements = {\n    a: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'target', 'transform', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    altGlyph: ['class', 'dx', 'dy', 'externalResourcesRequired', 'format', 'glyphRef', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    altGlyphDef: ['id', 'xml:base', 'xml:lang', 'xml:space'],\n    altGlyphItem: ['id', 'xml:base', 'xml:lang', 'xml:space'],\n    animate: ['accumulate', 'additive', 'attributeName', 'attributeType', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    animateColor: ['accumulate', 'additive', 'attributeName', 'attributeType', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    animateMotion: ['accumulate', 'additive', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keyPoints', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'origin', 'path', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'rotate', 'systemLanguage', 'to', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    animateTransform: ['accumulate', 'additive', 'attributeName', 'attributeType', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'type', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    circle: ['class', 'cx', 'cy', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'r', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    clipPath: ['class', 'clipPathUnits', 'externalResourcesRequired', 'id', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    'color-profile': ['id', 'local', 'name', 'rendering-intent', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    cursor: ['externalResourcesRequired', 'id', 'requiredExtensions', 'requiredFeatures', 'systemLanguage', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    defs: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    desc: ['class', 'id', 'style', 'xml:base', 'xml:lang', 'xml:space'],\n    ellipse: ['class', 'cx', 'cy', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rx', 'ry', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    feBlend: ['class', 'height', 'id', 'in', 'in2', 'mode', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feColorMatrix: ['class', 'height', 'id', 'in', 'result', 'style', 'type', 'values', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feComponentTransfer: ['class', 'height', 'id', 'in', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feComposite: ['class', 'height', 'id', 'in', 'in2', 'k1', 'k2', 'k3', 'k4', 'operator', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feConvolveMatrix: ['bias', 'class', 'divisor', 'edgeMode', 'height', 'id', 'in', 'kernelMatrix', 'kernelUnitLength', 'order', 'preserveAlpha', 'result', 'style', 'targetX', 'targetY', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feDiffuseLighting: ['class', 'diffuseConstant', 'height', 'id', 'in', 'kernelUnitLength', 'result', 'style', 'surfaceScale', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feDisplacementMap: ['class', 'height', 'id', 'in', 'in2', 'result', 'scale', 'style', 'width', 'x', 'xChannelSelector', 'xml:base', 'xml:lang', 'xml:space', 'y', 'yChannelSelector'],\n    feDistantLight: ['azimuth', 'elevation', 'id', 'xml:base', 'xml:lang', 'xml:space'],\n    feFlood: ['class', 'height', 'id', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feFuncA: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n    feFuncB: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n    feFuncG: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n    feFuncR: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n    feGaussianBlur: ['class', 'height', 'id', 'in', 'result', 'stdDeviation', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feImage: ['class', 'externalResourcesRequired', 'height', 'id', 'preserveAspectRatio', 'result', 'style', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feMerge: ['class', 'height', 'id', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feMergeNode: ['id', 'xml:base', 'xml:lang', 'xml:space'],\n    feMorphology: ['class', 'height', 'id', 'in', 'operator', 'radius', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feOffset: ['class', 'dx', 'dy', 'height', 'id', 'in', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    fePointLight: ['id', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y', 'z'],\n    feSpecularLighting: ['class', 'height', 'id', 'in', 'kernelUnitLength', 'result', 'specularConstant', 'specularExponent', 'style', 'surfaceScale', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feSpotLight: ['id', 'limitingConeAngle', 'pointsAtX', 'pointsAtY', 'pointsAtZ', 'specularExponent', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y', 'z'],\n    feTile: ['class', 'height', 'id', 'in', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feTurbulence: ['baseFrequency', 'class', 'height', 'id', 'numOctaves', 'result', 'seed', 'stitchTiles', 'style', 'type', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    filter: ['class', 'externalResourcesRequired', 'filterRes', 'filterUnits', 'height', 'id', 'primitiveUnits', 'style', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    font: ['class', 'externalResourcesRequired', 'horiz-adv-x', 'horiz-origin-x', 'horiz-origin-y', 'id', 'style', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'xml:base', 'xml:lang', 'xml:space'],\n    'font-face': ['accent-height', 'alphabetic', 'ascent', 'bbox', 'cap-height', 'descent', 'font-family', 'font-size', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'hanging', 'id', 'ideographic', 'mathematical', 'overline-position', 'overline-thickness', 'panose-1', 'slope', 'stemh', 'stemv', 'strikethrough-position', 'strikethrough-thickness', 'underline-position', 'underline-thickness', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'widths', 'x-height', 'xml:base', 'xml:lang', 'xml:space'],\n    'font-face-format': ['id', 'string', 'xml:base', 'xml:lang', 'xml:space'],\n    'font-face-name': ['id', 'name', 'xml:base', 'xml:lang', 'xml:space'],\n    'font-face-src': ['id', 'xml:base', 'xml:lang', 'xml:space'],\n    'font-face-uri': ['id', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    foreignObject: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    g: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    glyph: ['arabic-form', 'class', 'd', 'glyph-name', 'horiz-adv-x', 'id', 'lang', 'orientation', 'style', 'unicode', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'xml:base', 'xml:lang', 'xml:space'],\n    glyphRef: ['class', 'dx', 'dy', 'format', 'glyphRef', 'id', 'style', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    hkern: ['g1', 'g2', 'id', 'k', 'u1', 'u2', 'xml:base', 'xml:lang', 'xml:space'],\n    image: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'preserveAspectRatio', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    line: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'x1', 'x2', 'xml:base', 'xml:lang', 'xml:space', 'y1', 'y2'],\n    linearGradient: ['class', 'externalResourcesRequired', 'gradientTransform', 'gradientUnits', 'id', 'spreadMethod', 'style', 'x1', 'x2', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y1', 'y2'],\n    marker: ['class', 'externalResourcesRequired', 'id', 'markerHeight', 'markerUnits', 'markerWidth', 'orient', 'preserveAspectRatio', 'refX', 'refY', 'style', 'viewBox', 'xml:base', 'xml:lang', 'xml:space'],\n    mask: ['class', 'externalResourcesRequired', 'height', 'id', 'maskContentUnits', 'maskUnits', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    metadata: ['id', 'xml:base', 'xml:lang', 'xml:space'],\n    'missing-glyph': ['class', 'd', 'horiz-adv-x', 'id', 'style', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'xml:base', 'xml:lang', 'xml:space'],\n    mpath: ['externalResourcesRequired', 'id', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    path: ['class', 'd', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'pathLength', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    pattern: ['class', 'externalResourcesRequired', 'height', 'id', 'patternContentUnits', 'patternTransform', 'patternUnits', 'preserveAspectRatio', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'viewBox', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    polygon: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'points', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    polyline: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'points', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    radialGradient: ['class', 'cx', 'cy', 'externalResourcesRequired', 'fx', 'fy', 'gradientTransform', 'gradientUnits', 'id', 'r', 'spreadMethod', 'style', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    rect: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rx', 'ry', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    script: ['externalResourcesRequired', 'id', 'type', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    set: ['attributeName', 'attributeType', 'begin', 'dur', 'end', 'externalResourcesRequired', 'fill', 'id', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    stop: ['class', 'id', 'offset', 'style', 'xml:base', 'xml:lang', 'xml:space'],\n    style: ['id', 'media', 'title', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n    svg: ['baseProfile', 'class', 'contentScriptType', 'contentStyleType', 'externalResourcesRequired', 'height', 'id', 'onabort', 'onactivate', 'onclick', 'onerror', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onresize', 'onscroll', 'onunload', 'onzoom', 'preserveAspectRatio', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'version', 'viewBox', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y', 'zoomAndPan'],\n    switch: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    symbol: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'preserveAspectRatio', 'style', 'viewBox', 'xml:base', 'xml:lang', 'xml:space'],\n    text: ['class', 'dx', 'dy', 'externalResourcesRequired', 'id', 'lengthAdjust', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'textLength', 'transform', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    textPath: ['class', 'externalResourcesRequired', 'id', 'lengthAdjust', 'method', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'spacing', 'startOffset', 'style', 'systemLanguage', 'textLength', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    title: ['class', 'id', 'style', 'xml:base', 'xml:lang', 'xml:space'],\n    tref: ['class', 'dx', 'dy', 'externalResourcesRequired', 'id', 'lengthAdjust', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'textLength', 'x', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    tspan: ['class', 'dx', 'dy', 'externalResourcesRequired', 'id', 'lengthAdjust', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'textLength', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    use: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    view: ['externalResourcesRequired', 'id', 'preserveAspectRatio', 'viewBox', 'viewTarget', 'xml:base', 'xml:lang', 'xml:space', 'zoomAndPan'],\n    vkern: ['g1', 'g2', 'id', 'k', 'u1', 'u2', 'xml:base', 'xml:lang', 'xml:space']\n  };\n\n\n  svgPresentationElements = {\n    'a': true,\n    'altGlyph': true,\n    'animate': true,\n    'animateColor': true,\n    'circle': true,\n    'clipPath': true,\n    'defs': true,\n    'ellipse': true,\n    'feBlend': true,\n    'feColorMatrix': true,\n    'feComponentTransfer': true,\n    'feComposite': true,\n    'feConvolveMatrix': true,\n    'feDiffuseLighting': true,\n    'feDisplacementMap': true,\n    'feFlood': true,\n    'feGaussianBlur': true,\n    'feImage': true,\n    'feMerge': true,\n    'feMorphology': true,\n    'feOffset': true,\n    'feSpecularLighting': true,\n    'feTile': true,\n    'feTurbulence': true,\n    'filter': true,\n    'font': true,\n    'foreignObject': true,\n    'g': true,\n    'glyph': true,\n    'glyphRef': true,\n    'image': true,\n    'line': true,\n    'linearGradient': true,\n    'marker': true,\n    'mask': true,\n    'missing-glyph': true,\n    'path': true,\n    'pattern': true,\n    'polygon': true,\n    'polyline': true,\n    'radialGradient': true,\n    'rect': true,\n    'stop': true,\n    'svg': true,\n    'switch': true,\n    'symbol': true,\n    'text': true,\n    'textPath': true,\n    'tref': true,\n    'tspan': true,\n    'use': true\n  };\n\n  svgPresentationAttributes = {\n    'alignment-baseline': true,\n    'baseline-shift': true,\n    'clip-path': true,\n    'clip-rule': true,\n    'clip': true,\n    'color-interpolation-filters': true,\n    'color-interpolation': true,\n    'color-profile': true,\n    'color-rendering': true,\n    'color': true,\n    'cursor': true,\n    'direction': true,\n    'display': true,\n    'dominant-baseline': true,\n    'enable-background': true,\n    'fill-opacity': true,\n    'fill-rule': true,\n    'fill': true,\n    'filter': true,\n    'flood-color': true,\n    'flood-opacity': true,\n    'font-family': true,\n    'font-size-adjust': true,\n    'font-size': true,\n    'font-stretch': true,\n    'font-style': true,\n    'font-variant': true,\n    'font-weight': true,\n    'glyph-orientation-horizontal': true,\n    'glyph-orientation-vertical': true,\n    'image-rendering': true,\n    'kerning': true,\n    'letter-spacing': true,\n    'lighting-color': true,\n    'marker-end': true,\n    'marker-mid': true,\n    'marker-start': true,\n    'mask': true,\n    'opacity': true,\n    'overflow': true,\n    'pointer-events': true,\n    'shape-rendering': true,\n    'stop-color': true,\n    'stop-opacity': true,\n    'stroke-dasharray': true,\n    'stroke-dashoffset': true,\n    'stroke-linecap': true,\n    'stroke-linejoin': true,\n    'stroke-miterlimit': true,\n    'stroke-opacity': true,\n    'stroke-width': true,\n    'stroke': true,\n    'text-anchor': true,\n    'text-decoration': true,\n    'text-rendering': true,\n    'unicode-bidi': true,\n    'visibility': true,\n    'word-spacing': true,\n    'writing-mode': true\n  };\n\n  var createElement = function createElement(html) {\n    var div = DOM.createElement('div');\n    div.innerHTML = html;\n    return div.firstChild;\n  };\n\n  svgAnalyzer = function () {\n    function SVGAnalyzer() {\n      \n\n      if (createElement('<svg><altGlyph /></svg>').firstElementChild.nodeName === 'altglyph' && elements.altGlyph) {\n        elements.altglyph = elements.altGlyph;\n        delete elements.altGlyph;\n        elements.altglyphdef = elements.altGlyphDef;\n        delete elements.altGlyphDef;\n        elements.altglyphitem = elements.altGlyphItem;\n        delete elements.altGlyphItem;\n        elements.glyphref = elements.glyphRef;\n        delete elements.glyphRef;\n      }\n    }\n\n    SVGAnalyzer.prototype.isStandardSvgAttribute = function isStandardSvgAttribute(nodeName, attributeName) {\n      return presentationElements[nodeName] && presentationAttributes[attributeName] || elements[nodeName] && elements[nodeName].indexOf(attributeName) !== -1;\n    };\n\n    return SVGAnalyzer;\n  }();\n}\n\nexport var elements = svgElements;\nexport var presentationElements = svgPresentationElements;\nexport var presentationAttributes = svgPresentationAttributes;\nexport var SVGAnalyzer = svgAnalyzer || function () {\n  function _class11() {\n    \n  }\n\n  _class11.prototype.isStandardSvgAttribute = function isStandardSvgAttribute() {\n    return false;\n  };\n\n  return _class11;\n}();\n\nexport var ObserverLocator = (_temp = _class12 = function () {\n  function ObserverLocator(taskQueue, eventManager, dirtyChecker, svgAnalyzer, parser) {\n    \n\n    this.taskQueue = taskQueue;\n    this.eventManager = eventManager;\n    this.dirtyChecker = dirtyChecker;\n    this.svgAnalyzer = svgAnalyzer;\n    this.parser = parser;\n\n    this.adapters = [];\n    this.logger = LogManager.getLogger('observer-locator');\n  }\n\n  ObserverLocator.prototype.getObserver = function getObserver(obj, propertyName) {\n    var observersLookup = obj.__observers__;\n    var observer = void 0;\n\n    if (observersLookup && propertyName in observersLookup) {\n      return observersLookup[propertyName];\n    }\n\n    observer = this.createPropertyObserver(obj, propertyName);\n\n    if (!observer.doNotCache) {\n      if (observersLookup === undefined) {\n        observersLookup = this.getOrCreateObserversLookup(obj);\n      }\n\n      observersLookup[propertyName] = observer;\n    }\n\n    return observer;\n  };\n\n  ObserverLocator.prototype.getOrCreateObserversLookup = function getOrCreateObserversLookup(obj) {\n    return obj.__observers__ || this.createObserversLookup(obj);\n  };\n\n  ObserverLocator.prototype.createObserversLookup = function createObserversLookup(obj) {\n    var value = {};\n\n    if (!Reflect.defineProperty(obj, '__observers__', {\n      enumerable: false,\n      configurable: false,\n      writable: false,\n      value: value\n    })) {\n      this.logger.warn('Cannot add observers to object', obj);\n    }\n\n    return value;\n  };\n\n  ObserverLocator.prototype.addAdapter = function addAdapter(adapter) {\n    this.adapters.push(adapter);\n  };\n\n  ObserverLocator.prototype.getAdapterObserver = function getAdapterObserver(obj, propertyName, descriptor) {\n    for (var _i28 = 0, ii = this.adapters.length; _i28 < ii; _i28++) {\n      var adapter = this.adapters[_i28];\n      var observer = adapter.getObserver(obj, propertyName, descriptor);\n      if (observer) {\n        return observer;\n      }\n    }\n    return null;\n  };\n\n  ObserverLocator.prototype.createPropertyObserver = function createPropertyObserver(obj, propertyName) {\n    var descriptor = void 0;\n    var handler = void 0;\n    var xlinkResult = void 0;\n\n    if (!(obj instanceof Object)) {\n      return new PrimitiveObserver(obj, propertyName);\n    }\n\n    if (obj instanceof DOM.Element) {\n      if (propertyName === 'class') {\n        return new ClassObserver(obj);\n      }\n      if (propertyName === 'style' || propertyName === 'css') {\n        return new StyleObserver(obj, propertyName);\n      }\n      handler = this.eventManager.getElementHandler(obj, propertyName);\n      if (propertyName === 'value' && obj.tagName.toLowerCase() === 'select') {\n        return new SelectValueObserver(obj, handler, this);\n      }\n      if (propertyName === 'checked' && obj.tagName.toLowerCase() === 'input') {\n        return new CheckedObserver(obj, handler, this);\n      }\n      if (handler) {\n        return new ValueAttributeObserver(obj, propertyName, handler);\n      }\n      xlinkResult = /^xlink:(.+)$/.exec(propertyName);\n      if (xlinkResult) {\n        return new XLinkAttributeObserver(obj, propertyName, xlinkResult[1]);\n      }\n      if (propertyName === 'role' && (obj instanceof DOM.Element || obj instanceof DOM.SVGElement) || /^\\w+:|^data-|^aria-/.test(propertyName) || obj instanceof DOM.SVGElement && this.svgAnalyzer.isStandardSvgAttribute(obj.nodeName, propertyName)) {\n        return new DataAttributeObserver(obj, propertyName);\n      }\n    }\n\n    descriptor = Object.getPropertyDescriptor(obj, propertyName);\n\n    if (hasDeclaredDependencies(descriptor)) {\n      return createComputedObserver(obj, propertyName, descriptor, this);\n    }\n\n    if (descriptor) {\n      var existingGetterOrSetter = descriptor.get || descriptor.set;\n      if (existingGetterOrSetter) {\n        if (existingGetterOrSetter.getObserver) {\n          return existingGetterOrSetter.getObserver(obj);\n        }\n\n        var adapterObserver = this.getAdapterObserver(obj, propertyName, descriptor);\n        if (adapterObserver) {\n          return adapterObserver;\n        }\n        return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);\n      }\n    }\n\n    if (obj instanceof Array) {\n      if (propertyName === 'length') {\n        return this.getArrayObserver(obj).getLengthObserver();\n      }\n\n      return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);\n    } else if (obj instanceof Map) {\n      if (propertyName === 'size') {\n        return this.getMapObserver(obj).getLengthObserver();\n      }\n\n      return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);\n    } else if (obj instanceof Set) {\n      if (propertyName === 'size') {\n        return this.getSetObserver(obj).getLengthObserver();\n      }\n\n      return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);\n    }\n\n    return new SetterObserver(this.taskQueue, obj, propertyName);\n  };\n\n  ObserverLocator.prototype.getAccessor = function getAccessor(obj, propertyName) {\n    if (obj instanceof DOM.Element) {\n      if (propertyName === 'class' || propertyName === 'style' || propertyName === 'css' || propertyName === 'value' && (obj.tagName.toLowerCase() === 'input' || obj.tagName.toLowerCase() === 'select') || propertyName === 'checked' && obj.tagName.toLowerCase() === 'input' || propertyName === 'model' && obj.tagName.toLowerCase() === 'input' || /^xlink:.+$/.exec(propertyName)) {\n        return this.getObserver(obj, propertyName);\n      }\n      if (/^\\w+:|^data-|^aria-/.test(propertyName) || obj instanceof DOM.SVGElement && this.svgAnalyzer.isStandardSvgAttribute(obj.nodeName, propertyName) || obj.tagName.toLowerCase() === 'img' && propertyName === 'src' || obj.tagName.toLowerCase() === 'a' && propertyName === 'href') {\n        return dataAttributeAccessor;\n      }\n    }\n    return propertyAccessor;\n  };\n\n  ObserverLocator.prototype.getArrayObserver = function getArrayObserver(array) {\n    return _getArrayObserver(this.taskQueue, array);\n  };\n\n  ObserverLocator.prototype.getMapObserver = function getMapObserver(map) {\n    return _getMapObserver(this.taskQueue, map);\n  };\n\n  ObserverLocator.prototype.getSetObserver = function getSetObserver(set) {\n    return _getSetObserver(this.taskQueue, set);\n  };\n\n  return ObserverLocator;\n}(), _class12.inject = [TaskQueue, EventManager, DirtyChecker, SVGAnalyzer, Parser], _temp);\n\nexport var ObjectObservationAdapter = function () {\n  function ObjectObservationAdapter() {\n    \n  }\n\n  ObjectObservationAdapter.prototype.getObserver = function getObserver(object, propertyName, descriptor) {\n    throw new Error('BindingAdapters must implement getObserver(object, propertyName).');\n  };\n\n  return ObjectObservationAdapter;\n}();\n\nexport var BindingExpression = function () {\n  function BindingExpression(observerLocator, targetProperty, sourceExpression, mode, lookupFunctions, attribute) {\n    \n\n    this.observerLocator = observerLocator;\n    this.targetProperty = targetProperty;\n    this.sourceExpression = sourceExpression;\n    this.mode = mode;\n    this.lookupFunctions = lookupFunctions;\n    this.attribute = attribute;\n    this.discrete = false;\n  }\n\n  BindingExpression.prototype.createBinding = function createBinding(target) {\n    return new Binding(this.observerLocator, this.sourceExpression, target, this.targetProperty, this.mode, this.lookupFunctions);\n  };\n\n  return BindingExpression;\n}();\n\nexport var Binding = (_dec10 = connectable(), _dec10(_class13 = function () {\n  function Binding(observerLocator, sourceExpression, target, targetProperty, mode, lookupFunctions) {\n    \n\n    this.observerLocator = observerLocator;\n    this.sourceExpression = sourceExpression;\n    this.target = target;\n    this.targetProperty = targetProperty;\n    this.mode = mode;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  Binding.prototype.updateTarget = function updateTarget(value) {\n    this.targetObserver.setValue(value, this.target, this.targetProperty);\n  };\n\n  Binding.prototype.updateSource = function updateSource(value) {\n    this.sourceExpression.assign(this.source, value, this.lookupFunctions);\n  };\n\n  Binding.prototype.call = function call(context, newValue, oldValue) {\n    if (!this.isBound) {\n      return;\n    }\n    if (context === sourceContext) {\n      oldValue = this.targetObserver.getValue(this.target, this.targetProperty);\n      newValue = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\n      if (newValue !== oldValue) {\n        this.updateTarget(newValue);\n      }\n      if (this.mode !== bindingMode.oneTime) {\n        this._version++;\n        this.sourceExpression.connect(this, this.source);\n        this.unobserve(false);\n      }\n      return;\n    }\n    if (context === targetContext) {\n      if (newValue !== this.sourceExpression.evaluate(this.source, this.lookupFunctions)) {\n        this.updateSource(newValue);\n      }\n      return;\n    }\n    throw new Error('Unexpected call context ' + context);\n  };\n\n  Binding.prototype.bind = function bind(source) {\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n    this.isBound = true;\n    this.source = source;\n\n    if (this.sourceExpression.bind) {\n      this.sourceExpression.bind(this, source, this.lookupFunctions);\n    }\n\n    var mode = this.mode;\n    if (!this.targetObserver) {\n      var method = mode === bindingMode.twoWay || mode === bindingMode.fromView ? 'getObserver' : 'getAccessor';\n      this.targetObserver = this.observerLocator[method](this.target, this.targetProperty);\n    }\n\n    if ('bind' in this.targetObserver) {\n      this.targetObserver.bind();\n    }\n    if (this.mode !== bindingMode.fromView) {\n      var value = this.sourceExpression.evaluate(source, this.lookupFunctions);\n      this.updateTarget(value);\n    }\n\n    if (mode === bindingMode.oneTime) {\n      return;\n    } else if (mode === bindingMode.toView) {\n      enqueueBindingConnect(this);\n    } else if (mode === bindingMode.twoWay) {\n      this.sourceExpression.connect(this, source);\n      this.targetObserver.subscribe(targetContext, this);\n    } else if (mode === bindingMode.fromView) {\n      this.targetObserver.subscribe(targetContext, this);\n    }\n  };\n\n  Binding.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    if (this.sourceExpression.unbind) {\n      this.sourceExpression.unbind(this, this.source);\n    }\n    this.source = null;\n    if ('unbind' in this.targetObserver) {\n      this.targetObserver.unbind();\n    }\n    if (this.targetObserver.unsubscribe) {\n      this.targetObserver.unsubscribe(targetContext, this);\n    }\n    this.unobserve(true);\n  };\n\n  Binding.prototype.connect = function connect(evaluate) {\n    if (!this.isBound) {\n      return;\n    }\n    if (evaluate) {\n      var value = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\n      this.updateTarget(value);\n    }\n    this.sourceExpression.connect(this, this.source);\n  };\n\n  return Binding;\n}()) || _class13);\n\nexport var CallExpression = function () {\n  function CallExpression(observerLocator, targetProperty, sourceExpression, lookupFunctions) {\n    \n\n    this.observerLocator = observerLocator;\n    this.targetProperty = targetProperty;\n    this.sourceExpression = sourceExpression;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  CallExpression.prototype.createBinding = function createBinding(target) {\n    return new Call(this.observerLocator, this.sourceExpression, target, this.targetProperty, this.lookupFunctions);\n  };\n\n  return CallExpression;\n}();\n\nexport var Call = function () {\n  function Call(observerLocator, sourceExpression, target, targetProperty, lookupFunctions) {\n    \n\n    this.sourceExpression = sourceExpression;\n    this.target = target;\n    this.targetProperty = observerLocator.getObserver(target, targetProperty);\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  Call.prototype.callSource = function callSource($event) {\n    var overrideContext = this.source.overrideContext;\n    Object.assign(overrideContext, $event);\n    overrideContext.$event = $event;\n    var mustEvaluate = true;\n    var result = this.sourceExpression.evaluate(this.source, this.lookupFunctions, mustEvaluate);\n    delete overrideContext.$event;\n    for (var prop in $event) {\n      delete overrideContext[prop];\n    }\n    return result;\n  };\n\n  Call.prototype.bind = function bind(source) {\n    var _this26 = this;\n\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n    this.isBound = true;\n    this.source = source;\n\n    if (this.sourceExpression.bind) {\n      this.sourceExpression.bind(this, source, this.lookupFunctions);\n    }\n    this.targetProperty.setValue(function ($event) {\n      return _this26.callSource($event);\n    });\n  };\n\n  Call.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    if (this.sourceExpression.unbind) {\n      this.sourceExpression.unbind(this, this.source);\n    }\n    this.source = null;\n    this.targetProperty.setValue(null);\n  };\n\n  return Call;\n}();\n\nexport var ValueConverterResource = function () {\n  function ValueConverterResource(name) {\n    \n\n    this.name = name;\n  }\n\n  ValueConverterResource.convention = function convention(name) {\n    if (name.endsWith('ValueConverter')) {\n      return new ValueConverterResource(camelCase(name.substring(0, name.length - 14)));\n    }\n  };\n\n  ValueConverterResource.prototype.initialize = function initialize(container, target) {\n    this.instance = container.get(target);\n  };\n\n  ValueConverterResource.prototype.register = function register(registry, name) {\n    registry.registerValueConverter(name || this.name, this.instance);\n  };\n\n  ValueConverterResource.prototype.load = function load(container, target) {};\n\n  return ValueConverterResource;\n}();\n\nexport function valueConverter(nameOrTarget) {\n  if (nameOrTarget === undefined || typeof nameOrTarget === 'string') {\n    return function (target) {\n      metadata.define(metadata.resource, new ValueConverterResource(nameOrTarget), target);\n    };\n  }\n\n  metadata.define(metadata.resource, new ValueConverterResource(), nameOrTarget);\n}\n\nexport var BindingBehaviorResource = function () {\n  function BindingBehaviorResource(name) {\n    \n\n    this.name = name;\n  }\n\n  BindingBehaviorResource.convention = function convention(name) {\n    if (name.endsWith('BindingBehavior')) {\n      return new BindingBehaviorResource(camelCase(name.substring(0, name.length - 15)));\n    }\n  };\n\n  BindingBehaviorResource.prototype.initialize = function initialize(container, target) {\n    this.instance = container.get(target);\n  };\n\n  BindingBehaviorResource.prototype.register = function register(registry, name) {\n    registry.registerBindingBehavior(name || this.name, this.instance);\n  };\n\n  BindingBehaviorResource.prototype.load = function load(container, target) {};\n\n  return BindingBehaviorResource;\n}();\n\nexport function bindingBehavior(nameOrTarget) {\n  if (nameOrTarget === undefined || typeof nameOrTarget === 'string') {\n    return function (target) {\n      metadata.define(metadata.resource, new BindingBehaviorResource(nameOrTarget), target);\n    };\n  }\n\n  metadata.define(metadata.resource, new BindingBehaviorResource(), nameOrTarget);\n}\n\nexport var ListenerExpression = function () {\n  function ListenerExpression(eventManager, targetEvent, sourceExpression, delegationStrategy, preventDefault, lookupFunctions) {\n    \n\n    this.eventManager = eventManager;\n    this.targetEvent = targetEvent;\n    this.sourceExpression = sourceExpression;\n    this.delegationStrategy = delegationStrategy;\n    this.discrete = true;\n    this.preventDefault = preventDefault;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  ListenerExpression.prototype.createBinding = function createBinding(target) {\n    return new Listener(this.eventManager, this.targetEvent, this.delegationStrategy, this.sourceExpression, target, this.preventDefault, this.lookupFunctions);\n  };\n\n  return ListenerExpression;\n}();\n\nexport var Listener = function () {\n  function Listener(eventManager, targetEvent, delegationStrategy, sourceExpression, target, preventDefault, lookupFunctions) {\n    \n\n    this.eventManager = eventManager;\n    this.targetEvent = targetEvent;\n    this.delegationStrategy = delegationStrategy;\n    this.sourceExpression = sourceExpression;\n    this.target = target;\n    this.preventDefault = preventDefault;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  Listener.prototype.callSource = function callSource(event) {\n    var overrideContext = this.source.overrideContext;\n    overrideContext.$event = event;\n    var mustEvaluate = true;\n    var result = this.sourceExpression.evaluate(this.source, this.lookupFunctions, mustEvaluate);\n    delete overrideContext.$event;\n    if (result !== true && this.preventDefault) {\n      event.preventDefault();\n    }\n    return result;\n  };\n\n  Listener.prototype.handleEvent = function handleEvent(event) {\n    this.callSource(event);\n  };\n\n  Listener.prototype.bind = function bind(source) {\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n    this.isBound = true;\n    this.source = source;\n\n    if (this.sourceExpression.bind) {\n      this.sourceExpression.bind(this, source, this.lookupFunctions);\n    }\n    this._handler = this.eventManager.addEventListener(this.target, this.targetEvent, this, this.delegationStrategy, true);\n  };\n\n  Listener.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    if (this.sourceExpression.unbind) {\n      this.sourceExpression.unbind(this, this.source);\n    }\n    this.source = null;\n    this._handler.dispose();\n    this._handler = null;\n  };\n\n  return Listener;\n}();\n\nfunction getAU(element) {\n  var au = element.au;\n\n  if (au === undefined) {\n    throw new Error('No Aurelia APIs are defined for the element: \"' + element.tagName + '\".');\n  }\n\n  return au;\n}\n\nexport var NameExpression = function () {\n  function NameExpression(sourceExpression, apiName, lookupFunctions) {\n    \n\n    this.sourceExpression = sourceExpression;\n    this.apiName = apiName;\n    this.lookupFunctions = lookupFunctions;\n    this.discrete = true;\n  }\n\n  NameExpression.prototype.createBinding = function createBinding(target) {\n    return new NameBinder(this.sourceExpression, NameExpression.locateAPI(target, this.apiName), this.lookupFunctions);\n  };\n\n  NameExpression.locateAPI = function locateAPI(element, apiName) {\n    switch (apiName) {\n      case 'element':\n        return element;\n      case 'controller':\n        return getAU(element).controller;\n      case 'view-model':\n        return getAU(element).controller.viewModel;\n      case 'view':\n        return getAU(element).controller.view;\n      default:\n        var target = getAU(element)[apiName];\n\n        if (target === undefined) {\n          throw new Error('Attempted to reference \"' + apiName + '\", but it was not found amongst the target\\'s API.');\n        }\n\n        return target.viewModel;\n    }\n  };\n\n  return NameExpression;\n}();\n\nvar NameBinder = function () {\n  function NameBinder(sourceExpression, target, lookupFunctions) {\n    \n\n    this.sourceExpression = sourceExpression;\n    this.target = target;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  NameBinder.prototype.bind = function bind(source) {\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n    this.isBound = true;\n    this.source = source;\n    if (this.sourceExpression.bind) {\n      this.sourceExpression.bind(this, source, this.lookupFunctions);\n    }\n    this.sourceExpression.assign(this.source, this.target, this.lookupFunctions);\n  };\n\n  NameBinder.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    if (this.sourceExpression.evaluate(this.source, this.lookupFunctions) === this.target) {\n      this.sourceExpression.assign(this.source, null, this.lookupFunctions);\n    }\n    if (this.sourceExpression.unbind) {\n      this.sourceExpression.unbind(this, this.source);\n    }\n    this.source = null;\n  };\n\n  return NameBinder;\n}();\n\nvar LookupFunctions = {\n  bindingBehaviors: function bindingBehaviors(name) {\n    return null;\n  },\n  valueConverters: function valueConverters(name) {\n    return null;\n  }\n};\n\nexport var BindingEngine = (_temp2 = _class14 = function () {\n  function BindingEngine(observerLocator, parser) {\n    \n\n    this.observerLocator = observerLocator;\n    this.parser = parser;\n  }\n\n  BindingEngine.prototype.createBindingExpression = function createBindingExpression(targetProperty, sourceExpression) {\n    var mode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : bindingMode.toView;\n    var lookupFunctions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : LookupFunctions;\n\n    return new BindingExpression(this.observerLocator, targetProperty, this.parser.parse(sourceExpression), mode, lookupFunctions);\n  };\n\n  BindingEngine.prototype.propertyObserver = function propertyObserver(obj, propertyName) {\n    var _this27 = this;\n\n    return {\n      subscribe: function subscribe(callback) {\n        var observer = _this27.observerLocator.getObserver(obj, propertyName);\n        observer.subscribe(callback);\n        return {\n          dispose: function dispose() {\n            return observer.unsubscribe(callback);\n          }\n        };\n      }\n    };\n  };\n\n  BindingEngine.prototype.collectionObserver = function collectionObserver(collection) {\n    var _this28 = this;\n\n    return {\n      subscribe: function subscribe(callback) {\n        var observer = void 0;\n        if (collection instanceof Array) {\n          observer = _this28.observerLocator.getArrayObserver(collection);\n        } else if (collection instanceof Map) {\n          observer = _this28.observerLocator.getMapObserver(collection);\n        } else if (collection instanceof Set) {\n          observer = _this28.observerLocator.getSetObserver(collection);\n        } else {\n          throw new Error('collection must be an instance of Array, Map or Set.');\n        }\n        observer.subscribe(callback);\n        return {\n          dispose: function dispose() {\n            return observer.unsubscribe(callback);\n          }\n        };\n      }\n    };\n  };\n\n  BindingEngine.prototype.expressionObserver = function expressionObserver(bindingContext, expression) {\n    var scope = { bindingContext: bindingContext, overrideContext: createOverrideContext(bindingContext) };\n    return new ExpressionObserver(scope, this.parser.parse(expression), this.observerLocator, LookupFunctions);\n  };\n\n  BindingEngine.prototype.parseExpression = function parseExpression(expression) {\n    return this.parser.parse(expression);\n  };\n\n  BindingEngine.prototype.registerAdapter = function registerAdapter(adapter) {\n    this.observerLocator.addAdapter(adapter);\n  };\n\n  return BindingEngine;\n}(), _class14.inject = [ObserverLocator, Parser], _temp2);\n\nvar setProto = Set.prototype;\n\nfunction _getSetObserver(taskQueue, set) {\n  return ModifySetObserver.for(taskQueue, set);\n}\n\nvar ModifySetObserver = function (_ModifyCollectionObse3) {\n  _inherits(ModifySetObserver, _ModifyCollectionObse3);\n\n  function ModifySetObserver(taskQueue, set) {\n    \n\n    return _possibleConstructorReturn(this, _ModifyCollectionObse3.call(this, taskQueue, set));\n  }\n\n  ModifySetObserver.for = function _for(taskQueue, set) {\n    if (!('__set_observer__' in set)) {\n      Reflect.defineProperty(set, '__set_observer__', {\n        value: ModifySetObserver.create(taskQueue, set),\n        enumerable: false, configurable: false\n      });\n    }\n    return set.__set_observer__;\n  };\n\n  ModifySetObserver.create = function create(taskQueue, set) {\n    var observer = new ModifySetObserver(taskQueue, set);\n\n    var proto = setProto;\n    if (proto.add !== set.add || proto.delete !== set.delete || proto.clear !== set.clear) {\n      proto = {\n        add: set.add,\n        delete: set.delete,\n        clear: set.clear\n      };\n    }\n\n    set.add = function () {\n      var type = 'add';\n      var oldSize = set.size;\n      var methodCallResult = proto.add.apply(set, arguments);\n      var hasValue = set.size === oldSize;\n      if (!hasValue) {\n        observer.addChangeRecord({\n          type: type,\n          object: set,\n          value: Array.from(set).pop()\n        });\n      }\n      return methodCallResult;\n    };\n\n    set.delete = function () {\n      var hasValue = set.has(arguments[0]);\n      var methodCallResult = proto.delete.apply(set, arguments);\n      if (hasValue) {\n        observer.addChangeRecord({\n          type: 'delete',\n          object: set,\n          value: arguments[0]\n        });\n      }\n      return methodCallResult;\n    };\n\n    set.clear = function () {\n      var methodCallResult = proto.clear.apply(set, arguments);\n      observer.addChangeRecord({\n        type: 'clear',\n        object: set\n      });\n      return methodCallResult;\n    };\n\n    return observer;\n  };\n\n  return ModifySetObserver;\n}(ModifyCollectionObserver);\n\nexport function observable(targetOrConfig, key, descriptor) {\n  function deco(target, key, descriptor, config) {\n    var isClassDecorator = key === undefined;\n    if (isClassDecorator) {\n      target = target.prototype;\n      key = typeof config === 'string' ? config : config.name;\n    }\n\n    var innerPropertyName = '_' + key;\n    var innerPropertyDescriptor = {\n      configurable: true,\n      enumerable: false,\n      writable: true\n    };\n\n    var callbackName = config && config.changeHandler || key + 'Changed';\n\n    if (descriptor) {\n      if (typeof descriptor.initializer === 'function') {\n        innerPropertyDescriptor.value = descriptor.initializer();\n      }\n    } else {\n      descriptor = {};\n    }\n\n    if (!('enumerable' in descriptor)) {\n      descriptor.enumerable = true;\n    }\n\n    delete descriptor.value;\n    delete descriptor.writable;\n    delete descriptor.initializer;\n\n    Reflect.defineProperty(target, innerPropertyName, innerPropertyDescriptor);\n\n    descriptor.get = function () {\n      return this[innerPropertyName];\n    };\n    descriptor.set = function (newValue) {\n      var oldValue = this[innerPropertyName];\n      if (newValue === oldValue) {\n        return;\n      }\n\n      this[innerPropertyName] = newValue;\n      Reflect.defineProperty(this, innerPropertyName, { enumerable: false });\n\n      if (this[callbackName]) {\n        this[callbackName](newValue, oldValue, key);\n      }\n    };\n\n    descriptor.get.dependencies = [innerPropertyName];\n\n    if (isClassDecorator) {\n      Reflect.defineProperty(target, key, descriptor);\n    } else {\n      return descriptor;\n    }\n  }\n\n  if (key === undefined) {\n    return function (t, k, d) {\n      return deco(t, k, d, targetOrConfig);\n    };\n  }\n  return deco(targetOrConfig, key, descriptor);\n}\n\nvar signals = {};\n\nexport function connectBindingToSignal(binding, name) {\n  if (!signals.hasOwnProperty(name)) {\n    signals[name] = 0;\n  }\n  binding.observeProperty(signals, name);\n}\n\nexport function signalBindings(name) {\n  if (signals.hasOwnProperty(name)) {\n    signals[name]++;\n  }\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { visit } from './visitor';\n\n/**\n * Converts an AST into a string, using one set of reasonable\n * formatting rules.\n */\nexport function print(ast) {\n  return visit(ast, { leave: printDocASTReducer });\n}\n\nvar printDocASTReducer = {\n  Name: function Name(node) {\n    return node.value;\n  },\n  Variable: function Variable(node) {\n    return '$' + node.name;\n  },\n\n  // Document\n\n  Document: function Document(node) {\n    return join(node.definitions, '\\n\\n') + '\\n';\n  },\n\n  OperationDefinition: function OperationDefinition(node) {\n    var op = node.operation;\n    var name = node.name;\n    var varDefs = wrap('(', join(node.variableDefinitions, ', '), ')');\n    var directives = join(node.directives, ' ');\n    var selectionSet = node.selectionSet;\n    // Anonymous queries with no directives or variable definitions can use\n    // the query short form.\n    return !name && !directives && !varDefs && op === 'query' ? selectionSet : join([op, join([name, varDefs]), directives, selectionSet], ' ');\n  },\n\n\n  VariableDefinition: function VariableDefinition(_ref) {\n    var variable = _ref.variable,\n        type = _ref.type,\n        defaultValue = _ref.defaultValue;\n    return variable + ': ' + type + wrap(' = ', defaultValue);\n  },\n\n  SelectionSet: function SelectionSet(_ref2) {\n    var selections = _ref2.selections;\n    return block(selections);\n  },\n\n  Field: function Field(_ref3) {\n    var alias = _ref3.alias,\n        name = _ref3.name,\n        args = _ref3.arguments,\n        directives = _ref3.directives,\n        selectionSet = _ref3.selectionSet;\n    return join([wrap('', alias, ': ') + name + wrap('(', join(args, ', '), ')'), join(directives, ' '), selectionSet], ' ');\n  },\n\n  Argument: function Argument(_ref4) {\n    var name = _ref4.name,\n        value = _ref4.value;\n    return name + ': ' + value;\n  },\n\n  // Fragments\n\n  FragmentSpread: function FragmentSpread(_ref5) {\n    var name = _ref5.name,\n        directives = _ref5.directives;\n    return '...' + name + wrap(' ', join(directives, ' '));\n  },\n\n  InlineFragment: function InlineFragment(_ref6) {\n    var typeCondition = _ref6.typeCondition,\n        directives = _ref6.directives,\n        selectionSet = _ref6.selectionSet;\n    return join(['...', wrap('on ', typeCondition), join(directives, ' '), selectionSet], ' ');\n  },\n\n  FragmentDefinition: function FragmentDefinition(_ref7) {\n    var name = _ref7.name,\n        typeCondition = _ref7.typeCondition,\n        variableDefinitions = _ref7.variableDefinitions,\n        directives = _ref7.directives,\n        selectionSet = _ref7.selectionSet;\n    return (\n      // Note: fragment variable definitions are experimental and may be changed\n      // or removed in the future.\n      'fragment ' + name + wrap('(', join(variableDefinitions, ', '), ')') + ' ' + ('on ' + typeCondition + ' ' + wrap('', join(directives, ' '), ' ')) + selectionSet\n    );\n  },\n\n  // Value\n\n  IntValue: function IntValue(_ref8) {\n    var value = _ref8.value;\n    return value;\n  },\n  FloatValue: function FloatValue(_ref9) {\n    var value = _ref9.value;\n    return value;\n  },\n  StringValue: function StringValue(_ref10, key) {\n    var value = _ref10.value,\n        isBlockString = _ref10.block;\n    return isBlockString ? printBlockString(value, key === 'description') : JSON.stringify(value);\n  },\n  BooleanValue: function BooleanValue(_ref11) {\n    var value = _ref11.value;\n    return value ? 'true' : 'false';\n  },\n  NullValue: function NullValue() {\n    return 'null';\n  },\n  EnumValue: function EnumValue(_ref12) {\n    var value = _ref12.value;\n    return value;\n  },\n  ListValue: function ListValue(_ref13) {\n    var values = _ref13.values;\n    return '[' + join(values, ', ') + ']';\n  },\n  ObjectValue: function ObjectValue(_ref14) {\n    var fields = _ref14.fields;\n    return '{' + join(fields, ', ') + '}';\n  },\n  ObjectField: function ObjectField(_ref15) {\n    var name = _ref15.name,\n        value = _ref15.value;\n    return name + ': ' + value;\n  },\n\n  // Directive\n\n  Directive: function Directive(_ref16) {\n    var name = _ref16.name,\n        args = _ref16.arguments;\n    return '@' + name + wrap('(', join(args, ', '), ')');\n  },\n\n  // Type\n\n  NamedType: function NamedType(_ref17) {\n    var name = _ref17.name;\n    return name;\n  },\n  ListType: function ListType(_ref18) {\n    var type = _ref18.type;\n    return '[' + type + ']';\n  },\n  NonNullType: function NonNullType(_ref19) {\n    var type = _ref19.type;\n    return type + '!';\n  },\n\n  // Type System Definitions\n\n  SchemaDefinition: function SchemaDefinition(_ref20) {\n    var directives = _ref20.directives,\n        operationTypes = _ref20.operationTypes;\n    return join(['schema', join(directives, ' '), block(operationTypes)], ' ');\n  },\n\n  OperationTypeDefinition: function OperationTypeDefinition(_ref21) {\n    var operation = _ref21.operation,\n        type = _ref21.type;\n    return operation + ': ' + type;\n  },\n\n  ScalarTypeDefinition: addDescription(function (_ref22) {\n    var name = _ref22.name,\n        directives = _ref22.directives;\n    return join(['scalar', name, join(directives, ' ')], ' ');\n  }),\n\n  ObjectTypeDefinition: addDescription(function (_ref23) {\n    var name = _ref23.name,\n        interfaces = _ref23.interfaces,\n        directives = _ref23.directives,\n        fields = _ref23.fields;\n    return join(['type', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n  }),\n\n  FieldDefinition: addDescription(function (_ref24) {\n    var name = _ref24.name,\n        args = _ref24.arguments,\n        type = _ref24.type,\n        directives = _ref24.directives;\n    return name + wrap('(', join(args, ', '), ')') + ': ' + type + wrap(' ', join(directives, ' '));\n  }),\n\n  InputValueDefinition: addDescription(function (_ref25) {\n    var name = _ref25.name,\n        type = _ref25.type,\n        defaultValue = _ref25.defaultValue,\n        directives = _ref25.directives;\n    return join([name + ': ' + type, wrap('= ', defaultValue), join(directives, ' ')], ' ');\n  }),\n\n  InterfaceTypeDefinition: addDescription(function (_ref26) {\n    var name = _ref26.name,\n        directives = _ref26.directives,\n        fields = _ref26.fields;\n    return join(['interface', name, join(directives, ' '), block(fields)], ' ');\n  }),\n\n  UnionTypeDefinition: addDescription(function (_ref27) {\n    var name = _ref27.name,\n        directives = _ref27.directives,\n        types = _ref27.types;\n    return join(['union', name, join(directives, ' '), types && types.length !== 0 ? '= ' + join(types, ' | ') : ''], ' ');\n  }),\n\n  EnumTypeDefinition: addDescription(function (_ref28) {\n    var name = _ref28.name,\n        directives = _ref28.directives,\n        values = _ref28.values;\n    return join(['enum', name, join(directives, ' '), block(values)], ' ');\n  }),\n\n  EnumValueDefinition: addDescription(function (_ref29) {\n    var name = _ref29.name,\n        directives = _ref29.directives;\n    return join([name, join(directives, ' ')], ' ');\n  }),\n\n  InputObjectTypeDefinition: addDescription(function (_ref30) {\n    var name = _ref30.name,\n        directives = _ref30.directives,\n        fields = _ref30.fields;\n    return join(['input', name, join(directives, ' '), block(fields)], ' ');\n  }),\n\n  ScalarTypeExtension: function ScalarTypeExtension(_ref31) {\n    var name = _ref31.name,\n        directives = _ref31.directives;\n    return join(['extend scalar', name, join(directives, ' ')], ' ');\n  },\n\n  ObjectTypeExtension: function ObjectTypeExtension(_ref32) {\n    var name = _ref32.name,\n        interfaces = _ref32.interfaces,\n        directives = _ref32.directives,\n        fields = _ref32.fields;\n    return join(['extend type', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n  },\n\n  InterfaceTypeExtension: function InterfaceTypeExtension(_ref33) {\n    var name = _ref33.name,\n        directives = _ref33.directives,\n        fields = _ref33.fields;\n    return join(['extend interface', name, join(directives, ' '), block(fields)], ' ');\n  },\n\n  UnionTypeExtension: function UnionTypeExtension(_ref34) {\n    var name = _ref34.name,\n        directives = _ref34.directives,\n        types = _ref34.types;\n    return join(['extend union', name, join(directives, ' '), types && types.length !== 0 ? '= ' + join(types, ' | ') : ''], ' ');\n  },\n\n  EnumTypeExtension: function EnumTypeExtension(_ref35) {\n    var name = _ref35.name,\n        directives = _ref35.directives,\n        values = _ref35.values;\n    return join(['extend enum', name, join(directives, ' '), block(values)], ' ');\n  },\n\n  InputObjectTypeExtension: function InputObjectTypeExtension(_ref36) {\n    var name = _ref36.name,\n        directives = _ref36.directives,\n        fields = _ref36.fields;\n    return join(['extend input', name, join(directives, ' '), block(fields)], ' ');\n  },\n\n  DirectiveDefinition: addDescription(function (_ref37) {\n    var name = _ref37.name,\n        args = _ref37.arguments,\n        locations = _ref37.locations;\n    return 'directive @' + name + wrap('(', join(args, ', '), ')') + ' on ' + join(locations, ' | ');\n  })\n};\n\nfunction addDescription(cb) {\n  return function (node) {\n    return join([node.description, cb(node)], '\\n');\n  };\n}\n\n/**\n * Given maybeArray, print an empty string if it is null or empty, otherwise\n * print all items together separated by separator if provided\n */\nfunction join(maybeArray, separator) {\n  return maybeArray ? maybeArray.filter(function (x) {\n    return x;\n  }).join(separator || '') : '';\n}\n\n/**\n * Given array, print each item on its own line, wrapped in an\n * indented \"{ }\" block.\n */\nfunction block(array) {\n  return array && array.length !== 0 ? '{\\n' + indent(join(array, '\\n')) + '\\n}' : '';\n}\n\n/**\n * If maybeString is not null or empty, then wrap with start and end, otherwise\n * print an empty string.\n */\nfunction wrap(start, maybeString, end) {\n  return maybeString ? start + maybeString + (end || '') : '';\n}\n\nfunction indent(maybeString) {\n  return maybeString && '  ' + maybeString.replace(/\\n/g, '\\n  ');\n}\n\n/**\n * Print a block string in the indented block form by adding a leading and\n * trailing blank line. However, if a block string starts with whitespace and is\n * a single-line, adding a leading blank line would strip that whitespace.\n */\nfunction printBlockString(value, isDescription) {\n  var escaped = value.replace(/\"\"\"/g, '\\\\\"\"\"');\n  return (value[0] === ' ' || value[0] === '\\t') && value.indexOf('\\n') === -1 ? '\"\"\"' + escaped.replace(/\"$/, '\"\\n') + '\"\"\"' : '\"\"\"\\n' + (isDescription ? escaped : indent(escaped)) + '\\n\"\"\"';\n}","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            'ss': withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n            'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n            'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n            'dd': 'день_дні_днів',\n            'MM': 'місяць_місяці_місяців',\n            'yy': 'рік_роки_років'\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвилина' : 'хвилину';\n        }\n        else if (key === 'h') {\n            return withoutSuffix ? 'година' : 'годину';\n        }\n        else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    function weekdaysCaseReplace(m, format) {\n        var weekdays = {\n            'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),\n            'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),\n            'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')\n        };\n\n        if (m === true) {\n            return weekdays['nominative'].slice(1, 7).concat(weekdays['nominative'].slice(0, 1));\n        }\n        if (!m) {\n            return weekdays['nominative'];\n        }\n\n        var nounCase = (/(\\[[ВвУу]\\]) ?dddd/).test(format) ?\n            'accusative' :\n            ((/\\[?(?:минулої|наступної)? ?\\] ?dddd/).test(format) ?\n                'genitive' :\n                'nominative');\n        return weekdays[nounCase][m.day()];\n    }\n    function processHoursFunction(str) {\n        return function () {\n            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n        };\n    }\n\n    var uk = moment.defineLocale('uk', {\n        months : {\n            'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),\n            'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')\n        },\n        monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),\n        weekdays : weekdaysCaseReplace,\n        weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY р.',\n            LLL : 'D MMMM YYYY р., HH:mm',\n            LLLL : 'dddd, D MMMM YYYY р., HH:mm'\n        },\n        calendar : {\n            sameDay: processHoursFunction('[Сьогодні '),\n            nextDay: processHoursFunction('[Завтра '),\n            lastDay: processHoursFunction('[Вчора '),\n            nextWeek: processHoursFunction('[У] dddd ['),\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return processHoursFunction('[Минулої] dddd [').call(this);\n                    case 1:\n                    case 2:\n                    case 4:\n                        return processHoursFunction('[Минулого] dddd [').call(this);\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'за %s',\n            past : '%s тому',\n            s : 'декілька секунд',\n            ss : relativeTimeWithPlural,\n            m : relativeTimeWithPlural,\n            mm : relativeTimeWithPlural,\n            h : 'годину',\n            hh : relativeTimeWithPlural,\n            d : 'день',\n            dd : relativeTimeWithPlural,\n            M : 'місяць',\n            MM : relativeTimeWithPlural,\n            y : 'рік',\n            yy : relativeTimeWithPlural\n        },\n        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n        meridiemParse: /ночі|ранку|дня|вечора/,\n        isPM: function (input) {\n            return /^(дня|вечора)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночі';\n            } else if (hour < 12) {\n                return 'ранку';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечора';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return uk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'جنوری',\n        'فروری',\n        'مارچ',\n        'اپریل',\n        'مئی',\n        'جون',\n        'جولائی',\n        'اگست',\n        'ستمبر',\n        'اکتوبر',\n        'نومبر',\n        'دسمبر'\n    ];\n    var days = [\n        'اتوار',\n        'پیر',\n        'منگل',\n        'بدھ',\n        'جمعرات',\n        'جمعہ',\n        'ہفتہ'\n    ];\n\n    var ur = moment.defineLocale('ur', {\n        months : months,\n        monthsShort : months,\n        weekdays : days,\n        weekdaysShort : days,\n        weekdaysMin : days,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd، D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /صبح|شام/,\n        isPM : function (input) {\n            return 'شام' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar : {\n            sameDay : '[آج بوقت] LT',\n            nextDay : '[کل بوقت] LT',\n            nextWeek : 'dddd [بوقت] LT',\n            lastDay : '[گذشتہ روز بوقت] LT',\n            lastWeek : '[گذشتہ] dddd [بوقت] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s بعد',\n            past : '%s قبل',\n            s : 'چند سیکنڈ',\n            ss : '%d سیکنڈ',\n            m : 'ایک منٹ',\n            mm : '%d منٹ',\n            h : 'ایک گھنٹہ',\n            hh : '%d گھنٹے',\n            d : 'ایک دن',\n            dd : '%d دن',\n            M : 'ایک ماہ',\n            MM : '%d ماہ',\n            y : 'ایک سال',\n            yy : '%d سال'\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ur;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var uz = moment.defineLocale('uz', {\n        months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n        monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n        weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n        weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'D MMMM YYYY, dddd HH:mm'\n        },\n        calendar : {\n            sameDay : '[Бугун соат] LT [да]',\n            nextDay : '[Эртага] LT [да]',\n            nextWeek : 'dddd [куни соат] LT [да]',\n            lastDay : '[Кеча соат] LT [да]',\n            lastWeek : '[Утган] dddd [куни соат] LT [да]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'Якин %s ичида',\n            past : 'Бир неча %s олдин',\n            s : 'фурсат',\n            ss : '%d фурсат',\n            m : 'бир дакика',\n            mm : '%d дакика',\n            h : 'бир соат',\n            hh : '%d соат',\n            d : 'бир кун',\n            dd : '%d кун',\n            M : 'бир ой',\n            MM : '%d ой',\n            y : 'бир йил',\n            yy : '%d йил'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return uz;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var uzLatn = moment.defineLocale('uz-latn', {\n        months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'),\n        monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n        weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'),\n        weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n        weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'D MMMM YYYY, dddd HH:mm'\n        },\n        calendar : {\n            sameDay : '[Bugun soat] LT [da]',\n            nextDay : '[Ertaga] LT [da]',\n            nextWeek : 'dddd [kuni soat] LT [da]',\n            lastDay : '[Kecha soat] LT [da]',\n            lastWeek : '[O\\'tgan] dddd [kuni soat] LT [da]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'Yaqin %s ichida',\n            past : 'Bir necha %s oldin',\n            s : 'soniya',\n            ss : '%d soniya',\n            m : 'bir daqiqa',\n            mm : '%d daqiqa',\n            h : 'bir soat',\n            hh : '%d soat',\n            d : 'bir kun',\n            dd : '%d kun',\n            M : 'bir oy',\n            MM : '%d oy',\n            y : 'bir yil',\n            yy : '%d yil'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return uzLatn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var vi = moment.defineLocale('vi', {\n        months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),\n        monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),\n        weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysParseExact : true,\n        meridiemParse: /sa|ch/i,\n        isPM : function (input) {\n            return /^ch$/i.test(input);\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'sa' : 'SA';\n            } else {\n                return isLower ? 'ch' : 'CH';\n            }\n        },\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM [năm] YYYY',\n            LLL : 'D MMMM [năm] YYYY HH:mm',\n            LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',\n            l : 'DD/M/YYYY',\n            ll : 'D MMM YYYY',\n            lll : 'D MMM YYYY HH:mm',\n            llll : 'ddd, D MMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Hôm nay lúc] LT',\n            nextDay: '[Ngày mai lúc] LT',\n            nextWeek: 'dddd [tuần tới lúc] LT',\n            lastDay: '[Hôm qua lúc] LT',\n            lastWeek: 'dddd [tuần rồi lúc] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s tới',\n            past : '%s trước',\n            s : 'vài giây',\n            ss : '%d giây' ,\n            m : 'một phút',\n            mm : '%d phút',\n            h : 'một giờ',\n            hh : '%d giờ',\n            d : 'một ngày',\n            dd : '%d ngày',\n            M : 'một tháng',\n            MM : '%d tháng',\n            y : 'một năm',\n            yy : '%d năm'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal : function (number) {\n            return number;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return vi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var xPseudo = moment.defineLocale('x-pseudo', {\n        months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),\n        monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),\n        weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n        weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[T~ódá~ý át] LT',\n            nextDay : '[T~ómó~rró~w át] LT',\n            nextWeek : 'dddd [át] LT',\n            lastDay : '[Ý~ést~érdá~ý át] LT',\n            lastWeek : '[L~ást] dddd [át] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'í~ñ %s',\n            past : '%s á~gó',\n            s : 'á ~féw ~sécó~ñds',\n            ss : '%d s~écóñ~ds',\n            m : 'á ~míñ~úté',\n            mm : '%d m~íñú~tés',\n            h : 'á~ñ hó~úr',\n            hh : '%d h~óúrs',\n            d : 'á ~dáý',\n            dd : '%d d~áýs',\n            M : 'á ~móñ~th',\n            MM : '%d m~óñt~hs',\n            y : 'á ~ýéár',\n            yy : '%d ý~éárs'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return xPseudo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var yo = moment.defineLocale('yo', {\n        months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),\n        monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n        weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n        weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n        weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Ònì ni] LT',\n            nextDay : '[Ọ̀la ni] LT',\n            nextWeek : 'dddd [Ọsẹ̀ tón\\'bọ] [ni] LT',\n            lastDay : '[Àna ni] LT',\n            lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ní %s',\n            past : '%s kọjá',\n            s : 'ìsẹjú aayá die',\n            ss :'aayá %d',\n            m : 'ìsẹjú kan',\n            mm : 'ìsẹjú %d',\n            h : 'wákati kan',\n            hh : 'wákati %d',\n            d : 'ọjọ́ kan',\n            dd : 'ọjọ́ %d',\n            M : 'osù kan',\n            MM : 'osù %d',\n            y : 'ọdún kan',\n            yy : 'ọdún %d'\n        },\n        dayOfMonthOrdinalParse : /ọjọ́\\s\\d{1,2}/,\n        ordinal : 'ọjọ́ %d',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return yo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var zhCn = moment.defineLocale('zh-cn', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日Ah点mm分',\n            LLLL : 'YYYY年M月D日ddddAh点mm分',\n            l : 'YYYY/M/D',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日dddd HH:mm'\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' ||\n                    meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            } else {\n                // '中午'\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar : {\n            sameDay : '[今天]LT',\n            nextDay : '[明天]LT',\n            nextWeek : '[下]ddddLT',\n            lastDay : '[昨天]LT',\n            lastWeek : '[上]ddddLT',\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '周';\n                default:\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s内',\n            past : '%s前',\n            s : '几秒',\n            ss : '%d 秒',\n            m : '1 分钟',\n            mm : '%d 分钟',\n            h : '1 小时',\n            hh : '%d 小时',\n            d : '1 天',\n            dd : '%d 天',\n            M : '1 个月',\n            MM : '%d 个月',\n            y : '1 年',\n            yy : '%d 年'\n        },\n        week : {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return zhCn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var zhHk = moment.defineLocale('zh-hk', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日 HH:mm',\n            LLLL : 'YYYY年M月D日dddd HH:mm',\n            l : 'YYYY/M/D',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日dddd HH:mm'\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar : {\n            sameDay : '[今天]LT',\n            nextDay : '[明天]LT',\n            nextWeek : '[下]ddddLT',\n            lastDay : '[昨天]LT',\n            lastWeek : '[上]ddddLT',\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd' :\n                case 'D' :\n                case 'DDD' :\n                    return number + '日';\n                case 'M' :\n                    return number + '月';\n                case 'w' :\n                case 'W' :\n                    return number + '週';\n                default :\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s內',\n            past : '%s前',\n            s : '幾秒',\n            ss : '%d 秒',\n            m : '1 分鐘',\n            mm : '%d 分鐘',\n            h : '1 小時',\n            hh : '%d 小時',\n            d : '1 天',\n            dd : '%d 天',\n            M : '1 個月',\n            MM : '%d 個月',\n            y : '1 年',\n            yy : '%d 年'\n        }\n    });\n\n    return zhHk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var zhTw = moment.defineLocale('zh-tw', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日 HH:mm',\n            LLLL : 'YYYY年M月D日dddd HH:mm',\n            l : 'YYYY/M/D',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日dddd HH:mm'\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar : {\n            sameDay : '[今天] LT',\n            nextDay : '[明天] LT',\n            nextWeek : '[下]dddd LT',\n            lastDay : '[昨天] LT',\n            lastWeek : '[上]dddd LT',\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd' :\n                case 'D' :\n                case 'DDD' :\n                    return number + '日';\n                case 'M' :\n                    return number + '月';\n                case 'w' :\n                case 'W' :\n                    return number + '週';\n                default :\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s內',\n            past : '%s前',\n            s : '幾秒',\n            ss : '%d 秒',\n            m : '1 分鐘',\n            mm : '%d 分鐘',\n            h : '1 小時',\n            hh : '%d 小時',\n            d : '1 天',\n            dd : '%d 天',\n            M : '1 個月',\n            MM : '%d 個月',\n            y : '1 年',\n            yy : '%d 年'\n        }\n    });\n\n    return zhTw;\n\n})));\n","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { printError } from './printError';\nimport { getLocation } from '../language/location';\n\n/**\n * A GraphQLError describes an Error found during the parse, validate, or\n * execute phases of performing a GraphQL operation. In addition to a message\n * and stack trace, it also includes information about the locations in a\n * GraphQL document and/or execution result that correspond to the Error.\n */\n\n\nexport function GraphQLError( // eslint-disable-line no-redeclare\nmessage, nodes, source, positions, path, originalError, extensions) {\n  // Compute list of blame nodes.\n  var _nodes = Array.isArray(nodes) ? nodes.length !== 0 ? nodes : undefined : nodes ? [nodes] : undefined;\n\n  // Compute locations in the source for the given nodes/positions.\n  var _source = source;\n  if (!_source && _nodes) {\n    var node = _nodes[0];\n    _source = node && node.loc && node.loc.source;\n  }\n\n  var _positions = positions;\n  if (!_positions && _nodes) {\n    _positions = _nodes.reduce(function (list, node) {\n      if (node.loc) {\n        list.push(node.loc.start);\n      }\n      return list;\n    }, []);\n  }\n  if (_positions && _positions.length === 0) {\n    _positions = undefined;\n  }\n\n  var _locations = void 0;\n  if (positions && source) {\n    var providedSource = source;\n    _locations = positions.map(function (pos) {\n      return getLocation(providedSource, pos);\n    });\n  } else if (_nodes) {\n    _locations = _nodes.reduce(function (list, node) {\n      if (node.loc) {\n        list.push(getLocation(node.loc.source, node.loc.start));\n      }\n      return list;\n    }, []);\n  }\n\n  Object.defineProperties(this, {\n    message: {\n      value: message,\n      // By being enumerable, JSON.stringify will include `message` in the\n      // resulting output. This ensures that the simplest possible GraphQL\n      // service adheres to the spec.\n      enumerable: true,\n      writable: true\n    },\n    locations: {\n      // Coercing falsey values to undefined ensures they will not be included\n      // in JSON.stringify() when not provided.\n      value: _locations || undefined,\n      // By being enumerable, JSON.stringify will include `locations` in the\n      // resulting output. This ensures that the simplest possible GraphQL\n      // service adheres to the spec.\n      enumerable: true\n    },\n    path: {\n      // Coercing falsey values to undefined ensures they will not be included\n      // in JSON.stringify() when not provided.\n      value: path || undefined,\n      // By being enumerable, JSON.stringify will include `path` in the\n      // resulting output. This ensures that the simplest possible GraphQL\n      // service adheres to the spec.\n      enumerable: true\n    },\n    nodes: {\n      value: _nodes || undefined\n    },\n    source: {\n      value: _source || undefined\n    },\n    positions: {\n      value: _positions || undefined\n    },\n    originalError: {\n      value: originalError\n    },\n    extensions: {\n      value: extensions || originalError && originalError.extensions\n    }\n  });\n\n  // Include (non-enumerable) stack trace.\n  if (originalError && originalError.stack) {\n    Object.defineProperty(this, 'stack', {\n      value: originalError.stack,\n      writable: true,\n      configurable: true\n    });\n  } else if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, GraphQLError);\n  } else {\n    Object.defineProperty(this, 'stack', {\n      value: Error().stack,\n      writable: true,\n      configurable: true\n    });\n  }\n}\n\nGraphQLError.prototype = Object.create(Error.prototype, {\n  constructor: { value: GraphQLError },\n  name: { value: 'GraphQLError' },\n  toString: {\n    value: function toString() {\n      return printError(this);\n    }\n  }\n});","var AWS = require('../core');\nvar util = require('../util');\nvar QueryParamSerializer = require('../query/query_param_serializer');\nvar Shape = require('../model/shape');\nvar populateHostPrefix = require('./helpers').populateHostPrefix;\n\nfunction buildRequest(req) {\n  var operation = req.service.api.operations[req.operation];\n  var httpRequest = req.httpRequest;\n  httpRequest.headers['Content-Type'] =\n    'application/x-www-form-urlencoded; charset=utf-8';\n  httpRequest.params = {\n    Version: req.service.api.apiVersion,\n    Action: operation.name\n  };\n\n  // convert the request parameters into a list of query params,\n  // e.g. Deeply.NestedParam.0.Name=value\n  var builder = new QueryParamSerializer();\n  builder.serialize(req.params, operation.input, function(name, value) {\n    httpRequest.params[name] = value;\n  });\n  httpRequest.body = util.queryParamsToString(httpRequest.params);\n\n  populateHostPrefix(req);\n}\n\nfunction extractError(resp) {\n  var data, body = resp.httpResponse.body.toString();\n  if (body.match('<UnknownOperationException')) {\n    data = {\n      Code: 'UnknownOperation',\n      Message: 'Unknown operation ' + resp.request.operation\n    };\n  } else {\n    try {\n      data = new AWS.XML.Parser().parse(body);\n    } catch (e) {\n      data = {\n        Code: resp.httpResponse.statusCode,\n        Message: resp.httpResponse.statusMessage\n      };\n    }\n  }\n\n  if (data.requestId && !resp.requestId) resp.requestId = data.requestId;\n  if (data.Errors) data = data.Errors;\n  if (data.Error) data = data.Error;\n  if (data.Code) {\n    resp.error = util.error(new Error(), {\n      code: data.Code,\n      message: data.Message\n    });\n  } else {\n    resp.error = util.error(new Error(), {\n      code: resp.httpResponse.statusCode,\n      message: null\n    });\n  }\n}\n\nfunction extractData(resp) {\n  var req = resp.request;\n  var operation = req.service.api.operations[req.operation];\n  var shape = operation.output || {};\n  var origRules = shape;\n\n  if (origRules.resultWrapper) {\n    var tmp = Shape.create({type: 'structure'});\n    tmp.members[origRules.resultWrapper] = shape;\n    tmp.memberNames = [origRules.resultWrapper];\n    util.property(shape, 'name', shape.resultWrapper);\n    shape = tmp;\n  }\n\n  var parser = new AWS.XML.Parser();\n\n  // TODO: Refactor XML Parser to parse RequestId from response.\n  if (shape && shape.members && !shape.members._XAMZRequestId) {\n    var requestIdShape = Shape.create(\n      { type: 'string' },\n      { api: { protocol: 'query' } },\n      'requestId'\n    );\n    shape.members._XAMZRequestId = requestIdShape;\n  }\n\n  var data = parser.parse(resp.httpResponse.body.toString(), shape);\n  resp.requestId = data._XAMZRequestId || data.requestId;\n\n  if (data._XAMZRequestId) delete data._XAMZRequestId;\n\n  if (origRules.resultWrapper) {\n    if (data[origRules.resultWrapper]) {\n      util.update(data, data[origRules.resultWrapper]);\n      delete data[origRules.resultWrapper];\n    }\n  }\n\n  resp.data = data;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n  buildRequest: buildRequest,\n  extractError: extractError,\n  extractData: extractData\n};\n","var memoizedProperty = require('../util').memoizedProperty;\n\nfunction memoize(name, value, factory, nameTr) {\n  memoizedProperty(this, nameTr(name), function() {\n    return factory(name, value);\n  });\n}\n\nfunction Collection(iterable, options, factory, nameTr, callback) {\n  nameTr = nameTr || String;\n  var self = this;\n\n  for (var id in iterable) {\n    if (Object.prototype.hasOwnProperty.call(iterable, id)) {\n      memoize.call(self, id, iterable[id], factory, nameTr);\n      if (callback) callback(id, iterable[id]);\n    }\n  }\n}\n\n/**\n * @api private\n */\nmodule.exports = Collection;\n","var util = require('../util');\nvar Rest = require('./rest');\nvar Json = require('./json');\nvar JsonBuilder = require('../json/builder');\nvar JsonParser = require('../json/parser');\n\nfunction populateBody(req) {\n  var builder = new JsonBuilder();\n  var input = req.service.api.operations[req.operation].input;\n\n  if (input.payload) {\n    var params = {};\n    var payloadShape = input.members[input.payload];\n    params = req.params[input.payload];\n    if (params === undefined) return;\n\n    if (payloadShape.type === 'structure') {\n      req.httpRequest.body = builder.build(params, payloadShape);\n      applyContentTypeHeader(req);\n    } else { // non-JSON payload\n      req.httpRequest.body = params;\n      if (payloadShape.type === 'binary' || payloadShape.isStreaming) {\n        applyContentTypeHeader(req, true);\n      }\n    }\n  } else {\n    var body = builder.build(req.params, input);\n    if (body !== '{}' || req.httpRequest.method !== 'GET') { //don't send empty body for GET method\n      req.httpRequest.body = body;\n    }\n    applyContentTypeHeader(req);\n  }\n}\n\nfunction applyContentTypeHeader(req, isBinary) {\n  var operation = req.service.api.operations[req.operation];\n  var input = operation.input;\n\n  if (!req.httpRequest.headers['Content-Type']) {\n    var type = isBinary ? 'binary/octet-stream' : 'application/json';\n    req.httpRequest.headers['Content-Type'] = type;\n  }\n}\n\nfunction buildRequest(req) {\n  Rest.buildRequest(req);\n\n  // never send body payload on HEAD/DELETE\n  if (['HEAD', 'DELETE'].indexOf(req.httpRequest.method) < 0) {\n    populateBody(req);\n  }\n}\n\nfunction extractError(resp) {\n  Json.extractError(resp);\n}\n\nfunction extractData(resp) {\n  Rest.extractData(resp);\n\n  var req = resp.request;\n  var operation = req.service.api.operations[req.operation];\n  var rules = req.service.api.operations[req.operation].output || {};\n  var parser;\n  var hasEventOutput = operation.hasEventOutput;\n\n  if (rules.payload) {\n    var payloadMember = rules.members[rules.payload];\n    var body = resp.httpResponse.body;\n    if (payloadMember.isEventStream) {\n      parser = new JsonParser();\n      resp.data[payload] = util.createEventStream(\n        AWS.HttpClient.streamsApiVersion === 2 ? resp.httpResponse.stream : body,\n        parser,\n        payloadMember\n      );\n    } else if (payloadMember.type === 'structure' || payloadMember.type === 'list') {\n      var parser = new JsonParser();\n      resp.data[rules.payload] = parser.parse(body, payloadMember);\n    } else if (payloadMember.type === 'binary' || payloadMember.isStreaming) {\n      resp.data[rules.payload] = body;\n    } else {\n      resp.data[rules.payload] = payloadMember.toType(body);\n    }\n  } else {\n    var data = resp.data;\n    Json.extractData(resp);\n    resp.data = util.merge(data, resp.data);\n  }\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n  buildRequest: buildRequest,\n  extractError: extractError,\n  extractData: extractData\n};\n","var AWS = require('../core');\nvar util = require('../util');\nvar Rest = require('./rest');\n\nfunction populateBody(req) {\n  var input = req.service.api.operations[req.operation].input;\n  var builder = new AWS.XML.Builder();\n  var params = req.params;\n\n  var payload = input.payload;\n  if (payload) {\n    var payloadMember = input.members[payload];\n    params = params[payload];\n    if (params === undefined) return;\n\n    if (payloadMember.type === 'structure') {\n      var rootElement = payloadMember.name;\n      req.httpRequest.body = builder.toXML(params, payloadMember, rootElement, true);\n    } else { // non-xml payload\n      req.httpRequest.body = params;\n    }\n  } else {\n    req.httpRequest.body = builder.toXML(params, input, input.name ||\n      input.shape || util.string.upperFirst(req.operation) + 'Request');\n  }\n}\n\nfunction buildRequest(req) {\n  Rest.buildRequest(req);\n\n  // never send body payload on GET/HEAD\n  if (['GET', 'HEAD'].indexOf(req.httpRequest.method) < 0) {\n    populateBody(req);\n  }\n}\n\nfunction extractError(resp) {\n  Rest.extractError(resp);\n\n  var data;\n  try {\n    data = new AWS.XML.Parser().parse(resp.httpResponse.body.toString());\n  } catch (e) {\n    data = {\n      Code: resp.httpResponse.statusCode,\n      Message: resp.httpResponse.statusMessage\n    };\n  }\n\n  if (data.Errors) data = data.Errors;\n  if (data.Error) data = data.Error;\n  if (data.Code) {\n    resp.error = util.error(new Error(), {\n      code: data.Code,\n      message: data.Message\n    });\n  } else {\n    resp.error = util.error(new Error(), {\n      code: resp.httpResponse.statusCode,\n      message: null\n    });\n  }\n}\n\nfunction extractData(resp) {\n  Rest.extractData(resp);\n\n  var parser;\n  var req = resp.request;\n  var body = resp.httpResponse.body;\n  var operation = req.service.api.operations[req.operation];\n  var output = operation.output;\n\n  var hasEventOutput = operation.hasEventOutput;\n\n  var payload = output.payload;\n  if (payload) {\n    var payloadMember = output.members[payload];\n    if (payloadMember.isEventStream) {\n      parser = new AWS.XML.Parser();\n      resp.data[payload] = util.createEventStream(\n        AWS.HttpClient.streamsApiVersion === 2 ? resp.httpResponse.stream : resp.httpResponse.body,\n        parser,\n        payloadMember\n      );\n    } else if (payloadMember.type === 'structure') {\n      parser = new AWS.XML.Parser();\n      resp.data[payload] = parser.parse(body.toString(), payloadMember);\n    } else if (payloadMember.type === 'binary' || payloadMember.isStreaming) {\n      resp.data[payload] = body;\n    } else {\n      resp.data[payload] = payloadMember.toType(body);\n    }\n  } else if (body.length > 0) {\n    parser = new AWS.XML.Parser();\n    var data = parser.parse(body.toString(), output);\n    util.update(resp.data, data);\n  }\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n  buildRequest: buildRequest,\n  extractError: extractError,\n  extractData: extractData\n};\n","var Collection = require('./collection');\nvar Operation = require('./operation');\nvar Shape = require('./shape');\nvar Paginator = require('./paginator');\nvar ResourceWaiter = require('./resource_waiter');\n\nvar util = require('../util');\nvar property = util.property;\nvar memoizedProperty = util.memoizedProperty;\n\nfunction Api(api, options) {\n  var self = this;\n  api = api || {};\n  options = options || {};\n  options.api = this;\n\n  api.metadata = api.metadata || {};\n\n  property(this, 'isApi', true, false);\n  property(this, 'apiVersion', api.metadata.apiVersion);\n  property(this, 'endpointPrefix', api.metadata.endpointPrefix);\n  property(this, 'signingName', api.metadata.signingName);\n  property(this, 'globalEndpoint', api.metadata.globalEndpoint);\n  property(this, 'signatureVersion', api.metadata.signatureVersion);\n  property(this, 'jsonVersion', api.metadata.jsonVersion);\n  property(this, 'targetPrefix', api.metadata.targetPrefix);\n  property(this, 'protocol', api.metadata.protocol);\n  property(this, 'timestampFormat', api.metadata.timestampFormat);\n  property(this, 'xmlNamespaceUri', api.metadata.xmlNamespace);\n  property(this, 'abbreviation', api.metadata.serviceAbbreviation);\n  property(this, 'fullName', api.metadata.serviceFullName);\n  property(this, 'serviceId', api.metadata.serviceId);\n\n  memoizedProperty(this, 'className', function() {\n    var name = api.metadata.serviceAbbreviation || api.metadata.serviceFullName;\n    if (!name) return null;\n\n    name = name.replace(/^Amazon|AWS\\s*|\\(.*|\\s+|\\W+/g, '');\n    if (name === 'ElasticLoadBalancing') name = 'ELB';\n    return name;\n  });\n\n  function addEndpointOperation(name, operation) {\n    if (operation.endpointoperation === true) {\n      property(self, 'endpointOperation', util.string.lowerFirst(name));\n    }\n  }\n\n  property(this, 'operations', new Collection(api.operations, options, function(name, operation) {\n    return new Operation(name, operation, options);\n  }, util.string.lowerFirst, addEndpointOperation));\n\n  property(this, 'shapes', new Collection(api.shapes, options, function(name, shape) {\n    return Shape.create(shape, options);\n  }));\n\n  property(this, 'paginators', new Collection(api.paginators, options, function(name, paginator) {\n    return new Paginator(name, paginator, options);\n  }));\n\n  property(this, 'waiters', new Collection(api.waiters, options, function(name, waiter) {\n    return new ResourceWaiter(name, waiter, options);\n  }, util.string.lowerFirst));\n\n  if (options.documentation) {\n    property(this, 'documentation', api.documentation);\n    property(this, 'documentationUrl', api.documentationUrl);\n  }\n}\n\n/**\n * @api private\n */\nmodule.exports = Api;\n","var Shape = require('./shape');\n\nvar util = require('../util');\nvar property = util.property;\nvar memoizedProperty = util.memoizedProperty;\n\nfunction Operation(name, operation, options) {\n  var self = this;\n  options = options || {};\n\n  property(this, 'name', operation.name || name);\n  property(this, 'api', options.api, false);\n\n  operation.http = operation.http || {};\n  property(this, 'endpoint', operation.endpoint);\n  property(this, 'httpMethod', operation.http.method || 'POST');\n  property(this, 'httpPath', operation.http.requestUri || '/');\n  property(this, 'authtype', operation.authtype || '');\n  property(\n    this,\n    'endpointDiscoveryRequired',\n    operation.endpointdiscovery ?\n      (operation.endpointdiscovery.required ? 'REQUIRED' : 'OPTIONAL') :\n    'NULL'\n  );\n\n  memoizedProperty(this, 'input', function() {\n    if (!operation.input) {\n      return new Shape.create({type: 'structure'}, options);\n    }\n    return Shape.create(operation.input, options);\n  });\n\n  memoizedProperty(this, 'output', function() {\n    if (!operation.output) {\n      return new Shape.create({type: 'structure'}, options);\n    }\n    return Shape.create(operation.output, options);\n  });\n\n  memoizedProperty(this, 'errors', function() {\n    var list = [];\n    if (!operation.errors) return null;\n\n    for (var i = 0; i < operation.errors.length; i++) {\n      list.push(Shape.create(operation.errors[i], options));\n    }\n\n    return list;\n  });\n\n  memoizedProperty(this, 'paginator', function() {\n    return options.api.paginators[name];\n  });\n\n  if (options.documentation) {\n    property(this, 'documentation', operation.documentation);\n    property(this, 'documentationUrl', operation.documentationUrl);\n  }\n\n  // idempotentMembers only tracks top-level input shapes\n  memoizedProperty(this, 'idempotentMembers', function() {\n    var idempotentMembers = [];\n    var input = self.input;\n    var members = input.members;\n    if (!input.members) {\n      return idempotentMembers;\n    }\n    for (var name in members) {\n      if (!members.hasOwnProperty(name)) {\n        continue;\n      }\n      if (members[name].isIdempotent === true) {\n        idempotentMembers.push(name);\n      }\n    }\n    return idempotentMembers;\n  });\n\n  memoizedProperty(this, 'hasEventOutput', function() {\n    var output = self.output;\n    return hasEventStream(output);\n  });\n}\n\nfunction hasEventStream(topLevelShape) {\n  var members = topLevelShape.members;\n  var payload = topLevelShape.payload;\n\n  if (!topLevelShape.members) {\n    return false;\n  }\n\n  if (payload) {\n    var payloadMember = members[payload];\n    return payloadMember.isEventStream;\n  }\n\n  // check if any member is an event stream\n  for (var name in members) {\n    if (!members.hasOwnProperty(name)) {\n      if (members[name].isEventStream === true) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\n/**\n * @api private\n */\nmodule.exports = Operation;\n","var property = require('../util').property;\n\nfunction Paginator(name, paginator) {\n  property(this, 'inputToken', paginator.input_token);\n  property(this, 'limitKey', paginator.limit_key);\n  property(this, 'moreResults', paginator.more_results);\n  property(this, 'outputToken', paginator.output_token);\n  property(this, 'resultKey', paginator.result_key);\n}\n\n/**\n * @api private\n */\nmodule.exports = Paginator;\n","var util = require('../util');\nvar property = util.property;\n\nfunction ResourceWaiter(name, waiter, options) {\n  options = options || {};\n  property(this, 'name', name);\n  property(this, 'api', options.api, false);\n\n  if (waiter.operation) {\n    property(this, 'operation', util.string.lowerFirst(waiter.operation));\n  }\n\n  var self = this;\n  var keys = [\n    'type',\n    'description',\n    'delay',\n    'maxAttempts',\n    'acceptors'\n  ];\n\n  keys.forEach(function(key) {\n    var value = waiter[key];\n    if (value) {\n      property(self, key, value);\n    }\n  });\n}\n\n/**\n * @api private\n */\nmodule.exports = ResourceWaiter;\n","var AWS = require('./core');\n\n/**\n * @api private\n * @!method on(eventName, callback)\n *   Registers an event listener callback for the event given by `eventName`.\n *   Parameters passed to the callback function depend on the individual event\n *   being triggered. See the event documentation for those parameters.\n *\n *   @param eventName [String] the event name to register the listener for\n *   @param callback [Function] the listener callback function\n *   @param toHead [Boolean] attach the listener callback to the head of callback array if set to true.\n *     Default to be false.\n *   @return [AWS.SequentialExecutor] the same object for chaining\n */\nAWS.SequentialExecutor = AWS.util.inherit({\n\n  constructor: function SequentialExecutor() {\n    this._events = {};\n  },\n\n  /**\n   * @api private\n   */\n  listeners: function listeners(eventName) {\n    return this._events[eventName] ? this._events[eventName].slice(0) : [];\n  },\n\n  on: function on(eventName, listener, toHead) {\n    if (this._events[eventName]) {\n      toHead ?\n        this._events[eventName].unshift(listener) :\n        this._events[eventName].push(listener);\n    } else {\n      this._events[eventName] = [listener];\n    }\n    return this;\n  },\n\n  onAsync: function onAsync(eventName, listener, toHead) {\n    listener._isAsync = true;\n    return this.on(eventName, listener, toHead);\n  },\n\n  removeListener: function removeListener(eventName, listener) {\n    var listeners = this._events[eventName];\n    if (listeners) {\n      var length = listeners.length;\n      var position = -1;\n      for (var i = 0; i < length; ++i) {\n        if (listeners[i] === listener) {\n          position = i;\n        }\n      }\n      if (position > -1) {\n        listeners.splice(position, 1);\n      }\n    }\n    return this;\n  },\n\n  removeAllListeners: function removeAllListeners(eventName) {\n    if (eventName) {\n      delete this._events[eventName];\n    } else {\n      this._events = {};\n    }\n    return this;\n  },\n\n  /**\n   * @api private\n   */\n  emit: function emit(eventName, eventArgs, doneCallback) {\n    if (!doneCallback) doneCallback = function() { };\n    var listeners = this.listeners(eventName);\n    var count = listeners.length;\n    this.callListeners(listeners, eventArgs, doneCallback);\n    return count > 0;\n  },\n\n  /**\n   * @api private\n   */\n  callListeners: function callListeners(listeners, args, doneCallback, prevError) {\n    var self = this;\n    var error = prevError || null;\n\n    function callNextListener(err) {\n      if (err) {\n        error = AWS.util.error(error || new Error(), err);\n        if (self._haltHandlersOnError) {\n          return doneCallback.call(self, error);\n        }\n      }\n      self.callListeners(listeners, args, doneCallback, error);\n    }\n\n    while (listeners.length > 0) {\n      var listener = listeners.shift();\n      if (listener._isAsync) { // asynchronous listener\n        listener.apply(self, args.concat([callNextListener]));\n        return; // stop here, callNextListener will continue\n      } else { // synchronous listener\n        try {\n          listener.apply(self, args);\n        } catch (err) {\n          error = AWS.util.error(error || new Error(), err);\n        }\n        if (error && self._haltHandlersOnError) {\n          doneCallback.call(self, error);\n          return;\n        }\n      }\n    }\n    doneCallback.call(self, error);\n  },\n\n  /**\n   * Adds or copies a set of listeners from another list of\n   * listeners or SequentialExecutor object.\n   *\n   * @param listeners [map<String,Array<Function>>, AWS.SequentialExecutor]\n   *   a list of events and callbacks, or an event emitter object\n   *   containing listeners to add to this emitter object.\n   * @return [AWS.SequentialExecutor] the emitter object, for chaining.\n   * @example Adding listeners from a map of listeners\n   *   emitter.addListeners({\n   *     event1: [function() { ... }, function() { ... }],\n   *     event2: [function() { ... }]\n   *   });\n   *   emitter.emit('event1'); // emitter has event1\n   *   emitter.emit('event2'); // emitter has event2\n   * @example Adding listeners from another emitter object\n   *   var emitter1 = new AWS.SequentialExecutor();\n   *   emitter1.on('event1', function() { ... });\n   *   emitter1.on('event2', function() { ... });\n   *   var emitter2 = new AWS.SequentialExecutor();\n   *   emitter2.addListeners(emitter1);\n   *   emitter2.emit('event1'); // emitter2 has event1\n   *   emitter2.emit('event2'); // emitter2 has event2\n   */\n  addListeners: function addListeners(listeners) {\n    var self = this;\n\n    // extract listeners if parameter is an SequentialExecutor object\n    if (listeners._events) listeners = listeners._events;\n\n    AWS.util.each(listeners, function(event, callbacks) {\n      if (typeof callbacks === 'function') callbacks = [callbacks];\n      AWS.util.arrayEach(callbacks, function(callback) {\n        self.on(event, callback);\n      });\n    });\n\n    return self;\n  },\n\n  /**\n   * Registers an event with {on} and saves the callback handle function\n   * as a property on the emitter object using a given `name`.\n   *\n   * @param name [String] the property name to set on this object containing\n   *   the callback function handle so that the listener can be removed in\n   *   the future.\n   * @param (see on)\n   * @return (see on)\n   * @example Adding a named listener DATA_CALLBACK\n   *   var listener = function() { doSomething(); };\n   *   emitter.addNamedListener('DATA_CALLBACK', 'data', listener);\n   *\n   *   // the following prints: true\n   *   console.log(emitter.DATA_CALLBACK == listener);\n   */\n  addNamedListener: function addNamedListener(name, eventName, callback, toHead) {\n    this[name] = callback;\n    this.addListener(eventName, callback, toHead);\n    return this;\n  },\n\n  /**\n   * @api private\n   */\n  addNamedAsyncListener: function addNamedAsyncListener(name, eventName, callback, toHead) {\n    callback._isAsync = true;\n    return this.addNamedListener(name, eventName, callback, toHead);\n  },\n\n  /**\n   * Helper method to add a set of named listeners using\n   * {addNamedListener}. The callback contains a parameter\n   * with a handle to the `addNamedListener` method.\n   *\n   * @callback callback function(add)\n   *   The callback function is called immediately in order to provide\n   *   the `add` function to the block. This simplifies the addition of\n   *   a large group of named listeners.\n   *   @param add [Function] the {addNamedListener} function to call\n   *     when registering listeners.\n   * @example Adding a set of named listeners\n   *   emitter.addNamedListeners(function(add) {\n   *     add('DATA_CALLBACK', 'data', function() { ... });\n   *     add('OTHER', 'otherEvent', function() { ... });\n   *     add('LAST', 'lastEvent', function() { ... });\n   *   });\n   *\n   *   // these properties are now set:\n   *   emitter.DATA_CALLBACK;\n   *   emitter.OTHER;\n   *   emitter.LAST;\n   */\n  addNamedListeners: function addNamedListeners(callback) {\n    var self = this;\n    callback(\n      function() {\n        self.addNamedListener.apply(self, arguments);\n      },\n      function() {\n        self.addNamedAsyncListener.apply(self, arguments);\n      }\n    );\n    return this;\n  }\n});\n\n/**\n * {on} is the prefered method.\n * @api private\n */\nAWS.SequentialExecutor.prototype.addListener = AWS.SequentialExecutor.prototype.on;\n\n/**\n * @api private\n */\nmodule.exports = AWS.SequentialExecutor;\n","var AWS = require('./core');\n\n/**\n * Represents your AWS security credentials, specifically the\n * {accessKeyId}, {secretAccessKey}, and optional {sessionToken}.\n * Creating a `Credentials` object allows you to pass around your\n * security information to configuration and service objects.\n *\n * Note that this class typically does not need to be constructed manually,\n * as the {AWS.Config} and {AWS.Service} classes both accept simple\n * options hashes with the three keys. These structures will be converted\n * into Credentials objects automatically.\n *\n * ## Expiring and Refreshing Credentials\n *\n * Occasionally credentials can expire in the middle of a long-running\n * application. In this case, the SDK will automatically attempt to\n * refresh the credentials from the storage location if the Credentials\n * class implements the {refresh} method.\n *\n * If you are implementing a credential storage location, you\n * will want to create a subclass of the `Credentials` class and\n * override the {refresh} method. This method allows credentials to be\n * retrieved from the backing store, be it a file system, database, or\n * some network storage. The method should reset the credential attributes\n * on the object.\n *\n * @!attribute expired\n *   @return [Boolean] whether the credentials have been expired and\n *     require a refresh. Used in conjunction with {expireTime}.\n * @!attribute expireTime\n *   @return [Date] a time when credentials should be considered expired. Used\n *     in conjunction with {expired}.\n * @!attribute accessKeyId\n *   @return [String] the AWS access key ID\n * @!attribute secretAccessKey\n *   @return [String] the AWS secret access key\n * @!attribute sessionToken\n *   @return [String] an optional AWS session token\n */\nAWS.Credentials = AWS.util.inherit({\n  /**\n   * A credentials object can be created using positional arguments or an options\n   * hash.\n   *\n   * @overload AWS.Credentials(accessKeyId, secretAccessKey, sessionToken=null)\n   *   Creates a Credentials object with a given set of credential information\n   *   as positional arguments.\n   *   @param accessKeyId [String] the AWS access key ID\n   *   @param secretAccessKey [String] the AWS secret access key\n   *   @param sessionToken [String] the optional AWS session token\n   *   @example Create a credentials object with AWS credentials\n   *     var creds = new AWS.Credentials('akid', 'secret', 'session');\n   * @overload AWS.Credentials(options)\n   *   Creates a Credentials object with a given set of credential information\n   *   as an options hash.\n   *   @option options accessKeyId [String] the AWS access key ID\n   *   @option options secretAccessKey [String] the AWS secret access key\n   *   @option options sessionToken [String] the optional AWS session token\n   *   @example Create a credentials object with AWS credentials\n   *     var creds = new AWS.Credentials({\n   *       accessKeyId: 'akid', secretAccessKey: 'secret', sessionToken: 'session'\n   *     });\n   */\n  constructor: function Credentials() {\n    // hide secretAccessKey from being displayed with util.inspect\n    AWS.util.hideProperties(this, ['secretAccessKey']);\n\n    this.expired = false;\n    this.expireTime = null;\n    this.refreshCallbacks = [];\n    if (arguments.length === 1 && typeof arguments[0] === 'object') {\n      var creds = arguments[0].credentials || arguments[0];\n      this.accessKeyId = creds.accessKeyId;\n      this.secretAccessKey = creds.secretAccessKey;\n      this.sessionToken = creds.sessionToken;\n    } else {\n      this.accessKeyId = arguments[0];\n      this.secretAccessKey = arguments[1];\n      this.sessionToken = arguments[2];\n    }\n  },\n\n  /**\n   * @return [Integer] the number of seconds before {expireTime} during which\n   *   the credentials will be considered expired.\n   */\n  expiryWindow: 15,\n\n  /**\n   * @return [Boolean] whether the credentials object should call {refresh}\n   * @note Subclasses should override this method to provide custom refresh\n   *   logic.\n   */\n  needsRefresh: function needsRefresh() {\n    var currentTime = AWS.util.date.getDate().getTime();\n    var adjustedTime = new Date(currentTime + this.expiryWindow * 1000);\n\n    if (this.expireTime && adjustedTime > this.expireTime) {\n      return true;\n    } else {\n      return this.expired || !this.accessKeyId || !this.secretAccessKey;\n    }\n  },\n\n  /**\n   * Gets the existing credentials, refreshing them if they are not yet loaded\n   * or have expired. Users should call this method before using {refresh},\n   * as this will not attempt to reload credentials when they are already\n   * loaded into the object.\n   *\n   * @callback callback function(err)\n   *   When this callback is called with no error, it means either credentials\n   *   do not need to be refreshed or refreshed credentials information has\n   *   been loaded into the object (as the `accessKeyId`, `secretAccessKey`,\n   *   and `sessionToken` properties).\n   *   @param err [Error] if an error occurred, this value will be filled\n   */\n  get: function get(callback) {\n    var self = this;\n    if (this.needsRefresh()) {\n      this.refresh(function(err) {\n        if (!err) self.expired = false; // reset expired flag\n        if (callback) callback(err);\n      });\n    } else if (callback) {\n      callback();\n    }\n  },\n\n  /**\n   * @!method  getPromise()\n   *   Returns a 'thenable' promise.\n   *   Gets the existing credentials, refreshing them if they are not yet loaded\n   *   or have expired. Users should call this method before using {refresh},\n   *   as this will not attempt to reload credentials when they are already\n   *   loaded into the object.\n   *\n   *   Two callbacks can be provided to the `then` method on the returned promise.\n   *   The first callback will be called if the promise is fulfilled, and the second\n   *   callback will be called if the promise is rejected.\n   *   @callback fulfilledCallback function()\n   *     Called if the promise is fulfilled. When this callback is called, it\n   *     means either credentials do not need to be refreshed or refreshed\n   *     credentials information has been loaded into the object (as the\n   *     `accessKeyId`, `secretAccessKey`, and `sessionToken` properties).\n   *   @callback rejectedCallback function(err)\n   *     Called if the promise is rejected.\n   *     @param err [Error] if an error occurred, this value will be filled\n   *   @return [Promise] A promise that represents the state of the `get` call.\n   *   @example Calling the `getPromise` method.\n   *     var promise = credProvider.getPromise();\n   *     promise.then(function() { ... }, function(err) { ... });\n   */\n\n  /**\n   * @!method  refreshPromise()\n   *   Returns a 'thenable' promise.\n   *   Refreshes the credentials. Users should call {get} before attempting\n   *   to forcibly refresh credentials.\n   *\n   *   Two callbacks can be provided to the `then` method on the returned promise.\n   *   The first callback will be called if the promise is fulfilled, and the second\n   *   callback will be called if the promise is rejected.\n   *   @callback fulfilledCallback function()\n   *     Called if the promise is fulfilled. When this callback is called, it\n   *     means refreshed credentials information has been loaded into the object\n   *     (as the `accessKeyId`, `secretAccessKey`, and `sessionToken` properties).\n   *   @callback rejectedCallback function(err)\n   *     Called if the promise is rejected.\n   *     @param err [Error] if an error occurred, this value will be filled\n   *   @return [Promise] A promise that represents the state of the `refresh` call.\n   *   @example Calling the `refreshPromise` method.\n   *     var promise = credProvider.refreshPromise();\n   *     promise.then(function() { ... }, function(err) { ... });\n   */\n\n  /**\n   * Refreshes the credentials. Users should call {get} before attempting\n   * to forcibly refresh credentials.\n   *\n   * @callback callback function(err)\n   *   When this callback is called with no error, it means refreshed\n   *   credentials information has been loaded into the object (as the\n   *   `accessKeyId`, `secretAccessKey`, and `sessionToken` properties).\n   *   @param err [Error] if an error occurred, this value will be filled\n   * @note Subclasses should override this class to reset the\n   *   {accessKeyId}, {secretAccessKey} and optional {sessionToken}\n   *   on the credentials object and then call the callback with\n   *   any error information.\n   * @see get\n   */\n  refresh: function refresh(callback) {\n    this.expired = false;\n    callback();\n  },\n\n  /**\n   * @api private\n   * @param callback\n   */\n  coalesceRefresh: function coalesceRefresh(callback, sync) {\n    var self = this;\n    if (self.refreshCallbacks.push(callback) === 1) {\n      self.load(function onLoad(err) {\n        AWS.util.arrayEach(self.refreshCallbacks, function(callback) {\n          if (sync) {\n            callback(err);\n          } else {\n            // callback could throw, so defer to ensure all callbacks are notified\n            AWS.util.defer(function () {\n              callback(err);\n            });\n          }\n        });\n        self.refreshCallbacks.length = 0;\n      });\n    }\n  },\n\n  /**\n   * @api private\n   * @param callback\n   */\n  load: function load(callback) {\n    callback();\n  }\n});\n\n/**\n * @api private\n */\nAWS.Credentials.addPromisesToClass = function addPromisesToClass(PromiseDependency) {\n  this.prototype.getPromise = AWS.util.promisifyMethod('get', PromiseDependency);\n  this.prototype.refreshPromise = AWS.util.promisifyMethod('refresh', PromiseDependency);\n};\n\n/**\n * @api private\n */\nAWS.Credentials.deletePromisesFromClass = function deletePromisesFromClass() {\n  delete this.prototype.getPromise;\n  delete this.prototype.refreshPromise;\n};\n\nAWS.util.addPromises(AWS.Credentials);\n","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\nfunction trimDots(ary) {\n  for (var i = 0; i < ary.length; ++i) {\n    var part = ary[i];\n    if (part === '.') {\n      ary.splice(i, 1);\n      i -= 1;\n    } else if (part === '..') {\n      if (i === 0 || i === 1 && ary[2] === '..' || ary[i - 1] === '..') {\n        continue;\n      } else if (i > 0) {\n        ary.splice(i - 1, 2);\n        i -= 2;\n      }\n    }\n  }\n}\n\nexport function relativeToFile(name, file) {\n  var fileParts = file && file.split('/');\n  var nameParts = name.trim().split('/');\n\n  if (nameParts[0].charAt(0) === '.' && fileParts) {\n    var normalizedBaseParts = fileParts.slice(0, fileParts.length - 1);\n    nameParts.unshift.apply(nameParts, normalizedBaseParts);\n  }\n\n  trimDots(nameParts);\n\n  return nameParts.join('/');\n}\n\nexport function join(path1, path2) {\n  if (!path1) {\n    return path2;\n  }\n\n  if (!path2) {\n    return path1;\n  }\n\n  var schemeMatch = path1.match(/^([^/]*?:)\\//);\n  var scheme = schemeMatch && schemeMatch.length > 0 ? schemeMatch[1] : '';\n  path1 = path1.substr(scheme.length);\n\n  var urlPrefix = void 0;\n  if (path1.indexOf('///') === 0 && scheme === 'file:') {\n    urlPrefix = '///';\n  } else if (path1.indexOf('//') === 0) {\n    urlPrefix = '//';\n  } else if (path1.indexOf('/') === 0) {\n    urlPrefix = '/';\n  } else {\n    urlPrefix = '';\n  }\n\n  var trailingSlash = path2.slice(-1) === '/' ? '/' : '';\n\n  var url1 = path1.split('/');\n  var url2 = path2.split('/');\n  var url3 = [];\n\n  for (var i = 0, ii = url1.length; i < ii; ++i) {\n    if (url1[i] === '..') {\n      url3.pop();\n    } else if (url1[i] === '.' || url1[i] === '') {\n      continue;\n    } else {\n      url3.push(url1[i]);\n    }\n  }\n\n  for (var _i = 0, _ii = url2.length; _i < _ii; ++_i) {\n    if (url2[_i] === '..') {\n      url3.pop();\n    } else if (url2[_i] === '.' || url2[_i] === '') {\n      continue;\n    } else {\n      url3.push(url2[_i]);\n    }\n  }\n\n  return scheme + urlPrefix + url3.join('/') + trailingSlash;\n}\n\nvar encode = encodeURIComponent;\nvar encodeKey = function encodeKey(k) {\n  return encode(k).replace('%24', '$');\n};\n\nfunction buildParam(key, value, traditional) {\n  var result = [];\n  if (value === null || value === undefined) {\n    return result;\n  }\n  if (Array.isArray(value)) {\n    for (var i = 0, l = value.length; i < l; i++) {\n      if (traditional) {\n        result.push(encodeKey(key) + '=' + encode(value[i]));\n      } else {\n        var arrayKey = key + '[' + (_typeof(value[i]) === 'object' && value[i] !== null ? i : '') + ']';\n        result = result.concat(buildParam(arrayKey, value[i]));\n      }\n    }\n  } else if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && !traditional) {\n    for (var propertyName in value) {\n      result = result.concat(buildParam(key + '[' + propertyName + ']', value[propertyName]));\n    }\n  } else {\n    result.push(encodeKey(key) + '=' + encode(value));\n  }\n  return result;\n}\n\nexport function buildQueryString(params, traditional) {\n  var pairs = [];\n  var keys = Object.keys(params || {}).sort();\n  for (var i = 0, len = keys.length; i < len; i++) {\n    var key = keys[i];\n    pairs = pairs.concat(buildParam(key, params[key], traditional));\n  }\n\n  if (pairs.length === 0) {\n    return '';\n  }\n\n  return pairs.join('&');\n}\n\nfunction processScalarParam(existedParam, value) {\n  if (Array.isArray(existedParam)) {\n    existedParam.push(value);\n    return existedParam;\n  }\n  if (existedParam !== undefined) {\n    return [existedParam, value];\n  }\n\n  return value;\n}\n\nfunction parseComplexParam(queryParams, keys, value) {\n  var currentParams = queryParams;\n  var keysLastIndex = keys.length - 1;\n  for (var j = 0; j <= keysLastIndex; j++) {\n    var key = keys[j] === '' ? currentParams.length : keys[j];\n    if (j < keysLastIndex) {\n      var prevValue = !currentParams[key] || _typeof(currentParams[key]) === 'object' ? currentParams[key] : [currentParams[key]];\n      currentParams = currentParams[key] = prevValue || (isNaN(keys[j + 1]) ? {} : []);\n    } else {\n      currentParams = currentParams[key] = value;\n    }\n  }\n}\n\nexport function parseQueryString(queryString) {\n  var queryParams = {};\n  if (!queryString || typeof queryString !== 'string') {\n    return queryParams;\n  }\n\n  var query = queryString;\n  if (query.charAt(0) === '?') {\n    query = query.substr(1);\n  }\n\n  var pairs = query.replace(/\\+/g, ' ').split('&');\n  for (var i = 0; i < pairs.length; i++) {\n    var pair = pairs[i].split('=');\n    var key = decodeURIComponent(pair[0]);\n    if (!key) {\n      continue;\n    }\n\n    var keys = key.split('][');\n    var keysLastIndex = keys.length - 1;\n\n    if (/\\[/.test(keys[0]) && /\\]$/.test(keys[keysLastIndex])) {\n      keys[keysLastIndex] = keys[keysLastIndex].replace(/\\]$/, '');\n      keys = keys.shift().split('[').concat(keys);\n      keysLastIndex = keys.length - 1;\n    } else {\n      keysLastIndex = 0;\n    }\n\n    if (pair.length >= 2) {\n      var value = pair[1] ? decodeURIComponent(pair[1]) : '';\n      if (keysLastIndex) {\n        parseComplexParam(queryParams, keys, value);\n      } else {\n        queryParams[key] = processScalarParam(queryParams[key], value);\n      }\n    } else {\n      queryParams[key] = true;\n    }\n  }\n  return queryParams;\n}","var AWS = require('../core');\n\n/**\n * Creates a credential provider chain that searches for AWS credentials\n * in a list of credential providers specified by the {providers} property.\n *\n * By default, the chain will use the {defaultProviders} to resolve credentials.\n * These providers will look in the environment using the\n * {AWS.EnvironmentCredentials} class with the 'AWS' and 'AMAZON' prefixes.\n *\n * ## Setting Providers\n *\n * Each provider in the {providers} list should be a function that returns\n * a {AWS.Credentials} object, or a hardcoded credentials object. The function\n * form allows for delayed execution of the credential construction.\n *\n * ## Resolving Credentials from a Chain\n *\n * Call {resolve} to return the first valid credential object that can be\n * loaded by the provider chain.\n *\n * For example, to resolve a chain with a custom provider that checks a file\n * on disk after the set of {defaultProviders}:\n *\n * ```javascript\n * var diskProvider = new AWS.FileSystemCredentials('./creds.json');\n * var chain = new AWS.CredentialProviderChain();\n * chain.providers.push(diskProvider);\n * chain.resolve();\n * ```\n *\n * The above code will return the `diskProvider` object if the\n * file contains credentials and the `defaultProviders` do not contain\n * any credential settings.\n *\n * @!attribute providers\n *   @return [Array<AWS.Credentials, Function>]\n *     a list of credentials objects or functions that return credentials\n *     objects. If the provider is a function, the function will be\n *     executed lazily when the provider needs to be checked for valid\n *     credentials. By default, this object will be set to the\n *     {defaultProviders}.\n *   @see defaultProviders\n */\nAWS.CredentialProviderChain = AWS.util.inherit(AWS.Credentials, {\n\n  /**\n   * Creates a new CredentialProviderChain with a default set of providers\n   * specified by {defaultProviders}.\n   */\n  constructor: function CredentialProviderChain(providers) {\n    if (providers) {\n      this.providers = providers;\n    } else {\n      this.providers = AWS.CredentialProviderChain.defaultProviders.slice(0);\n    }\n    this.resolveCallbacks = [];\n  },\n\n  /**\n   * @!method  resolvePromise()\n   *   Returns a 'thenable' promise.\n   *   Resolves the provider chain by searching for the first set of\n   *   credentials in {providers}.\n   *\n   *   Two callbacks can be provided to the `then` method on the returned promise.\n   *   The first callback will be called if the promise is fulfilled, and the second\n   *   callback will be called if the promise is rejected.\n   *   @callback fulfilledCallback function(credentials)\n   *     Called if the promise is fulfilled and the provider resolves the chain\n   *     to a credentials object\n   *     @param credentials [AWS.Credentials] the credentials object resolved\n   *       by the provider chain.\n   *   @callback rejectedCallback function(error)\n   *     Called if the promise is rejected.\n   *     @param err [Error] the error object returned if no credentials are found.\n   *   @return [Promise] A promise that represents the state of the `resolve` method call.\n   *   @example Calling the `resolvePromise` method.\n   *     var promise = chain.resolvePromise();\n   *     promise.then(function(credentials) { ... }, function(err) { ... });\n   */\n\n  /**\n   * Resolves the provider chain by searching for the first set of\n   * credentials in {providers}.\n   *\n   * @callback callback function(err, credentials)\n   *   Called when the provider resolves the chain to a credentials object\n   *   or null if no credentials can be found.\n   *\n   *   @param err [Error] the error object returned if no credentials are\n   *     found.\n   *   @param credentials [AWS.Credentials] the credentials object resolved\n   *     by the provider chain.\n   * @return [AWS.CredentialProviderChain] the provider, for chaining.\n   */\n  resolve: function resolve(callback) {\n    var self = this;\n    if (self.providers.length === 0) {\n      callback(new Error('No providers'));\n      return self;\n    }\n\n    if (self.resolveCallbacks.push(callback) === 1) {\n      var index = 0;\n      var providers = self.providers.slice(0);\n\n      function resolveNext(err, creds) {\n        if ((!err && creds) || index === providers.length) {\n          AWS.util.arrayEach(self.resolveCallbacks, function (callback) {\n            callback(err, creds);\n          });\n          self.resolveCallbacks.length = 0;\n          return;\n        }\n\n        var provider = providers[index++];\n        if (typeof provider === 'function') {\n          creds = provider.call();\n        } else {\n          creds = provider;\n        }\n\n        if (creds.get) {\n          creds.get(function (getErr) {\n            resolveNext(getErr, getErr ? null : creds);\n          });\n        } else {\n          resolveNext(null, creds);\n        }\n      }\n\n      resolveNext();\n    }\n\n    return self;\n  }\n});\n\n/**\n * The default set of providers used by a vanilla CredentialProviderChain.\n *\n * In the browser:\n *\n * ```javascript\n * AWS.CredentialProviderChain.defaultProviders = []\n * ```\n *\n * In Node.js:\n *\n * ```javascript\n * AWS.CredentialProviderChain.defaultProviders = [\n *   function () { return new AWS.EnvironmentCredentials('AWS'); },\n *   function () { return new AWS.EnvironmentCredentials('AMAZON'); },\n *   function () { return new AWS.SharedIniFileCredentials(); },\n *   function () { return new AWS.ECSCredentials(); },\n *   function () { return new AWS.ProcessCredentials(); },\n *   function () { return new AWS.EC2MetadataCredentials() }\n * ]\n * ```\n */\nAWS.CredentialProviderChain.defaultProviders = [];\n\n/**\n * @api private\n */\nAWS.CredentialProviderChain.addPromisesToClass = function addPromisesToClass(PromiseDependency) {\n  this.prototype.resolvePromise = AWS.util.promisifyMethod('resolve', PromiseDependency);\n};\n\n/**\n * @api private\n */\nAWS.CredentialProviderChain.deletePromisesFromClass = function deletePromisesFromClass() {\n  delete this.prototype.resolvePromise;\n};\n\nAWS.util.addPromises(AWS.CredentialProviderChain);\n","var AWS = require('./core');\nvar inherit = AWS.util.inherit;\n\n/**\n * The endpoint that a service will talk to, for example,\n * `'https://ec2.ap-southeast-1.amazonaws.com'`. If\n * you need to override an endpoint for a service, you can\n * set the endpoint on a service by passing the endpoint\n * object with the `endpoint` option key:\n *\n * ```javascript\n * var ep = new AWS.Endpoint('awsproxy.example.com');\n * var s3 = new AWS.S3({endpoint: ep});\n * s3.service.endpoint.hostname == 'awsproxy.example.com'\n * ```\n *\n * Note that if you do not specify a protocol, the protocol will\n * be selected based on your current {AWS.config} configuration.\n *\n * @!attribute protocol\n *   @return [String] the protocol (http or https) of the endpoint\n *     URL\n * @!attribute hostname\n *   @return [String] the host portion of the endpoint, e.g.,\n *     example.com\n * @!attribute host\n *   @return [String] the host portion of the endpoint including\n *     the port, e.g., example.com:80\n * @!attribute port\n *   @return [Integer] the port of the endpoint\n * @!attribute href\n *   @return [String] the full URL of the endpoint\n */\nAWS.Endpoint = inherit({\n\n  /**\n   * @overload Endpoint(endpoint)\n   *   Constructs a new endpoint given an endpoint URL. If the\n   *   URL omits a protocol (http or https), the default protocol\n   *   set in the global {AWS.config} will be used.\n   *   @param endpoint [String] the URL to construct an endpoint from\n   */\n  constructor: function Endpoint(endpoint, config) {\n    AWS.util.hideProperties(this, ['slashes', 'auth', 'hash', 'search', 'query']);\n\n    if (typeof endpoint === 'undefined' || endpoint === null) {\n      throw new Error('Invalid endpoint: ' + endpoint);\n    } else if (typeof endpoint !== 'string') {\n      return AWS.util.copy(endpoint);\n    }\n\n    if (!endpoint.match(/^http/)) {\n      var useSSL = config && config.sslEnabled !== undefined ?\n        config.sslEnabled : AWS.config.sslEnabled;\n      endpoint = (useSSL ? 'https' : 'http') + '://' + endpoint;\n    }\n\n    AWS.util.update(this, AWS.util.urlParse(endpoint));\n\n    // Ensure the port property is set as an integer\n    if (this.port) {\n      this.port = parseInt(this.port, 10);\n    } else {\n      this.port = this.protocol === 'https:' ? 443 : 80;\n    }\n  }\n\n});\n\n/**\n * The low level HTTP request object, encapsulating all HTTP header\n * and body data sent by a service request.\n *\n * @!attribute method\n *   @return [String] the HTTP method of the request\n * @!attribute path\n *   @return [String] the path portion of the URI, e.g.,\n *     \"/list/?start=5&num=10\"\n * @!attribute headers\n *   @return [map<String,String>]\n *     a map of header keys and their respective values\n * @!attribute body\n *   @return [String] the request body payload\n * @!attribute endpoint\n *   @return [AWS.Endpoint] the endpoint for the request\n * @!attribute region\n *   @api private\n *   @return [String] the region, for signing purposes only.\n */\nAWS.HttpRequest = inherit({\n\n  /**\n   * @api private\n   */\n  constructor: function HttpRequest(endpoint, region) {\n    endpoint = new AWS.Endpoint(endpoint);\n    this.method = 'POST';\n    this.path = endpoint.path || '/';\n    this.headers = {};\n    this.body = '';\n    this.endpoint = endpoint;\n    this.region = region;\n    this._userAgent = '';\n    this.setUserAgent();\n  },\n\n  /**\n   * @api private\n   */\n  setUserAgent: function setUserAgent() {\n    this._userAgent = this.headers[this.getUserAgentHeaderName()] = AWS.util.userAgent();\n  },\n\n  getUserAgentHeaderName: function getUserAgentHeaderName() {\n    var prefix = AWS.util.isBrowser() ? 'X-Amz-' : '';\n    return prefix + 'User-Agent';\n  },\n\n  /**\n   * @api private\n   */\n  appendToUserAgent: function appendToUserAgent(agentPartial) {\n    if (typeof agentPartial === 'string' && agentPartial) {\n      this._userAgent += ' ' + agentPartial;\n    }\n    this.headers[this.getUserAgentHeaderName()] = this._userAgent;\n  },\n\n  /**\n   * @api private\n   */\n  getUserAgent: function getUserAgent() {\n    return this._userAgent;\n  },\n\n  /**\n   * @return [String] the part of the {path} excluding the\n   *   query string\n   */\n  pathname: function pathname() {\n    return this.path.split('?', 1)[0];\n  },\n\n  /**\n   * @return [String] the query string portion of the {path}\n   */\n  search: function search() {\n    var query = this.path.split('?', 2)[1];\n    if (query) {\n      query = AWS.util.queryStringParse(query);\n      return AWS.util.queryParamsToString(query);\n    }\n    return '';\n  },\n\n  /**\n   * @api private\n   * update httpRequest endpoint with endpoint string\n   */\n  updateEndpoint: function updateEndpoint(endpointStr) {\n    var newEndpoint = new AWS.Endpoint(endpointStr);\n    this.endpoint = newEndpoint;\n    this.path = newEndpoint.path || '/';\n  }\n});\n\n/**\n * The low level HTTP response object, encapsulating all HTTP header\n * and body data returned from the request.\n *\n * @!attribute statusCode\n *   @return [Integer] the HTTP status code of the response (e.g., 200, 404)\n * @!attribute headers\n *   @return [map<String,String>]\n *      a map of response header keys and their respective values\n * @!attribute body\n *   @return [String] the response body payload\n * @!attribute [r] streaming\n *   @return [Boolean] whether this response is being streamed at a low-level.\n *     Defaults to `false` (buffered reads). Do not modify this manually, use\n *     {createUnbufferedStream} to convert the stream to unbuffered mode\n *     instead.\n */\nAWS.HttpResponse = inherit({\n\n  /**\n   * @api private\n   */\n  constructor: function HttpResponse() {\n    this.statusCode = undefined;\n    this.headers = {};\n    this.body = undefined;\n    this.streaming = false;\n    this.stream = null;\n  },\n\n  /**\n   * Disables buffering on the HTTP response and returns the stream for reading.\n   * @return [Stream, XMLHttpRequest, null] the underlying stream object.\n   *   Use this object to directly read data off of the stream.\n   * @note This object is only available after the {AWS.Request~httpHeaders}\n   *   event has fired. This method must be called prior to\n   *   {AWS.Request~httpData}.\n   * @example Taking control of a stream\n   *   request.on('httpHeaders', function(statusCode, headers) {\n   *     if (statusCode < 300) {\n   *       if (headers.etag === 'xyz') {\n   *         // pipe the stream, disabling buffering\n   *         var stream = this.response.httpResponse.createUnbufferedStream();\n   *         stream.pipe(process.stdout);\n   *       } else { // abort this request and set a better error message\n   *         this.abort();\n   *         this.response.error = new Error('Invalid ETag');\n   *       }\n   *     }\n   *   }).send(console.log);\n   */\n  createUnbufferedStream: function createUnbufferedStream() {\n    this.streaming = true;\n    return this.stream;\n  }\n});\n\n\nAWS.HttpClient = inherit({});\n\n/**\n * @api private\n */\nAWS.HttpClient.getInstance = function getInstance() {\n  if (this.singleton === undefined) {\n    this.singleton = new this();\n  }\n  return this.singleton;\n};\n","var AWS = require('../core');\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nAWS.Signers.V3 = inherit(AWS.Signers.RequestSigner, {\n  addAuthorization: function addAuthorization(credentials, date) {\n\n    var datetime = AWS.util.date.rfc822(date);\n\n    this.request.headers['X-Amz-Date'] = datetime;\n\n    if (credentials.sessionToken) {\n      this.request.headers['x-amz-security-token'] = credentials.sessionToken;\n    }\n\n    this.request.headers['X-Amzn-Authorization'] =\n      this.authorization(credentials, datetime);\n\n  },\n\n  authorization: function authorization(credentials) {\n    return 'AWS3 ' +\n      'AWSAccessKeyId=' + credentials.accessKeyId + ',' +\n      'Algorithm=HmacSHA256,' +\n      'SignedHeaders=' + this.signedHeaders() + ',' +\n      'Signature=' + this.signature(credentials);\n  },\n\n  signedHeaders: function signedHeaders() {\n    var headers = [];\n    AWS.util.arrayEach(this.headersToSign(), function iterator(h) {\n      headers.push(h.toLowerCase());\n    });\n    return headers.sort().join(';');\n  },\n\n  canonicalHeaders: function canonicalHeaders() {\n    var headers = this.request.headers;\n    var parts = [];\n    AWS.util.arrayEach(this.headersToSign(), function iterator(h) {\n      parts.push(h.toLowerCase().trim() + ':' + String(headers[h]).trim());\n    });\n    return parts.sort().join('\\n') + '\\n';\n  },\n\n  headersToSign: function headersToSign() {\n    var headers = [];\n    AWS.util.each(this.request.headers, function iterator(k) {\n      if (k === 'Host' || k === 'Content-Encoding' || k.match(/^X-Amz/i)) {\n        headers.push(k);\n      }\n    });\n    return headers;\n  },\n\n  signature: function signature(credentials) {\n    return AWS.util.crypto.hmac(credentials.secretAccessKey, this.stringToSign(), 'base64');\n  },\n\n  stringToSign: function stringToSign() {\n    var parts = [];\n    parts.push(this.request.method);\n    parts.push('/');\n    parts.push('');\n    parts.push(this.canonicalHeaders());\n    parts.push(this.request.body);\n    return AWS.util.crypto.sha256(parts.join('\\n'));\n  }\n\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.V3;\n","var AWS = require('../core');\n\n/**\n * @api private\n */\nvar cachedSecret = {};\n\n/**\n * @api private\n */\nvar cacheQueue = [];\n\n/**\n * @api private\n */\nvar maxCacheEntries = 50;\n\n/**\n * @api private\n */\nvar v4Identifier = 'aws4_request';\n\n/**\n * @api private\n */\nmodule.exports = {\n  /**\n   * @api private\n   *\n   * @param date [String]\n   * @param region [String]\n   * @param serviceName [String]\n   * @return [String]\n   */\n  createScope: function createScope(date, region, serviceName) {\n    return [\n      date.substr(0, 8),\n      region,\n      serviceName,\n      v4Identifier\n    ].join('/');\n  },\n\n  /**\n   * @api private\n   *\n   * @param credentials [Credentials]\n   * @param date [String]\n   * @param region [String]\n   * @param service [String]\n   * @param shouldCache [Boolean]\n   * @return [String]\n   */\n  getSigningKey: function getSigningKey(\n    credentials,\n    date,\n    region,\n    service,\n    shouldCache\n  ) {\n    var credsIdentifier = AWS.util.crypto\n      .hmac(credentials.secretAccessKey, credentials.accessKeyId, 'base64');\n    var cacheKey = [credsIdentifier, date, region, service].join('_');\n    shouldCache = shouldCache !== false;\n    if (shouldCache && (cacheKey in cachedSecret)) {\n      return cachedSecret[cacheKey];\n    }\n\n    var kDate = AWS.util.crypto.hmac(\n      'AWS4' + credentials.secretAccessKey,\n      date,\n      'buffer'\n    );\n    var kRegion = AWS.util.crypto.hmac(kDate, region, 'buffer');\n    var kService = AWS.util.crypto.hmac(kRegion, service, 'buffer');\n\n    var signingKey = AWS.util.crypto.hmac(kService, v4Identifier, 'buffer');\n    if (shouldCache) {\n      cachedSecret[cacheKey] = signingKey;\n      cacheQueue.push(cacheKey);\n      if (cacheQueue.length > maxCacheEntries) {\n        // remove the oldest entry (not the least recently used)\n        delete cachedSecret[cacheQueue.shift()];\n      }\n    }\n\n    return signingKey;\n  },\n\n  /**\n   * @api private\n   *\n   * Empties the derived signing key cache. Made available for testing purposes\n   * only.\n   */\n  emptyCache: function emptyCache() {\n    cachedSecret = {};\n    cacheQueue = [];\n  }\n};\n","// Unique ID creation requires a high quality random # generator.  In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API.  We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\n                      (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\n\nif (getRandomValues) {\n  // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n  var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n  module.exports = function whatwgRNG() {\n    getRandomValues(rnds8);\n    return rnds8;\n  };\n} else {\n  // Math.random()-based (RNG)\n  //\n  // If all else fails, use Math.random().  It's fast, but is of unspecified\n  // quality.\n  var rnds = new Array(16);\n\n  module.exports = function mathRNG() {\n    for (var i = 0, r; i < 16; i++) {\n      if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n      rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n    }\n\n    return rnds;\n  };\n}\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n  byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n  var i = offset || 0;\n  var bth = byteToHex;\n  // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n  return ([bth[buf[i++]], bth[buf[i++]], \n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]]]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar GoogleOAuth_1 = require(\"./GoogleOAuth\");\nvar FacebookOAuth_1 = require(\"./FacebookOAuth\");\nvar GoogleOAuth = new GoogleOAuth_1.default();\nexports.GoogleOAuth = GoogleOAuth;\nvar FacebookOAuth = new FacebookOAuth_1.default();\nexports.FacebookOAuth = FacebookOAuth;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar packageInfo = require(\"../../package.json\");\nvar Platform = {\n    'userAgent': \"aws-amplify/\" + packageInfo.version + \" js\",\n    'product': '',\n    'navigator': null,\n    'isReactNative': false\n};\nif (typeof navigator !== 'undefined' && navigator.product) {\n    Platform.product = navigator.product || '';\n    Platform.navigator = navigator || null;\n    switch (navigator.product) {\n        case 'ReactNative':\n            Platform.userAgent = \"aws-amplify/\" + packageInfo.version + \" react-native\";\n            Platform.isReactNative = true;\n            break;\n        default:\n            Platform.userAgent = \"aws-amplify/\" + packageInfo.version + \" js\";\n            Platform.isReactNative = false;\n            break;\n    }\n}\nexports.default = Platform;\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\n            t[p[i]] = s[p[i]];\n    return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar core_1 = require(\"@aws-amplify/core\");\nvar MobileAnalytics = require(\"aws-sdk/clients/mobileanalytics\");\nvar Pinpoint = require(\"aws-sdk/clients/pinpoint\");\nvar cache_1 = require(\"@aws-amplify/cache\");\nvar uuid_1 = require(\"uuid\");\nvar AMPLIFY_SYMBOL = ((typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') ?\n    Symbol.for('amplify_default') : '@@amplify_default');\nvar dispatchAnalyticsEvent = function (event, data) {\n    core_1.Hub.dispatch('analytics', { event: event, data: data }, 'Analytics', AMPLIFY_SYMBOL);\n};\nvar logger = new core_1.ConsoleLogger('AWSPinpointProvider');\nvar RETRYABLE_CODES = [429, 500];\nvar ACCEPTED_CODES = [202];\n// events buffer\nvar BUFFER_SIZE = 1000;\nvar FLUSH_SIZE = 100;\nvar FLUSH_INTERVAL = 5 * 1000; // 5s\nvar RESEND_LIMIT = 5;\n// params: { event: {name: , .... }, timeStamp, config, resendLimit }\nvar AWSPinpointProvider = /** @class */ (function () {\n    function AWSPinpointProvider(config) {\n        this._endpointGenerating = true;\n        this._buffer = [];\n        this._config = config ? config : {};\n        this._config.bufferSize = this._config.bufferSize || BUFFER_SIZE;\n        this._config.flushSize = this._config.flushSize || FLUSH_SIZE;\n        this._config.flushInterval = this._config.flushInterval || FLUSH_INTERVAL;\n        this._config.resendLimit = this._config.resendLimit || RESEND_LIMIT;\n        this._clientInfo = core_1.ClientDevice.clientInfo();\n    }\n    AWSPinpointProvider.prototype._setupTimer = function () {\n        var _this = this;\n        if (this._timer) {\n            clearInterval(this._timer);\n        }\n        var _a = this._config, flushSize = _a.flushSize, flushInterval = _a.flushInterval;\n        var that = this;\n        this._timer = setInterval(function () {\n            var size = _this._buffer.length < flushSize ? _this._buffer.length : flushSize;\n            for (var i = 0; i < size; i += 1) {\n                var _a = _this._buffer.shift(), params = _a.params, handlers = _a.handlers;\n                that._send(params, handlers);\n                // If this is the first request sent by Analytics module, we should stop sending remaining requests\n                // to prevent race condition of updating one endpoint when it's being created in the backend\n                if (_this._endpointGenerating)\n                    break;\n            }\n        }, flushInterval);\n    };\n    /**\n     * @private\n     * @param params - params for the event recording\n     * Put events into buffer\n     */\n    AWSPinpointProvider.prototype._putToBuffer = function (params, handlers) {\n        var bufferSize = this._config.bufferSize;\n        if (this._buffer.length < bufferSize) {\n            this._buffer.push({ params: params, handlers: handlers });\n        }\n        else {\n            logger.debug('exceed analytics events buffer size');\n            return handlers.reject(new Error('Exceed the size of analytics events buffer'));\n        }\n    };\n    /**\n     * get the category of the plugin\n     */\n    AWSPinpointProvider.prototype.getCategory = function () {\n        return AWSPinpointProvider.category;\n    };\n    /**\n     * get provider name of the plugin\n     */\n    AWSPinpointProvider.prototype.getProviderName = function () {\n        return AWSPinpointProvider.providerName;\n    };\n    /**\n     * configure the plugin\n     * @param {Object} config - configuration\n     */\n    AWSPinpointProvider.prototype.configure = function (config) {\n        var _this = this;\n        logger.debug('configure Analytics', config);\n        var conf = config ? config : {};\n        this._config = Object.assign({}, this._config, conf);\n        if (this._config['appId'] && !this._config['disabled']) {\n            if (!this._config['endpointId']) {\n                var cacheKey = this.getProviderName() + '_' + this._config['appId'];\n                this._getEndpointId(cacheKey).then(function (endpointId) {\n                    logger.debug('setting endpoint id from the cache', endpointId);\n                    _this._config['endpointId'] = endpointId;\n                    dispatchAnalyticsEvent('pinpointProvider_configured', null);\n                }).catch(function (e) {\n                    logger.debug('Failed to generate endpointId', e);\n                });\n            }\n            else {\n                dispatchAnalyticsEvent('pinpointProvider_configured', null);\n            }\n            this._setupTimer();\n        }\n        else {\n            if (this._timer) {\n                clearInterval(this._timer);\n            }\n        }\n        return this._config;\n    };\n    /**\n     * record an event\n     * @param {Object} params - the params of an event\n     */\n    AWSPinpointProvider.prototype.record = function (params, handlers) {\n        return __awaiter(this, void 0, void 0, function () {\n            var credentials, timestamp;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this._getCredentials()];\n                    case 1:\n                        credentials = _a.sent();\n                        if (!credentials || !this._config['appId'] || !this._config['region']) {\n                            logger.debug('cannot send events without credentials, applicationId or region');\n                            return [2 /*return*/, handlers.reject(new Error('No credentials, applicationId or region'))];\n                        }\n                        timestamp = new Date().getTime();\n                        // attach the session and eventId\n                        this._generateSession(params);\n                        params.event.eventId = uuid_1.v1();\n                        Object.assign(params, { timestamp: timestamp, config: this._config, credentials: credentials });\n                        if (params.event.immediate) {\n                            return [2 /*return*/, this._send(params, handlers)];\n                        }\n                        else {\n                            this._putToBuffer(params, handlers);\n                        }\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    AWSPinpointProvider.prototype._generateSession = function (params) {\n        this._sessionId = this._sessionId || uuid_1.v1();\n        var event = params.event;\n        switch (event.name) {\n            case '_session.start':\n                // refresh the session id and session start time\n                this._sessionStartTimestamp = new Date().getTime();\n                this._sessionId = uuid_1.v1();\n                event.session = {\n                    Id: this._sessionId,\n                    StartTimestamp: new Date(this._sessionStartTimestamp).toISOString()\n                };\n                break;\n            case '_session.stop':\n                var stopTimestamp = new Date().getTime();\n                this._sessionStartTimestamp = this._sessionStartTimestamp || new Date().getTime();\n                this._sessionId = this._sessionId || uuid_1.v1();\n                event.session = {\n                    Id: this._sessionId,\n                    Duration: stopTimestamp - this._sessionStartTimestamp,\n                    StartTimestamp: new Date(this._sessionStartTimestamp).toISOString(),\n                    StopTimestamp: new Date(stopTimestamp).toISOString()\n                };\n                this._sessionId = undefined;\n                this._sessionStartTimestamp = undefined;\n                break;\n            default:\n                this._sessionStartTimestamp = this._sessionStartTimestamp || new Date().getTime();\n                this._sessionId = this._sessionId || uuid_1.v1();\n                event.session = {\n                    Id: this._sessionId,\n                    StartTimestamp: new Date(this._sessionStartTimestamp).toISOString()\n                };\n                break;\n        }\n    };\n    AWSPinpointProvider.prototype._send = function (params, handlers) {\n        return __awaiter(this, void 0, void 0, function () {\n            var event, config;\n            return __generator(this, function (_a) {\n                event = params.event, config = params.config;\n                switch (event.name) {\n                    case '_update_endpoint':\n                        return [2 /*return*/, this._updateEndpoint(params, handlers)];\n                    default:\n                        return [2 /*return*/, this._record(params, handlers)];\n                }\n                return [2 /*return*/];\n            });\n        });\n    };\n    AWSPinpointProvider.prototype._generateBatchItemContext = function (params) {\n        var event = params.event, timestamp = params.timestamp, config = params.config, credentials = params.credentials;\n        var name = event.name, attributes = event.attributes, metrics = event.metrics, eventId = event.eventId, session = event.session;\n        var appId = config.appId, endpointId = config.endpointId;\n        var endpointContext = {};\n        var eventParams = {\n            ApplicationId: appId,\n            EventsRequest: {\n                BatchItem: {}\n            }\n        };\n        eventParams.EventsRequest.BatchItem[endpointId] = {};\n        var endpointObj = eventParams.EventsRequest.BatchItem[endpointId];\n        endpointObj['Endpoint'] = endpointContext;\n        endpointObj['Events'] = {};\n        endpointObj['Events'][eventId] = {\n            EventType: name,\n            Timestamp: new Date(timestamp).toISOString(),\n            Attributes: attributes,\n            Metrics: metrics,\n            Session: session\n        };\n        return eventParams;\n    };\n    AWSPinpointProvider.prototype._pinpointPutEvents = function (params, handlers) {\n        return __awaiter(this, void 0, void 0, function () {\n            var eventId, endpointId, eventParams, request;\n            var _this = this;\n            return __generator(this, function (_a) {\n                eventId = params.event.eventId, endpointId = params.config.endpointId;\n                eventParams = this._generateBatchItemContext(params);\n                logger.debug('pinpoint put events with params', eventParams);\n                request = this.pinpointClient.putEvents(eventParams);\n                // in order to keep backward compatiblity\n                // we are using a legacy api: /apps/{appid}/events/legacy\n                // so that users don't need to update their IAM Policy\n                // will use the formal one in the next break release\n                request.on('build', function () {\n                    request.httpRequest.path = request.httpRequest.path + '/legacy';\n                });\n                request.send(function (err, data) {\n                    if (err) {\n                        logger.error('record event failed. ', err);\n                        logger.warn('If you have not updated your Pinpoint IAM Policy' +\n                            ' with the Action: \\\"mobiletargeting:PutEvents\\\" yet, please do it.' +\n                            ' This action is not necessary for now' +\n                            ' but in order to avoid breaking changes in the future,' +\n                            ' please update it as soon as possible.');\n                        return handlers.reject(err);\n                    }\n                    else {\n                        var _a = endpointId, _b = eventId, _c = data.EventsResponse.Results[_a].EventsItemResponse[_b], StatusCode = _c.StatusCode, Message = _c.Message;\n                        if (ACCEPTED_CODES.includes(StatusCode)) {\n                            _this._endpointGenerating = false;\n                            logger.debug('record event success. ', data);\n                            return handlers.resolve(data);\n                        }\n                        else {\n                            if (RETRYABLE_CODES.includes(StatusCode)) {\n                                _this._retry(params, handlers);\n                            }\n                            else {\n                                logger.error(\"Event \" + eventId + \" is not accepted, the error is \" + Message);\n                                return handlers.reject(data);\n                            }\n                        }\n                    }\n                });\n                return [2 /*return*/];\n            });\n        });\n    };\n    AWSPinpointProvider.prototype._retry = function (params, handlers) {\n        var resendLimit = params.config.resendLimit;\n        // For backward compatibility\n        params.resendLimit = typeof params.resendLimit === 'number' ?\n            params.resendLimit : resendLimit;\n        if (params.resendLimit-- > 0) {\n            logger.debug(\"resending event \" + params.eventName + \" with \" + params.resendLimit + \" retry times left\");\n            this._putToBuffer(params, handlers);\n        }\n        else {\n            logger.debug(\"retry times used up for event \" + params.eventName);\n        }\n    };\n    AWSPinpointProvider.prototype._record = function (params, handlers) {\n        return __awaiter(this, void 0, void 0, function () {\n            var event, timestamp, config, credentials;\n            return __generator(this, function (_a) {\n                event = params.event, timestamp = params.timestamp, config = params.config, credentials = params.credentials;\n                this._initClients(config, credentials);\n                return [2 /*return*/, this._pinpointPutEvents(params, handlers)];\n            });\n        });\n    };\n    AWSPinpointProvider.prototype._updateEndpoint = function (params, handlers) {\n        return __awaiter(this, void 0, void 0, function () {\n            var timestamp, config, credentials, event, appId, region, endpointId, request, update_params, that;\n            var _this = this;\n            return __generator(this, function (_a) {\n                timestamp = params.timestamp, config = params.config, credentials = params.credentials, event = params.event;\n                appId = config.appId, region = config.region, endpointId = config.endpointId;\n                this._initClients(config, credentials);\n                request = this._endpointRequest(config, core_1.JS.transferKeyToLowerCase(event, [], ['attributes', 'userAttributes', 'Attributes', 'UserAttributes']));\n                update_params = {\n                    ApplicationId: appId,\n                    EndpointId: endpointId,\n                    EndpointRequest: request\n                };\n                that = this;\n                logger.debug('updateEndpoint with params: ', update_params);\n                that.pinpointClient.updateEndpoint(update_params, function (err, data) {\n                    if (err) {\n                        logger.debug('updateEndpoint failed', err);\n                        if (err.message === 'Exceeded maximum endpoint per user count 10') {\n                            _this._removeUnusedEndpoints(appId, request.User.UserId)\n                                .then(function () {\n                                logger.debug('Remove the unused endpoints successfully');\n                                _this._retry(params, handlers);\n                            }).catch(function (e) {\n                                logger.warn(\"Failed to remove unused endpoints with error: \" + e);\n                                logger.warn(\"Please ensure you have updated your Pinpoint IAM Policy \" +\n                                    \"with the Action: \\\"mobiletargeting:GetUserEndpoints\\\" \" +\n                                    \"in order to get endpoints info of the user\");\n                                return handlers.reject(err);\n                            });\n                        }\n                        else\n                            return handlers.reject(err);\n                    }\n                    else {\n                        logger.debug('updateEndpoint success', data);\n                        _this._endpointGenerating = false;\n                        return handlers.resolve(data);\n                    }\n                });\n                return [2 /*return*/];\n            });\n        });\n    };\n    AWSPinpointProvider.prototype._removeUnusedEndpoints = function (appId, userId) {\n        return __awaiter(this, void 0, void 0, function () {\n            var _this = this;\n            return __generator(this, function (_a) {\n                return [2 /*return*/, new Promise(function (res, rej) {\n                        _this.pinpointClient.getUserEndpoints({\n                            ApplicationId: appId,\n                            UserId: userId\n                        }, function (err, data) {\n                            if (err) {\n                                logger.debug(\"Failed to get endpoints associated with the userId: \" + userId + \" with error\", err);\n                                return rej(err);\n                            }\n                            var endpoints = data.EndpointsResponse.Item;\n                            logger.debug(\"get endpoints associated with the userId: \" + userId + \" with data\", endpoints);\n                            var endpointToBeDeleted = endpoints[0];\n                            for (var i = 1; i < endpoints.length; i++) {\n                                var timeStamp1 = Date.parse(endpointToBeDeleted['EffectiveDate']);\n                                var timeStamp2 = Date.parse(endpoints[i]['EffectiveDate']);\n                                // delete the one with invalid effective date\n                                if (isNaN(timeStamp1))\n                                    break;\n                                if (isNaN(timeStamp2)) {\n                                    endpointToBeDeleted = endpoints[i];\n                                    break;\n                                }\n                                if (timeStamp2 < timeStamp1) {\n                                    endpointToBeDeleted = endpoints[i];\n                                }\n                            }\n                            // update the endpoint's user id with an empty string\n                            var update_params = {\n                                ApplicationId: appId,\n                                EndpointId: endpointToBeDeleted['Id'],\n                                EndpointRequest: {\n                                    User: {\n                                        UserId: ''\n                                    }\n                                }\n                            };\n                            _this.pinpointClient.updateEndpoint(update_params, function (err, data) {\n                                if (err) {\n                                    logger.debug('Failed to update the endpoint', err);\n                                    return rej(err);\n                                }\n                                logger.debug('The old endpoint is updated with an empty string for user id');\n                                return res(data);\n                            });\n                        });\n                    })];\n            });\n        });\n    };\n    /**\n     * @private\n     * @param config\n     * Init the clients\n     */\n    AWSPinpointProvider.prototype._initClients = function (config, credentials) {\n        return __awaiter(this, void 0, void 0, function () {\n            var region;\n            return __generator(this, function (_a) {\n                logger.debug('init clients');\n                if (this.mobileAnalytics\n                    && this.pinpointClient\n                    && this._config.credentials\n                    && this._config.credentials.sessionToken === credentials.sessionToken\n                    && this._config.credentials.identityId === credentials.identityId) {\n                    logger.debug('no change for aws credentials, directly return from init');\n                    return [2 /*return*/];\n                }\n                this._config.credentials = credentials;\n                region = config.region;\n                logger.debug('init clients with credentials', credentials);\n                this.mobileAnalytics = new MobileAnalytics({ credentials: credentials, region: region });\n                this.pinpointClient = new Pinpoint({ region: region, credentials: credentials });\n                if (core_1.Platform.isReactNative) {\n                    this.pinpointClient.customizeRequests(function (request) {\n                        request.on('build', function (req) {\n                            req.httpRequest.headers['user-agent'] = core_1.Platform.userAgent;\n                        });\n                    });\n                }\n                return [2 /*return*/];\n            });\n        });\n    };\n    AWSPinpointProvider.prototype._getEndpointId = function (cacheKey) {\n        return __awaiter(this, void 0, void 0, function () {\n            var endpointId;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, cache_1.default.getItem(cacheKey)];\n                    case 1:\n                        endpointId = _a.sent();\n                        logger.debug('endpointId from cache', endpointId, 'type', typeof endpointId);\n                        if (!endpointId) {\n                            endpointId = uuid_1.v1();\n                            cache_1.default.setItem(cacheKey, endpointId);\n                        }\n                        return [2 /*return*/, endpointId];\n                }\n            });\n        });\n    };\n    /**\n     * EndPoint request\n     * @return {Object} - The request of updating endpoint\n     */\n    AWSPinpointProvider.prototype._endpointRequest = function (config, event) {\n        var credentials = config.credentials;\n        var clientInfo = this._clientInfo || {};\n        var clientContext = config.clientContext || {};\n        // for now we have three different ways for default endpoint configurations\n        // clientInfo\n        // clientContext (deprecated)\n        // config.endpoint\n        var defaultEndpointConfig = config.endpoint || {};\n        var demographicByClientInfo = {\n            appVersion: clientInfo.appVersion,\n            make: clientInfo.make,\n            model: clientInfo.model,\n            modelVersion: clientInfo.version,\n            platform: clientInfo.platform\n        };\n        // for backward compatibility\n        var clientId = clientContext.clientId, appTitle = clientContext.appTitle, appVersionName = clientContext.appVersionName, appVersionCode = clientContext.appVersionCode, appPackageName = clientContext.appPackageName, demographicByClientContext = __rest(clientContext, [\"clientId\", \"appTitle\", \"appVersionName\", \"appVersionCode\", \"appPackageName\"]);\n        var channelType = event.address ? ((clientInfo.platform === 'android') ? 'GCM' : 'APNS') : undefined;\n        var tmp = __assign({ channelType: channelType, requestId: uuid_1.v1(), effectiveDate: new Date().toISOString() }, defaultEndpointConfig, event, { attributes: __assign({}, defaultEndpointConfig.attributes, event.attributes), demographic: __assign({}, demographicByClientInfo, demographicByClientContext, defaultEndpointConfig.demographic, event.demographic), location: __assign({}, defaultEndpointConfig.location, event.location), metrics: __assign({}, defaultEndpointConfig.metrics, event.metrics), user: {\n                userId: event.userId || defaultEndpointConfig.userId || credentials.identityId,\n                userAttributes: __assign({}, defaultEndpointConfig.userAttributes, event.userAttributes)\n            } });\n        // eliminate unnecessary params\n        var userId = tmp.userId, userAttributes = tmp.userAttributes, name = tmp.name, session = tmp.session, eventId = tmp.eventId, immediate = tmp.immediate, ret = __rest(tmp, [\"userId\", \"userAttributes\", \"name\", \"session\", \"eventId\", \"immediate\"]);\n        return core_1.JS.transferKeyToUpperCase(ret, [], ['metrics', 'userAttributes', 'attributes']);\n    };\n    /**\n     * @private\n     * check if current credentials exists\n     */\n    AWSPinpointProvider.prototype._getCredentials = function () {\n        var that = this;\n        return core_1.Credentials.get()\n            .then(function (credentials) {\n            if (!credentials)\n                return null;\n            logger.debug('set credentials for analytics', credentials);\n            return core_1.Credentials.shear(credentials);\n        })\n            .catch(function (err) {\n            logger.debug('ensure credentials error', err);\n            return null;\n        });\n    };\n    AWSPinpointProvider.category = 'Analytics';\n    AWSPinpointProvider.providerName = 'AWSPinpoint';\n    return AWSPinpointProvider;\n}());\nexports.default = AWSPinpointProvider;\n//# sourceMappingURL=AWSPinpointProvider.js.map","import { IRecordReference, RecordReference } from \"shared-models/record-reference\";\n\nexport interface ICountryReference extends IRecordReference{states?: IStateReference[], doNotShip?: boolean};\nexport class CountryReference extends RecordReference{\n    doNotShip?: boolean;\n    states?: StateReference[];\n    constructor(data: ICountryReference){\n        data = data || {}\n        super(data)\n        this.doNotShip = data.doNotShip || false;        \n        this.states = (data.states || []).map((state) => new StateReference(state));\n    }\n}\n\nexport interface IStateReference extends IRecordReference{doNotShip?: boolean, country?: ICountryReference};\nexport class StateReference extends RecordReference{   \n    doNotShip?: boolean;\n    country?: CountryReference;\n    constructor(data: IStateReference){\n        data = data || {}\n        super(data)  \n        this.doNotShip = data.doNotShip || false;      \n        this.country = data.country ? new CountryReference(data.country) : null;      \n    }\n}","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Utils_1 = require(\"./Utils\");\nvar core_1 = require(\"@aws-amplify/core\");\nvar logger = new core_1.ConsoleLogger('StorageCache');\n/**\n * Initialization of the cache\n *\n */\nvar StorageCache = /** @class */ (function () {\n    /**\n     * Initialize the cache\n     * @param config - the configuration of the cache\n     */\n    function StorageCache(config) {\n        this.config = Object.assign({}, config);\n        this.cacheCurSizeKey = this.config.keyPrefix + 'CurSize';\n        this.checkConfig();\n    }\n    StorageCache.prototype.getModuleName = function () {\n        return 'Cache';\n    };\n    StorageCache.prototype.checkConfig = function () {\n        // check configuration\n        if (!Utils_1.isInteger(this.config.capacityInBytes)) {\n            logger.error('Invalid parameter: capacityInBytes. It should be an Integer. Setting back to default.');\n            this.config.capacityInBytes = Utils_1.defaultConfig.capacityInBytes;\n        }\n        if (!Utils_1.isInteger(this.config.itemMaxSize)) {\n            logger.error('Invalid parameter: itemMaxSize. It should be an Integer. Setting back to default.');\n            this.config.itemMaxSize = Utils_1.defaultConfig.itemMaxSize;\n        }\n        if (!Utils_1.isInteger(this.config.defaultTTL)) {\n            logger.error('Invalid parameter: defaultTTL. It should be an Integer. Setting back to default.');\n            this.config.defaultTTL = Utils_1.defaultConfig.defaultTTL;\n        }\n        if (!Utils_1.isInteger(this.config.defaultPriority)) {\n            logger.error('Invalid parameter: defaultPriority. It should be an Integer. Setting back to default.');\n            this.config.defaultPriority = Utils_1.defaultConfig.defaultPriority;\n        }\n        if (this.config.itemMaxSize > this.config.capacityInBytes) {\n            logger.error('Invalid parameter: itemMaxSize. It should be smaller than capacityInBytes. Setting back to default.');\n            this.config.itemMaxSize = Utils_1.defaultConfig.itemMaxSize;\n        }\n        if (this.config.defaultPriority > 5 || this.config.defaultPriority < 1) {\n            logger.error('Invalid parameter: defaultPriority. It should be between 1 and 5. Setting back to default.');\n            this.config.defaultPriority = Utils_1.defaultConfig.defaultPriority;\n        }\n        if (Number(this.config.warningThreshold) > 1 || Number(this.config.warningThreshold) < 0) {\n            logger.error('Invalid parameter: warningThreshold. It should be between 0 and 1. Setting back to default.');\n            this.config.warningThreshold = Utils_1.defaultConfig.warningThreshold;\n        }\n        // set 5MB limit\n        var cacheLimit = 5 * 1024 * 1024;\n        if (this.config.capacityInBytes > cacheLimit) {\n            logger.error('Cache Capacity should be less than 5MB. Setting back to default. Setting back to default.');\n            this.config.capacityInBytes = Utils_1.defaultConfig.capacityInBytes;\n        }\n    };\n    /**\n    * produce a JSON object with meta-data and data value\n    * @param value - the value of the item\n    * @param options - optional, the specified meta-data\n    *\n    * @return - the item which has the meta-data and the value\n    */\n    StorageCache.prototype.fillCacheItem = function (key, value, options) {\n        var ret = {\n            key: key,\n            data: value,\n            timestamp: Utils_1.getCurrTime(),\n            visitedTime: Utils_1.getCurrTime(),\n            priority: options.priority,\n            expires: options.expires,\n            type: typeof value,\n            byteSize: 0\n        };\n        ret.byteSize = Utils_1.getByteLength(JSON.stringify(ret));\n        // for accurate size\n        ret.byteSize = Utils_1.getByteLength(JSON.stringify(ret));\n        return ret;\n    };\n    /**\n     * set cache with customized configuration\n     * @param config - customized configuration\n     *\n     * @return - the current configuration\n     */\n    StorageCache.prototype.configure = function (config) {\n        if (!config) {\n            return this.config;\n        }\n        if (config.keyPrefix) {\n            logger.warn(\"Don't try to configure keyPrefix!\");\n        }\n        this.config = Object.assign({}, this.config, config, config.Cache);\n        this.checkConfig();\n        return this.config;\n    };\n    return StorageCache;\n}());\nexports.default = StorageCache;\n//# sourceMappingURL=StorageCache.js.map","// Unique ID creation requires a high quality random # generator.  In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API.  We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues.bind(crypto)) ||\n                      (typeof(msCrypto) != 'undefined' && msCrypto.getRandomValues.bind(msCrypto));\nif (getRandomValues) {\n  // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n  var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n  module.exports = function whatwgRNG() {\n    getRandomValues(rnds8);\n    return rnds8;\n  };\n} else {\n  // Math.random()-based (RNG)\n  //\n  // If all else fails, use Math.random().  It's fast, but is of unspecified\n  // quality.\n  var rnds = new Array(16);\n\n  module.exports = function mathRNG() {\n    for (var i = 0, r; i < 16; i++) {\n      if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n      rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n    }\n\n    return rnds;\n  };\n}\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n  byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n  var i = offset || 0;\n  var bth = byteToHex;\n  return bth[buf[i++]] + bth[buf[i++]] +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] +\n          bth[buf[i++]] + bth[buf[i++]] +\n          bth[buf[i++]] + bth[buf[i++]];\n}\n\nmodule.exports = bytesToUuid;\n","\"use strict\";\n/**\n * Copyright (c) 2017, Philip Walton <philip@philipwalton.com>\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar matches_1 = require(\"./matches\");\nvar parents_1 = require(\"./parents\");\n/**\n * Gets the closest parent element that matches the passed selector.\n * @param {Element} element The element whose parents to check.\n * @param {string} selector The CSS selector to match against.\n * @param {boolean=} shouldCheckSelf True if the selector should test against\n *     the passed element itself.\n * @return {Element|undefined} The matching element or undefined.\n */\nfunction closest(element, selector, shouldCheckSelf) {\n    if (shouldCheckSelf === void 0) { shouldCheckSelf = false; }\n    if (!(element && element.nodeType === 1 && selector))\n        return;\n    var parentElements = (shouldCheckSelf ? [element] : []).concat(parents_1.default(element));\n    for (var i = 0, parent_1; parent_1 = parentElements[i]; i++) {\n        if (matches_1.default(parent_1, selector))\n            return parent_1;\n    }\n}\nexports.default = closest;\n//# sourceMappingURL=closest.js.map","\"use strict\";\n/**\n * Copyright (c) 2017, Philip Walton <philip@philipwalton.com>\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Returns an array of a DOM element's parent elements.\n * @param {!Element} element The DOM element whose parents to get.\n * @return {!Array} An array of all parent elemets, or an empty array if no\n *     parent elements are found.\n */\nfunction parents(ele) {\n    var list = [];\n    var element = ele;\n    while (element && element.parentNode && element.parentNode.nodeType === 1) {\n        element = /** @type {!Element} */ (element.parentNode);\n        list.push(element);\n    }\n    return list;\n}\nexports.default = parents;\n//# sourceMappingURL=parents.js.map","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.17.19';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading and trailing whitespace. */\n  var reTrim = /^\\s+|\\s+$/g,\n      reTrimStart = /^\\s+/,\n      reTrimEnd = /\\s+$/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var nodeUtil = (function() {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      }\n\n      // Legacy `process.binding('util')` for Node.js < 10.\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }());\n\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */\n  function apply(func, thisArg, args) {\n    switch (args.length) {\n      case 0: return func.call(thisArg);\n      case 1: return func.call(thisArg, args[0]);\n      case 2: return func.call(thisArg, args[0], args[1]);\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\n    }\n    return func.apply(thisArg, args);\n  }\n\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  /**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayPush(array, values) {\n    var index = -1,\n        length = values.length,\n        offset = array.length;\n\n    while (++index < length) {\n      array[offset + index] = values[index];\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 1 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\n  /**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictIndexOf(array, value, fromIndex) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\n\n    /**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Hash(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function hashGet(key) {\n      var data = this.__data__;\n      if (nativeCreate) {\n        var result = data[key];\n        return result === HASH_UNDEFINED ? undefined : result;\n      }\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\n    }\n\n    /**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\n\n    /**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */\n    function hashSet(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n      return this;\n    }\n\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function ListCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function listCacheDelete(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index == lastIndex) {\n        data.pop();\n      } else {\n        splice.call(data, index, 1);\n      }\n      --this.size;\n      return true;\n    }\n\n    /**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\n\n    /**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\n\n    /**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */\n    function listCacheSet(key, value) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index][1] = value;\n      }\n      return this;\n    }\n\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function MapCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\n\n    /**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\n\n    /**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\n\n    /**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */\n    function mapCacheSet(key, value) {\n      var data = getMapData(this, key),\n          size = data.size;\n\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    }\n\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n\n      this.__data__ = new MapCache;\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {number} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) &&\n            !(skipIndexes && (\n               // Safari 9 has enumerable `arguments.length` in strict mode.\n               key == 'length' ||\n               // Node.js 0.10 has enumerable non-index properties on buffers.\n               (isBuff && (key == 'offset' || key == 'parent')) ||\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n               // Skip index properties.\n               isIndex(key, length)\n            ))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */\n    function assocIndexOf(array, key) {\n      var length = array.length;\n      while (length--) {\n        if (eq(array[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n    function baseFlatten(array, depth, predicate, isStrict, result) {\n      var index = -1,\n          length = array.length;\n\n      predicate || (predicate = isFlattenable);\n      result || (result = []);\n\n      while (++index < length) {\n        var value = array[index];\n        if (depth > 0 && predicate(value)) {\n          if (depth > 1) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\n\n    /**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    function baseGetTag(value) {\n      if (value == null) {\n        return value === undefined ? undefinedTag : nullTag;\n      }\n      return (symToStringTag && symToStringTag in Object(value))\n        ? getRawTag(value)\n        : objectToString(value);\n    }\n\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */\n    function baseIsNative(value) {\n      if (!isObject(value) || isMasked(value)) {\n        return false;\n      }\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n      return pattern.test(toSource(value));\n    }\n\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      if (iteratees.length) {\n        iteratees = arrayMap(iteratees, function(iteratee) {\n          if (isArray(iteratee)) {\n            return function(value) {\n              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n            }\n          }\n          return iteratee;\n        });\n      } else {\n        iteratees = [identity];\n      }\n\n      var index = -1;\n      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n          return object;\n        }\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      var low = 0,\n          high = array == null ? 0 : array.length;\n      if (high === 0) {\n        return 0;\n      }\n\n      value = iteratee(value);\n      var valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      }\n      else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n        if (set) {\n          return setToArray(set);\n        }\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache;\n      }\n      else {\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      return object == null || delete object[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Check that cyclic values are equal.\n      var arrStacked = stack.get(array);\n      var othStacked = stack.get(other);\n      if (arrStacked && othStacked) {\n        return arrStacked == other && othStacked == array;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Check that cyclic values are equal.\n      var objStacked = stack.get(object);\n      var othStacked = stack.get(other);\n      if (objStacked && othStacked) {\n        return objStacked == other && othStacked == object;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\n\n    /**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\n\n    /**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */\n    function getRawTag(value) {\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\n          tag = value[symToStringTag];\n\n      try {\n        value[symToStringTag] = undefined;\n        var unmasked = true;\n      } catch (e) {}\n\n      var result = nativeObjectToString.call(value);\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag] = tag;\n        } else {\n          delete value[symToStringTag];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\n\n    /**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n    function isIndex(value, length) {\n      var type = typeof value;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n\n      return !!length &&\n        (type == 'number' ||\n          (type != 'symbol' && reIsUint.test(value))) &&\n            (value > -1 && value % 1 == 0 && value < length);\n    }\n\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n            ? (isArrayLike(object) && isIndex(index, object.length))\n            : (type == 'string' && index in object)\n          ) {\n        return eq(object[index], value);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\n    /**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */\n    function isKeyable(value) {\n      var type = typeof value;\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n        ? (value !== '__proto__')\n        : (value === null);\n    }\n\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n\n    /**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function nativeKeysIn(object) {\n      var result = [];\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n    function overRest(func, start, transform) {\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            array = Array(length);\n\n        while (++index < length) {\n          array[index] = args[start + index];\n        }\n        index = -1;\n        var otherArgs = Array(start + 1);\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\n\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n\n      return function() {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n        return func.apply(undefined, arguments);\n      };\n    }\n\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */\n    function toSource(func) {\n      if (func != null) {\n        try {\n          return funcToString.call(func);\n        } catch (e) {}\n        try {\n          return (func + '');\n        } catch (e) {}\n      }\n      return '';\n    }\n\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        result[pair[0]] = pair[1];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     *\n     * // Combining several predicates using `_.overEvery` or `_.overSome`.\n     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n     * // => objects for ['fred', 'barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 30 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n      memoized.cache = new (memoize.Cache || MapCache);\n      return memoized;\n    }\n\n    // Expose `MapCache`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\n    /**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\n\n    /**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\n    };\n\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n    /**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\n\n    /**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n    function isFunction(value) {\n      if (!isObject(value)) {\n        return false;\n      }\n      // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\n      var tag = baseGetTag(value);\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n    }\n\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\n    /**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n      var proto = getPrototype(value);\n      if (proto === null) {\n        return true;\n      }\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n        funcToString.call(Ctor) == objectCtorString;\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\n\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n      value = toNumber(value);\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = (value < 0 ? -1 : 1);\n        return sign * MAX_INTEGER;\n      }\n      return value === value ? value : 0;\n    }\n\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? (other + '') : other;\n      }\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n      value = value.replace(reTrim, '');\n      var isBinary = reIsBinary.test(value);\n      return (isBinary || reIsOctal.test(value))\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n        : (reIsBadHex.test(value) ? NAN : +value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n      // and escape the comment, thus injecting code that gets evaled.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/\\s/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrim, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimEnd, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\n    /**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     *\n     * // Checking for several possible values\n     * _.filter(users, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     *\n     * // Checking for several possible values\n     * _.filter(users, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     *\n     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    define(function() {\n      return _;\n    });\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n    // Export for Node.js.\n    (freeModule.exports = _)._ = _;\n    // Export for CommonJS support.\n    freeExports._ = _;\n  }\n  else {\n    // Export to the global object.\n    root._ = _;\n  }\n}.call(this));\n","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Auth_1 = require(\"./Auth\");\nexports.AuthClass = Auth_1.default;\nexports.CognitoHostedUIIdentityProvider = Auth_1.CognitoHostedUIIdentityProvider;\nvar amazon_cognito_identity_js_1 = require(\"amazon-cognito-identity-js\");\nexports.CognitoUser = amazon_cognito_identity_js_1.CognitoUser;\nexports.CookieStorage = amazon_cognito_identity_js_1.CookieStorage;\nvar core_1 = require(\"@aws-amplify/core\");\nvar logger = new core_1.ConsoleLogger('Auth');\nvar _instance = null;\nif (!_instance) {\n    logger.debug('Create Auth Instance');\n    _instance = new Auth_1.default(null);\n}\nvar Auth = _instance;\ncore_1.default.register(Auth);\nexports.default = Auth;\n//# sourceMappingURL=index.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar CognitoHostedUIIdentityProvider;\n(function (CognitoHostedUIIdentityProvider) {\n    CognitoHostedUIIdentityProvider[\"Cognito\"] = \"COGNITO\";\n    CognitoHostedUIIdentityProvider[\"Google\"] = \"Google\";\n    CognitoHostedUIIdentityProvider[\"Facebook\"] = \"Facebook\";\n    CognitoHostedUIIdentityProvider[\"Amazon\"] = \"LoginWithAmazon\";\n})(CognitoHostedUIIdentityProvider = exports.CognitoHostedUIIdentityProvider || (exports.CognitoHostedUIIdentityProvider = {}));\nfunction isFederatedSignInOptions(obj) {\n    var key = 'provider';\n    return obj && obj.hasOwnProperty(key);\n}\nexports.isFederatedSignInOptions = isFederatedSignInOptions;\nfunction isFederatedSignInOptionsCustom(obj) {\n    var key = 'customProvider';\n    return obj && obj.hasOwnProperty(key);\n}\nexports.isFederatedSignInOptionsCustom = isFederatedSignInOptionsCustom;\nfunction isCognitoHostedOpts(oauth) {\n    return oauth.redirectSignIn !== undefined;\n}\nexports.isCognitoHostedOpts = isCognitoHostedOpts;\nfunction isUsernamePasswordOpts(obj) {\n    return !!obj.username;\n}\nexports.isUsernamePasswordOpts = isUsernamePasswordOpts;\n//# sourceMappingURL=Auth.js.map",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Check if typed arrays are supported\n\t    if (typeof ArrayBuffer != 'function') {\n\t        return;\n\t    }\n\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var WordArray = C_lib.WordArray;\n\n\t    // Reference original init\n\t    var superInit = WordArray.init;\n\n\t    // Augment WordArray.init to handle typed arrays\n\t    var subInit = WordArray.init = function (typedArray) {\n\t        // Convert buffers to uint8\n\t        if (typedArray instanceof ArrayBuffer) {\n\t            typedArray = new Uint8Array(typedArray);\n\t        }\n\n\t        // Convert other array views to uint8\n\t        if (\n\t            typedArray instanceof Int8Array ||\n\t            (typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray) ||\n\t            typedArray instanceof Int16Array ||\n\t            typedArray instanceof Uint16Array ||\n\t            typedArray instanceof Int32Array ||\n\t            typedArray instanceof Uint32Array ||\n\t            typedArray instanceof Float32Array ||\n\t            typedArray instanceof Float64Array\n\t        ) {\n\t            typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n\t        }\n\n\t        // Handle Uint8Array\n\t        if (typedArray instanceof Uint8Array) {\n\t            // Shortcut\n\t            var typedArrayByteLength = typedArray.byteLength;\n\n\t            // Extract bytes\n\t            var words = [];\n\t            for (var i = 0; i < typedArrayByteLength; i++) {\n\t                words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n\t            }\n\n\t            // Initialize this word array\n\t            superInit.call(this, words, typedArrayByteLength);\n\t        } else {\n\t            // Else call normal init\n\t            superInit.apply(this, arguments);\n\t        }\n\t    };\n\n\t    subInit.prototype = WordArray;\n\t}());\n\n\n\treturn CryptoJS.lib.WordArray;\n\n}));","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar core_1 = require(\"@aws-amplify/core\");\nvar S3 = require(\"aws-sdk/clients/s3\");\nvar logger = new core_1.ConsoleLogger('AWSS3Provider');\nvar AMPLIFY_SYMBOL = ((typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') ?\n    Symbol.for('amplify_default') : '@@amplify_default');\nvar dispatchStorageEvent = function (track, event, attrs, metrics, message) {\n    if (track) {\n        core_1.Hub.dispatch('storage', {\n            event: event,\n            data: { attrs: attrs, metrics: metrics },\n            message: message\n        }, 'Storage', AMPLIFY_SYMBOL);\n    }\n};\n/**\n * Provide storage methods to use AWS S3\n */\nvar AWSS3Provider = /** @class */ (function () {\n    /**\n     * Initialize Storage with AWS configurations\n     * @param {Object} config - Configuration object for storage\n     */\n    function AWSS3Provider(config) {\n        this._config = config ? config : {};\n        logger.debug('Storage Options', this._config);\n    }\n    /**\n     * get the category of the plugin\n     */\n    AWSS3Provider.prototype.getCategory = function () {\n        return AWSS3Provider.CATEGORY;\n    };\n    /**\n     * get provider name of the plugin\n     */\n    AWSS3Provider.prototype.getProviderName = function () {\n        return AWSS3Provider.PROVIDER_NAME;\n    };\n    /**\n     * Configure Storage part with aws configuration\n     * @param {Object} config - Configuration of the Storage\n     * @return {Object} - Current configuration\n     */\n    AWSS3Provider.prototype.configure = function (config) {\n        logger.debug('configure Storage', config);\n        if (!config)\n            return this._config;\n        var amplifyConfig = core_1.Parser.parseMobilehubConfig(config);\n        this._config = Object.assign({}, this._config, amplifyConfig.Storage);\n        if (!this._config.bucket) {\n            logger.debug('Do not have bucket yet');\n        }\n        return this._config;\n    };\n    /**\n    * Get a presigned URL of the file or the object data when download:true\n    *\n    * @param {String} key - key of the object\n    * @param {Object} [config] - { level : private|protected|public, download: true|false }\n    * @return - A promise resolves to Amazon S3 presigned URL on success\n    */\n    AWSS3Provider.prototype.get = function (key, config) {\n        return __awaiter(this, void 0, void 0, function () {\n            var credentialsOK, opt, bucket, region, credentials, level, download, track, expires, prefix, final_key, s3, params;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this._ensureCredentials()];\n                    case 1:\n                        credentialsOK = _a.sent();\n                        if (!credentialsOK) {\n                            return [2 /*return*/, Promise.reject('No credentials')];\n                        }\n                        opt = Object.assign({}, this._config, config);\n                        bucket = opt.bucket, region = opt.region, credentials = opt.credentials, level = opt.level, download = opt.download, track = opt.track, expires = opt.expires;\n                        prefix = this._prefix(opt);\n                        final_key = prefix + key;\n                        s3 = this._createS3(opt);\n                        logger.debug('get ' + key + ' from ' + final_key);\n                        params = {\n                            Bucket: bucket,\n                            Key: final_key\n                        };\n                        if (download === true) {\n                            return [2 /*return*/, new Promise(function (res, rej) {\n                                    s3.getObject(params, function (err, data) {\n                                        if (err) {\n                                            dispatchStorageEvent(track, 'download', {\n                                                method: 'get',\n                                                result: 'failed'\n                                            }, null, \"Download failed with \" + err.message);\n                                            rej(err);\n                                        }\n                                        else {\n                                            dispatchStorageEvent(track, 'download', { method: 'get', result: 'success' }, { fileSize: Number(data.Body['length']) }, \"Download success for \" + key);\n                                            res(data);\n                                        }\n                                    });\n                                })];\n                        }\n                        if (expires) {\n                            params.Expires = expires;\n                        }\n                        return [2 /*return*/, new Promise(function (res, rej) {\n                                try {\n                                    var url = s3.getSignedUrl('getObject', params);\n                                    dispatchStorageEvent(track, 'getSignedUrl', { method: 'get', result: 'success' }, null, \"Signed URL: \" + url);\n                                    res(url);\n                                }\n                                catch (e) {\n                                    logger.warn('get signed url error', e);\n                                    dispatchStorageEvent(track, 'getSignedUrl', { method: 'get', result: 'failed' }, null, \"Could not get a signed URL for \" + key);\n                                    rej(e);\n                                }\n                            })];\n                }\n            });\n        });\n    };\n    /**\n     * Put a file in S3 bucket specified to configure method\n     * @param {String} key - key of the object\n     * @param {Object} object - File to be put in Amazon S3 bucket\n     * @param {Object} [config] - { level : private|protected|public, contentType: MIME Types,\n     *  progressCallback: function }\n     * @return - promise resolves to object on success\n     */\n    AWSS3Provider.prototype.put = function (key, object, config) {\n        return __awaiter(this, void 0, void 0, function () {\n            var credentialsOK, opt, bucket, region, credentials, level, track, progressCallback, contentType, contentDisposition, cacheControl, expires, metadata, tagging, serverSideEncryption, SSECustomerAlgorithm, SSECustomerKey, SSECustomerKeyMD5, SSEKMSKeyId, type, prefix, final_key, s3, params, upload, data, e_1;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this._ensureCredentials()];\n                    case 1:\n                        credentialsOK = _a.sent();\n                        if (!credentialsOK) {\n                            return [2 /*return*/, Promise.reject('No credentials')];\n                        }\n                        opt = Object.assign({}, this._config, config);\n                        bucket = opt.bucket, region = opt.region, credentials = opt.credentials, level = opt.level, track = opt.track, progressCallback = opt.progressCallback;\n                        contentType = opt.contentType, contentDisposition = opt.contentDisposition, cacheControl = opt.cacheControl, expires = opt.expires, metadata = opt.metadata, tagging = opt.tagging;\n                        serverSideEncryption = opt.serverSideEncryption, SSECustomerAlgorithm = opt.SSECustomerAlgorithm, SSECustomerKey = opt.SSECustomerKey, SSECustomerKeyMD5 = opt.SSECustomerKeyMD5, SSEKMSKeyId = opt.SSEKMSKeyId;\n                        type = contentType ? contentType : 'binary/octet-stream';\n                        prefix = this._prefix(opt);\n                        final_key = prefix + key;\n                        s3 = this._createS3(opt);\n                        logger.debug('put ' + key + ' to ' + final_key);\n                        params = {\n                            Bucket: bucket,\n                            Key: final_key,\n                            Body: object,\n                            ContentType: type\n                        };\n                        if (cacheControl) {\n                            params.CacheControl = cacheControl;\n                        }\n                        if (contentDisposition) {\n                            params.ContentDisposition = contentDisposition;\n                        }\n                        if (expires) {\n                            params.Expires = expires;\n                        }\n                        if (metadata) {\n                            params.Metadata = metadata;\n                        }\n                        if (tagging) {\n                            params.Tagging = tagging;\n                        }\n                        if (serverSideEncryption) {\n                            params.ServerSideEncryption = serverSideEncryption;\n                            if (SSECustomerAlgorithm) {\n                                params.SSECustomerAlgorithm = SSECustomerAlgorithm;\n                            }\n                            if (SSECustomerKey) {\n                                params.SSECustomerKey = SSECustomerKey;\n                            }\n                            if (SSECustomerKeyMD5) {\n                                params.SSECustomerKeyMD5 = SSECustomerKeyMD5;\n                            }\n                            if (SSEKMSKeyId) {\n                                params.SSEKMSKeyId = SSEKMSKeyId;\n                            }\n                        }\n                        _a.label = 2;\n                    case 2:\n                        _a.trys.push([2, 4, , 5]);\n                        upload = s3\n                            .upload(params)\n                            .on('httpUploadProgress', function (progress) {\n                            if (progressCallback) {\n                                if (typeof progressCallback === 'function') {\n                                    progressCallback(progress);\n                                }\n                                else {\n                                    logger.warn('progressCallback should be a function, not a ' + typeof progressCallback);\n                                }\n                            }\n                        });\n                        return [4 /*yield*/, upload.promise()];\n                    case 3:\n                        data = _a.sent();\n                        logger.debug('upload result', data);\n                        dispatchStorageEvent(track, 'upload', { method: 'put', result: 'success' }, null, \"Upload success for \" + key);\n                        return [2 /*return*/, {\n                                key: data.Key.substr(prefix.length)\n                            }];\n                    case 4:\n                        e_1 = _a.sent();\n                        logger.warn(\"error uploading\", e_1);\n                        dispatchStorageEvent(track, 'upload', { method: 'put', result: 'failed' }, null, \"Error uploading \" + key);\n                        throw e_1;\n                    case 5: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    /**\n     * Remove the object for specified key\n     * @param {String} key - key of the object\n     * @param {Object} [config] - { level : private|protected|public }\n     * @return - Promise resolves upon successful removal of the object\n     */\n    AWSS3Provider.prototype.remove = function (key, config) {\n        return __awaiter(this, void 0, void 0, function () {\n            var credentialsOK, opt, bucket, region, credentials, level, track, prefix, final_key, s3, params;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this._ensureCredentials()];\n                    case 1:\n                        credentialsOK = _a.sent();\n                        if (!credentialsOK) {\n                            return [2 /*return*/, Promise.reject('No credentials')];\n                        }\n                        opt = Object.assign({}, this._config, config);\n                        bucket = opt.bucket, region = opt.region, credentials = opt.credentials, level = opt.level, track = opt.track;\n                        prefix = this._prefix(opt);\n                        final_key = prefix + key;\n                        s3 = this._createS3(opt);\n                        logger.debug('remove ' + key + ' from ' + final_key);\n                        params = {\n                            Bucket: bucket,\n                            Key: final_key\n                        };\n                        return [2 /*return*/, new Promise(function (res, rej) {\n                                s3.deleteObject(params, function (err, data) {\n                                    if (err) {\n                                        dispatchStorageEvent(track, 'delete', { method: 'remove', result: 'failed' }, null, \"Deletion of \" + key + \" failed with \" + err);\n                                        rej(err);\n                                    }\n                                    else {\n                                        dispatchStorageEvent(track, 'delete', { method: 'remove', result: 'success' }, null, \"Deleted \" + key + \" successfully\");\n                                        res(data);\n                                    }\n                                });\n                            })];\n                }\n            });\n        });\n    };\n    /**\n     * List bucket objects relative to the level and prefix specified\n     * @param {String} path - the path that contains objects\n     * @param {Object} [config] - { level : private|protected|public }\n     * @return - Promise resolves to list of keys for all objects in path\n     */\n    AWSS3Provider.prototype.list = function (path, config) {\n        return __awaiter(this, void 0, void 0, function () {\n            var credentialsOK, opt, bucket, region, credentials, level, download, track, prefix, final_path, s3, params;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this._ensureCredentials()];\n                    case 1:\n                        credentialsOK = _a.sent();\n                        if (!credentialsOK) {\n                            return [2 /*return*/, Promise.reject('No credentials')];\n                        }\n                        opt = Object.assign({}, this._config, config);\n                        bucket = opt.bucket, region = opt.region, credentials = opt.credentials, level = opt.level, download = opt.download, track = opt.track;\n                        prefix = this._prefix(opt);\n                        final_path = prefix + path;\n                        s3 = this._createS3(opt);\n                        logger.debug('list ' + path + ' from ' + final_path);\n                        params = {\n                            Bucket: bucket,\n                            Prefix: final_path\n                        };\n                        return [2 /*return*/, new Promise(function (res, rej) {\n                                s3.listObjects(params, function (err, data) {\n                                    if (err) {\n                                        logger.warn('list error', err);\n                                        dispatchStorageEvent(track, 'list', { method: 'list', result: 'failed' }, null, \"Listing items failed: \" + err.message);\n                                        rej(err);\n                                    }\n                                    else {\n                                        var list = data.Contents.map(function (item) {\n                                            return {\n                                                key: item.Key.substr(prefix.length),\n                                                eTag: item.ETag,\n                                                lastModified: item.LastModified,\n                                                size: item.Size\n                                            };\n                                        });\n                                        dispatchStorageEvent(track, 'list', { method: 'list', result: 'success' }, null, list.length + \" items returned from list operation\");\n                                        logger.debug('list', list);\n                                        res(list);\n                                    }\n                                });\n                            })];\n                }\n            });\n        });\n    };\n    /**\n     * @private\n     */\n    AWSS3Provider.prototype._ensureCredentials = function () {\n        var _this = this;\n        return core_1.Credentials.get()\n            .then(function (credentials) {\n            if (!credentials)\n                return false;\n            var cred = core_1.Credentials.shear(credentials);\n            logger.debug('set credentials for storage', cred);\n            _this._config.credentials = cred;\n            return true;\n        })\n            .catch(function (err) {\n            logger.warn('ensure credentials error', err);\n            return false;\n        });\n    };\n    /**\n     * @private\n     */\n    AWSS3Provider.prototype._prefix = function (config) {\n        var credentials = config.credentials, level = config.level;\n        var customPrefix = config.customPrefix || {};\n        var identityId = config.identityId || credentials.identityId;\n        var privatePath = (customPrefix.private !== undefined ? customPrefix.private : 'private/') + identityId + '/';\n        var protectedPath = (customPrefix.protected !== undefined ?\n            customPrefix.protected : 'protected/') + identityId + '/';\n        var publicPath = customPrefix.public !== undefined ? customPrefix.public : 'public/';\n        switch (level) {\n            case 'private':\n                return privatePath;\n            case 'protected':\n                return protectedPath;\n            default:\n                return publicPath;\n        }\n    };\n    /**\n     * @private\n     */\n    AWSS3Provider.prototype._createS3 = function (config) {\n        var bucket = config.bucket, region = config.region, credentials = config.credentials;\n        return new S3({\n            apiVersion: '2006-03-01',\n            params: { Bucket: bucket },\n            signatureVersion: 'v4',\n            region: region,\n            credentials: credentials\n        });\n    };\n    AWSS3Provider.CATEGORY = 'Storage';\n    AWSS3Provider.PROVIDER_NAME = 'AWSS3';\n    return AWSS3Provider;\n}());\nexports.default = AWSS3Provider;\n//# sourceMappingURL=AWSS3Provider.js.map","import { IRecordReference, RecordReference } from \"shared-models/record-reference\";\nimport { computedFrom } from \"aurelia-framework\";\nimport { CarrierReference, ShippingMethodReference, IShippingMethodReference, ICarrierReference } from \"./carrier-record\";\nimport moment from 'moment';\nimport { ItemReference } from \"items/models/item-record\";\n\nexport function convertResponseToOrderReference(orderResponse: any): OrderReference{\n    return new OrderReference({\n        id: orderResponse[\"id\"],\n        status: orderResponse[\"winery_order_status\"],\n        vinfillmentOrderNumber: orderResponse[\"name\"],\n        wineryOrderNumber: orderResponse[\"winery_order_number\"],\n        carrier: orderResponse[\"shipping_carrier\"],\n        shippingMethod: orderResponse[\"shipping_method\"],\n        futureShipDate: orderResponse[\"future_ship_date\"] ? moment(orderResponse[\"future_ship_date\"], \"YYYY-MM-DD\").toDate(): null,\n        email: orderResponse[\"recipient_emails\"] || \"\",\n        declaredValue: orderResponse[\"declared_value\"],\n        giftMessage: orderResponse[\"gift_message\"] || \"\",\n        includeIce: orderResponse[\"include_ice_packs\"],\n        weatherHold: orderResponse[\"weather_hold\"],\n        shippingInstructions: orderResponse[\"special_shipping_instructions\"] || \"\",\n        trackingLink: orderResponse[\"tracking_link\"] || \"\",\n        trackingNumberList: orderResponse[\"tracking_number_list\"] || \"\",\n        isColdChainCompatible: orderResponse[\"is_cold_chain_compatible\"],\n        coldChainDeliveryDay: orderResponse[\"cold_chain_delivery_day\"],\n        coldChainDeliveryTime: orderResponse[\"cold_chain_delivery_time\"],\n        coldChainZone: orderResponse[\"cold_chain_zone\"],\n        createdByUser: orderResponse[\"created_by_user\"],\n        shippingAddress: {\n            addressee: orderResponse[\"shipping_addressee\"] || \"\",\n            attention: orderResponse[\"shipping_attention\"] || \"\",\n            address1: orderResponse[\"shipping_street\"] || \"\",\n            address2: orderResponse[\"shipping_street2\"] || \"\",\n            city: orderResponse[\"shipping_city\"] || \"\",\n            state: orderResponse[\"shipping_state\"],\n            zip: orderResponse[\"shipping_zip\"] || \"\",\n            country: orderResponse[\"shipping_country\"],\n            phone: orderResponse[\"shipping_phone\"] || \"\"\n        }\n    });\n}\n\nexport function convertResponseToOrderLine(orderLineResponse: any): OrderItem{\n    let order = new OrderItem({\n        id: orderLineResponse[\"id\"],\n        orderId: orderLineResponse[\"order_id\"] ? orderLineResponse[\"order_id\"].id : \"\",\n        orderNumber: orderLineResponse[\"order_id\"] ? orderLineResponse[\"order_id\"].name : \"\",\n        itemName: orderLineResponse[\"product_template_id\"] ? orderLineResponse[\"product_template_id\"].name : \"\",\n        itemId: orderLineResponse[\"product_template_id\"] ? orderLineResponse[\"product_template_id\"].id : \"\",\n        sku: orderLineResponse[\"winery_sku\"],\n        quantity: orderLineResponse[\"product_uom_qty\"],\n        committed: orderLineResponse[\"qty_committed\"],\n        backordered: orderLineResponse[\"qty_backordered\"],\n        available: orderLineResponse[\"qty_available\"],\n        shipped: orderLineResponse[\"qty_delivered\"]\n    });\n    return order;\n}\n\nexport function convertResponseToOrder(orderResponse: any): Order{\n    let orderReference = convertResponseToOrderReference(orderResponse);\n    let order = new Order(orderReference);    \n    order.items = (orderResponse[\"order_line\"] || []).map(convertResponseToOrderLine);\n    order.trackingNumbers = (orderResponse[\"tracking_numbers\"] || []).map((trackingNumber)=> {\n        return {\n            id: trackingNumber[\"id\"],\n            name: trackingNumber[\"name\"],      \n            active: trackingNumber[\"active\"],\n            carrierTrackingLink: trackingNumber[\"carrier_tracking_link\"],\n            currentCarrierStatus: trackingNumber[\"current_carrier_status\"],\n            numberOfAttempts: trackingNumber[\"number_of_attempts\"],\n            estimatedDelivery: trackingNumber[\"estimated_delivery\"] ? moment(trackingNumber[\"estimated_delivery\"], \"YYYY-MM-DD HH:mm:ss\").toDate(): null,\n            actualDelivery: trackingNumber[\"actual_delivery\"] ? moment(trackingNumber[\"actual_delivery\"], \"YYYY-MM-DD HH:mm:ss\").toDate(): null,\n            isReturnTracking: trackingNumber[\"is_return_tracking\"],\n            returnTrackingNumber: trackingNumber[\"return_tracking_number\"]\n        }\n    });\n    return order;\n}\n\nexport interface IOrderReference {\n    id?: number, \n    wineryOrderNumber?: string, \n    status?: string, \n    vinfillmentOrderNumber?: string, \n    carrier?: ICarrierReference, \n    shippingMethod?: IShippingMethodReference, \n    futureShipDate?: Date, \n    shipDate?: Date,\n    shippingInstructions?: string,\n    giftMessage?: string,\n    includeIce?: boolean,\n    weatherHold?: boolean,\n    shippingAddress?: IAddress,\n    trackingLink?: string,\n    trackingNumberList?: string,\n    isColdChainCompatible?: boolean,\n    coldChainDeliveryDay?: IRecordReference,\n    coldChainDeliveryTime?: string,\n    coldChainZone?: IRecordReference,\n    createdByUser?: IRecordReference,\n    email?: string,\n    declaredValue?: number\n};\nexport class OrderReference {   \n    id?: number;\n    wineryOrderNumber?: string;\n    status?: string;\n    vinfillmentOrderNumber?: string;\n    carrier?: CarrierReference;\n    shippingMethod?: ShippingMethodReference;\n    futureShipDate?: Date;\n    shipDate?: Date;\n    shippingInstructions?: string;\n    giftMessage?: string;\n    includeIce?: boolean;\n    weatherHold?: boolean;\n    shippingAddress?: Address;\n    trackingLink?: string;\n    trackingNumberList?: string;\n    isColdChainCompatible?: boolean;\n    coldChainDeliveryDay?: RecordReference;\n    coldChainDeliveryTime?: string;\n    coldChainZone?: RecordReference;\n    createdByUser?: RecordReference;\n    email?: string;\n    declaredValue?: number;\n    constructor(data: IOrder){\n        this.id = data.id;      \n        this.wineryOrderNumber = data.wineryOrderNumber;      \n        this.status = data.status;      \n        this.vinfillmentOrderNumber = data.vinfillmentOrderNumber;      \n        this.carrier = data.carrier ? new CarrierReference(data.carrier) : null;\n        this.shippingMethod = data.shippingMethod ? new ShippingMethodReference(data.shippingMethod) : null;\n        this.futureShipDate = data.futureShipDate;\n        this.shipDate = data.shipDate;\n        this.shippingInstructions = data.shippingInstructions;\n        this.giftMessage = data.giftMessage || \"\";\n        this.includeIce = data.includeIce || false;\n        this.weatherHold = data.weatherHold || false;\n        this.shippingAddress = new Address(data.shippingAddress); \n        this.trackingLink = data.trackingLink || \"\";\n        this.trackingNumberList = data.trackingNumberList || \"\";\n        this.isColdChainCompatible = data.isColdChainCompatible || false;\n        this.coldChainDeliveryDay = data.coldChainDeliveryDay ? new RecordReference(data.coldChainDeliveryDay) : null;\n        this.coldChainDeliveryTime = data.coldChainDeliveryTime || \"\";\n        this.coldChainZone = data.coldChainZone ? new RecordReference(data.coldChainZone) : null;\n        this.createdByUser = data.createdByUser ? new RecordReference(data.createdByUser) : null;\n        this.email = data.email || \"\";\n        this.declaredValue = data.declaredValue || 0;\n    }\n\n    @computedFrom('carrier')\n    get carrierName(): string {\n        return this.carrier ? this.carrier.name : \"\";\n    }\n\n    @computedFrom('shippingMethod')\n    get shippingMethodName(): string {\n        return this.shippingMethod ? this.shippingMethod.name : \"\";\n    }    \n\n    isPendingApproval(): boolean{\n        if(this.status === \"Pending Approval\"){\n            return true;\n        }\n        return false;\n    }\n\n    isPendingFulfillment(): boolean{\n        if(this.status === \"Pending Fulfillment\"){\n            return true;\n        }\n        return false;\n    }\n\n    isVoided(): boolean{\n        if(this.status === \"Voided\"){\n            return true;\n        }\n        return false;\n    }\n\n    isShippingColdChain(): boolean{\n        if(this.shippingMethod && this.shippingMethod.name.toUpperCase() === \"COLD CHAIN\"){\n            return true;\n        }\n        return false;\n    }\n}\n\nexport interface IOrder extends IOrderReference{items?: IOrderItem[],trackingNumbers?: ITrackingNumber[]};\nexport class Order extends OrderReference {   \n    items?: OrderItem[];\n    trackingNumbers?: TrackingNumber[];\n    constructor(data: IOrder){\n        super(data);\n        this.items = (data.items || []).map((item) => new OrderItem(item));        \n        this.trackingNumbers = (data.trackingNumbers || []).map((trackingNumber) => new TrackingNumber(trackingNumber));        \n    }    \n}\n\nexport interface IOrderItem {id?: string, orderId?: number, orderNumber?: string, itemName?: string, itemId?: string, sku?: string, quantity?: number, committed?: number, backordered?: number, available?: number, shipped?: number};\nexport class OrderItem {\n    id: string;\n    orderId: number;\n    orderNumber: string;\n    itemName: string;\n    itemId: string;\n    sku: string;\n    quantity: number;\n    committed: number;\n    backordered: number;\n    available: number;\n    shipped: number;\n\n    constructor(data: IOrderItem){\n        data = data || {};\n        this.id = data.id;\n        this.orderId = data.orderId;\n        this.orderNumber = data.orderNumber;\n        this.itemName = data.itemName;\n        this.itemId = data.itemId;\n        this.sku = data.sku;\n        this.quantity = data.quantity || 0;\n        this.committed = data.committed || 0;\n        this.backordered = data.backordered || 0;\n        this.available = data.available || 0;\n        this.shipped = data.shipped || 0;\n    }\n}\n\nexport interface ITrackingNumber {id?: string, name?: string, active?: boolean, carrierTrackingLink?: string, currentCarrierStatus?: string,numberOfAttempts?: number, estimatedDelivery?: Date, actualDelivery?: Date, isReturnTracking?: boolean, returnTrackingNumber?: IRecordReference};\nexport class TrackingNumber {\n    id: string;\n    name: string;\n    active: boolean;\n    carrierTrackingLink: string;\n    currentCarrierStatus: string;\n    numberOfAttempts: number;\n    estimatedDelivery: Date;\n    actualDelivery: Date;\n    isReturnTracking: boolean;\n    returnTrackingNumber: RecordReference;\n\n    constructor(data: ITrackingNumber){\n        data = data || {};\n        this.id = data.id;\n        this.name = data.name;\n        this.active = data.active || false;\n        this.carrierTrackingLink = data.carrierTrackingLink || \"\";\n        this.currentCarrierStatus = data.currentCarrierStatus || \"\";\n        this.numberOfAttempts = data.numberOfAttempts || 0;\n        this.estimatedDelivery = data.estimatedDelivery;\n        this.actualDelivery = data.actualDelivery;\n        this.isReturnTracking = data.isReturnTracking || false;\n        this.returnTrackingNumber = data.returnTrackingNumber ? new RecordReference(data.returnTrackingNumber) : null;\n    }\n}\n\nexport interface IAddress {addressee?: string, attention?: string, address1?: string, address2?: string, city?: string, state?: IRecordReference, zip?: string, country?: IRecordReference,phone?: string};\nexport class Address {\n    addressee: string;\n    attention: string;\n    address1: string;\n    address2: string;\n    city: string;\n    state: RecordReference;\n    zip: string;\n    country: RecordReference;\n    phone: string;\n\n    constructor(data: IAddress){\n        data = data || {};\n        this.addressee = data.addressee || \"\";      \n        this.attention = data.attention || \"\";      \n        this.address1 = data.address1 || \"\";      \n        this.address2 = data.address2 || \"\";      \n        this.city = data.city || \"\";      \n        this.state = data.state ? new RecordReference(data.state) : null;      \n        this.zip = data.zip || \"\";      \n        this.country = data.country ? new RecordReference(data.country) : null;      \n        this.phone = data.phone || \"\";      \n    }\n\n    isInternational(): boolean{\n        if(!this.country){\n            return false;\n        }\n        if(this.country.name.toUpperCase() === \"UNITED STATES\"){\n            return false;\n        }\n        return true;\n    }\n\n    _addNewLine(data) {\n        return data ? data + \"\\r\\n\" : \"\";\n    }\n\n    _addBankSpaceAfter(data) {\n        return data ? data + \" \" : \"\"\n    }\n\n    @computedFrom('country')\n    get countryName(): string {\n        return this.country ? this.country.name : \"\";\n    }\n\n    @computedFrom('state')\n    get stateName(): string {\n        return this.state ? this.state.name : \"\";\n    }\n\n    @computedFrom('attention', 'addressee', 'address1', 'address2', 'city', 'stateName', 'zip', 'countryName', 'phone')\n    get addressForm(): string {        \n        return this._addNewLine(this.attention) +\n            this._addNewLine(this.addressee) +\n            this._addNewLine(this.address1) +\n            this._addNewLine(this.address2) +\n            this._addBankSpaceAfter(this.city) + this._addBankSpaceAfter(this.stateName) + this._addBankSpaceAfter(this.zip) + \"\\r\\n\" +\n            this._addNewLine(this.countryName) +\n            this._addNewLine(this.phone);\n    }\n}\n\ninterface IOrderLine { item?: ItemReference, quantity?: number, lineNumber: number, addedLine?: boolean };\nexport class OrderLine {\n  item: ItemReference;\n  quantity: number;\n  lineNumber: number;\n  addedLine: boolean;\n\n  constructor(data: IOrderLine) {\n    this.item = data.item ? new ItemReference(data.item): null;\n    this.lineNumber = data.lineNumber;\n    this.quantity = data.quantity;\n    this.addedLine = false;\n  }\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = invariant;\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction invariant(condition, message) {\n  /* istanbul ignore else */\n  if (!condition) {\n    throw new Error(message);\n  }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _GraphQLError = require('./GraphQLError');\n\nObject.defineProperty(exports, 'GraphQLError', {\n  enumerable: true,\n  get: function get() {\n    return _GraphQLError.GraphQLError;\n  }\n});\n\nvar _syntaxError = require('./syntaxError');\n\nObject.defineProperty(exports, 'syntaxError', {\n  enumerable: true,\n  get: function get() {\n    return _syntaxError.syntaxError;\n  }\n});\n\nvar _locatedError = require('./locatedError');\n\nObject.defineProperty(exports, 'locatedError', {\n  enumerable: true,\n  get: function get() {\n    return _locatedError.locatedError;\n  }\n});\n\nvar _printError = require('./printError');\n\nObject.defineProperty(exports, 'printError', {\n  enumerable: true,\n  get: function get() {\n    return _printError.printError;\n  }\n});\n\nvar _formatError = require('./formatError');\n\nObject.defineProperty(exports, 'formatError', {\n  enumerable: true,\n  get: function get() {\n    return _formatError.formatError;\n  }\n});","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.printError = printError;\n\nvar _location = require('../language/location');\n\n/**\n * Prints a GraphQLError to a string, representing useful location information\n * about the error's position in the source.\n */\nfunction printError(error) {\n  var printedLocations = [];\n  if (error.nodes) {\n    error.nodes.forEach(function (node) {\n      if (node.loc) {\n        printedLocations.push(highlightSourceAtLocation(node.loc.source, (0, _location.getLocation)(node.loc.source, node.loc.start)));\n      }\n    });\n  } else if (error.source && error.locations) {\n    var source = error.source;\n    error.locations.forEach(function (location) {\n      printedLocations.push(highlightSourceAtLocation(source, location));\n    });\n  }\n  return printedLocations.length === 0 ? error.message : [error.message].concat(printedLocations).join('\\n\\n') + '\\n';\n}\n\n/**\n * Render a helpful description of the location of the error in the GraphQL\n * Source document.\n */\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction highlightSourceAtLocation(source, location) {\n  var line = location.line;\n  var lineOffset = source.locationOffset.line - 1;\n  var columnOffset = getColumnOffset(source, location);\n  var contextLine = line + lineOffset;\n  var contextColumn = location.column + columnOffset;\n  var prevLineNum = (contextLine - 1).toString();\n  var lineNum = contextLine.toString();\n  var nextLineNum = (contextLine + 1).toString();\n  var padLen = nextLineNum.length;\n  var lines = source.body.split(/\\r\\n|[\\n\\r]/g);\n  lines[0] = whitespace(source.locationOffset.column - 1) + lines[0];\n  var outputLines = [source.name + ' (' + contextLine + ':' + contextColumn + ')', line >= 2 && lpad(padLen, prevLineNum) + ': ' + lines[line - 2], lpad(padLen, lineNum) + ': ' + lines[line - 1], whitespace(2 + padLen + contextColumn - 1) + '^', line < lines.length && lpad(padLen, nextLineNum) + ': ' + lines[line]];\n  return outputLines.filter(Boolean).join('\\n');\n}\n\nfunction getColumnOffset(source, location) {\n  return location.line === 1 ? source.locationOffset.column - 1 : 0;\n}\n\nfunction whitespace(len) {\n  return Array(len + 1).join(' ');\n}\n\nfunction lpad(len, str) {\n  return whitespace(len - str.length) + str;\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.getLocation = getLocation;\n\n\n/**\n * Takes a Source and a UTF-8 character offset, and returns the corresponding\n * line and column as a SourceLocation.\n */\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction getLocation(source, position) {\n  var lineRegexp = /\\r\\n|[\\n\\r]/g;\n  var line = 1;\n  var column = position + 1;\n  var match = void 0;\n  while ((match = lineRegexp.exec(source.body)) && match.index < position) {\n    line += 1;\n    column = position + 1 - (match.index + match[0].length);\n  }\n  return { line: line, column: column };\n}\n\n/**\n * Represents a location in a Source.\n */","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n  return function wrap() {\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n    return fn.apply(thisArg, args);\n  };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%40/gi, '@').\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n\n  var serializedParams;\n  if (paramsSerializer) {\n    serializedParams = paramsSerializer(params);\n  } else if (utils.isURLSearchParams(params)) {\n    serializedParams = params.toString();\n  } else {\n    var parts = [];\n\n    utils.forEach(params, function serialize(val, key) {\n      if (val === null || typeof val === 'undefined') {\n        return;\n      }\n\n      if (utils.isArray(val)) {\n        key = key + '[]';\n      } else {\n        val = [val];\n      }\n\n      utils.forEach(val, function parseValue(v) {\n        if (utils.isDate(v)) {\n          v = v.toISOString();\n        } else if (utils.isObject(v)) {\n          v = JSON.stringify(v);\n        }\n        parts.push(encode(key) + '=' + encode(v));\n      });\n    });\n\n    serializedParams = parts.join('&');\n  }\n\n  if (serializedParams) {\n    var hashmarkIndex = url.indexOf('#');\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n  'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n    headers['Content-Type'] = value;\n  }\n}\n\nfunction getDefaultAdapter() {\n  var adapter;\n  // Only Node.JS has a process variable that is of [[Class]] process\n  if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n    // For node use HTTP adapter\n    adapter = require('./adapters/http');\n  } else if (typeof XMLHttpRequest !== 'undefined') {\n    // For browsers use XHR adapter\n    adapter = require('./adapters/xhr');\n  }\n  return adapter;\n}\n\nvar defaults = {\n  adapter: getDefaultAdapter(),\n\n  transformRequest: [function transformRequest(data, headers) {\n    normalizeHeaderName(headers, 'Accept');\n    normalizeHeaderName(headers, 'Content-Type');\n    if (utils.isFormData(data) ||\n      utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n      return data.toString();\n    }\n    if (utils.isObject(data)) {\n      setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n      return JSON.stringify(data);\n    }\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    /*eslint no-param-reassign:0*/\n    if (typeof data === 'string') {\n      try {\n        data = JSON.parse(data);\n      } catch (e) { /* Ignore */ }\n    }\n    return data;\n  }],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  }\n};\n\ndefaults.headers = {\n  common: {\n    'Accept': 'application/json, text/plain, */*'\n  }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n  defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    var requestData = config.data;\n    var requestHeaders = config.headers;\n\n    if (utils.isFormData(requestData)) {\n      delete requestHeaders['Content-Type']; // Let the browser set it\n    }\n\n    var request = new XMLHttpRequest();\n\n    // HTTP basic authentication\n    if (config.auth) {\n      var username = config.auth.username || '';\n      var password = config.auth.password || '';\n      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n    }\n\n    request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n    // Set the request timeout in MS\n    request.timeout = config.timeout;\n\n    // Listen for ready state\n    request.onreadystatechange = function handleLoad() {\n      if (!request || request.readyState !== 4) {\n        return;\n      }\n\n      // The request errored out and we didn't get a response, this will be\n      // handled by onerror instead\n      // With one exception: request that using file: protocol, most browsers\n      // will return status as 0 even though it's a successful request\n      if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n        return;\n      }\n\n      // Prepare the response\n      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n      var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n      var response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config: config,\n        request: request\n      };\n\n      settle(resolve, reject, response);\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle browser request cancellation (as opposed to a manual cancellation)\n    request.onabort = function handleAbort() {\n      if (!request) {\n        return;\n      }\n\n      reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n    request.onerror = function handleError() {\n      // Real errors are hidden from us by the browser\n      // onerror should only fire if it's a network error\n      reject(createError('Network Error', config, null, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Add xsrf header\n    // This is only done if running in a standard browser environment.\n    // Specifically not if we're in a web worker, or react-native.\n    if (utils.isStandardBrowserEnv()) {\n      var cookies = require('./../helpers/cookies');\n\n      // Add xsrf header\n      var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n        cookies.read(config.xsrfCookieName) :\n        undefined;\n\n      if (xsrfValue) {\n        requestHeaders[config.xsrfHeaderName] = xsrfValue;\n      }\n    }\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n          // Remove Content-Type if data is undefined\n          delete requestHeaders[key];\n        } else {\n          // Otherwise add header to the request\n          request.setRequestHeader(key, val);\n        }\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (config.withCredentials) {\n      request.withCredentials = true;\n    }\n\n    // Add responseType to request if needed\n    if (config.responseType) {\n      try {\n        request.responseType = config.responseType;\n      } catch (e) {\n        // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n        // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n        if (config.responseType !== 'json') {\n          throw e;\n        }\n      }\n    }\n\n    // Handle progress if needed\n    if (typeof config.onDownloadProgress === 'function') {\n      request.addEventListener('progress', config.onDownloadProgress);\n    }\n\n    // Not all browsers support upload events\n    if (typeof config.onUploadProgress === 'function' && request.upload) {\n      request.upload.addEventListener('progress', config.onUploadProgress);\n    }\n\n    if (config.cancelToken) {\n      // Handle cancellation\n      config.cancelToken.promise.then(function onCanceled(cancel) {\n        if (!request) {\n          return;\n        }\n\n        request.abort();\n        reject(cancel);\n        // Clean up request\n        request = null;\n      });\n    }\n\n    if (requestData === undefined) {\n      requestData = null;\n    }\n\n    // Send the request\n    request.send(requestData);\n  });\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n  var error = new Error(message);\n  return enhanceError(error, config, code, request, response);\n};\n","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { isObjectType, isInterfaceType, isUnionType, isInputObjectType, isWrappingType } from './definition';\n\nimport { GraphQLDirective, isDirective, specifiedDirectives } from './directives';\n\nimport { __Schema } from './introspection';\nimport find from '../jsutils/find';\nimport instanceOf from '../jsutils/instanceOf';\nimport invariant from '../jsutils/invariant';\nimport objectValues from '../jsutils/objectValues';\n\n/**\n * Test if the given value is a GraphQL schema.\n */\n\n// eslint-disable-next-line no-redeclare\nexport function isSchema(schema) {\n  return instanceOf(schema, GraphQLSchema);\n}\n\n/**\n * Schema Definition\n *\n * A Schema is created by supplying the root types of each type of operation,\n * query and mutation (optional). A schema definition is then supplied to the\n * validator and executor.\n *\n * Example:\n *\n *     const MyAppSchema = new GraphQLSchema({\n *       query: MyAppQueryRootType,\n *       mutation: MyAppMutationRootType,\n *     })\n *\n * Note: If an array of `directives` are provided to GraphQLSchema, that will be\n * the exact list of directives represented and allowed. If `directives` is not\n * provided then a default set of the specified directives (e.g. @include and\n * @skip) will be used. If you wish to provide *additional* directives to these\n * specified directives, you must explicitly declare them. Example:\n *\n *     const MyAppSchema = new GraphQLSchema({\n *       ...\n *       directives: specifiedDirectives.concat([ myCustomDirective ]),\n *     })\n *\n */\nexport var GraphQLSchema = function () {\n  // Used as a cache for validateSchema().\n  function GraphQLSchema(config) {\n    var _this = this;\n\n    _classCallCheck(this, GraphQLSchema);\n\n    // If this schema was built from a source known to be valid, then it may be\n    // marked with assumeValid to avoid an additional type system validation.\n    if (config && config.assumeValid) {\n      this.__validationErrors = [];\n    } else {\n      // Otherwise check for common mistakes during construction to produce\n      // clear and early error messages.\n      !((typeof config === 'undefined' ? 'undefined' : _typeof(config)) === 'object') ? invariant(0, 'Must provide configuration object.') : void 0;\n      !(!config.types || Array.isArray(config.types)) ? invariant(0, '\"types\" must be Array if provided but got: ' + String(config.types) + '.') : void 0;\n      !(!config.directives || Array.isArray(config.directives)) ? invariant(0, '\"directives\" must be Array if provided but got: ' + (String(config.directives) + '.')) : void 0;\n      !(!config.allowedLegacyNames || Array.isArray(config.allowedLegacyNames)) ? invariant(0, '\"allowedLegacyNames\" must be Array if provided but got: ' + (String(config.allowedLegacyNames) + '.')) : void 0;\n      this.__allowedLegacyNames = config.allowedLegacyNames;\n    }\n\n    this._queryType = config.query;\n    this._mutationType = config.mutation;\n    this._subscriptionType = config.subscription;\n    // Provide specified directives (e.g. @include and @skip) by default.\n    this._directives = config.directives || specifiedDirectives;\n    this.astNode = config.astNode;\n\n    // Build type map now to detect any errors within this schema.\n    var initialTypes = [this.getQueryType(), this.getMutationType(), this.getSubscriptionType(), __Schema];\n\n    var types = config.types;\n    if (types) {\n      initialTypes = initialTypes.concat(types);\n    }\n\n    // Keep track of all types referenced within the schema.\n    var typeMap = Object.create(null);\n\n    // First by deeply visiting all initial types.\n    typeMap = initialTypes.reduce(typeMapReducer, typeMap);\n\n    // Then by deeply visiting all directive types.\n    typeMap = this._directives.reduce(typeMapDirectiveReducer, typeMap);\n\n    // Storing the resulting map for reference by the schema.\n    this._typeMap = typeMap;\n\n    // Keep track of all implementations by interface name.\n    this._implementations = Object.create(null);\n    Object.keys(this._typeMap).forEach(function (typeName) {\n      var type = _this._typeMap[typeName];\n      if (isObjectType(type)) {\n        type.getInterfaces().forEach(function (iface) {\n          var impls = _this._implementations[iface.name];\n          if (impls) {\n            impls.push(type);\n          } else {\n            _this._implementations[iface.name] = [type];\n          }\n        });\n      }\n    });\n  }\n  // Referenced by validateSchema().\n\n\n  GraphQLSchema.prototype.getQueryType = function getQueryType() {\n    return this._queryType;\n  };\n\n  GraphQLSchema.prototype.getMutationType = function getMutationType() {\n    return this._mutationType;\n  };\n\n  GraphQLSchema.prototype.getSubscriptionType = function getSubscriptionType() {\n    return this._subscriptionType;\n  };\n\n  GraphQLSchema.prototype.getTypeMap = function getTypeMap() {\n    return this._typeMap;\n  };\n\n  GraphQLSchema.prototype.getType = function getType(name) {\n    return this.getTypeMap()[name];\n  };\n\n  GraphQLSchema.prototype.getPossibleTypes = function getPossibleTypes(abstractType) {\n    if (isUnionType(abstractType)) {\n      return abstractType.getTypes();\n    }\n    return this._implementations[abstractType.name];\n  };\n\n  GraphQLSchema.prototype.isPossibleType = function isPossibleType(abstractType, possibleType) {\n    var possibleTypeMap = this._possibleTypeMap;\n    if (!possibleTypeMap) {\n      this._possibleTypeMap = possibleTypeMap = Object.create(null);\n    }\n\n    if (!possibleTypeMap[abstractType.name]) {\n      var possibleTypes = this.getPossibleTypes(abstractType);\n      !Array.isArray(possibleTypes) ? invariant(0, 'Could not find possible implementing types for ' + abstractType.name + ' ' + 'in schema. Check that schema.types is defined and is an array of ' + 'all possible types in the schema.') : void 0;\n      possibleTypeMap[abstractType.name] = possibleTypes.reduce(function (map, type) {\n        return map[type.name] = true, map;\n      }, Object.create(null));\n    }\n\n    return Boolean(possibleTypeMap[abstractType.name][possibleType.name]);\n  };\n\n  GraphQLSchema.prototype.getDirectives = function getDirectives() {\n    return this._directives;\n  };\n\n  GraphQLSchema.prototype.getDirective = function getDirective(name) {\n    return find(this.getDirectives(), function (directive) {\n      return directive.name === name;\n    });\n  };\n\n  return GraphQLSchema;\n}();\n\nfunction typeMapReducer(map, type) {\n  if (!type) {\n    return map;\n  }\n  if (isWrappingType(type)) {\n    return typeMapReducer(map, type.ofType);\n  }\n  if (map[type.name]) {\n    !(map[type.name] === type) ? invariant(0, 'Schema must contain unique named types but contains multiple ' + ('types named \"' + type.name + '\".')) : void 0;\n    return map;\n  }\n  map[type.name] = type;\n\n  var reducedMap = map;\n\n  if (isUnionType(type)) {\n    reducedMap = type.getTypes().reduce(typeMapReducer, reducedMap);\n  }\n\n  if (isObjectType(type)) {\n    reducedMap = type.getInterfaces().reduce(typeMapReducer, reducedMap);\n  }\n\n  if (isObjectType(type) || isInterfaceType(type)) {\n    objectValues(type.getFields()).forEach(function (field) {\n      if (field.args) {\n        var fieldArgTypes = field.args.map(function (arg) {\n          return arg.type;\n        });\n        reducedMap = fieldArgTypes.reduce(typeMapReducer, reducedMap);\n      }\n      reducedMap = typeMapReducer(reducedMap, field.type);\n    });\n  }\n\n  if (isInputObjectType(type)) {\n    objectValues(type.getFields()).forEach(function (field) {\n      reducedMap = typeMapReducer(reducedMap, field.type);\n    });\n  }\n\n  return reducedMap;\n}\n\nfunction typeMapDirectiveReducer(map, directive) {\n  // Directives are not validated until validateSchema() is called.\n  if (!isDirective(directive)) {\n    return map;\n  }\n  return directive.args.reduce(function (_map, arg) {\n    return typeMapReducer(_map, arg.type);\n  }, map);\n}","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  var config = {};\n\n  utils.forEach(['url', 'method', 'params', 'data'], function valueFromConfig2(prop) {\n    if (typeof config2[prop] !== 'undefined') {\n      config[prop] = config2[prop];\n    }\n  });\n\n  utils.forEach(['headers', 'auth', 'proxy'], function mergeDeepProperties(prop) {\n    if (utils.isObject(config2[prop])) {\n      config[prop] = utils.deepMerge(config1[prop], config2[prop]);\n    } else if (typeof config2[prop] !== 'undefined') {\n      config[prop] = config2[prop];\n    } else if (utils.isObject(config1[prop])) {\n      config[prop] = utils.deepMerge(config1[prop]);\n    } else if (typeof config1[prop] !== 'undefined') {\n      config[prop] = config1[prop];\n    }\n  });\n\n  utils.forEach([\n    'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n    'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n    'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'maxContentLength',\n    'validateStatus', 'maxRedirects', 'httpAgent', 'httpsAgent', 'cancelToken',\n    'socketPath'\n  ], function defaultToConfig2(prop) {\n    if (typeof config2[prop] !== 'undefined') {\n      config[prop] = config2[prop];\n    } else if (typeof config1[prop] !== 'undefined') {\n      config[prop] = config1[prop];\n    }\n  });\n\n  return config;\n};\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n  this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n  return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","\"use strict\";\n/*\n * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * This Symbol is used to reference an internal-only PubSub provider that\n * is used for AppSync/GraphQL subscriptions in the API category.\n */\nvar hasSymbol = (typeof (Symbol) !== 'undefined' && typeof (Symbol.for) === 'function');\nexports.INTERNAL_AWS_APPSYNC_PUBSUB_PROVIDER = hasSymbol ?\n    Symbol.for('INTERNAL_AWS_APPSYNC_PUBSUB_PROVIDER') : '@@INTERNAL_AWS_APPSYNC_PUBSUB_PROVIDER';\n//# sourceMappingURL=constants.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@aws-amplify/core\");\nvar logger = new core_1.ConsoleLogger('AbstractPubSubProvider');\nvar AbstractPubSubProvider = /** @class */ (function () {\n    function AbstractPubSubProvider(options) {\n        if (options === void 0) { options = {}; }\n        this._config = options;\n    }\n    AbstractPubSubProvider.prototype.configure = function (config) {\n        if (config === void 0) { config = {}; }\n        this._config = __assign({}, config, this._config);\n        logger.debug(\"configure \" + this.getProviderName(), this._config);\n        return this.options;\n    };\n    AbstractPubSubProvider.prototype.getCategory = function () { return 'PubSub'; };\n    Object.defineProperty(AbstractPubSubProvider.prototype, \"options\", {\n        get: function () { return __assign({}, this._config); },\n        enumerable: true,\n        configurable: true\n    });\n    return AbstractPubSubProvider;\n}());\nexports.AbstractPubSubProvider = AbstractPubSubProvider;\n//# sourceMappingURL=PubSubProvider.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar MqttOverWSProvider_1 = require(\"./MqttOverWSProvider\");\nvar core_1 = require(\"@aws-amplify/core\");\nvar SERVICE_NAME = 'iotdevicegateway';\nvar AWSIoTProvider = /** @class */ (function (_super) {\n    __extends(AWSIoTProvider, _super);\n    function AWSIoTProvider() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(AWSIoTProvider.prototype, \"region\", {\n        get: function () { return this.options.aws_pubsub_region; },\n        enumerable: true,\n        configurable: true\n    });\n    AWSIoTProvider.prototype.getProviderName = function () { return 'AWSIoTProvider'; };\n    Object.defineProperty(AWSIoTProvider.prototype, \"endpoint\", {\n        get: function () {\n            var _this = this;\n            return (function () { return __awaiter(_this, void 0, void 0, function () {\n                var endpoint, serviceInfo, _a, access_key, secret_key, session_token, result;\n                return __generator(this, function (_b) {\n                    switch (_b.label) {\n                        case 0:\n                            endpoint = this.options.aws_pubsub_endpoint;\n                            serviceInfo = {\n                                service: SERVICE_NAME,\n                                region: this.region\n                            };\n                            return [4 /*yield*/, core_1.Credentials.get()];\n                        case 1:\n                            _a = _b.sent(), access_key = _a.accessKeyId, secret_key = _a.secretAccessKey, session_token = _a.sessionToken;\n                            result = core_1.Signer.signUrl(endpoint, { access_key: access_key, secret_key: secret_key, session_token: session_token }, serviceInfo);\n                            return [2 /*return*/, result];\n                    }\n                });\n            }); })();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    return AWSIoTProvider;\n}(MqttOverWSProvider_1.MqttOverWSProvider));\nexports.AWSIoTProvider = AWSIoTProvider;\n//# sourceMappingURL=AWSIotProvider.js.map","\"use strict\";\n/*\n * Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar InteractionsProvider_1 = require(\"./InteractionsProvider\");\nvar LexRuntime = require(\"aws-sdk/clients/lexruntime\");\nvar core_1 = require(\"@aws-amplify/core\");\nvar logger = new core_1.ConsoleLogger('AWSLexProvider');\nvar AWSLexProvider = /** @class */ (function (_super) {\n    __extends(AWSLexProvider, _super);\n    function AWSLexProvider(options) {\n        if (options === void 0) { options = {}; }\n        var _this = _super.call(this, options) || this;\n        _this.aws_lex = new LexRuntime({ region: _this._config.region });\n        _this._botsCompleteCallback = {};\n        return _this;\n    }\n    AWSLexProvider.prototype.getProviderName = function () { return 'AWSLexProvider'; };\n    AWSLexProvider.prototype.responseCallback = function (err, data, res, rej, botname) {\n        var _this = this;\n        if (err) {\n            rej(err);\n            return;\n        }\n        else {\n            // Check if state is fulfilled to resolve onFullfilment promise\n            logger.debug('postContent state', data.dialogState);\n            if (data.dialogState === 'ReadyForFulfillment' || data.dialogState === 'Fulfilled') {\n                if (typeof this._botsCompleteCallback[botname] === 'function') {\n                    setTimeout(function () { return _this._botsCompleteCallback[botname](null, { slots: data.slots }); }, 0);\n                }\n                if (this._config && typeof this._config[botname].onComplete === 'function') {\n                    setTimeout(function () { return _this._config[botname].onComplete(null, { slots: data.slots }); }, 0);\n                }\n            }\n            res(data);\n            if (data.dialogState === 'Failed') {\n                if (typeof this._botsCompleteCallback[botname] === 'function') {\n                    setTimeout(function () { return _this._botsCompleteCallback[botname]('Bot conversation failed'); }, 0);\n                }\n                if (this._config && typeof this._config[botname].onComplete === 'function') {\n                    setTimeout(function () { return _this._config[botname].onComplete('Bot conversation failed'); }, 0);\n                }\n            }\n        }\n    };\n    AWSLexProvider.prototype.sendMessage = function (botname, message) {\n        var _this = this;\n        return new Promise(function (res, rej) { return __awaiter(_this, void 0, void 0, function () {\n            var credentials, params;\n            var _this = this;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!this._config[botname]) {\n                            return [2 /*return*/, rej('Bot ' + botname + ' does not exist')];\n                        }\n                        return [4 /*yield*/, core_1.Credentials.get()];\n                    case 1:\n                        credentials = _a.sent();\n                        if (!credentials) {\n                            return [2 /*return*/, rej('No credentials')];\n                        }\n                        core_1.AWS.config.update({\n                            credentials: credentials\n                        });\n                        this.aws_lex = new LexRuntime({ region: this._config[botname].region, credentials: credentials });\n                        if (typeof message === 'string') {\n                            params = {\n                                'botAlias': this._config[botname].alias,\n                                'botName': botname,\n                                'inputText': message,\n                                'userId': credentials.identityId,\n                            };\n                            logger.debug('postText to lex', message);\n                            this.aws_lex.postText(params, function (err, data) {\n                                _this.responseCallback(err, data, res, rej, botname);\n                            });\n                        }\n                        else {\n                            if (message.options['messageType'] === 'voice') {\n                                params = {\n                                    'botAlias': this._config[botname].alias,\n                                    'botName': botname,\n                                    'contentType': 'audio/x-l16; sample-rate=16000',\n                                    'inputStream': message.content,\n                                    'userId': credentials.identityId,\n                                    'accept': 'audio/mpeg',\n                                };\n                            }\n                            else {\n                                params = {\n                                    'botAlias': this._config[botname].alias,\n                                    'botName': botname,\n                                    'contentType': 'text/plain; charset=utf-8',\n                                    'inputStream': message.content,\n                                    'userId': credentials.identityId,\n                                    'accept': 'audio/mpeg',\n                                };\n                            }\n                            logger.debug('postContent to lex', message);\n                            this.aws_lex.postContent(params, function (err, data) {\n                                _this.responseCallback(err, data, res, rej, botname);\n                            });\n                        }\n                        return [2 /*return*/];\n                }\n            });\n        }); });\n    };\n    AWSLexProvider.prototype.onComplete = function (botname, callback) {\n        if (!this._config[botname]) {\n            throw new ErrorEvent('Bot ' + botname + ' does not exist');\n        }\n        this._botsCompleteCallback[botname] = callback;\n    };\n    return AWSLexProvider;\n}(InteractionsProvider_1.AbstractInteractionsProvider));\nexports.AWSLexProvider = AWSLexProvider;\n//# sourceMappingURL=AWSLexProvider.js.map","\"use strict\";\n/*\n * Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@aws-amplify/core\");\nvar logger = new core_1.ConsoleLogger('AbstractInteractionsProvider');\nvar AbstractInteractionsProvider = /** @class */ (function () {\n    function AbstractInteractionsProvider(options) {\n        if (options === void 0) { options = {}; }\n        this._config = options;\n    }\n    AbstractInteractionsProvider.prototype.configure = function (config) {\n        if (config === void 0) { config = {}; }\n        this._config = __assign({}, this._config, config);\n        logger.debug(\"configure \" + this.getProviderName(), this._config);\n        return this.options;\n    };\n    AbstractInteractionsProvider.prototype.getCategory = function () { return 'Interactions'; };\n    Object.defineProperty(AbstractInteractionsProvider.prototype, \"options\", {\n        get: function () { return __assign({}, this._config); },\n        enumerable: true,\n        configurable: true\n    });\n    return AbstractInteractionsProvider;\n}());\nexports.AbstractInteractionsProvider = AbstractInteractionsProvider;\n//# sourceMappingURL=InteractionsProvider.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar core_1 = require(\"@aws-amplify/core\");\nvar XRProvider_1 = require(\"./XRProvider\");\nvar Errors_1 = require(\"../Errors\");\nvar SUMERIAN_SERVICE_NAME = 'sumerian';\nvar logger = new core_1.ConsoleLogger('SumerianProvider');\nvar SumerianProvider = /** @class */ (function (_super) {\n    __extends(SumerianProvider, _super);\n    function SumerianProvider(options) {\n        if (options === void 0) { options = {}; }\n        return _super.call(this, options) || this;\n    }\n    SumerianProvider.prototype.getProviderName = function () { return 'SumerianProvider'; };\n    SumerianProvider.prototype.loadScript = function (url) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                return [2 /*return*/, new Promise(function (resolve, reject) {\n                        var scriptElement = document.createElement('script');\n                        scriptElement.src = url;\n                        scriptElement.addEventListener('load', function (event) {\n                            resolve();\n                        });\n                        scriptElement.addEventListener('error', function (event) {\n                            reject(new Error(\"Failed to load script: \" + url));\n                        });\n                        document.head.appendChild(scriptElement);\n                    })];\n            });\n        });\n    };\n    SumerianProvider.prototype.loadScene = function (sceneName, domElementId, sceneOptions) {\n        return __awaiter(this, void 0, void 0, function () {\n            var errorMsg, errorMsg, element, errorMsg, scene, errorMsg, sceneUrl, sceneId, sceneRegion, errorMsg, awsSDKConfigOverride, fetchOptions, url, credentials, accessInfo, serviceInfo, request, e_1, apiResponse, apiResponseJson, sceneBundleData, sceneBundle, sceneBundleJson, error_1, progressCallback, publishParamOverrides, sceneLoadParams, sceneController, _i, _a, warning;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        if (!sceneName) {\n                            errorMsg = \"No scene name passed into loadScene\";\n                            logger.error(errorMsg);\n                            throw (new Errors_1.XRSceneLoadFailure(errorMsg));\n                        }\n                        if (!domElementId) {\n                            errorMsg = \"No dom element id passed into loadScene\";\n                            logger.error(errorMsg);\n                            throw (new Errors_1.XRNoDomElement(errorMsg));\n                        }\n                        element = document.getElementById(domElementId);\n                        if (!element) {\n                            errorMsg = \"DOM element id, \" + domElementId + \" not found\";\n                            logger.error(errorMsg);\n                            throw (new Errors_1.XRNoDomElement(errorMsg));\n                        }\n                        scene = this.getScene(sceneName);\n                        if (!scene.sceneConfig) {\n                            errorMsg = \"No scene config configured for scene: \" + sceneName;\n                            logger.error(errorMsg);\n                            throw (new Errors_1.XRSceneLoadFailure(errorMsg));\n                        }\n                        sceneUrl = scene.sceneConfig.url;\n                        sceneId = scene.sceneConfig.sceneId;\n                        if (scene.sceneConfig.hasOwnProperty('region')) {\n                            // Use the scene region on the Sumerian scene configuration\n                            sceneRegion = scene.sceneConfig.region;\n                        }\n                        else if (this.options.hasOwnProperty('region')) {\n                            // Use the scene region on the XR category configuration\n                            sceneRegion = this.options.region;\n                        }\n                        else {\n                            errorMsg = \"No region configured for scene: \" + sceneName;\n                            logger.error(errorMsg);\n                            throw (new Errors_1.XRSceneLoadFailure(errorMsg));\n                        }\n                        awsSDKConfigOverride = {\n                            region: sceneRegion,\n                            // This is passed to the AWS clients created in\n                            // Sumerian's AwsSystem\n                            // This helps other services(like Lex and Polly) to track\n                            // traffic coming from Sumerian scenes embedded with Amplify\n                            customUserAgent: core_1.Constants.userAgent + \"-SumerianScene\"\n                        };\n                        fetchOptions = {\n                            headers: {\n                                // This sets the AWS user agent string\n                                // So the Sumerian service knows this request is \n                                // from Amplify\n                                \"X-Amz-User-Agent\": core_1.Constants.userAgent\n                            }\n                        };\n                        url = sceneUrl;\n                        _b.label = 1;\n                    case 1:\n                        _b.trys.push([1, 3, , 4]);\n                        return [4 /*yield*/, core_1.Credentials.get()];\n                    case 2:\n                        credentials = _b.sent();\n                        awsSDKConfigOverride[\"credentials\"] = credentials;\n                        accessInfo = {\n                            secret_key: credentials.secretAccessKey,\n                            access_key: credentials.accessKeyId,\n                            session_token: credentials.sessionToken,\n                        };\n                        serviceInfo = { region: sceneRegion, service: SUMERIAN_SERVICE_NAME };\n                        request = core_1.Signer.sign({ method: \"GET\", url: sceneUrl }, accessInfo, serviceInfo);\n                        fetchOptions.headers = __assign({}, fetchOptions.headers, request.headers);\n                        url = request.url;\n                        return [3 /*break*/, 4];\n                    case 3:\n                        e_1 = _b.sent();\n                        logger.debug('No credentials available, the request will be unsigned');\n                        return [3 /*break*/, 4];\n                    case 4: return [4 /*yield*/, fetch(url, fetchOptions)];\n                    case 5:\n                        apiResponse = _b.sent();\n                        return [4 /*yield*/, apiResponse.json()];\n                    case 6:\n                        apiResponseJson = _b.sent();\n                        if (apiResponse.status === 403) {\n                            if (apiResponseJson.message) {\n                                logger.error(\"Failure to authenticate user: \" + apiResponseJson.message);\n                                throw (new Errors_1.XRSceneLoadFailure(\"Failure to authenticate user: \" + apiResponseJson.message));\n                            }\n                            else {\n                                logger.error(\"Failure to authenticate user\");\n                                throw (new Errors_1.XRSceneLoadFailure(\"Failure to authenticate user\"));\n                            }\n                        }\n                        sceneBundleData = apiResponseJson.bundleData[sceneId];\n                        return [4 /*yield*/, fetch(sceneBundleData.url, { headers: sceneBundleData.headers })];\n                    case 7:\n                        sceneBundle = _b.sent();\n                        return [4 /*yield*/, sceneBundle.json()];\n                    case 8:\n                        sceneBundleJson = _b.sent();\n                        _b.label = 9;\n                    case 9:\n                        _b.trys.push([9, 11, , 12]);\n                        // Load the Sumerian bootstrapper script into the DOM\n                        return [4 /*yield*/, this.loadScript(sceneBundleJson[sceneId].bootstrapperUrl)];\n                    case 10:\n                        // Load the Sumerian bootstrapper script into the DOM\n                        _b.sent();\n                        return [3 /*break*/, 12];\n                    case 11:\n                        error_1 = _b.sent();\n                        logger.error(error_1);\n                        throw (new Errors_1.XRSceneLoadFailure(error_1));\n                    case 12:\n                        progressCallback = sceneOptions.progressCallback ? sceneOptions.progressCallback : undefined;\n                        publishParamOverrides = scene.publishParamOverrides ? scene.publishParamOverrides : undefined;\n                        sceneLoadParams = {\n                            element: element,\n                            sceneId: sceneId,\n                            sceneBundle: sceneBundleJson,\n                            apiResponse: apiResponseJson,\n                            progressCallback: progressCallback,\n                            publishParamOverrides: publishParamOverrides,\n                            awsSDKConfigOverride: awsSDKConfigOverride\n                        };\n                        return [4 /*yield*/, window.SumerianBootstrapper.loadScene(sceneLoadParams)];\n                    case 13:\n                        sceneController = _b.sent();\n                        scene.sceneController = sceneController;\n                        scene.isLoaded = true;\n                        // Log scene warnings\n                        for (_i = 0, _a = sceneController.sceneLoadWarnings; _i < _a.length; _i++) {\n                            warning = _a[_i];\n                            logger.warn(\"loadScene warning: \" + warning);\n                        }\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    SumerianProvider.prototype.isSceneLoaded = function (sceneName) {\n        var scene = this.getScene(sceneName);\n        return scene.isLoaded || false;\n    };\n    SumerianProvider.prototype.getScene = function (sceneName) {\n        if (!this.options.scenes) {\n            var errorMsg = \"No scenes were defined in the configuration\";\n            logger.error(errorMsg);\n            throw (new Errors_1.XRNoSceneConfiguredError(errorMsg));\n        }\n        if (!sceneName) {\n            var errorMsg = \"No scene name was passed\";\n            logger.error(errorMsg);\n            throw (new Errors_1.XRSceneNotFoundError(errorMsg));\n        }\n        if (!this.options.scenes[sceneName]) {\n            var errorMsg = \"Scene '\" + sceneName + \"' is not configured\";\n            logger.error(errorMsg);\n            throw (new Errors_1.XRSceneNotFoundError(errorMsg));\n        }\n        return this.options.scenes[sceneName];\n    };\n    SumerianProvider.prototype.getSceneController = function (sceneName) {\n        if (!this.options.scenes) {\n            var errorMsg = \"No scenes were defined in the configuration\";\n            logger.error(errorMsg);\n            throw (new Errors_1.XRNoSceneConfiguredError(errorMsg));\n        }\n        var scene = this.options.scenes[sceneName];\n        if (!scene) {\n            var errorMsg = \"Scene '\" + sceneName + \"' is not configured\";\n            logger.error(errorMsg);\n            throw (new Errors_1.XRSceneNotFoundError(errorMsg));\n        }\n        var sceneController = scene.sceneController;\n        if (!sceneController) {\n            var errorMsg = \"Scene controller for '\" + sceneName + \"' has not been loaded\";\n            logger.error(errorMsg);\n            throw (new Errors_1.XRSceneNotLoadedError(errorMsg));\n        }\n        return sceneController;\n    };\n    SumerianProvider.prototype.isVRCapable = function (sceneName) {\n        var sceneController = this.getSceneController(sceneName);\n        return sceneController.vrCapable;\n    };\n    SumerianProvider.prototype.isVRPresentationActive = function (sceneName) {\n        var sceneController = this.getSceneController(sceneName);\n        return sceneController.vrPresentationActive;\n    };\n    SumerianProvider.prototype.start = function (sceneName) {\n        var sceneController = this.getSceneController(sceneName);\n        sceneController.start();\n    };\n    SumerianProvider.prototype.enterVR = function (sceneName) {\n        var sceneController = this.getSceneController(sceneName);\n        sceneController.enterVR();\n    };\n    SumerianProvider.prototype.exitVR = function (sceneName) {\n        var sceneController = this.getSceneController(sceneName);\n        sceneController.exitVR();\n    };\n    SumerianProvider.prototype.isMuted = function (sceneName) {\n        var sceneController = this.getSceneController(sceneName);\n        return sceneController.muted;\n    };\n    SumerianProvider.prototype.setMuted = function (sceneName, muted) {\n        var sceneController = this.getSceneController(sceneName);\n        sceneController.muted = muted;\n    };\n    SumerianProvider.prototype.onSceneEvent = function (sceneName, eventName, eventHandler) {\n        var sceneController = this.getSceneController(sceneName);\n        sceneController.on(eventName, eventHandler);\n    };\n    SumerianProvider.prototype.enableAudio = function (sceneName) {\n        var sceneController = this.getSceneController(sceneName);\n        sceneController.enableAudio();\n    };\n    return SumerianProvider;\n}(XRProvider_1.AbstractXRProvider));\nexports.SumerianProvider = SumerianProvider;\n//# sourceMappingURL=SumerianProvider.js.map","module.exports = __webpack_public_path__ + \"e2675a616b68f446fa6284c111554c7f.eot\";","module.exports = __webpack_public_path__ + \"859001f6ae8eb0bb3878aaa971b50fc6.eot\";","\n\n/**\n * A visitor is comprised of visit functions, which are called on each node\n * during the visitor's traversal.\n */\n\n\n/**\n * A visitor is provided to visit, it contains the collection of\n * relevant functions to be called during the visitor's traversal.\n */\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nexport var QueryDocumentKeys = {\n  Name: [],\n\n  Document: ['definitions'],\n  OperationDefinition: ['name', 'variableDefinitions', 'directives', 'selectionSet'],\n  VariableDefinition: ['variable', 'type', 'defaultValue'],\n  Variable: ['name'],\n  SelectionSet: ['selections'],\n  Field: ['alias', 'name', 'arguments', 'directives', 'selectionSet'],\n  Argument: ['name', 'value'],\n\n  FragmentSpread: ['name', 'directives'],\n  InlineFragment: ['typeCondition', 'directives', 'selectionSet'],\n  FragmentDefinition: ['name',\n  // Note: fragment variable definitions are experimental and may be changed\n  // or removed in the future.\n  'variableDefinitions', 'typeCondition', 'directives', 'selectionSet'],\n\n  IntValue: [],\n  FloatValue: [],\n  StringValue: [],\n  BooleanValue: [],\n  NullValue: [],\n  EnumValue: [],\n  ListValue: ['values'],\n  ObjectValue: ['fields'],\n  ObjectField: ['name', 'value'],\n\n  Directive: ['name', 'arguments'],\n\n  NamedType: ['name'],\n  ListType: ['type'],\n  NonNullType: ['type'],\n\n  SchemaDefinition: ['directives', 'operationTypes'],\n  OperationTypeDefinition: ['type'],\n\n  ScalarTypeDefinition: ['description', 'name', 'directives'],\n  ObjectTypeDefinition: ['description', 'name', 'interfaces', 'directives', 'fields'],\n  FieldDefinition: ['description', 'name', 'arguments', 'type', 'directives'],\n  InputValueDefinition: ['description', 'name', 'type', 'defaultValue', 'directives'],\n  InterfaceTypeDefinition: ['description', 'name', 'directives', 'fields'],\n  UnionTypeDefinition: ['description', 'name', 'directives', 'types'],\n  EnumTypeDefinition: ['description', 'name', 'directives', 'values'],\n  EnumValueDefinition: ['description', 'name', 'directives'],\n  InputObjectTypeDefinition: ['description', 'name', 'directives', 'fields'],\n\n  ScalarTypeExtension: ['name', 'directives'],\n  ObjectTypeExtension: ['name', 'interfaces', 'directives', 'fields'],\n  InterfaceTypeExtension: ['name', 'directives', 'fields'],\n  UnionTypeExtension: ['name', 'directives', 'types'],\n  EnumTypeExtension: ['name', 'directives', 'values'],\n  InputObjectTypeExtension: ['name', 'directives', 'fields'],\n\n  DirectiveDefinition: ['description', 'name', 'arguments', 'locations']\n};\n\n/**\n * A KeyMap describes each the traversable properties of each kind of node.\n */\n\n\nexport var BREAK = {};\n\n/**\n * visit() will walk through an AST using a depth first traversal, calling\n * the visitor's enter function at each node in the traversal, and calling the\n * leave function after visiting that node and all of its child nodes.\n *\n * By returning different values from the enter and leave functions, the\n * behavior of the visitor can be altered, including skipping over a sub-tree of\n * the AST (by returning false), editing the AST by returning a value or null\n * to remove the value, or to stop the whole traversal by returning BREAK.\n *\n * When using visit() to edit an AST, the original AST will not be modified, and\n * a new version of the AST with the changes applied will be returned from the\n * visit function.\n *\n *     const editedAST = visit(ast, {\n *       enter(node, key, parent, path, ancestors) {\n *         // @return\n *         //   undefined: no action\n *         //   false: skip visiting this node\n *         //   visitor.BREAK: stop visiting altogether\n *         //   null: delete this node\n *         //   any value: replace this node with the returned value\n *       },\n *       leave(node, key, parent, path, ancestors) {\n *         // @return\n *         //   undefined: no action\n *         //   false: no action\n *         //   visitor.BREAK: stop visiting altogether\n *         //   null: delete this node\n *         //   any value: replace this node with the returned value\n *       }\n *     });\n *\n * Alternatively to providing enter() and leave() functions, a visitor can\n * instead provide functions named the same as the kinds of AST nodes, or\n * enter/leave visitors at a named key, leading to four permutations of\n * visitor API:\n *\n * 1) Named visitors triggered when entering a node a specific kind.\n *\n *     visit(ast, {\n *       Kind(node) {\n *         // enter the \"Kind\" node\n *       }\n *     })\n *\n * 2) Named visitors that trigger upon entering and leaving a node of\n *    a specific kind.\n *\n *     visit(ast, {\n *       Kind: {\n *         enter(node) {\n *           // enter the \"Kind\" node\n *         }\n *         leave(node) {\n *           // leave the \"Kind\" node\n *         }\n *       }\n *     })\n *\n * 3) Generic visitors that trigger upon entering and leaving any node.\n *\n *     visit(ast, {\n *       enter(node) {\n *         // enter any node\n *       },\n *       leave(node) {\n *         // leave any node\n *       }\n *     })\n *\n * 4) Parallel visitors for entering and leaving nodes of a specific kind.\n *\n *     visit(ast, {\n *       enter: {\n *         Kind(node) {\n *           // enter the \"Kind\" node\n *         }\n *       },\n *       leave: {\n *         Kind(node) {\n *           // leave the \"Kind\" node\n *         }\n *       }\n *     })\n */\nexport function visit(root, visitor) {\n  var visitorKeys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : QueryDocumentKeys;\n\n  /* eslint-disable no-undef-init */\n  var stack = undefined;\n  var inArray = Array.isArray(root);\n  var keys = [root];\n  var index = -1;\n  var edits = [];\n  var node = undefined;\n  var key = undefined;\n  var parent = undefined;\n  var path = [];\n  var ancestors = [];\n  var newRoot = root;\n  /* eslint-enable no-undef-init */\n\n  do {\n    index++;\n    var isLeaving = index === keys.length;\n    var isEdited = isLeaving && edits.length !== 0;\n    if (isLeaving) {\n      key = ancestors.length === 0 ? undefined : path[path.length - 1];\n      node = parent;\n      parent = ancestors.pop();\n      if (isEdited) {\n        if (inArray) {\n          node = node.slice();\n        } else {\n          var clone = {};\n          for (var k in node) {\n            if (node.hasOwnProperty(k)) {\n              clone[k] = node[k];\n            }\n          }\n          node = clone;\n        }\n        var editOffset = 0;\n        for (var ii = 0; ii < edits.length; ii++) {\n          var editKey = edits[ii][0];\n          var editValue = edits[ii][1];\n          if (inArray) {\n            editKey -= editOffset;\n          }\n          if (inArray && editValue === null) {\n            node.splice(editKey, 1);\n            editOffset++;\n          } else {\n            node[editKey] = editValue;\n          }\n        }\n      }\n      index = stack.index;\n      keys = stack.keys;\n      edits = stack.edits;\n      inArray = stack.inArray;\n      stack = stack.prev;\n    } else {\n      key = parent ? inArray ? index : keys[index] : undefined;\n      node = parent ? parent[key] : newRoot;\n      if (node === null || node === undefined) {\n        continue;\n      }\n      if (parent) {\n        path.push(key);\n      }\n    }\n\n    var result = void 0;\n    if (!Array.isArray(node)) {\n      if (!isNode(node)) {\n        throw new Error('Invalid AST Node: ' + JSON.stringify(node));\n      }\n      var visitFn = getVisitFn(visitor, node.kind, isLeaving);\n      if (visitFn) {\n        result = visitFn.call(visitor, node, key, parent, path, ancestors);\n\n        if (result === BREAK) {\n          break;\n        }\n\n        if (result === false) {\n          if (!isLeaving) {\n            path.pop();\n            continue;\n          }\n        } else if (result !== undefined) {\n          edits.push([key, result]);\n          if (!isLeaving) {\n            if (isNode(result)) {\n              node = result;\n            } else {\n              path.pop();\n              continue;\n            }\n          }\n        }\n      }\n    }\n\n    if (result === undefined && isEdited) {\n      edits.push([key, node]);\n    }\n\n    if (isLeaving) {\n      path.pop();\n    } else {\n      stack = { inArray: inArray, index: index, keys: keys, edits: edits, prev: stack };\n      inArray = Array.isArray(node);\n      keys = inArray ? node : visitorKeys[node.kind] || [];\n      index = -1;\n      edits = [];\n      if (parent) {\n        ancestors.push(parent);\n      }\n      parent = node;\n    }\n  } while (stack !== undefined);\n\n  if (edits.length !== 0) {\n    newRoot = edits[edits.length - 1][1];\n  }\n\n  return newRoot;\n}\n\nfunction isNode(maybeNode) {\n  return Boolean(maybeNode && typeof maybeNode.kind === 'string');\n}\n\n/**\n * Creates a new visitor instance which delegates to many visitors to run in\n * parallel. Each visitor will be visited for each node before moving on.\n *\n * If a prior visitor edits a node, no following visitors will see that node.\n */\nexport function visitInParallel(visitors) {\n  var skipping = new Array(visitors.length);\n\n  return {\n    enter: function enter(node) {\n      for (var i = 0; i < visitors.length; i++) {\n        if (!skipping[i]) {\n          var fn = getVisitFn(visitors[i], node.kind, /* isLeaving */false);\n          if (fn) {\n            var result = fn.apply(visitors[i], arguments);\n            if (result === false) {\n              skipping[i] = node;\n            } else if (result === BREAK) {\n              skipping[i] = BREAK;\n            } else if (result !== undefined) {\n              return result;\n            }\n          }\n        }\n      }\n    },\n    leave: function leave(node) {\n      for (var i = 0; i < visitors.length; i++) {\n        if (!skipping[i]) {\n          var fn = getVisitFn(visitors[i], node.kind, /* isLeaving */true);\n          if (fn) {\n            var result = fn.apply(visitors[i], arguments);\n            if (result === BREAK) {\n              skipping[i] = BREAK;\n            } else if (result !== undefined && result !== false) {\n              return result;\n            }\n          }\n        } else if (skipping[i] === node) {\n          skipping[i] = null;\n        }\n      }\n    }\n  };\n}\n\n/**\n * Creates a new visitor instance which maintains a provided TypeInfo instance\n * along with visiting visitor.\n */\nexport function visitWithTypeInfo(typeInfo, visitor) {\n  return {\n    enter: function enter(node) {\n      typeInfo.enter(node);\n      var fn = getVisitFn(visitor, node.kind, /* isLeaving */false);\n      if (fn) {\n        var result = fn.apply(visitor, arguments);\n        if (result !== undefined) {\n          typeInfo.leave(node);\n          if (isNode(result)) {\n            typeInfo.enter(result);\n          }\n        }\n        return result;\n      }\n    },\n    leave: function leave(node) {\n      var fn = getVisitFn(visitor, node.kind, /* isLeaving */true);\n      var result = void 0;\n      if (fn) {\n        result = fn.apply(visitor, arguments);\n      }\n      typeInfo.leave(node);\n      return result;\n    }\n  };\n}\n\n/**\n * Given a visitor instance, if it is leaving or not, and a node kind, return\n * the function the visitor runtime should call.\n */\nexport function getVisitFn(visitor, kind, isLeaving) {\n  var kindVisitor = visitor[kind];\n  if (kindVisitor) {\n    if (!isLeaving && typeof kindVisitor === 'function') {\n      // { Kind() {} }\n      return kindVisitor;\n    }\n    var kindSpecificVisitor = isLeaving ? kindVisitor.leave : kindVisitor.enter;\n    if (typeof kindSpecificVisitor === 'function') {\n      // { Kind: { enter() {}, leave() {} } }\n      return kindSpecificVisitor;\n    }\n  } else {\n    var specificVisitor = isLeaving ? visitor.leave : visitor.enter;\n    if (specificVisitor) {\n      if (typeof specificVisitor === 'function') {\n        // { enter() {}, leave() {} }\n        return specificVisitor;\n      }\n      var specificKindVisitor = specificVisitor[kind];\n      if (typeof specificKindVisitor === 'function') {\n        // { enter: { Kind() {} }, leave: { Kind() {} } }\n        return specificKindVisitor;\n      }\n    }\n  }\n}","module.exports = __webpack_public_path__ + \"8e49b728413079dfd9ee45d0c58d54e4.eot\";","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @class */\nvar AuthenticationDetails = function () {\n  /**\n   * Constructs a new AuthenticationDetails object\n   * @param {object=} data Creation options.\n   * @param {string} data.Username User being authenticated.\n   * @param {string} data.Password Plain-text password to authenticate with.\n   * @param {(AttributeArg[])?} data.ValidationData Application extra metadata.\n   * @param {(AttributeArg[])?} data.AuthParamaters Authentication paramaters for custom auth.\n   */\n  function AuthenticationDetails(data) {\n    _classCallCheck(this, AuthenticationDetails);\n\n    var _ref = data || {},\n        ValidationData = _ref.ValidationData,\n        Username = _ref.Username,\n        Password = _ref.Password,\n        AuthParameters = _ref.AuthParameters;\n\n    this.validationData = ValidationData || {};\n    this.authParameters = AuthParameters || {};\n    this.username = Username;\n    this.password = Password;\n  }\n\n  /**\n   * @returns {string} the record's username\n   */\n\n\n  AuthenticationDetails.prototype.getUsername = function getUsername() {\n    return this.username;\n  };\n\n  /**\n   * @returns {string} the record's password\n   */\n\n\n  AuthenticationDetails.prototype.getPassword = function getPassword() {\n    return this.password;\n  };\n\n  /**\n   * @returns {Array} the record's validationData\n   */\n\n\n  AuthenticationDetails.prototype.getValidationData = function getValidationData() {\n    return this.validationData;\n  };\n\n  /**\n   * @returns {Array} the record's authParameters\n   */\n\n\n  AuthenticationDetails.prototype.getAuthParameters = function getAuthParameters() {\n    return this.authParameters;\n  };\n\n  return AuthenticationDetails;\n}();\n\nexport default AuthenticationDetails;","// A small implementation of BigInteger based on http://www-cs-students.stanford.edu/~tjw/jsbn/\n//\n// All public methods have been removed except the following:\n//   new BigInteger(a, b) (only radix 2, 4, 8, 16 and 32 supported)\n//   toString (only radix 2, 4, 8, 16 and 32 supported)\n//   negate\n//   abs\n//   compareTo\n//   bitLength\n//   mod\n//   equals\n//   add\n//   subtract\n//   multiply\n//   divide\n//   modPow\n\nexport default BigInteger;\n\n/*\n * Copyright (c) 2003-2005  Tom Wu\n * All Rights Reserved.\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS-IS\" AND WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY\n * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n *\n * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,\n * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER\n * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF\n * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT\n * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n *\n * In addition, the following condition applies:\n *\n * All redistributions must retain an intact copy of this copyright notice\n * and disclaimer.\n */\n\n// (public) Constructor\nfunction BigInteger(a, b) {\n  if (a != null) this.fromString(a, b);\n}\n\n// return new, unset BigInteger\nfunction nbi() {\n  return new BigInteger(null);\n}\n\n// Bits per digit\nvar dbits;\n\n// JavaScript engine analysis\nvar canary = 0xdeadbeefcafe;\nvar j_lm = (canary & 0xffffff) == 0xefcafe;\n\n// am: Compute w_j += (x*this_i), propagate carries,\n// c is initial carry, returns final carry.\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n// We need to select the fastest one that works in this environment.\n\n// am1: use a single mult and divide to get the high bits,\n// max digit bits should be 26 because\n// max internal value = 2*dvalue^2-2*dvalue (< 2^53)\nfunction am1(i, x, w, j, c, n) {\n  while (--n >= 0) {\n    var v = x * this[i++] + w[j] + c;\n    c = Math.floor(v / 0x4000000);\n    w[j++] = v & 0x3ffffff;\n  }\n  return c;\n}\n// am2 avoids a big mult-and-extract completely.\n// Max digit bits should be <= 30 because we do bitwise ops\n// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\nfunction am2(i, x, w, j, c, n) {\n  var xl = x & 0x7fff,\n      xh = x >> 15;\n  while (--n >= 0) {\n    var l = this[i] & 0x7fff;\n    var h = this[i++] >> 15;\n    var m = xh * l + h * xl;\n    l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);\n    c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);\n    w[j++] = l & 0x3fffffff;\n  }\n  return c;\n}\n// Alternately, set max digit bits to 28 since some\n// browsers slow down when dealing with 32-bit numbers.\nfunction am3(i, x, w, j, c, n) {\n  var xl = x & 0x3fff,\n      xh = x >> 14;\n  while (--n >= 0) {\n    var l = this[i] & 0x3fff;\n    var h = this[i++] >> 14;\n    var m = xh * l + h * xl;\n    l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;\n    c = (l >> 28) + (m >> 14) + xh * h;\n    w[j++] = l & 0xfffffff;\n  }\n  return c;\n}\nvar inBrowser = typeof navigator !== \"undefined\";\nif (inBrowser && j_lm && navigator.appName == \"Microsoft Internet Explorer\") {\n  BigInteger.prototype.am = am2;\n  dbits = 30;\n} else if (inBrowser && j_lm && navigator.appName != \"Netscape\") {\n  BigInteger.prototype.am = am1;\n  dbits = 26;\n} else {\n  // Mozilla/Netscape seems to prefer am3\n  BigInteger.prototype.am = am3;\n  dbits = 28;\n}\n\nBigInteger.prototype.DB = dbits;\nBigInteger.prototype.DM = (1 << dbits) - 1;\nBigInteger.prototype.DV = 1 << dbits;\n\nvar BI_FP = 52;\nBigInteger.prototype.FV = Math.pow(2, BI_FP);\nBigInteger.prototype.F1 = BI_FP - dbits;\nBigInteger.prototype.F2 = 2 * dbits - BI_FP;\n\n// Digit conversions\nvar BI_RM = \"0123456789abcdefghijklmnopqrstuvwxyz\";\nvar BI_RC = new Array();\nvar rr, vv;\nrr = \"0\".charCodeAt(0);\nfor (vv = 0; vv <= 9; ++vv) {\n  BI_RC[rr++] = vv;\n}rr = \"a\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n  BI_RC[rr++] = vv;\n}rr = \"A\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n  BI_RC[rr++] = vv;\n}function int2char(n) {\n  return BI_RM.charAt(n);\n}\nfunction intAt(s, i) {\n  var c = BI_RC[s.charCodeAt(i)];\n  return c == null ? -1 : c;\n}\n\n// (protected) copy this to r\nfunction bnpCopyTo(r) {\n  for (var i = this.t - 1; i >= 0; --i) {\n    r[i] = this[i];\n  }r.t = this.t;\n  r.s = this.s;\n}\n\n// (protected) set from integer value x, -DV <= x < DV\nfunction bnpFromInt(x) {\n  this.t = 1;\n  this.s = x < 0 ? -1 : 0;\n  if (x > 0) this[0] = x;else if (x < -1) this[0] = x + this.DV;else this.t = 0;\n}\n\n// return bigint initialized to value\nfunction nbv(i) {\n  var r = nbi();\n\n  r.fromInt(i);\n\n  return r;\n}\n\n// (protected) set from string and radix\nfunction bnpFromString(s, b) {\n  var k;\n  if (b == 16) k = 4;else if (b == 8) k = 3;else if (b == 2) k = 1;else if (b == 32) k = 5;else if (b == 4) k = 2;else throw new Error(\"Only radix 2, 4, 8, 16, 32 are supported\");\n  this.t = 0;\n  this.s = 0;\n  var i = s.length,\n      mi = false,\n      sh = 0;\n  while (--i >= 0) {\n    var x = intAt(s, i);\n    if (x < 0) {\n      if (s.charAt(i) == \"-\") mi = true;\n      continue;\n    }\n    mi = false;\n    if (sh == 0) this[this.t++] = x;else if (sh + k > this.DB) {\n      this[this.t - 1] |= (x & (1 << this.DB - sh) - 1) << sh;\n      this[this.t++] = x >> this.DB - sh;\n    } else this[this.t - 1] |= x << sh;\n    sh += k;\n    if (sh >= this.DB) sh -= this.DB;\n  }\n  this.clamp();\n  if (mi) BigInteger.ZERO.subTo(this, this);\n}\n\n// (protected) clamp off excess high words\nfunction bnpClamp() {\n  var c = this.s & this.DM;\n  while (this.t > 0 && this[this.t - 1] == c) {\n    --this.t;\n  }\n}\n\n// (public) return string representation in given radix\nfunction bnToString(b) {\n  if (this.s < 0) return \"-\" + this.negate().toString();\n  var k;\n  if (b == 16) k = 4;else if (b == 8) k = 3;else if (b == 2) k = 1;else if (b == 32) k = 5;else if (b == 4) k = 2;else throw new Error(\"Only radix 2, 4, 8, 16, 32 are supported\");\n  var km = (1 << k) - 1,\n      d,\n      m = false,\n      r = \"\",\n      i = this.t;\n  var p = this.DB - i * this.DB % k;\n  if (i-- > 0) {\n    if (p < this.DB && (d = this[i] >> p) > 0) {\n      m = true;\n      r = int2char(d);\n    }\n    while (i >= 0) {\n      if (p < k) {\n        d = (this[i] & (1 << p) - 1) << k - p;\n        d |= this[--i] >> (p += this.DB - k);\n      } else {\n        d = this[i] >> (p -= k) & km;\n        if (p <= 0) {\n          p += this.DB;\n          --i;\n        }\n      }\n      if (d > 0) m = true;\n      if (m) r += int2char(d);\n    }\n  }\n  return m ? r : \"0\";\n}\n\n// (public) -this\nfunction bnNegate() {\n  var r = nbi();\n\n  BigInteger.ZERO.subTo(this, r);\n\n  return r;\n}\n\n// (public) |this|\nfunction bnAbs() {\n  return this.s < 0 ? this.negate() : this;\n}\n\n// (public) return + if this > a, - if this < a, 0 if equal\nfunction bnCompareTo(a) {\n  var r = this.s - a.s;\n  if (r != 0) return r;\n  var i = this.t;\n  r = i - a.t;\n  if (r != 0) return this.s < 0 ? -r : r;\n  while (--i >= 0) {\n    if ((r = this[i] - a[i]) != 0) return r;\n  }return 0;\n}\n\n// returns bit length of the integer x\nfunction nbits(x) {\n  var r = 1,\n      t;\n  if ((t = x >>> 16) != 0) {\n    x = t;\n    r += 16;\n  }\n  if ((t = x >> 8) != 0) {\n    x = t;\n    r += 8;\n  }\n  if ((t = x >> 4) != 0) {\n    x = t;\n    r += 4;\n  }\n  if ((t = x >> 2) != 0) {\n    x = t;\n    r += 2;\n  }\n  if ((t = x >> 1) != 0) {\n    x = t;\n    r += 1;\n  }\n  return r;\n}\n\n// (public) return the number of bits in \"this\"\nfunction bnBitLength() {\n  if (this.t <= 0) return 0;\n  return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ this.s & this.DM);\n}\n\n// (protected) r = this << n*DB\nfunction bnpDLShiftTo(n, r) {\n  var i;\n  for (i = this.t - 1; i >= 0; --i) {\n    r[i + n] = this[i];\n  }for (i = n - 1; i >= 0; --i) {\n    r[i] = 0;\n  }r.t = this.t + n;\n  r.s = this.s;\n}\n\n// (protected) r = this >> n*DB\nfunction bnpDRShiftTo(n, r) {\n  for (var i = n; i < this.t; ++i) {\n    r[i - n] = this[i];\n  }r.t = Math.max(this.t - n, 0);\n  r.s = this.s;\n}\n\n// (protected) r = this << n\nfunction bnpLShiftTo(n, r) {\n  var bs = n % this.DB;\n  var cbs = this.DB - bs;\n  var bm = (1 << cbs) - 1;\n  var ds = Math.floor(n / this.DB),\n      c = this.s << bs & this.DM,\n      i;\n  for (i = this.t - 1; i >= 0; --i) {\n    r[i + ds + 1] = this[i] >> cbs | c;\n    c = (this[i] & bm) << bs;\n  }\n  for (i = ds - 1; i >= 0; --i) {\n    r[i] = 0;\n  }r[ds] = c;\n  r.t = this.t + ds + 1;\n  r.s = this.s;\n  r.clamp();\n}\n\n// (protected) r = this >> n\nfunction bnpRShiftTo(n, r) {\n  r.s = this.s;\n  var ds = Math.floor(n / this.DB);\n  if (ds >= this.t) {\n    r.t = 0;\n    return;\n  }\n  var bs = n % this.DB;\n  var cbs = this.DB - bs;\n  var bm = (1 << bs) - 1;\n  r[0] = this[ds] >> bs;\n  for (var i = ds + 1; i < this.t; ++i) {\n    r[i - ds - 1] |= (this[i] & bm) << cbs;\n    r[i - ds] = this[i] >> bs;\n  }\n  if (bs > 0) r[this.t - ds - 1] |= (this.s & bm) << cbs;\n  r.t = this.t - ds;\n  r.clamp();\n}\n\n// (protected) r = this - a\nfunction bnpSubTo(a, r) {\n  var i = 0,\n      c = 0,\n      m = Math.min(a.t, this.t);\n  while (i < m) {\n    c += this[i] - a[i];\n    r[i++] = c & this.DM;\n    c >>= this.DB;\n  }\n  if (a.t < this.t) {\n    c -= a.s;\n    while (i < this.t) {\n      c += this[i];\n      r[i++] = c & this.DM;\n      c >>= this.DB;\n    }\n    c += this.s;\n  } else {\n    c += this.s;\n    while (i < a.t) {\n      c -= a[i];\n      r[i++] = c & this.DM;\n      c >>= this.DB;\n    }\n    c -= a.s;\n  }\n  r.s = c < 0 ? -1 : 0;\n  if (c < -1) r[i++] = this.DV + c;else if (c > 0) r[i++] = c;\n  r.t = i;\n  r.clamp();\n}\n\n// (protected) r = this * a, r != this,a (HAC 14.12)\n// \"this\" should be the larger one if appropriate.\nfunction bnpMultiplyTo(a, r) {\n  var x = this.abs(),\n      y = a.abs();\n  var i = x.t;\n  r.t = i + y.t;\n  while (--i >= 0) {\n    r[i] = 0;\n  }for (i = 0; i < y.t; ++i) {\n    r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);\n  }r.s = 0;\n  r.clamp();\n  if (this.s != a.s) BigInteger.ZERO.subTo(r, r);\n}\n\n// (protected) r = this^2, r != this (HAC 14.16)\nfunction bnpSquareTo(r) {\n  var x = this.abs();\n  var i = r.t = 2 * x.t;\n  while (--i >= 0) {\n    r[i] = 0;\n  }for (i = 0; i < x.t - 1; ++i) {\n    var c = x.am(i, x[i], r, 2 * i, 0, 1);\n    if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {\n      r[i + x.t] -= x.DV;\n      r[i + x.t + 1] = 1;\n    }\n  }\n  if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);\n  r.s = 0;\n  r.clamp();\n}\n\n// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n// r != q, this != m.  q or r may be null.\nfunction bnpDivRemTo(m, q, r) {\n  var pm = m.abs();\n  if (pm.t <= 0) return;\n  var pt = this.abs();\n  if (pt.t < pm.t) {\n    if (q != null) q.fromInt(0);\n    if (r != null) this.copyTo(r);\n    return;\n  }\n  if (r == null) r = nbi();\n  var y = nbi(),\n      ts = this.s,\n      ms = m.s;\n  var nsh = this.DB - nbits(pm[pm.t - 1]);\n  // normalize modulus\n  if (nsh > 0) {\n    pm.lShiftTo(nsh, y);\n    pt.lShiftTo(nsh, r);\n  } else {\n    pm.copyTo(y);\n    pt.copyTo(r);\n  }\n  var ys = y.t;\n  var y0 = y[ys - 1];\n  if (y0 == 0) return;\n  var yt = y0 * (1 << this.F1) + (ys > 1 ? y[ys - 2] >> this.F2 : 0);\n  var d1 = this.FV / yt,\n      d2 = (1 << this.F1) / yt,\n      e = 1 << this.F2;\n  var i = r.t,\n      j = i - ys,\n      t = q == null ? nbi() : q;\n  y.dlShiftTo(j, t);\n  if (r.compareTo(t) >= 0) {\n    r[r.t++] = 1;\n    r.subTo(t, r);\n  }\n  BigInteger.ONE.dlShiftTo(ys, t);\n  t.subTo(y, y);\n  // \"negative\" y so we can replace sub with am later\n  while (y.t < ys) {\n    y[y.t++] = 0;\n  }while (--j >= 0) {\n    // Estimate quotient digit\n    var qd = r[--i] == y0 ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);\n    if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) {\n      // Try it out\n      y.dlShiftTo(j, t);\n      r.subTo(t, r);\n      while (r[i] < --qd) {\n        r.subTo(t, r);\n      }\n    }\n  }\n  if (q != null) {\n    r.drShiftTo(ys, q);\n    if (ts != ms) BigInteger.ZERO.subTo(q, q);\n  }\n  r.t = ys;\n  r.clamp();\n  if (nsh > 0) r.rShiftTo(nsh, r);\n  // Denormalize remainder\n  if (ts < 0) BigInteger.ZERO.subTo(r, r);\n}\n\n// (public) this mod a\nfunction bnMod(a) {\n  var r = nbi();\n  this.abs().divRemTo(a, null, r);\n  if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r);\n  return r;\n}\n\n// (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n// justification:\n//         xy == 1 (mod m)\n//         xy =  1+km\n//   xy(2-xy) = (1+km)(1-km)\n// x[y(2-xy)] = 1-k^2m^2\n// x[y(2-xy)] == 1 (mod m^2)\n// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n// JS multiply \"overflows\" differently from C/C++, so care is needed here.\nfunction bnpInvDigit() {\n  if (this.t < 1) return 0;\n  var x = this[0];\n  if ((x & 1) == 0) return 0;\n  var y = x & 3;\n  // y == 1/x mod 2^2\n  y = y * (2 - (x & 0xf) * y) & 0xf;\n  // y == 1/x mod 2^4\n  y = y * (2 - (x & 0xff) * y) & 0xff;\n  // y == 1/x mod 2^8\n  y = y * (2 - ((x & 0xffff) * y & 0xffff)) & 0xffff;\n  // y == 1/x mod 2^16\n  // last step - calculate inverse mod DV directly;\n  // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n  y = y * (2 - x * y % this.DV) % this.DV;\n  // y == 1/x mod 2^dbits\n  // we really want the negative inverse, and -DV < y < DV\n  return y > 0 ? this.DV - y : -y;\n}\n\nfunction bnEquals(a) {\n  return this.compareTo(a) == 0;\n}\n\n// (protected) r = this + a\nfunction bnpAddTo(a, r) {\n  var i = 0,\n      c = 0,\n      m = Math.min(a.t, this.t);\n  while (i < m) {\n    c += this[i] + a[i];\n    r[i++] = c & this.DM;\n    c >>= this.DB;\n  }\n  if (a.t < this.t) {\n    c += a.s;\n    while (i < this.t) {\n      c += this[i];\n      r[i++] = c & this.DM;\n      c >>= this.DB;\n    }\n    c += this.s;\n  } else {\n    c += this.s;\n    while (i < a.t) {\n      c += a[i];\n      r[i++] = c & this.DM;\n      c >>= this.DB;\n    }\n    c += a.s;\n  }\n  r.s = c < 0 ? -1 : 0;\n  if (c > 0) r[i++] = c;else if (c < -1) r[i++] = this.DV + c;\n  r.t = i;\n  r.clamp();\n}\n\n// (public) this + a\nfunction bnAdd(a) {\n  var r = nbi();\n\n  this.addTo(a, r);\n\n  return r;\n}\n\n// (public) this - a\nfunction bnSubtract(a) {\n  var r = nbi();\n\n  this.subTo(a, r);\n\n  return r;\n}\n\n// (public) this * a\nfunction bnMultiply(a) {\n  var r = nbi();\n\n  this.multiplyTo(a, r);\n\n  return r;\n}\n\n// (public) this / a\nfunction bnDivide(a) {\n  var r = nbi();\n\n  this.divRemTo(a, r, null);\n\n  return r;\n}\n\n// Montgomery reduction\nfunction Montgomery(m) {\n  this.m = m;\n  this.mp = m.invDigit();\n  this.mpl = this.mp & 0x7fff;\n  this.mph = this.mp >> 15;\n  this.um = (1 << m.DB - 15) - 1;\n  this.mt2 = 2 * m.t;\n}\n\n// xR mod m\nfunction montConvert(x) {\n  var r = nbi();\n  x.abs().dlShiftTo(this.m.t, r);\n  r.divRemTo(this.m, null, r);\n  if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r);\n  return r;\n}\n\n// x/R mod m\nfunction montRevert(x) {\n  var r = nbi();\n  x.copyTo(r);\n  this.reduce(r);\n  return r;\n}\n\n// x = x/R mod m (HAC 14.32)\nfunction montReduce(x) {\n  while (x.t <= this.mt2) {\n    // pad x so am has enough room later\n    x[x.t++] = 0;\n  }for (var i = 0; i < this.m.t; ++i) {\n    // faster way of calculating u0 = x[i]*mp mod DV\n    var j = x[i] & 0x7fff;\n    var u0 = j * this.mpl + ((j * this.mph + (x[i] >> 15) * this.mpl & this.um) << 15) & x.DM;\n    // use am to combine the multiply-shift-add into one call\n    j = i + this.m.t;\n    x[j] += this.m.am(0, u0, x, i, 0, this.m.t);\n    // propagate carry\n    while (x[j] >= x.DV) {\n      x[j] -= x.DV;\n      x[++j]++;\n    }\n  }\n  x.clamp();\n  x.drShiftTo(this.m.t, x);\n  if (x.compareTo(this.m) >= 0) x.subTo(this.m, x);\n}\n\n// r = \"x^2/R mod m\"; x != r\nfunction montSqrTo(x, r) {\n  x.squareTo(r);\n\n  this.reduce(r);\n}\n\n// r = \"xy/R mod m\"; x,y != r\nfunction montMulTo(x, y, r) {\n  x.multiplyTo(y, r);\n\n  this.reduce(r);\n}\n\nMontgomery.prototype.convert = montConvert;\nMontgomery.prototype.revert = montRevert;\nMontgomery.prototype.reduce = montReduce;\nMontgomery.prototype.mulTo = montMulTo;\nMontgomery.prototype.sqrTo = montSqrTo;\n\n// (public) this^e % m (HAC 14.85)\nfunction bnModPow(e, m, callback) {\n  var i = e.bitLength(),\n      k,\n      r = nbv(1),\n      z = new Montgomery(m);\n  if (i <= 0) return r;else if (i < 18) k = 1;else if (i < 48) k = 3;else if (i < 144) k = 4;else if (i < 768) k = 5;else k = 6;\n\n  // precomputation\n  var g = new Array(),\n      n = 3,\n      k1 = k - 1,\n      km = (1 << k) - 1;\n  g[1] = z.convert(this);\n  if (k > 1) {\n    var g2 = nbi();\n    z.sqrTo(g[1], g2);\n    while (n <= km) {\n      g[n] = nbi();\n      z.mulTo(g2, g[n - 2], g[n]);\n      n += 2;\n    }\n  }\n\n  var j = e.t - 1,\n      w,\n      is1 = true,\n      r2 = nbi(),\n      t;\n  i = nbits(e[j]) - 1;\n  while (j >= 0) {\n    if (i >= k1) w = e[j] >> i - k1 & km;else {\n      w = (e[j] & (1 << i + 1) - 1) << k1 - i;\n      if (j > 0) w |= e[j - 1] >> this.DB + i - k1;\n    }\n\n    n = k;\n    while ((w & 1) == 0) {\n      w >>= 1;\n      --n;\n    }\n    if ((i -= n) < 0) {\n      i += this.DB;\n      --j;\n    }\n    if (is1) {\n      // ret == 1, don't bother squaring or multiplying it\n      g[w].copyTo(r);\n      is1 = false;\n    } else {\n      while (n > 1) {\n        z.sqrTo(r, r2);\n        z.sqrTo(r2, r);\n        n -= 2;\n      }\n      if (n > 0) z.sqrTo(r, r2);else {\n        t = r;\n        r = r2;\n        r2 = t;\n      }\n      z.mulTo(r2, g[w], r);\n    }\n\n    while (j >= 0 && (e[j] & 1 << i) == 0) {\n      z.sqrTo(r, r2);\n      t = r;\n      r = r2;\n      r2 = t;\n      if (--i < 0) {\n        i = this.DB - 1;\n        --j;\n      }\n    }\n  }\n  var result = z.revert(r);\n  callback(null, result);\n  return result;\n}\n\n// protected\nBigInteger.prototype.copyTo = bnpCopyTo;\nBigInteger.prototype.fromInt = bnpFromInt;\nBigInteger.prototype.fromString = bnpFromString;\nBigInteger.prototype.clamp = bnpClamp;\nBigInteger.prototype.dlShiftTo = bnpDLShiftTo;\nBigInteger.prototype.drShiftTo = bnpDRShiftTo;\nBigInteger.prototype.lShiftTo = bnpLShiftTo;\nBigInteger.prototype.rShiftTo = bnpRShiftTo;\nBigInteger.prototype.subTo = bnpSubTo;\nBigInteger.prototype.multiplyTo = bnpMultiplyTo;\nBigInteger.prototype.squareTo = bnpSquareTo;\nBigInteger.prototype.divRemTo = bnpDivRemTo;\nBigInteger.prototype.invDigit = bnpInvDigit;\nBigInteger.prototype.addTo = bnpAddTo;\n\n// public\nBigInteger.prototype.toString = bnToString;\nBigInteger.prototype.negate = bnNegate;\nBigInteger.prototype.abs = bnAbs;\nBigInteger.prototype.compareTo = bnCompareTo;\nBigInteger.prototype.bitLength = bnBitLength;\nBigInteger.prototype.mod = bnMod;\nBigInteger.prototype.equals = bnEquals;\nBigInteger.prototype.add = bnAdd;\nBigInteger.prototype.subtract = bnSubtract;\nBigInteger.prototype.multiply = bnMultiply;\nBigInteger.prototype.divide = bnDivide;\nBigInteger.prototype.modPow = bnModPow;\n\n// \"constants\"\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Buffer } from 'buffer/';\nimport CryptoJS from 'crypto-js/core';\nimport 'crypto-js/lib-typedarrays'; // necessary for crypto js\nimport SHA256 from 'crypto-js/sha256';\nimport HmacSHA256 from 'crypto-js/hmac-sha256';\n\nvar randomBytes = function randomBytes(nBytes) {\n  return Buffer.from(CryptoJS.lib.WordArray.random(nBytes).toString(), 'hex');\n};\n\nimport BigInteger from './BigInteger';\n\nvar initN = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1' + '29024E088A67CC74020BBEA63B139B22514A08798E3404DD' + 'EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245' + 'E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' + 'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D' + 'C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F' + '83655D23DCA3AD961C62F356208552BB9ED529077096966D' + '670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' + 'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9' + 'DE2BCBF6955817183995497CEA956AE515D2261898FA0510' + '15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64' + 'ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7' + 'ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B' + 'F12FFA06D98A0864D87602733EC86A64521F2B18177B200C' + 'BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31' + '43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF';\n\nvar newPasswordRequiredChallengeUserAttributePrefix = 'userAttributes.';\n\n/** @class */\n\nvar AuthenticationHelper = function () {\n  /**\n   * Constructs a new AuthenticationHelper object\n   * @param {string} PoolName Cognito user pool name.\n   */\n  function AuthenticationHelper(PoolName) {\n    _classCallCheck(this, AuthenticationHelper);\n\n    this.N = new BigInteger(initN, 16);\n    this.g = new BigInteger('2', 16);\n    this.k = new BigInteger(this.hexHash('00' + this.N.toString(16) + '0' + this.g.toString(16)), 16);\n\n    this.smallAValue = this.generateRandomSmallA();\n    this.getLargeAValue(function () {});\n\n    this.infoBits = Buffer.from('Caldera Derived Key', 'utf8');\n\n    this.poolName = PoolName;\n  }\n\n  /**\n   * @returns {BigInteger} small A, a random number\n   */\n\n\n  AuthenticationHelper.prototype.getSmallAValue = function getSmallAValue() {\n    return this.smallAValue;\n  };\n\n  /**\n   * @param {nodeCallback<BigInteger>} callback Called with (err, largeAValue)\n   * @returns {void}\n   */\n\n\n  AuthenticationHelper.prototype.getLargeAValue = function getLargeAValue(callback) {\n    var _this = this;\n\n    if (this.largeAValue) {\n      callback(null, this.largeAValue);\n    } else {\n      this.calculateA(this.smallAValue, function (err, largeAValue) {\n        if (err) {\n          callback(err, null);\n        }\n\n        _this.largeAValue = largeAValue;\n        callback(null, _this.largeAValue);\n      });\n    }\n  };\n\n  /**\n   * helper function to generate a random big integer\n   * @returns {BigInteger} a random value.\n   * @private\n   */\n\n\n  AuthenticationHelper.prototype.generateRandomSmallA = function generateRandomSmallA() {\n    var hexRandom = randomBytes(128).toString('hex');\n\n    var randomBigInt = new BigInteger(hexRandom, 16);\n    var smallABigInt = randomBigInt.mod(this.N);\n\n    return smallABigInt;\n  };\n\n  /**\n   * helper function to generate a random string\n   * @returns {string} a random value.\n   * @private\n   */\n\n\n  AuthenticationHelper.prototype.generateRandomString = function generateRandomString() {\n    return randomBytes(40).toString('base64');\n  };\n\n  /**\n   * @returns {string} Generated random value included in password hash.\n   */\n\n\n  AuthenticationHelper.prototype.getRandomPassword = function getRandomPassword() {\n    return this.randomPassword;\n  };\n\n  /**\n   * @returns {string} Generated random value included in devices hash.\n   */\n\n\n  AuthenticationHelper.prototype.getSaltDevices = function getSaltDevices() {\n    return this.SaltToHashDevices;\n  };\n\n  /**\n   * @returns {string} Value used to verify devices.\n   */\n\n\n  AuthenticationHelper.prototype.getVerifierDevices = function getVerifierDevices() {\n    return this.verifierDevices;\n  };\n\n  /**\n   * Generate salts and compute verifier.\n   * @param {string} deviceGroupKey Devices to generate verifier for.\n   * @param {string} username User to generate verifier for.\n   * @param {nodeCallback<null>} callback Called with (err, null)\n   * @returns {void}\n   */\n\n\n  AuthenticationHelper.prototype.generateHashDevice = function generateHashDevice(deviceGroupKey, username, callback) {\n    var _this2 = this;\n\n    this.randomPassword = this.generateRandomString();\n    var combinedString = '' + deviceGroupKey + username + ':' + this.randomPassword;\n    var hashedString = this.hash(combinedString);\n\n    var hexRandom = randomBytes(16).toString('hex');\n    this.SaltToHashDevices = this.padHex(new BigInteger(hexRandom, 16));\n\n    this.g.modPow(new BigInteger(this.hexHash(this.SaltToHashDevices + hashedString), 16), this.N, function (err, verifierDevicesNotPadded) {\n      if (err) {\n        callback(err, null);\n      }\n\n      _this2.verifierDevices = _this2.padHex(verifierDevicesNotPadded);\n      callback(null, null);\n    });\n  };\n\n  /**\n   * Calculate the client's public value A = g^a%N\n   * with the generated random number a\n   * @param {BigInteger} a Randomly generated small A.\n   * @param {nodeCallback<BigInteger>} callback Called with (err, largeAValue)\n   * @returns {void}\n   * @private\n   */\n\n\n  AuthenticationHelper.prototype.calculateA = function calculateA(a, callback) {\n    var _this3 = this;\n\n    this.g.modPow(a, this.N, function (err, A) {\n      if (err) {\n        callback(err, null);\n      }\n\n      if (A.mod(_this3.N).equals(BigInteger.ZERO)) {\n        callback(new Error('Illegal paramater. A mod N cannot be 0.'), null);\n      }\n\n      callback(null, A);\n    });\n  };\n\n  /**\n   * Calculate the client's value U which is the hash of A and B\n   * @param {BigInteger} A Large A value.\n   * @param {BigInteger} B Server B value.\n   * @returns {BigInteger} Computed U value.\n   * @private\n   */\n\n\n  AuthenticationHelper.prototype.calculateU = function calculateU(A, B) {\n    this.UHexHash = this.hexHash(this.padHex(A) + this.padHex(B));\n    var finalU = new BigInteger(this.UHexHash, 16);\n\n    return finalU;\n  };\n\n  /**\n   * Calculate a hash from a bitArray\n   * @param {Buffer} buf Value to hash.\n   * @returns {String} Hex-encoded hash.\n   * @private\n   */\n\n\n  AuthenticationHelper.prototype.hash = function hash(buf) {\n    var str = buf instanceof Buffer ? CryptoJS.lib.WordArray.create(buf) : buf;\n    var hashHex = SHA256(str).toString();\n\n    return new Array(64 - hashHex.length).join('0') + hashHex;\n  };\n\n  /**\n   * Calculate a hash from a hex string\n   * @param {String} hexStr Value to hash.\n   * @returns {String} Hex-encoded hash.\n   * @private\n   */\n\n\n  AuthenticationHelper.prototype.hexHash = function hexHash(hexStr) {\n    return this.hash(Buffer.from(hexStr, 'hex'));\n  };\n\n  /**\n   * Standard hkdf algorithm\n   * @param {Buffer} ikm Input key material.\n   * @param {Buffer} salt Salt value.\n   * @returns {Buffer} Strong key material.\n   * @private\n   */\n\n\n  AuthenticationHelper.prototype.computehkdf = function computehkdf(ikm, salt) {\n    var infoBitsWordArray = CryptoJS.lib.WordArray.create(Buffer.concat([this.infoBits, Buffer.from(String.fromCharCode(1), 'utf8')]));\n    var ikmWordArray = ikm instanceof Buffer ? CryptoJS.lib.WordArray.create(ikm) : ikm;\n    var saltWordArray = salt instanceof Buffer ? CryptoJS.lib.WordArray.create(salt) : salt;\n\n    var prk = HmacSHA256(ikmWordArray, saltWordArray);\n    var hmac = HmacSHA256(infoBitsWordArray, prk);\n    return Buffer.from(hmac.toString(), 'hex').slice(0, 16);\n  };\n\n  /**\n   * Calculates the final hkdf based on computed S value, and computed U value and the key\n   * @param {String} username Username.\n   * @param {String} password Password.\n   * @param {BigInteger} serverBValue Server B value.\n   * @param {BigInteger} salt Generated salt.\n   * @param {nodeCallback<Buffer>} callback Called with (err, hkdfValue)\n   * @returns {void}\n   */\n\n\n  AuthenticationHelper.prototype.getPasswordAuthenticationKey = function getPasswordAuthenticationKey(username, password, serverBValue, salt, callback) {\n    var _this4 = this;\n\n    if (serverBValue.mod(this.N).equals(BigInteger.ZERO)) {\n      throw new Error('B cannot be zero.');\n    }\n\n    this.UValue = this.calculateU(this.largeAValue, serverBValue);\n\n    if (this.UValue.equals(BigInteger.ZERO)) {\n      throw new Error('U cannot be zero.');\n    }\n\n    var usernamePassword = '' + this.poolName + username + ':' + password;\n    var usernamePasswordHash = this.hash(usernamePassword);\n\n    var xValue = new BigInteger(this.hexHash(this.padHex(salt) + usernamePasswordHash), 16);\n    this.calculateS(xValue, serverBValue, function (err, sValue) {\n      if (err) {\n        callback(err, null);\n      }\n\n      var hkdf = _this4.computehkdf(Buffer.from(_this4.padHex(sValue), 'hex'), Buffer.from(_this4.padHex(_this4.UValue.toString(16)), 'hex'));\n\n      callback(null, hkdf);\n    });\n  };\n\n  /**\n   * Calculates the S value used in getPasswordAuthenticationKey\n   * @param {BigInteger} xValue Salted password hash value.\n   * @param {BigInteger} serverBValue Server B value.\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @returns {void}\n   */\n\n\n  AuthenticationHelper.prototype.calculateS = function calculateS(xValue, serverBValue, callback) {\n    var _this5 = this;\n\n    this.g.modPow(xValue, this.N, function (err, gModPowXN) {\n      if (err) {\n        callback(err, null);\n      }\n\n      var intValue2 = serverBValue.subtract(_this5.k.multiply(gModPowXN));\n      intValue2.modPow(_this5.smallAValue.add(_this5.UValue.multiply(xValue)), _this5.N, function (err2, result) {\n        if (err2) {\n          callback(err2, null);\n        }\n\n        callback(null, result.mod(_this5.N));\n      });\n    });\n  };\n\n  /**\n  * Return constant newPasswordRequiredChallengeUserAttributePrefix\n  * @return {newPasswordRequiredChallengeUserAttributePrefix} constant prefix value\n  */\n\n\n  AuthenticationHelper.prototype.getNewPasswordRequiredChallengeUserAttributePrefix = function getNewPasswordRequiredChallengeUserAttributePrefix() {\n    return newPasswordRequiredChallengeUserAttributePrefix;\n  };\n\n  /**\n   * Converts a BigInteger (or hex string) to hex format padded with zeroes for hashing\n   * @param {BigInteger|String} bigInt Number or string to pad.\n   * @returns {String} Padded hex string.\n   */\n\n\n  AuthenticationHelper.prototype.padHex = function padHex(bigInt) {\n    var hashStr = bigInt.toString(16);\n    if (hashStr.length % 2 === 1) {\n      hashStr = '0' + hashStr;\n    } else if ('89ABCDEFabcdef'.indexOf(hashStr[0]) !== -1) {\n      hashStr = '00' + hashStr;\n    }\n    return hashStr;\n  };\n\n  return AuthenticationHelper;\n}();\n\nexport default AuthenticationHelper;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Buffer } from 'buffer/';\n\n/** @class */\n\nvar CognitoJwtToken = function () {\n  /**\n   * Constructs a new CognitoJwtToken object\n   * @param {string=} token The JWT token.\n   */\n  function CognitoJwtToken(token) {\n    _classCallCheck(this, CognitoJwtToken);\n\n    // Assign object\n    this.jwtToken = token || '';\n    this.payload = this.decodePayload();\n  }\n\n  /**\n   * @returns {string} the record's token.\n   */\n\n\n  CognitoJwtToken.prototype.getJwtToken = function getJwtToken() {\n    return this.jwtToken;\n  };\n\n  /**\n   * @returns {int} the token's expiration (exp member).\n   */\n\n\n  CognitoJwtToken.prototype.getExpiration = function getExpiration() {\n    return this.payload.exp;\n  };\n\n  /**\n   * @returns {int} the token's \"issued at\" (iat member).\n   */\n\n\n  CognitoJwtToken.prototype.getIssuedAt = function getIssuedAt() {\n    return this.payload.iat;\n  };\n\n  /**\n   * @returns {object} the token's payload.\n   */\n\n\n  CognitoJwtToken.prototype.decodePayload = function decodePayload() {\n    var payload = this.jwtToken.split('.')[1];\n    try {\n      return JSON.parse(Buffer.from(payload, 'base64').toString('utf8'));\n    } catch (err) {\n      return {};\n    }\n  };\n\n  return CognitoJwtToken;\n}();\n\nexport default CognitoJwtToken;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/*\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport CognitoJwtToken from './CognitoJwtToken';\n\n/** @class */\n\nvar CognitoAccessToken = function (_CognitoJwtToken) {\n  _inherits(CognitoAccessToken, _CognitoJwtToken);\n\n  /**\n   * Constructs a new CognitoAccessToken object\n   * @param {string=} AccessToken The JWT access token.\n   */\n  function CognitoAccessToken() {\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n        AccessToken = _ref.AccessToken;\n\n    _classCallCheck(this, CognitoAccessToken);\n\n    return _possibleConstructorReturn(this, _CognitoJwtToken.call(this, AccessToken || ''));\n  }\n\n  return CognitoAccessToken;\n}(CognitoJwtToken);\n\nexport default CognitoAccessToken;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport CognitoJwtToken from './CognitoJwtToken';\n\n/** @class */\n\nvar CognitoIdToken = function (_CognitoJwtToken) {\n  _inherits(CognitoIdToken, _CognitoJwtToken);\n\n  /**\n   * Constructs a new CognitoIdToken object\n   * @param {string=} IdToken The JWT Id token\n   */\n  function CognitoIdToken() {\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n        IdToken = _ref.IdToken;\n\n    _classCallCheck(this, CognitoIdToken);\n\n    return _possibleConstructorReturn(this, _CognitoJwtToken.call(this, IdToken || ''));\n  }\n\n  return CognitoIdToken;\n}(CognitoJwtToken);\n\nexport default CognitoIdToken;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @class */\nvar CognitoRefreshToken = function () {\n  /**\n   * Constructs a new CognitoRefreshToken object\n   * @param {string=} RefreshToken The JWT refresh token.\n   */\n  function CognitoRefreshToken() {\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n        RefreshToken = _ref.RefreshToken;\n\n    _classCallCheck(this, CognitoRefreshToken);\n\n    // Assign object\n    this.token = RefreshToken || '';\n  }\n\n  /**\n   * @returns {string} the record's token.\n   */\n\n\n  CognitoRefreshToken.prototype.getToken = function getToken() {\n    return this.token;\n  };\n\n  return CognitoRefreshToken;\n}();\n\nexport default CognitoRefreshToken;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @class */\nvar CognitoUserSession = function () {\n  /**\n   * Constructs a new CognitoUserSession object\n   * @param {CognitoIdToken} IdToken The session's Id token.\n   * @param {CognitoRefreshToken=} RefreshToken The session's refresh token.\n   * @param {CognitoAccessToken} AccessToken The session's access token.\n   * @param {int} ClockDrift The saved computer's clock drift or undefined to force calculation.\n   */\n  function CognitoUserSession() {\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n        IdToken = _ref.IdToken,\n        RefreshToken = _ref.RefreshToken,\n        AccessToken = _ref.AccessToken,\n        ClockDrift = _ref.ClockDrift;\n\n    _classCallCheck(this, CognitoUserSession);\n\n    if (AccessToken == null || IdToken == null) {\n      throw new Error('Id token and Access Token must be present.');\n    }\n\n    this.idToken = IdToken;\n    this.refreshToken = RefreshToken;\n    this.accessToken = AccessToken;\n    this.clockDrift = ClockDrift === undefined ? this.calculateClockDrift() : ClockDrift;\n  }\n\n  /**\n   * @returns {CognitoIdToken} the session's Id token\n   */\n\n\n  CognitoUserSession.prototype.getIdToken = function getIdToken() {\n    return this.idToken;\n  };\n\n  /**\n   * @returns {CognitoRefreshToken} the session's refresh token\n   */\n\n\n  CognitoUserSession.prototype.getRefreshToken = function getRefreshToken() {\n    return this.refreshToken;\n  };\n\n  /**\n   * @returns {CognitoAccessToken} the session's access token\n   */\n\n\n  CognitoUserSession.prototype.getAccessToken = function getAccessToken() {\n    return this.accessToken;\n  };\n\n  /**\n   * @returns {int} the session's clock drift\n   */\n\n\n  CognitoUserSession.prototype.getClockDrift = function getClockDrift() {\n    return this.clockDrift;\n  };\n\n  /**\n   * @returns {int} the computer's clock drift\n   */\n\n\n  CognitoUserSession.prototype.calculateClockDrift = function calculateClockDrift() {\n    var now = Math.floor(new Date() / 1000);\n    var iat = Math.min(this.accessToken.getIssuedAt(), this.idToken.getIssuedAt());\n\n    return now - iat;\n  };\n\n  /**\n   * Checks to see if the session is still valid based on session expiry information found\n   * in tokens and the current time (adjusted with clock drift)\n   * @returns {boolean} if the session is still valid\n   */\n\n\n  CognitoUserSession.prototype.isValid = function isValid() {\n    var now = Math.floor(new Date() / 1000);\n    var adjusted = now - this.clockDrift;\n\n    return adjusted < this.accessToken.getExpiration() && adjusted < this.idToken.getExpiration();\n  };\n\n  return CognitoUserSession;\n}();\n\nexport default CognitoUserSession;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nvar weekNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\n/** @class */\n\nvar DateHelper = function () {\n  function DateHelper() {\n    _classCallCheck(this, DateHelper);\n  }\n\n  /**\n   * @returns {string} The current time in \"ddd MMM D HH:mm:ss UTC YYYY\" format.\n   */\n  DateHelper.prototype.getNowString = function getNowString() {\n    var now = new Date();\n\n    var weekDay = weekNames[now.getUTCDay()];\n    var month = monthNames[now.getUTCMonth()];\n    var day = now.getUTCDate();\n\n    var hours = now.getUTCHours();\n    if (hours < 10) {\n      hours = '0' + hours;\n    }\n\n    var minutes = now.getUTCMinutes();\n    if (minutes < 10) {\n      minutes = '0' + minutes;\n    }\n\n    var seconds = now.getUTCSeconds();\n    if (seconds < 10) {\n      seconds = '0' + seconds;\n    }\n\n    var year = now.getUTCFullYear();\n\n    // ddd MMM D HH:mm:ss UTC YYYY\n    var dateNow = weekDay + ' ' + month + ' ' + day + ' ' + hours + ':' + minutes + ':' + seconds + ' UTC ' + year;\n\n    return dateNow;\n  };\n\n  return DateHelper;\n}();\n\nexport default DateHelper;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @class */\nvar CognitoUserAttribute = function () {\n  /**\n   * Constructs a new CognitoUserAttribute object\n   * @param {string=} Name The record's name\n   * @param {string=} Value The record's value\n   */\n  function CognitoUserAttribute() {\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n        Name = _ref.Name,\n        Value = _ref.Value;\n\n    _classCallCheck(this, CognitoUserAttribute);\n\n    this.Name = Name || '';\n    this.Value = Value || '';\n  }\n\n  /**\n   * @returns {string} the record's value.\n   */\n\n\n  CognitoUserAttribute.prototype.getValue = function getValue() {\n    return this.Value;\n  };\n\n  /**\n   * Sets the record's value.\n   * @param {string} value The new value.\n   * @returns {CognitoUserAttribute} The record for method chaining.\n   */\n\n\n  CognitoUserAttribute.prototype.setValue = function setValue(value) {\n    this.Value = value;\n    return this;\n  };\n\n  /**\n   * @returns {string} the record's name.\n   */\n\n\n  CognitoUserAttribute.prototype.getName = function getName() {\n    return this.Name;\n  };\n\n  /**\n   * Sets the record's name\n   * @param {string} name The new name.\n   * @returns {CognitoUserAttribute} The record for method chaining.\n   */\n\n\n  CognitoUserAttribute.prototype.setName = function setName(name) {\n    this.Name = name;\n    return this;\n  };\n\n  /**\n   * @returns {string} a string representation of the record.\n   */\n\n\n  CognitoUserAttribute.prototype.toString = function toString() {\n    return JSON.stringify(this);\n  };\n\n  /**\n   * @returns {object} a flat object representing the record.\n   */\n\n\n  CognitoUserAttribute.prototype.toJSON = function toJSON() {\n    return {\n      Name: this.Name,\n      Value: this.Value\n    };\n  };\n\n  return CognitoUserAttribute;\n}();\n\nexport default CognitoUserAttribute;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar dataMemory = {};\n\n/** @class */\n\nvar MemoryStorage = function () {\n  function MemoryStorage() {\n    _classCallCheck(this, MemoryStorage);\n  }\n\n  /**\n   * This is used to set a specific item in storage\n   * @param {string} key - the key for the item\n   * @param {object} value - the value\n   * @returns {string} value that was set\n   */\n  MemoryStorage.setItem = function setItem(key, value) {\n    dataMemory[key] = value;\n    return dataMemory[key];\n  };\n\n  /**\n   * This is used to get a specific key from storage\n   * @param {string} key - the key for the item\n   * This is used to clear the storage\n   * @returns {string} the data item\n   */\n\n\n  MemoryStorage.getItem = function getItem(key) {\n    return Object.prototype.hasOwnProperty.call(dataMemory, key) ? dataMemory[key] : undefined;\n  };\n\n  /**\n   * This is used to remove an item from storage\n   * @param {string} key - the key being set\n   * @returns {string} value - value that was deleted\n   */\n\n\n  MemoryStorage.removeItem = function removeItem(key) {\n    return delete dataMemory[key];\n  };\n\n  /**\n   * This is used to clear the storage\n   * @returns {string} nothing\n   */\n\n\n  MemoryStorage.clear = function clear() {\n    dataMemory = {};\n    return dataMemory;\n  };\n\n  return MemoryStorage;\n}();\n\n/** @class */\n\n\nvar StorageHelper = function () {\n\n  /**\n   * This is used to get a storage object\n   * @returns {object} the storage\n   */\n  function StorageHelper() {\n    _classCallCheck(this, StorageHelper);\n\n    try {\n      this.storageWindow = window.localStorage;\n      this.storageWindow.setItem('aws.cognito.test-ls', 1);\n      this.storageWindow.removeItem('aws.cognito.test-ls');\n    } catch (exception) {\n      this.storageWindow = MemoryStorage;\n    }\n  }\n\n  /**\n   * This is used to return the storage\n   * @returns {object} the storage\n   */\n\n\n  StorageHelper.prototype.getStorage = function getStorage() {\n    return this.storageWindow;\n  };\n\n  return StorageHelper;\n}();\n\nexport default StorageHelper;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Buffer } from 'buffer/';\nimport CryptoJS from 'crypto-js/core';\nimport TypedArrays from 'crypto-js/lib-typedarrays'; // necessary for crypto js\nimport Base64 from 'crypto-js/enc-base64';\nimport HmacSHA256 from 'crypto-js/hmac-sha256';\n\nimport BigInteger from './BigInteger';\nimport AuthenticationHelper from './AuthenticationHelper';\nimport CognitoAccessToken from './CognitoAccessToken';\nimport CognitoIdToken from './CognitoIdToken';\nimport CognitoRefreshToken from './CognitoRefreshToken';\nimport CognitoUserSession from './CognitoUserSession';\nimport DateHelper from './DateHelper';\nimport CognitoUserAttribute from './CognitoUserAttribute';\nimport StorageHelper from './StorageHelper';\n\n/**\n * @callback nodeCallback\n * @template T result\n * @param {*} err The operation failure reason, or null.\n * @param {T} result The operation result.\n */\n\n/**\n * @callback onFailure\n * @param {*} err Failure reason.\n */\n\n/**\n * @callback onSuccess\n * @template T result\n * @param {T} result The operation result.\n */\n\n/**\n * @callback mfaRequired\n * @param {*} details MFA challenge details.\n */\n\n/**\n * @callback customChallenge\n * @param {*} details Custom challenge details.\n */\n\n/**\n * @callback inputVerificationCode\n * @param {*} data Server response.\n */\n\n/**\n * @callback authSuccess\n * @param {CognitoUserSession} session The new session.\n * @param {bool=} userConfirmationNecessary User must be confirmed.\n */\n\n/** @class */\n\nvar CognitoUser = function () {\n  /**\n   * Constructs a new CognitoUser object\n   * @param {object} data Creation options\n   * @param {string} data.Username The user's username.\n   * @param {CognitoUserPool} data.Pool Pool containing the user.\n   * @param {object} data.Storage Optional storage object.\n   */\n  function CognitoUser(data) {\n    _classCallCheck(this, CognitoUser);\n\n    if (data == null || data.Username == null || data.Pool == null) {\n      throw new Error('Username and pool information are required.');\n    }\n\n    this.username = data.Username || '';\n    this.pool = data.Pool;\n    this.Session = null;\n\n    this.client = data.Pool.client;\n\n    this.signInUserSession = null;\n    this.authenticationFlowType = 'USER_SRP_AUTH';\n\n    this.storage = data.Storage || new StorageHelper().getStorage();\n\n    this.keyPrefix = 'CognitoIdentityServiceProvider.' + this.pool.getClientId();\n    this.userDataKey = this.keyPrefix + '.' + this.username + '.userData';\n  }\n\n  /**\n   * Sets the session for this user\n   * @param {CognitoUserSession} signInUserSession the session\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.setSignInUserSession = function setSignInUserSession(signInUserSession) {\n    this.clearCachedUserData();\n    this.signInUserSession = signInUserSession;\n    this.cacheTokens();\n  };\n\n  /**\n   * @returns {CognitoUserSession} the current session for this user\n   */\n\n\n  CognitoUser.prototype.getSignInUserSession = function getSignInUserSession() {\n    return this.signInUserSession;\n  };\n\n  /**\n   * @returns {string} the user's username\n   */\n\n\n  CognitoUser.prototype.getUsername = function getUsername() {\n    return this.username;\n  };\n\n  /**\n   * @returns {String} the authentication flow type\n   */\n\n\n  CognitoUser.prototype.getAuthenticationFlowType = function getAuthenticationFlowType() {\n    return this.authenticationFlowType;\n  };\n\n  /**\n   * sets authentication flow type\n   * @param {string} authenticationFlowType New value.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.setAuthenticationFlowType = function setAuthenticationFlowType(authenticationFlowType) {\n    this.authenticationFlowType = authenticationFlowType;\n  };\n\n  /**\n   * This is used for authenticating the user through the custom authentication flow.\n   * @param {AuthenticationDetails} authDetails Contains the authentication data\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {customChallenge} callback.customChallenge Custom challenge\n   *        response required to continue.\n   * @param {authSuccess} callback.onSuccess Called on success with the new session.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.initiateAuth = function initiateAuth(authDetails, callback) {\n    var _this = this;\n\n    var authParameters = authDetails.getAuthParameters();\n    authParameters.USERNAME = this.username;\n\n    var jsonReq = {\n      AuthFlow: 'CUSTOM_AUTH',\n      ClientId: this.pool.getClientId(),\n      AuthParameters: authParameters,\n      ClientMetadata: authDetails.getValidationData()\n    };\n    if (this.getUserContextData()) {\n      jsonReq.UserContextData = this.getUserContextData();\n    }\n\n    this.client.request('InitiateAuth', jsonReq, function (err, data) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n      var challengeName = data.ChallengeName;\n      var challengeParameters = data.ChallengeParameters;\n\n      if (challengeName === 'CUSTOM_CHALLENGE') {\n        _this.Session = data.Session;\n        return callback.customChallenge(challengeParameters);\n      }\n      _this.signInUserSession = _this.getCognitoUserSession(data.AuthenticationResult);\n      _this.cacheTokens();\n      return callback.onSuccess(_this.signInUserSession);\n    });\n  };\n\n  /**\n   * This is used for authenticating the user.\n   * stuff\n   * @param {AuthenticationDetails} authDetails Contains the authentication data\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {newPasswordRequired} callback.newPasswordRequired new\n   *        password and any required attributes are required to continue\n   * @param {mfaRequired} callback.mfaRequired MFA code\n   *        required to continue.\n   * @param {customChallenge} callback.customChallenge Custom challenge\n   *        response required to continue.\n   * @param {authSuccess} callback.onSuccess Called on success with the new session.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.authenticateUser = function authenticateUser(authDetails, callback) {\n    if (this.authenticationFlowType === 'USER_PASSWORD_AUTH') {\n      return this.authenticateUserPlainUsernamePassword(authDetails, callback);\n    } else if (this.authenticationFlowType === 'USER_SRP_AUTH' || this.authenticationFlowType === 'CUSTOM_AUTH') {\n      return this.authenticateUserDefaultAuth(authDetails, callback);\n    }\n    return callback.onFailure(new Error('Authentication flow type is invalid.'));\n  };\n\n  /**\n   * PRIVATE ONLY: This is an internal only method and should not\n   * be directly called by the consumers.\n   * It calls the AuthenticationHelper for SRP related\n   * stuff\n   * @param {AuthenticationDetails} authDetails Contains the authentication data\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {newPasswordRequired} callback.newPasswordRequired new\n   *        password and any required attributes are required to continue\n   * @param {mfaRequired} callback.mfaRequired MFA code\n   *        required to continue.\n   * @param {customChallenge} callback.customChallenge Custom challenge\n   *        response required to continue.\n   * @param {authSuccess} callback.onSuccess Called on success with the new session.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.authenticateUserDefaultAuth = function authenticateUserDefaultAuth(authDetails, callback) {\n    var _this2 = this;\n\n    var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n    var dateHelper = new DateHelper();\n\n    var serverBValue = void 0;\n    var salt = void 0;\n    var authParameters = {};\n\n    if (this.deviceKey != null) {\n      authParameters.DEVICE_KEY = this.deviceKey;\n    }\n\n    authParameters.USERNAME = this.username;\n    authenticationHelper.getLargeAValue(function (errOnAValue, aValue) {\n      // getLargeAValue callback start\n      if (errOnAValue) {\n        callback.onFailure(errOnAValue);\n      }\n\n      authParameters.SRP_A = aValue.toString(16);\n\n      if (_this2.authenticationFlowType === 'CUSTOM_AUTH') {\n        authParameters.CHALLENGE_NAME = 'SRP_A';\n      }\n\n      var jsonReq = {\n        AuthFlow: _this2.authenticationFlowType,\n        ClientId: _this2.pool.getClientId(),\n        AuthParameters: authParameters,\n        ClientMetadata: authDetails.getValidationData()\n      };\n      if (_this2.getUserContextData(_this2.username)) {\n        jsonReq.UserContextData = _this2.getUserContextData(_this2.username);\n      }\n\n      _this2.client.request('InitiateAuth', jsonReq, function (err, data) {\n        if (err) {\n          return callback.onFailure(err);\n        }\n\n        var challengeParameters = data.ChallengeParameters;\n\n        _this2.username = challengeParameters.USER_ID_FOR_SRP;\n        serverBValue = new BigInteger(challengeParameters.SRP_B, 16);\n        salt = new BigInteger(challengeParameters.SALT, 16);\n        _this2.getCachedDeviceKeyAndPassword();\n\n        authenticationHelper.getPasswordAuthenticationKey(_this2.username, authDetails.getPassword(), serverBValue, salt, function (errOnHkdf, hkdf) {\n          // getPasswordAuthenticationKey callback start\n          if (errOnHkdf) {\n            callback.onFailure(errOnHkdf);\n          }\n\n          var dateNow = dateHelper.getNowString();\n\n          var message = CryptoJS.lib.WordArray.create(Buffer.concat([Buffer.from(_this2.pool.getUserPoolId().split('_')[1], 'utf8'), Buffer.from(_this2.username, 'utf8'), Buffer.from(challengeParameters.SECRET_BLOCK, 'base64'), Buffer.from(dateNow, 'utf8')]));\n          var key = CryptoJS.lib.WordArray.create(hkdf);\n          var signatureString = Base64.stringify(HmacSHA256(message, key));\n\n          var challengeResponses = {};\n\n          challengeResponses.USERNAME = _this2.username;\n          challengeResponses.PASSWORD_CLAIM_SECRET_BLOCK = challengeParameters.SECRET_BLOCK;\n          challengeResponses.TIMESTAMP = dateNow;\n          challengeResponses.PASSWORD_CLAIM_SIGNATURE = signatureString;\n\n          if (_this2.deviceKey != null) {\n            challengeResponses.DEVICE_KEY = _this2.deviceKey;\n          }\n\n          var respondToAuthChallenge = function respondToAuthChallenge(challenge, challengeCallback) {\n            return _this2.client.request('RespondToAuthChallenge', challenge, function (errChallenge, dataChallenge) {\n              if (errChallenge && errChallenge.code === 'ResourceNotFoundException' && errChallenge.message.toLowerCase().indexOf('device') !== -1) {\n                challengeResponses.DEVICE_KEY = null;\n                _this2.deviceKey = null;\n                _this2.randomPassword = null;\n                _this2.deviceGroupKey = null;\n                _this2.clearCachedDeviceKeyAndPassword();\n                return respondToAuthChallenge(challenge, challengeCallback);\n              }\n              return challengeCallback(errChallenge, dataChallenge);\n            });\n          };\n\n          var jsonReqResp = {\n            ChallengeName: 'PASSWORD_VERIFIER',\n            ClientId: _this2.pool.getClientId(),\n            ChallengeResponses: challengeResponses,\n            Session: data.Session\n          };\n          if (_this2.getUserContextData()) {\n            jsonReqResp.UserContextData = _this2.getUserContextData();\n          }\n          respondToAuthChallenge(jsonReqResp, function (errAuthenticate, dataAuthenticate) {\n            if (errAuthenticate) {\n              return callback.onFailure(errAuthenticate);\n            }\n\n            return _this2.authenticateUserInternal(dataAuthenticate, authenticationHelper, callback);\n          });\n          return undefined;\n          // getPasswordAuthenticationKey callback end\n        });\n        return undefined;\n      });\n      // getLargeAValue callback end\n    });\n  };\n\n  /**\n   * PRIVATE ONLY: This is an internal only method and should not\n   * be directly called by the consumers.\n   * @param {AuthenticationDetails} authDetails Contains the authentication data.\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {mfaRequired} callback.mfaRequired MFA code\n   *        required to continue.\n   * @param {authSuccess} callback.onSuccess Called on success with the new session.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.authenticateUserPlainUsernamePassword = function authenticateUserPlainUsernamePassword(authDetails, callback) {\n    var _this3 = this;\n\n    var authParameters = {};\n    authParameters.USERNAME = this.username;\n    authParameters.PASSWORD = authDetails.getPassword();\n    if (!authParameters.PASSWORD) {\n      callback.onFailure(new Error('PASSWORD parameter is required'));\n      return;\n    }\n    var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n    this.getCachedDeviceKeyAndPassword();\n    if (this.deviceKey != null) {\n      authParameters.DEVICE_KEY = this.deviceKey;\n    }\n\n    var jsonReq = {\n      AuthFlow: 'USER_PASSWORD_AUTH',\n      ClientId: this.pool.getClientId(),\n      AuthParameters: authParameters,\n      ClientMetadata: authDetails.getValidationData()\n    };\n    if (this.getUserContextData(this.username)) {\n      jsonReq.UserContextData = this.getUserContextData(this.username);\n    }\n    // USER_PASSWORD_AUTH happens in a single round-trip: client sends userName and password,\n    // Cognito UserPools verifies password and returns tokens.\n    this.client.request('InitiateAuth', jsonReq, function (err, authResult) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n      return _this3.authenticateUserInternal(authResult, authenticationHelper, callback);\n    });\n  };\n\n  /**\n  * PRIVATE ONLY: This is an internal only method and should not\n  * be directly called by the consumers.\n  * @param {object} dataAuthenticate authentication data\n  * @param {object} authenticationHelper helper created\n  * @param {callback} callback passed on from caller\n  * @returns {void}\n  */\n\n\n  CognitoUser.prototype.authenticateUserInternal = function authenticateUserInternal(dataAuthenticate, authenticationHelper, callback) {\n    var _this4 = this;\n\n    var challengeName = dataAuthenticate.ChallengeName;\n    var challengeParameters = dataAuthenticate.ChallengeParameters;\n\n    if (challengeName === 'SMS_MFA') {\n      this.Session = dataAuthenticate.Session;\n      return callback.mfaRequired(challengeName, challengeParameters);\n    }\n\n    if (challengeName === 'SELECT_MFA_TYPE') {\n      this.Session = dataAuthenticate.Session;\n      return callback.selectMFAType(challengeName, challengeParameters);\n    }\n\n    if (challengeName === 'MFA_SETUP') {\n      this.Session = dataAuthenticate.Session;\n      return callback.mfaSetup(challengeName, challengeParameters);\n    }\n\n    if (challengeName === 'SOFTWARE_TOKEN_MFA') {\n      this.Session = dataAuthenticate.Session;\n      return callback.totpRequired(challengeName, challengeParameters);\n    }\n\n    if (challengeName === 'CUSTOM_CHALLENGE') {\n      this.Session = dataAuthenticate.Session;\n      return callback.customChallenge(challengeParameters);\n    }\n\n    if (challengeName === 'NEW_PASSWORD_REQUIRED') {\n      this.Session = dataAuthenticate.Session;\n\n      var userAttributes = null;\n      var rawRequiredAttributes = null;\n      var requiredAttributes = [];\n      var userAttributesPrefix = authenticationHelper.getNewPasswordRequiredChallengeUserAttributePrefix();\n\n      if (challengeParameters) {\n        userAttributes = JSON.parse(dataAuthenticate.ChallengeParameters.userAttributes);\n        rawRequiredAttributes = JSON.parse(dataAuthenticate.ChallengeParameters.requiredAttributes);\n      }\n\n      if (rawRequiredAttributes) {\n        for (var i = 0; i < rawRequiredAttributes.length; i++) {\n          requiredAttributes[i] = rawRequiredAttributes[i].substr(userAttributesPrefix.length);\n        }\n      }\n      return callback.newPasswordRequired(userAttributes, requiredAttributes);\n    }\n\n    if (challengeName === 'DEVICE_SRP_AUTH') {\n      this.getDeviceResponse(callback);\n      return undefined;\n    }\n\n    this.signInUserSession = this.getCognitoUserSession(dataAuthenticate.AuthenticationResult);\n    this.challengeName = challengeName;\n    this.cacheTokens();\n\n    var newDeviceMetadata = dataAuthenticate.AuthenticationResult.NewDeviceMetadata;\n    if (newDeviceMetadata == null) {\n      return callback.onSuccess(this.signInUserSession);\n    }\n\n    authenticationHelper.generateHashDevice(dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceGroupKey, dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey, function (errGenHash) {\n      if (errGenHash) {\n        return callback.onFailure(errGenHash);\n      }\n\n      var deviceSecretVerifierConfig = {\n        Salt: Buffer.from(authenticationHelper.getSaltDevices(), 'hex').toString('base64'),\n        PasswordVerifier: Buffer.from(authenticationHelper.getVerifierDevices(), 'hex').toString('base64')\n      };\n\n      _this4.verifierDevices = deviceSecretVerifierConfig.PasswordVerifier;\n      _this4.deviceGroupKey = newDeviceMetadata.DeviceGroupKey;\n      _this4.randomPassword = authenticationHelper.getRandomPassword();\n\n      _this4.client.request('ConfirmDevice', {\n        DeviceKey: newDeviceMetadata.DeviceKey,\n        AccessToken: _this4.signInUserSession.getAccessToken().getJwtToken(),\n        DeviceSecretVerifierConfig: deviceSecretVerifierConfig,\n        DeviceName: navigator.userAgent\n      }, function (errConfirm, dataConfirm) {\n        if (errConfirm) {\n          return callback.onFailure(errConfirm);\n        }\n\n        _this4.deviceKey = dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey;\n        _this4.cacheDeviceKeyAndPassword();\n        if (dataConfirm.UserConfirmationNecessary === true) {\n          return callback.onSuccess(_this4.signInUserSession, dataConfirm.UserConfirmationNecessary);\n        }\n        return callback.onSuccess(_this4.signInUserSession);\n      });\n      return undefined;\n    });\n    return undefined;\n  };\n\n  /**\n  * This method is user to complete the NEW_PASSWORD_REQUIRED challenge.\n  * Pass the new password with any new user attributes to be updated.\n  * User attribute keys must be of format userAttributes.<attribute_name>.\n  * @param {string} newPassword new password for this user\n  * @param {object} requiredAttributeData map with values for all required attributes\n  * @param {object} callback Result callback map.\n  * @param {onFailure} callback.onFailure Called on any error.\n  * @param {mfaRequired} callback.mfaRequired MFA code required to continue.\n  * @param {customChallenge} callback.customChallenge Custom challenge\n  *         response required to continue.\n  * @param {authSuccess} callback.onSuccess Called on success with the new session.\n  * @returns {void}\n  */\n\n\n  CognitoUser.prototype.completeNewPasswordChallenge = function completeNewPasswordChallenge(newPassword, requiredAttributeData, callback) {\n    var _this5 = this;\n\n    if (!newPassword) {\n      return callback.onFailure(new Error('New password is required.'));\n    }\n    var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n    var userAttributesPrefix = authenticationHelper.getNewPasswordRequiredChallengeUserAttributePrefix();\n\n    var finalUserAttributes = {};\n    if (requiredAttributeData) {\n      Object.keys(requiredAttributeData).forEach(function (key) {\n        finalUserAttributes[userAttributesPrefix + key] = requiredAttributeData[key];\n      });\n    }\n\n    finalUserAttributes.NEW_PASSWORD = newPassword;\n    finalUserAttributes.USERNAME = this.username;\n    var jsonReq = {\n      ChallengeName: 'NEW_PASSWORD_REQUIRED',\n      ClientId: this.pool.getClientId(),\n      ChallengeResponses: finalUserAttributes,\n      Session: this.Session\n    };\n    if (this.getUserContextData()) {\n      jsonReq.UserContextData = this.getUserContextData();\n    }\n\n    this.client.request('RespondToAuthChallenge', jsonReq, function (errAuthenticate, dataAuthenticate) {\n      if (errAuthenticate) {\n        return callback.onFailure(errAuthenticate);\n      }\n      return _this5.authenticateUserInternal(dataAuthenticate, authenticationHelper, callback);\n    });\n    return undefined;\n  };\n\n  /**\n   * This is used to get a session using device authentication. It is called at the end of user\n   * authentication\n   *\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {authSuccess} callback.onSuccess Called on success with the new session.\n   * @returns {void}\n   * @private\n   */\n\n\n  CognitoUser.prototype.getDeviceResponse = function getDeviceResponse(callback) {\n    var _this6 = this;\n\n    var authenticationHelper = new AuthenticationHelper(this.deviceGroupKey);\n    var dateHelper = new DateHelper();\n\n    var authParameters = {};\n\n    authParameters.USERNAME = this.username;\n    authParameters.DEVICE_KEY = this.deviceKey;\n    authenticationHelper.getLargeAValue(function (errAValue, aValue) {\n      // getLargeAValue callback start\n      if (errAValue) {\n        callback.onFailure(errAValue);\n      }\n\n      authParameters.SRP_A = aValue.toString(16);\n\n      var jsonReq = {\n        ChallengeName: 'DEVICE_SRP_AUTH',\n        ClientId: _this6.pool.getClientId(),\n        ChallengeResponses: authParameters\n      };\n      if (_this6.getUserContextData()) {\n        jsonReq.UserContextData = _this6.getUserContextData();\n      }\n      _this6.client.request('RespondToAuthChallenge', jsonReq, function (err, data) {\n        if (err) {\n          return callback.onFailure(err);\n        }\n\n        var challengeParameters = data.ChallengeParameters;\n\n        var serverBValue = new BigInteger(challengeParameters.SRP_B, 16);\n        var salt = new BigInteger(challengeParameters.SALT, 16);\n\n        authenticationHelper.getPasswordAuthenticationKey(_this6.deviceKey, _this6.randomPassword, serverBValue, salt, function (errHkdf, hkdf) {\n          // getPasswordAuthenticationKey callback start\n          if (errHkdf) {\n            return callback.onFailure(errHkdf);\n          }\n\n          var dateNow = dateHelper.getNowString();\n\n          var message = CryptoJS.lib.WordArray.create(Buffer.concat([Buffer.from(_this6.deviceGroupKey, 'utf8'), Buffer.from(_this6.deviceKey, 'utf8'), Buffer.from(challengeParameters.SECRET_BLOCK, 'base64'), Buffer.from(dateNow, 'utf8')]));\n          var key = CryptoJS.lib.WordArray.create(hkdf);\n          var signatureString = Base64.stringify(HmacSHA256(message, key));\n\n          var challengeResponses = {};\n\n          challengeResponses.USERNAME = _this6.username;\n          challengeResponses.PASSWORD_CLAIM_SECRET_BLOCK = challengeParameters.SECRET_BLOCK;\n          challengeResponses.TIMESTAMP = dateNow;\n          challengeResponses.PASSWORD_CLAIM_SIGNATURE = signatureString;\n          challengeResponses.DEVICE_KEY = _this6.deviceKey;\n\n          var jsonReqResp = {\n            ChallengeName: 'DEVICE_PASSWORD_VERIFIER',\n            ClientId: _this6.pool.getClientId(),\n            ChallengeResponses: challengeResponses,\n            Session: data.Session\n          };\n          if (_this6.getUserContextData()) {\n            jsonReqResp.UserContextData = _this6.getUserContextData();\n          }\n\n          _this6.client.request('RespondToAuthChallenge', jsonReqResp, function (errAuthenticate, dataAuthenticate) {\n            if (errAuthenticate) {\n              return callback.onFailure(errAuthenticate);\n            }\n\n            _this6.signInUserSession = _this6.getCognitoUserSession(dataAuthenticate.AuthenticationResult);\n            _this6.cacheTokens();\n\n            return callback.onSuccess(_this6.signInUserSession);\n          });\n          return undefined;\n          // getPasswordAuthenticationKey callback end\n        });\n        return undefined;\n      });\n      // getLargeAValue callback end\n    });\n  };\n\n  /**\n   * This is used for a certain user to confirm the registration by using a confirmation code\n   * @param {string} confirmationCode Code entered by user.\n   * @param {bool} forceAliasCreation Allow migrating from an existing email / phone number.\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.confirmRegistration = function confirmRegistration(confirmationCode, forceAliasCreation, callback) {\n    var jsonReq = {\n      ClientId: this.pool.getClientId(),\n      ConfirmationCode: confirmationCode,\n      Username: this.username,\n      ForceAliasCreation: forceAliasCreation\n    };\n    if (this.getUserContextData()) {\n      jsonReq.UserContextData = this.getUserContextData();\n    }\n    this.client.request('ConfirmSignUp', jsonReq, function (err) {\n      if (err) {\n        return callback(err, null);\n      }\n      return callback(null, 'SUCCESS');\n    });\n  };\n\n  /**\n   * This is used by the user once he has the responses to a custom challenge\n   * @param {string} answerChallenge The custom challenge answer.\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {customChallenge} callback.customChallenge\n   *    Custom challenge response required to continue.\n   * @param {authSuccess} callback.onSuccess Called on success with the new session.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.sendCustomChallengeAnswer = function sendCustomChallengeAnswer(answerChallenge, callback) {\n    var _this7 = this;\n\n    var challengeResponses = {};\n    challengeResponses.USERNAME = this.username;\n    challengeResponses.ANSWER = answerChallenge;\n\n    var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n    this.getCachedDeviceKeyAndPassword();\n    if (this.deviceKey != null) {\n      challengeResponses.DEVICE_KEY = this.deviceKey;\n    }\n\n    var jsonReq = {\n      ChallengeName: 'CUSTOM_CHALLENGE',\n      ChallengeResponses: challengeResponses,\n      ClientId: this.pool.getClientId(),\n      Session: this.Session\n    };\n    if (this.getUserContextData()) {\n      jsonReq.UserContextData = this.getUserContextData();\n    }\n    this.client.request('RespondToAuthChallenge', jsonReq, function (err, data) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n\n      return _this7.authenticateUserInternal(data, authenticationHelper, callback);\n    });\n  };\n\n  /**\n   * This is used by the user once he has an MFA code\n   * @param {string} confirmationCode The MFA code entered by the user.\n   * @param {object} callback Result callback map.\n   * @param {string} mfaType The mfa we are replying to.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {authSuccess} callback.onSuccess Called on success with the new session.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.sendMFACode = function sendMFACode(confirmationCode, callback, mfaType) {\n    var _this8 = this;\n\n    var challengeResponses = {};\n    challengeResponses.USERNAME = this.username;\n    challengeResponses.SMS_MFA_CODE = confirmationCode;\n    var mfaTypeSelection = mfaType || 'SMS_MFA';\n    if (mfaTypeSelection === 'SOFTWARE_TOKEN_MFA') {\n      challengeResponses.SOFTWARE_TOKEN_MFA_CODE = confirmationCode;\n    }\n\n    if (this.deviceKey != null) {\n      challengeResponses.DEVICE_KEY = this.deviceKey;\n    }\n\n    var jsonReq = {\n      ChallengeName: mfaTypeSelection,\n      ChallengeResponses: challengeResponses,\n      ClientId: this.pool.getClientId(),\n      Session: this.Session\n    };\n    if (this.getUserContextData()) {\n      jsonReq.UserContextData = this.getUserContextData();\n    }\n\n    this.client.request('RespondToAuthChallenge', jsonReq, function (err, dataAuthenticate) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n\n      var challengeName = dataAuthenticate.ChallengeName;\n\n      if (challengeName === 'DEVICE_SRP_AUTH') {\n        _this8.getDeviceResponse(callback);\n        return undefined;\n      }\n\n      _this8.signInUserSession = _this8.getCognitoUserSession(dataAuthenticate.AuthenticationResult);\n      _this8.cacheTokens();\n\n      if (dataAuthenticate.AuthenticationResult.NewDeviceMetadata == null) {\n        return callback.onSuccess(_this8.signInUserSession);\n      }\n\n      var authenticationHelper = new AuthenticationHelper(_this8.pool.getUserPoolId().split('_')[1]);\n      authenticationHelper.generateHashDevice(dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceGroupKey, dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey, function (errGenHash) {\n        if (errGenHash) {\n          return callback.onFailure(errGenHash);\n        }\n\n        var deviceSecretVerifierConfig = {\n          Salt: Buffer.from(authenticationHelper.getSaltDevices(), 'hex').toString('base64'),\n          PasswordVerifier: Buffer.from(authenticationHelper.getVerifierDevices(), 'hex').toString('base64')\n        };\n\n        _this8.verifierDevices = deviceSecretVerifierConfig.PasswordVerifier;\n        _this8.deviceGroupKey = dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceGroupKey;\n        _this8.randomPassword = authenticationHelper.getRandomPassword();\n\n        _this8.client.request('ConfirmDevice', {\n          DeviceKey: dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey,\n          AccessToken: _this8.signInUserSession.getAccessToken().getJwtToken(),\n          DeviceSecretVerifierConfig: deviceSecretVerifierConfig,\n          DeviceName: navigator.userAgent\n        }, function (errConfirm, dataConfirm) {\n          if (errConfirm) {\n            return callback.onFailure(errConfirm);\n          }\n\n          _this8.deviceKey = dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey;\n          _this8.cacheDeviceKeyAndPassword();\n          if (dataConfirm.UserConfirmationNecessary === true) {\n            return callback.onSuccess(_this8.signInUserSession, dataConfirm.UserConfirmationNecessary);\n          }\n          return callback.onSuccess(_this8.signInUserSession);\n        });\n        return undefined;\n      });\n      return undefined;\n    });\n  };\n\n  /**\n   * This is used by an authenticated user to change the current password\n   * @param {string} oldUserPassword The current password.\n   * @param {string} newUserPassword The requested new password.\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.changePassword = function changePassword(oldUserPassword, newUserPassword, callback) {\n    if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n      return callback(new Error('User is not authenticated'), null);\n    }\n\n    this.client.request('ChangePassword', {\n      PreviousPassword: oldUserPassword,\n      ProposedPassword: newUserPassword,\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n    }, function (err) {\n      if (err) {\n        return callback(err, null);\n      }\n      return callback(null, 'SUCCESS');\n    });\n    return undefined;\n  };\n\n  /**\n   * This is used by an authenticated user to enable MFA for itself\n   * @deprecated\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.enableMFA = function enableMFA(callback) {\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback(new Error('User is not authenticated'), null);\n    }\n\n    var mfaOptions = [];\n    var mfaEnabled = {\n      DeliveryMedium: 'SMS',\n      AttributeName: 'phone_number'\n    };\n    mfaOptions.push(mfaEnabled);\n\n    this.client.request('SetUserSettings', {\n      MFAOptions: mfaOptions,\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n    }, function (err) {\n      if (err) {\n        return callback(err, null);\n      }\n      return callback(null, 'SUCCESS');\n    });\n    return undefined;\n  };\n\n  /**\n   * This is used by an authenticated user to enable MFA for itself\n   * @param {IMfaSettings} smsMfaSettings the sms mfa settings\n   * @param {IMFASettings} softwareTokenMfaSettings the software token mfa settings\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.setUserMfaPreference = function setUserMfaPreference(smsMfaSettings, softwareTokenMfaSettings, callback) {\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback(new Error('User is not authenticated'), null);\n    }\n\n    this.client.request('SetUserMFAPreference', {\n      SMSMfaSettings: smsMfaSettings,\n      SoftwareTokenMfaSettings: softwareTokenMfaSettings,\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n    }, function (err) {\n      if (err) {\n        return callback(err, null);\n      }\n      return callback(null, 'SUCCESS');\n    });\n    return undefined;\n  };\n\n  /**\n   * This is used by an authenticated user to disable MFA for itself\n   * @deprecated\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.disableMFA = function disableMFA(callback) {\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback(new Error('User is not authenticated'), null);\n    }\n\n    var mfaOptions = [];\n\n    this.client.request('SetUserSettings', {\n      MFAOptions: mfaOptions,\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n    }, function (err) {\n      if (err) {\n        return callback(err, null);\n      }\n      return callback(null, 'SUCCESS');\n    });\n    return undefined;\n  };\n\n  /**\n   * This is used by an authenticated user to delete itself\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.deleteUser = function deleteUser(callback) {\n    var _this9 = this;\n\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback(new Error('User is not authenticated'), null);\n    }\n\n    this.client.request('DeleteUser', {\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n    }, function (err) {\n      if (err) {\n        return callback(err, null);\n      }\n      _this9.clearCachedUser();\n      return callback(null, 'SUCCESS');\n    });\n    return undefined;\n  };\n\n  /**\n   * @typedef {CognitoUserAttribute | { Name:string, Value:string }} AttributeArg\n   */\n  /**\n   * This is used by an authenticated user to change a list of attributes\n   * @param {AttributeArg[]} attributes A list of the new user attributes.\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.updateAttributes = function updateAttributes(attributes, callback) {\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback(new Error('User is not authenticated'), null);\n    }\n\n    this.client.request('UpdateUserAttributes', {\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n      UserAttributes: attributes\n    }, function (err) {\n      if (err) {\n        return callback(err, null);\n      }\n      return callback(null, 'SUCCESS');\n    });\n    return undefined;\n  };\n\n  /**\n   * This is used by an authenticated user to get a list of attributes\n   * @param {nodeCallback<CognitoUserAttribute[]>} callback Called on success or error.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.getUserAttributes = function getUserAttributes(callback) {\n    if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n      return callback(new Error('User is not authenticated'), null);\n    }\n\n    this.client.request('GetUser', {\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n    }, function (err, userData) {\n      if (err) {\n        return callback(err, null);\n      }\n\n      var attributeList = [];\n\n      for (var i = 0; i < userData.UserAttributes.length; i++) {\n        var attribute = {\n          Name: userData.UserAttributes[i].Name,\n          Value: userData.UserAttributes[i].Value\n        };\n        var userAttribute = new CognitoUserAttribute(attribute);\n        attributeList.push(userAttribute);\n      }\n\n      return callback(null, attributeList);\n    });\n    return undefined;\n  };\n\n  /**\n   * This is used by an authenticated user to get the MFAOptions\n   * @param {nodeCallback<MFAOptions>} callback Called on success or error.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.getMFAOptions = function getMFAOptions(callback) {\n    if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n      return callback(new Error('User is not authenticated'), null);\n    }\n\n    this.client.request('GetUser', {\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n    }, function (err, userData) {\n      if (err) {\n        return callback(err, null);\n      }\n\n      return callback(null, userData.MFAOptions);\n    });\n    return undefined;\n  };\n\n  /**\n   * This is used by an authenticated users to get the userData\n   * @param {nodeCallback<UserData>} callback Called on success or error.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.getUserData = function getUserData(callback, params) {\n    var _this10 = this;\n\n    if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n      this.clearCachedUserData();\n      return callback(new Error('User is not authenticated'), null);\n    }\n\n    var bypassCache = params ? params.bypassCache : false;\n\n    var userData = this.storage.getItem(this.userDataKey);\n    // get the cached user data\n\n    if (!userData || bypassCache) {\n      this.client.request('GetUser', {\n        AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n      }, function (err, latestUserData) {\n        if (err) {\n          return callback(err, null);\n        }\n        _this10.cacheUserData(latestUserData);\n        var refresh = _this10.signInUserSession.getRefreshToken();\n        if (refresh && refresh.getToken()) {\n          _this10.refreshSession(refresh, function (refreshError, data) {\n            if (refreshError) {\n              return callback(refreshError, null);\n            }\n            return callback(null, latestUserData);\n          });\n        } else {\n          return callback(null, latestUserData);\n        }\n      });\n    } else {\n      try {\n        return callback(null, JSON.parse(userData));\n      } catch (err) {\n        this.clearCachedUserData();\n        return callback(err, null);\n      }\n    }\n    return undefined;\n  };\n\n  /**\n   * This is used by an authenticated user to delete a list of attributes\n   * @param {string[]} attributeList Names of the attributes to delete.\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.deleteAttributes = function deleteAttributes(attributeList, callback) {\n    if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n      return callback(new Error('User is not authenticated'), null);\n    }\n\n    this.client.request('DeleteUserAttributes', {\n      UserAttributeNames: attributeList,\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n    }, function (err) {\n      if (err) {\n        return callback(err, null);\n      }\n      return callback(null, 'SUCCESS');\n    });\n    return undefined;\n  };\n\n  /**\n   * This is used by a user to resend a confirmation code\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.resendConfirmationCode = function resendConfirmationCode(callback) {\n    var jsonReq = {\n      ClientId: this.pool.getClientId(),\n      Username: this.username\n    };\n\n    this.client.request('ResendConfirmationCode', jsonReq, function (err, result) {\n      if (err) {\n        return callback(err, null);\n      }\n      return callback(null, result);\n    });\n  };\n\n  /**\n   * This is used to get a session, either from the session object\n   * or from  the local storage, or by using a refresh token\n   *\n   * @param {nodeCallback<CognitoUserSession>} callback Called on success or error.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.getSession = function getSession(callback) {\n    if (this.username == null) {\n      return callback(new Error('Username is null. Cannot retrieve a new session'), null);\n    }\n\n    if (this.signInUserSession != null && this.signInUserSession.isValid()) {\n      return callback(null, this.signInUserSession);\n    }\n\n    var keyPrefix = 'CognitoIdentityServiceProvider.' + this.pool.getClientId() + '.' + this.username;\n    var idTokenKey = keyPrefix + '.idToken';\n    var accessTokenKey = keyPrefix + '.accessToken';\n    var refreshTokenKey = keyPrefix + '.refreshToken';\n    var clockDriftKey = keyPrefix + '.clockDrift';\n\n    if (this.storage.getItem(idTokenKey)) {\n      var idToken = new CognitoIdToken({\n        IdToken: this.storage.getItem(idTokenKey)\n      });\n      var accessToken = new CognitoAccessToken({\n        AccessToken: this.storage.getItem(accessTokenKey)\n      });\n      var refreshToken = new CognitoRefreshToken({\n        RefreshToken: this.storage.getItem(refreshTokenKey)\n      });\n      var clockDrift = parseInt(this.storage.getItem(clockDriftKey), 0) || 0;\n\n      var sessionData = {\n        IdToken: idToken,\n        AccessToken: accessToken,\n        RefreshToken: refreshToken,\n        ClockDrift: clockDrift\n      };\n      var cachedSession = new CognitoUserSession(sessionData);\n      if (cachedSession.isValid()) {\n        this.signInUserSession = cachedSession;\n        return callback(null, this.signInUserSession);\n      }\n\n      if (!refreshToken.getToken()) {\n        return callback(new Error('Cannot retrieve a new session. Please authenticate.'), null);\n      }\n\n      this.refreshSession(refreshToken, callback);\n    } else {\n      callback(new Error('Local storage is missing an ID Token, Please authenticate'), null);\n    }\n\n    return undefined;\n  };\n\n  /**\n   * This uses the refreshToken to retrieve a new session\n   * @param {CognitoRefreshToken} refreshToken A previous session's refresh token.\n   * @param {nodeCallback<CognitoUserSession>} callback Called on success or error.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.refreshSession = function refreshSession(refreshToken, callback) {\n    var _this11 = this;\n\n    var authParameters = {};\n    authParameters.REFRESH_TOKEN = refreshToken.getToken();\n    var keyPrefix = 'CognitoIdentityServiceProvider.' + this.pool.getClientId();\n    var lastUserKey = keyPrefix + '.LastAuthUser';\n\n    if (this.storage.getItem(lastUserKey)) {\n      this.username = this.storage.getItem(lastUserKey);\n      var deviceKeyKey = keyPrefix + '.' + this.username + '.deviceKey';\n      this.deviceKey = this.storage.getItem(deviceKeyKey);\n      authParameters.DEVICE_KEY = this.deviceKey;\n    }\n\n    var jsonReq = {\n      ClientId: this.pool.getClientId(),\n      AuthFlow: 'REFRESH_TOKEN_AUTH',\n      AuthParameters: authParameters\n    };\n    if (this.getUserContextData()) {\n      jsonReq.UserContextData = this.getUserContextData();\n    }\n    this.client.request('InitiateAuth', jsonReq, function (err, authResult) {\n      if (err) {\n        if (err.code === 'NotAuthorizedException') {\n          _this11.clearCachedUser();\n        }\n        return callback(err, null);\n      }\n      if (authResult) {\n        var authenticationResult = authResult.AuthenticationResult;\n        if (!Object.prototype.hasOwnProperty.call(authenticationResult, 'RefreshToken')) {\n          authenticationResult.RefreshToken = refreshToken.getToken();\n        }\n        _this11.signInUserSession = _this11.getCognitoUserSession(authenticationResult);\n        _this11.cacheTokens();\n        return callback(null, _this11.signInUserSession);\n      }\n      return undefined;\n    });\n  };\n\n  /**\n   * This is used to save the session tokens to local storage\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.cacheTokens = function cacheTokens() {\n    var keyPrefix = 'CognitoIdentityServiceProvider.' + this.pool.getClientId();\n    var idTokenKey = keyPrefix + '.' + this.username + '.idToken';\n    var accessTokenKey = keyPrefix + '.' + this.username + '.accessToken';\n    var refreshTokenKey = keyPrefix + '.' + this.username + '.refreshToken';\n    var clockDriftKey = keyPrefix + '.' + this.username + '.clockDrift';\n    var lastUserKey = keyPrefix + '.LastAuthUser';\n\n    this.storage.setItem(idTokenKey, this.signInUserSession.getIdToken().getJwtToken());\n    this.storage.setItem(accessTokenKey, this.signInUserSession.getAccessToken().getJwtToken());\n    this.storage.setItem(refreshTokenKey, this.signInUserSession.getRefreshToken().getToken());\n    this.storage.setItem(clockDriftKey, '' + this.signInUserSession.getClockDrift());\n    this.storage.setItem(lastUserKey, this.username);\n  };\n\n  /**\n   * This is to cache user data\n   */\n\n\n  CognitoUser.prototype.cacheUserData = function cacheUserData(userData) {\n    this.storage.setItem(this.userDataKey, JSON.stringify(userData));\n  };\n\n  /**\n   * This is to remove cached user data\n   */\n\n\n  CognitoUser.prototype.clearCachedUserData = function clearCachedUserData() {\n    this.storage.removeItem(this.userDataKey);\n  };\n\n  CognitoUser.prototype.clearCachedUser = function clearCachedUser() {\n    this.clearCachedTokens();\n    this.clearCachedUserData();\n  };\n\n  /**\n   * This is used to cache the device key and device group and device password\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.cacheDeviceKeyAndPassword = function cacheDeviceKeyAndPassword() {\n    var keyPrefix = 'CognitoIdentityServiceProvider.' + this.pool.getClientId() + '.' + this.username;\n    var deviceKeyKey = keyPrefix + '.deviceKey';\n    var randomPasswordKey = keyPrefix + '.randomPasswordKey';\n    var deviceGroupKeyKey = keyPrefix + '.deviceGroupKey';\n\n    this.storage.setItem(deviceKeyKey, this.deviceKey);\n    this.storage.setItem(randomPasswordKey, this.randomPassword);\n    this.storage.setItem(deviceGroupKeyKey, this.deviceGroupKey);\n  };\n\n  /**\n   * This is used to get current device key and device group and device password\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.getCachedDeviceKeyAndPassword = function getCachedDeviceKeyAndPassword() {\n    var keyPrefix = 'CognitoIdentityServiceProvider.' + this.pool.getClientId() + '.' + this.username;\n    var deviceKeyKey = keyPrefix + '.deviceKey';\n    var randomPasswordKey = keyPrefix + '.randomPasswordKey';\n    var deviceGroupKeyKey = keyPrefix + '.deviceGroupKey';\n\n    if (this.storage.getItem(deviceKeyKey)) {\n      this.deviceKey = this.storage.getItem(deviceKeyKey);\n      this.randomPassword = this.storage.getItem(randomPasswordKey);\n      this.deviceGroupKey = this.storage.getItem(deviceGroupKeyKey);\n    }\n  };\n\n  /**\n   * This is used to clear the device key info from local storage\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.clearCachedDeviceKeyAndPassword = function clearCachedDeviceKeyAndPassword() {\n    var keyPrefix = 'CognitoIdentityServiceProvider.' + this.pool.getClientId() + '.' + this.username;\n    var deviceKeyKey = keyPrefix + '.deviceKey';\n    var randomPasswordKey = keyPrefix + '.randomPasswordKey';\n    var deviceGroupKeyKey = keyPrefix + '.deviceGroupKey';\n\n    this.storage.removeItem(deviceKeyKey);\n    this.storage.removeItem(randomPasswordKey);\n    this.storage.removeItem(deviceGroupKeyKey);\n  };\n\n  /**\n   * This is used to clear the session tokens from local storage\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.clearCachedTokens = function clearCachedTokens() {\n    var keyPrefix = 'CognitoIdentityServiceProvider.' + this.pool.getClientId();\n    var idTokenKey = keyPrefix + '.' + this.username + '.idToken';\n    var accessTokenKey = keyPrefix + '.' + this.username + '.accessToken';\n    var refreshTokenKey = keyPrefix + '.' + this.username + '.refreshToken';\n    var lastUserKey = keyPrefix + '.LastAuthUser';\n    var clockDriftKey = keyPrefix + '.' + this.username + '.clockDrift';\n\n    this.storage.removeItem(idTokenKey);\n    this.storage.removeItem(accessTokenKey);\n    this.storage.removeItem(refreshTokenKey);\n    this.storage.removeItem(lastUserKey);\n    this.storage.removeItem(clockDriftKey);\n  };\n\n  /**\n   * This is used to build a user session from tokens retrieved in the authentication result\n   * @param {object} authResult Successful auth response from server.\n   * @returns {CognitoUserSession} The new user session.\n   * @private\n   */\n\n\n  CognitoUser.prototype.getCognitoUserSession = function getCognitoUserSession(authResult) {\n    var idToken = new CognitoIdToken(authResult);\n    var accessToken = new CognitoAccessToken(authResult);\n    var refreshToken = new CognitoRefreshToken(authResult);\n\n    var sessionData = {\n      IdToken: idToken,\n      AccessToken: accessToken,\n      RefreshToken: refreshToken\n    };\n\n    return new CognitoUserSession(sessionData);\n  };\n\n  /**\n   * This is used to initiate a forgot password request\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {inputVerificationCode?} callback.inputVerificationCode\n   *    Optional callback raised instead of onSuccess with response data.\n   * @param {onSuccess} callback.onSuccess Called on success.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.forgotPassword = function forgotPassword(callback) {\n    var jsonReq = {\n      ClientId: this.pool.getClientId(),\n      Username: this.username\n    };\n    if (this.getUserContextData()) {\n      jsonReq.UserContextData = this.getUserContextData();\n    }\n    this.client.request('ForgotPassword', jsonReq, function (err, data) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n      if (typeof callback.inputVerificationCode === 'function') {\n        return callback.inputVerificationCode(data);\n      }\n      return callback.onSuccess(data);\n    });\n  };\n\n  /**\n   * This is used to confirm a new password using a confirmationCode\n   * @param {string} confirmationCode Code entered by user.\n   * @param {string} newPassword Confirm new password.\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {onSuccess<void>} callback.onSuccess Called on success.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.confirmPassword = function confirmPassword(confirmationCode, newPassword, callback) {\n    var jsonReq = {\n      ClientId: this.pool.getClientId(),\n      Username: this.username,\n      ConfirmationCode: confirmationCode,\n      Password: newPassword\n    };\n    if (this.getUserContextData()) {\n      jsonReq.UserContextData = this.getUserContextData();\n    }\n    this.client.request('ConfirmForgotPassword', jsonReq, function (err) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n      return callback.onSuccess();\n    });\n  };\n\n  /**\n   * This is used to initiate an attribute confirmation request\n   * @param {string} attributeName User attribute that needs confirmation.\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {inputVerificationCode} callback.inputVerificationCode Called on success.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.getAttributeVerificationCode = function getAttributeVerificationCode(attributeName, callback) {\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback.onFailure(new Error('User is not authenticated'));\n    }\n\n    this.client.request('GetUserAttributeVerificationCode', {\n      AttributeName: attributeName,\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n    }, function (err, data) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n      if (typeof callback.inputVerificationCode === 'function') {\n        return callback.inputVerificationCode(data);\n      }\n      return callback.onSuccess();\n    });\n    return undefined;\n  };\n\n  /**\n   * This is used to confirm an attribute using a confirmation code\n   * @param {string} attributeName Attribute being confirmed.\n   * @param {string} confirmationCode Code entered by user.\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {onSuccess<string>} callback.onSuccess Called on success.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.verifyAttribute = function verifyAttribute(attributeName, confirmationCode, callback) {\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback.onFailure(new Error('User is not authenticated'));\n    }\n\n    this.client.request('VerifyUserAttribute', {\n      AttributeName: attributeName,\n      Code: confirmationCode,\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n    }, function (err) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n      return callback.onSuccess('SUCCESS');\n    });\n    return undefined;\n  };\n\n  /**\n   * This is used to get the device information using the current device key\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {onSuccess<*>} callback.onSuccess Called on success with device data.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.getDevice = function getDevice(callback) {\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback.onFailure(new Error('User is not authenticated'));\n    }\n\n    this.client.request('GetDevice', {\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n      DeviceKey: this.deviceKey\n    }, function (err, data) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n      return callback.onSuccess(data);\n    });\n    return undefined;\n  };\n\n  /**\n   * This is used to forget a specific device\n   * @param {string} deviceKey Device key.\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {onSuccess<string>} callback.onSuccess Called on success.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.forgetSpecificDevice = function forgetSpecificDevice(deviceKey, callback) {\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback.onFailure(new Error('User is not authenticated'));\n    }\n\n    this.client.request('ForgetDevice', {\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n      DeviceKey: deviceKey\n    }, function (err) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n      return callback.onSuccess('SUCCESS');\n    });\n    return undefined;\n  };\n\n  /**\n   * This is used to forget the current device\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {onSuccess<string>} callback.onSuccess Called on success.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.forgetDevice = function forgetDevice(callback) {\n    var _this12 = this;\n\n    this.forgetSpecificDevice(this.deviceKey, {\n      onFailure: callback.onFailure,\n      onSuccess: function onSuccess(result) {\n        _this12.deviceKey = null;\n        _this12.deviceGroupKey = null;\n        _this12.randomPassword = null;\n        _this12.clearCachedDeviceKeyAndPassword();\n        return callback.onSuccess(result);\n      }\n    });\n  };\n\n  /**\n   * This is used to set the device status as remembered\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {onSuccess<string>} callback.onSuccess Called on success.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.setDeviceStatusRemembered = function setDeviceStatusRemembered(callback) {\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback.onFailure(new Error('User is not authenticated'));\n    }\n\n    this.client.request('UpdateDeviceStatus', {\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n      DeviceKey: this.deviceKey,\n      DeviceRememberedStatus: 'remembered'\n    }, function (err) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n      return callback.onSuccess('SUCCESS');\n    });\n    return undefined;\n  };\n\n  /**\n   * This is used to set the device status as not remembered\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {onSuccess<string>} callback.onSuccess Called on success.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.setDeviceStatusNotRemembered = function setDeviceStatusNotRemembered(callback) {\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback.onFailure(new Error('User is not authenticated'));\n    }\n\n    this.client.request('UpdateDeviceStatus', {\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n      DeviceKey: this.deviceKey,\n      DeviceRememberedStatus: 'not_remembered'\n    }, function (err) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n      return callback.onSuccess('SUCCESS');\n    });\n    return undefined;\n  };\n\n  /**\n   * This is used to list all devices for a user\n   *\n   * @param {int} limit the number of devices returned in a call\n   * @param {string} paginationToken the pagination token in case any was returned before\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {onSuccess<*>} callback.onSuccess Called on success with device list.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.listDevices = function listDevices(limit, paginationToken, callback) {\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback.onFailure(new Error('User is not authenticated'));\n    }\n\n    this.client.request('ListDevices', {\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n      Limit: limit,\n      PaginationToken: paginationToken\n    }, function (err, data) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n      return callback.onSuccess(data);\n    });\n    return undefined;\n  };\n\n  /**\n   * This is used to globally revoke all tokens issued to a user\n   * @param {object} callback Result callback map.\n   * @param {onFailure} callback.onFailure Called on any error.\n   * @param {onSuccess<string>} callback.onSuccess Called on success.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.globalSignOut = function globalSignOut(callback) {\n    var _this13 = this;\n\n    if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n      return callback.onFailure(new Error('User is not authenticated'));\n    }\n\n    this.client.request('GlobalSignOut', {\n      AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n    }, function (err) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n      _this13.clearCachedUser();\n      return callback.onSuccess('SUCCESS');\n    });\n    return undefined;\n  };\n\n  /**\n   * This is used for the user to signOut of the application and clear the cached tokens.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.signOut = function signOut() {\n    this.signInUserSession = null;\n    this.clearCachedUser();\n  };\n\n  /**\n   * This is used by a user trying to select a given MFA\n   * @param {string} answerChallenge the mfa the user wants\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.sendMFASelectionAnswer = function sendMFASelectionAnswer(answerChallenge, callback) {\n    var _this14 = this;\n\n    var challengeResponses = {};\n    challengeResponses.USERNAME = this.username;\n    challengeResponses.ANSWER = answerChallenge;\n\n    var jsonReq = {\n      ChallengeName: 'SELECT_MFA_TYPE',\n      ChallengeResponses: challengeResponses,\n      ClientId: this.pool.getClientId(),\n      Session: this.Session\n    };\n    if (this.getUserContextData()) {\n      jsonReq.UserContextData = this.getUserContextData();\n    }\n    this.client.request('RespondToAuthChallenge', jsonReq, function (err, data) {\n      if (err) {\n        return callback.onFailure(err);\n      }\n      _this14.Session = data.Session;\n      if (answerChallenge === 'SMS_MFA') {\n        return callback.mfaRequired(data.challengeName, data.challengeParameters);\n      }\n      if (answerChallenge === 'SOFTWARE_TOKEN_MFA') {\n        return callback.totpRequired(data.challengeName, data.challengeParameters);\n      }\n      return undefined;\n    });\n  };\n\n  /**\n   * This returns the user context data for advanced security feature.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.getUserContextData = function getUserContextData() {\n    var pool = this.pool;\n    return pool.getUserContextData(this.username);\n  };\n\n  /**\n   * This is used by an authenticated or a user trying to authenticate to associate a TOTP MFA\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.associateSoftwareToken = function associateSoftwareToken(callback) {\n    var _this15 = this;\n\n    if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n      this.client.request('AssociateSoftwareToken', {\n        Session: this.Session\n      }, function (err, data) {\n        if (err) {\n          return callback.onFailure(err);\n        }\n        _this15.Session = data.Session;\n        return callback.associateSecretCode(data.SecretCode);\n      });\n    } else {\n      this.client.request('AssociateSoftwareToken', {\n        AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n      }, function (err, data) {\n        if (err) {\n          return callback.onFailure(err);\n        }\n        return callback.associateSecretCode(data.SecretCode);\n      });\n    }\n  };\n\n  /**\n   * This is used by an authenticated or a user trying to authenticate to verify a TOTP MFA\n   * @param {string} totpCode The MFA code entered by the user.\n   * @param {string} friendlyDeviceName The device name we are assigning to the device.\n   * @param {nodeCallback<string>} callback Called on success or error.\n   * @returns {void}\n   */\n\n\n  CognitoUser.prototype.verifySoftwareToken = function verifySoftwareToken(totpCode, friendlyDeviceName, callback) {\n    var _this16 = this;\n\n    if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n      this.client.request('VerifySoftwareToken', {\n        Session: this.Session,\n        UserCode: totpCode,\n        FriendlyDeviceName: friendlyDeviceName\n      }, function (err, data) {\n        if (err) {\n          return callback.onFailure(err);\n        }\n        _this16.Session = data.Session;\n        var challengeResponses = {};\n        challengeResponses.USERNAME = _this16.username;\n        var jsonReq = {\n          ChallengeName: 'MFA_SETUP',\n          ClientId: _this16.pool.getClientId(),\n          ChallengeResponses: challengeResponses,\n          Session: _this16.Session\n        };\n        if (_this16.getUserContextData()) {\n          jsonReq.UserContextData = _this16.getUserContextData();\n        }\n        _this16.client.request('RespondToAuthChallenge', jsonReq, function (errRespond, dataRespond) {\n          if (errRespond) {\n            return callback.onFailure(errRespond);\n          }\n          _this16.signInUserSession = _this16.getCognitoUserSession(dataRespond.AuthenticationResult);\n          _this16.cacheTokens();\n          return callback.onSuccess(_this16.signInUserSession);\n        });\n        return undefined;\n      });\n    } else {\n      this.client.request('VerifySoftwareToken', {\n        AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n        UserCode: totpCode,\n        FriendlyDeviceName: friendlyDeviceName\n      }, function (err, data) {\n        if (err) {\n          return callback.onFailure(err);\n        }\n        return callback.onSuccess(data);\n      });\n    }\n  };\n\n  return CognitoUser;\n}();\n\nexport default CognitoUser;","// class for defining the amzn user-agent\nexport default UserAgent;\n// constructor\nfunction UserAgent() {}\n// public\nUserAgent.prototype.userAgent = 'aws-amplify/0.1.x js';","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport UserAgent from './UserAgent';\n/** @class */\n\nvar Client = function () {\n  /**\n   * Constructs a new AWS Cognito Identity Provider client object\n   * @param {string} region AWS region\n   * @param {string} endpoint endpoint\n   */\n  function Client(region, endpoint) {\n    _classCallCheck(this, Client);\n\n    this.endpoint = endpoint || 'https://cognito-idp.' + region + '.amazonaws.com/';\n    this.userAgent = UserAgent.prototype.userAgent || 'aws-amplify/0.1.x js';\n  }\n\n  /**\n   * Makes an unauthenticated request on AWS Cognito Identity Provider API\n   * using fetch\n   * @param {string} operation API operation\n   * @param {object} params Input parameters\n   * @param {function} callback Callback called when a response is returned\n   * @returns {void}\n  */\n\n\n  Client.prototype.request = function request(operation, params, callback) {\n    var headers = {\n      'Content-Type': 'application/x-amz-json-1.1',\n      'X-Amz-Target': 'AWSCognitoIdentityProviderService.' + operation,\n      'X-Amz-User-Agent': this.userAgent\n    };\n\n    var options = {\n      headers: headers,\n      method: 'POST',\n      mode: 'cors',\n      cache: 'no-cache',\n      body: JSON.stringify(params)\n    };\n\n    var response = void 0;\n    var responseJsonData = void 0;\n\n    fetch(this.endpoint, options).then(function (resp) {\n      response = resp;\n      return resp;\n    }, function (err) {\n      // If error happens here, the request failed\n      // if it is TypeError throw network error\n      if (err instanceof TypeError) {\n        throw new Error('Network error');\n      }\n      throw err;\n    }).then(function (resp) {\n      return resp.json().catch(function () {\n        return {};\n      });\n    }).then(function (data) {\n      // return parsed body stream\n      if (response.ok) return callback(null, data);\n      responseJsonData = data;\n\n      // Taken from aws-sdk-js/lib/protocol/json.js\n      // eslint-disable-next-line no-underscore-dangle\n      var code = (data.__type || data.code).split('#').pop();\n      var error = {\n        code: code,\n        name: code,\n        message: data.message || data.Message || null\n      };\n      return callback(error);\n    }).catch(function (err) {\n      // first check if we have a service error\n      if (response && response.headers && response.headers.get('x-amzn-errortype')) {\n        try {\n          var code = response.headers.get('x-amzn-errortype').split(':')[0];\n          var error = {\n            code: code,\n            name: code,\n            statusCode: response.status,\n            message: response.status ? response.status.toString() : null\n          };\n          return callback(error);\n        } catch (ex) {\n          return callback(err);\n        }\n        // otherwise check if error is Network error\n      } else if (err instanceof Error && err.message === 'Network error') {\n        var _error = {\n          code: 'NetworkError',\n          name: err.name,\n          message: err.message\n        };\n        return callback(_error);\n      } else {\n        return callback(err);\n      }\n    });\n  };\n\n  return Client;\n}();\n\nexport default Client;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Client from './Client';\nimport CognitoUser from './CognitoUser';\nimport StorageHelper from './StorageHelper';\n\n/** @class */\n\nvar CognitoUserPool = function () {\n  /**\n   * Constructs a new CognitoUserPool object\n   * @param {object} data Creation options.\n   * @param {string} data.UserPoolId Cognito user pool id.\n   * @param {string} data.ClientId User pool application client id.\n   * @param {object} data.Storage Optional storage object.\n   * @param {boolean} data.AdvancedSecurityDataCollectionFlag Optional:\n   *        boolean flag indicating if the data collection is enabled\n   *        to support cognito advanced security features. By default, this\n   *        flag is set to true.\n   */\n  function CognitoUserPool(data) {\n    _classCallCheck(this, CognitoUserPool);\n\n    var _ref = data || {},\n        UserPoolId = _ref.UserPoolId,\n        ClientId = _ref.ClientId,\n        endpoint = _ref.endpoint,\n        AdvancedSecurityDataCollectionFlag = _ref.AdvancedSecurityDataCollectionFlag;\n\n    if (!UserPoolId || !ClientId) {\n      throw new Error('Both UserPoolId and ClientId are required.');\n    }\n    if (!/^[\\w-]+_.+$/.test(UserPoolId)) {\n      throw new Error('Invalid UserPoolId format.');\n    }\n    var region = UserPoolId.split('_')[0];\n\n    this.userPoolId = UserPoolId;\n    this.clientId = ClientId;\n\n    this.client = new Client(region, endpoint);\n\n    /**\n     * By default, AdvancedSecurityDataCollectionFlag is set to true,\n     * if no input value is provided.\n     */\n    this.advancedSecurityDataCollectionFlag = AdvancedSecurityDataCollectionFlag !== false;\n\n    this.storage = data.Storage || new StorageHelper().getStorage();\n  }\n\n  /**\n   * @returns {string} the user pool id\n   */\n\n\n  CognitoUserPool.prototype.getUserPoolId = function getUserPoolId() {\n    return this.userPoolId;\n  };\n\n  /**\n   * @returns {string} the client id\n   */\n\n\n  CognitoUserPool.prototype.getClientId = function getClientId() {\n    return this.clientId;\n  };\n\n  /**\n   * @typedef {object} SignUpResult\n   * @property {CognitoUser} user New user.\n   * @property {bool} userConfirmed If the user is already confirmed.\n   */\n  /**\n   * method for signing up a user\n   * @param {string} username User's username.\n   * @param {string} password Plain-text initial password entered by user.\n   * @param {(AttributeArg[])=} userAttributes New user attributes.\n   * @param {(AttributeArg[])=} validationData Application metadata.\n   * @param {nodeCallback<SignUpResult>} callback Called on error or with the new user.\n   * @returns {void}\n   */\n\n\n  CognitoUserPool.prototype.signUp = function signUp(username, password, userAttributes, validationData, callback) {\n    var _this = this;\n\n    var jsonReq = {\n      ClientId: this.clientId,\n      Username: username,\n      Password: password,\n      UserAttributes: userAttributes,\n      ValidationData: validationData\n    };\n    if (this.getUserContextData(username)) {\n      jsonReq.UserContextData = this.getUserContextData(username);\n    }\n    this.client.request('SignUp', jsonReq, function (err, data) {\n      if (err) {\n        return callback(err, null);\n      }\n\n      var cognitoUser = {\n        Username: username,\n        Pool: _this,\n        Storage: _this.storage\n      };\n\n      var returnData = {\n        user: new CognitoUser(cognitoUser),\n        userConfirmed: data.UserConfirmed,\n        userSub: data.UserSub,\n        codeDeliveryDetails: data.CodeDeliveryDetails\n      };\n\n      return callback(null, returnData);\n    });\n  };\n\n  /**\n   * method for getting the current user of the application from the local storage\n   *\n   * @returns {CognitoUser} the user retrieved from storage\n   */\n\n\n  CognitoUserPool.prototype.getCurrentUser = function getCurrentUser() {\n    var lastUserKey = 'CognitoIdentityServiceProvider.' + this.clientId + '.LastAuthUser';\n\n    var lastAuthUser = this.storage.getItem(lastUserKey);\n    if (lastAuthUser) {\n      var cognitoUser = {\n        Username: lastAuthUser,\n        Pool: this,\n        Storage: this.storage\n      };\n\n      return new CognitoUser(cognitoUser);\n    }\n\n    return null;\n  };\n\n  /**\n   * This method returns the encoded data string used for cognito advanced security feature.\n   * This would be generated only when developer has included the JS used for collecting the\n   * data on their client. Please refer to documentation to know more about using AdvancedSecurity\n   * features\n   * @param {string} username the username for the context data\n   * @returns {string} the user context data\n   **/\n\n\n  CognitoUserPool.prototype.getUserContextData = function getUserContextData(username) {\n    if (typeof AmazonCognitoAdvancedSecurityData === 'undefined') {\n      return undefined;\n    }\n    /* eslint-disable */\n    var amazonCognitoAdvancedSecurityDataConst = AmazonCognitoAdvancedSecurityData;\n    /* eslint-enable */\n\n    if (this.advancedSecurityDataCollectionFlag) {\n      var advancedSecurityData = amazonCognitoAdvancedSecurityDataConst.getData(username, this.userPoolId, this.clientId);\n      if (advancedSecurityData) {\n        var userContextData = {\n          EncodedData: advancedSecurityData\n        };\n        return userContextData;\n      }\n    }\n    return {};\n  };\n\n  return CognitoUserPool;\n}();\n\nexport default CognitoUserPool;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport * as Cookies from 'js-cookie';\n\n/** @class */\n\nvar CookieStorage = function () {\n\n  /**\n   * Constructs a new CookieStorage object\n   * @param {object} data Creation options.\n   * @param {string} data.domain Cookies domain (mandatory).\n   * @param {string} data.path Cookies path (default: '/')\n   * @param {integer} data.expires Cookie expiration (in days, default: 365)\n   * @param {boolean} data.secure Cookie secure flag (default: true)\n   */\n  function CookieStorage(data) {\n    _classCallCheck(this, CookieStorage);\n\n    if (data.domain) {\n      this.domain = data.domain;\n    } else {\n      throw new Error('The domain of cookieStorage can not be undefined.');\n    }\n    if (data.path) {\n      this.path = data.path;\n    } else {\n      this.path = '/';\n    }\n    if (Object.prototype.hasOwnProperty.call(data, 'expires')) {\n      this.expires = data.expires;\n    } else {\n      this.expires = 365;\n    }\n    if (Object.prototype.hasOwnProperty.call(data, 'secure')) {\n      this.secure = data.secure;\n    } else {\n      this.secure = true;\n    }\n  }\n\n  /**\n   * This is used to set a specific item in storage\n   * @param {string} key - the key for the item\n   * @param {object} value - the value\n   * @returns {string} value that was set\n   */\n\n\n  CookieStorage.prototype.setItem = function setItem(key, value) {\n    Cookies.set(key, value, {\n      path: this.path,\n      expires: this.expires,\n      domain: this.domain,\n      secure: this.secure\n    });\n    return Cookies.get(key);\n  };\n\n  /**\n   * This is used to get a specific key from storage\n   * @param {string} key - the key for the item\n   * This is used to clear the storage\n   * @returns {string} the data item\n   */\n\n\n  CookieStorage.prototype.getItem = function getItem(key) {\n    return Cookies.get(key);\n  };\n\n  /**\n   * This is used to remove an item from storage\n   * @param {string} key - the key being set\n   * @returns {string} value - value that was deleted\n   */\n\n\n  CookieStorage.prototype.removeItem = function removeItem(key) {\n    return Cookies.remove(key, {\n      path: this.path,\n      domain: this.domain,\n      secure: this.secure\n    });\n  };\n\n  /**\n   * This is used to clear the storage\n   * @returns {string} nothing\n   */\n\n\n  CookieStorage.prototype.clear = function clear() {\n    var cookies = Cookies.get();\n    var index = void 0;\n    for (index = 0; index < cookies.length; ++index) {\n      Cookies.remove(cookies[index]);\n    }\n    return {};\n  };\n\n  return CookieStorage;\n}();\n\nexport default CookieStorage;","/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n *     http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport { default as AuthenticationDetails } from './AuthenticationDetails';\nexport { default as AuthenticationHelper } from './AuthenticationHelper';\nexport { default as CognitoAccessToken } from './CognitoAccessToken';\nexport { default as CognitoIdToken } from './CognitoIdToken';\nexport { default as CognitoRefreshToken } from './CognitoRefreshToken';\nexport { default as CognitoUser } from './CognitoUser';\nexport { default as CognitoUserAttribute } from './CognitoUserAttribute';\nexport { default as CognitoUserPool } from './CognitoUserPool';\nexport { default as CognitoUserSession } from './CognitoUserSession';\nexport { default as CookieStorage } from './CookieStorage';\nexport { default as DateHelper } from './DateHelper';","var WindowInfo = (function () {\r\n    function WindowInfo() {\r\n    }\r\n    return WindowInfo;\r\n}());\r\nexport { WindowInfo };\r\n//# sourceMappingURL=window-info.js.map","/**\n * Copyright (c) 2017-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n/**\n * Memoizes the provided three-argument function.\n */\nexport default function memoize3(fn) {\n  var cache0 = void 0;\n  function memoized(a1, a2, a3) {\n    if (!cache0) {\n      cache0 = new WeakMap();\n    }\n    var cache1 = cache0.get(a1);\n    var cache2 = void 0;\n    if (cache1) {\n      cache2 = cache1.get(a2);\n      if (cache2) {\n        var cachedValue = cache2.get(a3);\n        if (cachedValue !== undefined) {\n          return cachedValue;\n        }\n      }\n    } else {\n      cache1 = new WeakMap();\n      cache0.set(a1, cache1);\n    }\n    if (!cache2) {\n      cache2 = new WeakMap();\n      cache1.set(a2, cache2);\n    }\n    var newValue = fn.apply(this, arguments);\n    cache2.set(a3, newValue);\n    return newValue;\n  }\n  return memoized;\n}","\n\n/**\n * This function transforms a JS object `ObjMap<Promise<T>>` into\n * a `Promise<ObjMap<T>>`\n *\n * This is akin to bluebird's `Promise.props`, but implemented only using\n * `Promise.all` so it will work with any implementation of ES6 promises.\n */\nexport default function promiseForObject(object) {\n  var keys = Object.keys(object);\n  var valuesAndPromises = keys.map(function (name) {\n    return object[name];\n  });\n  return Promise.all(valuesAndPromises).then(function (values) {\n    return values.reduce(function (resolvedObject, value, i) {\n      resolvedObject[keys[i]] = value;\n      return resolvedObject;\n    }, Object.create(null));\n  });\n} /**\n   * Copyright (c) 2015-present, Facebook, Inc.\n   *\n   * This source code is licensed under the MIT license found in the\n   * LICENSE file in the root directory of this source tree.\n   *\n   * \n   */","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport getPromise from './getPromise';\n\n\n/**\n * Similar to Array.prototype.reduce(), however the reducing callback may return\n * a Promise, in which case reduction will continue after each promise resolves.\n *\n * If the callback does not return a Promise, then this function will also not\n * return a Promise.\n */\nexport default function promiseReduce(values, callback, initialValue) {\n  return values.reduce(function (previous, value) {\n    var promise = getPromise(previous);\n    if (promise) {\n      return promise.then(function (resolved) {\n        return callback(resolved, value);\n      });\n    }\n    // Previous is not Promise<U>, so it is U.\n    return callback(previous, value);\n  }, initialValue);\n}","function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * Copyright (c) 2017-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { $$asyncIterator, getAsyncIterator } from 'iterall';\n\n\n/**\n * Given an AsyncIterable and a callback function, return an AsyncIterator\n * which produces values mapped via calling the callback function.\n */\nexport default function mapAsyncIterator(iterable, callback, rejectCallback) {\n  var iterator = getAsyncIterator(iterable);\n  var $return = void 0;\n  var abruptClose = void 0;\n  if (typeof iterator.return === 'function') {\n    $return = iterator.return;\n    abruptClose = function abruptClose(error) {\n      var rethrow = function rethrow() {\n        return Promise.reject(error);\n      };\n      return $return.call(iterator).then(rethrow, rethrow);\n    };\n  }\n\n  function mapResult(result) {\n    return result.done ? result : asyncMapValue(result.value, callback).then(iteratorResult, abruptClose);\n  }\n\n  var mapReject = void 0;\n  if (rejectCallback) {\n    // Capture rejectCallback to ensure it cannot be null.\n    var reject = rejectCallback;\n    mapReject = function mapReject(error) {\n      return asyncMapValue(error, reject).then(iteratorResult, abruptClose);\n    };\n  }\n\n  /* TODO: Flow doesn't support symbols as keys:\n     https://github.com/facebook/flow/issues/3258 */\n  return _defineProperty({\n    next: function next() {\n      return iterator.next().then(mapResult, mapReject);\n    },\n    return: function _return() {\n      return $return ? $return.call(iterator).then(mapResult, mapReject) : Promise.resolve({ value: undefined, done: true });\n    },\n    throw: function _throw(error) {\n      if (typeof iterator.throw === 'function') {\n        return iterator.throw(error).then(mapResult, mapReject);\n      }\n      return Promise.reject(error).catch(abruptClose);\n    }\n  }, $$asyncIterator, function () {\n    return this;\n  });\n}\n\nfunction asyncMapValue(value, callback) {\n  return new Promise(function (resolve) {\n    return resolve(callback(value));\n  });\n}\n\nfunction iteratorResult(value) {\n  return { value: value, done: false };\n}","export interface ISearchResult {recordType: string, totalRecords: number, pageSize: number, pageCount: number, filter?: string, records?: any[]};\nexport class SearchResult{\n    recordType: string;\n    totalRecords: number;\n    pageSize: number;\n    pageCount: number;\n    filter?: string;\n    records?: any[];\n    constructor(data: ISearchResult){\n        this.recordType = data.recordType;\n        this.totalRecords = data.totalRecords;\n        this.pageSize = data.pageSize;\n        this.pageCount = data.pageCount;\n        this.filter = data.filter || \"\";\n        this.records = data.records || [];\n    }\n}","export interface IGetRecordResponse {recordType: string, recordId: number, record: any};\nexport class GetRecordResponse{\n    recordType: string;\n    recordId: number;\n    record: any;\n    \n    constructor(data: IGetRecordResponse){\n        this.recordType = data.recordType;\n        this.recordId = data.recordId;\n        this.record = data.record;\n    }\n}","export interface IGetRecordsResponse {recordType: string, records: any[]};\nexport class GetRecordsResponse{\n    recordType: string;\n    records: any[];\n    \n    constructor(data: IGetRecordsResponse){\n        this.recordType = data.recordType;\n        this.records = data.records || [];\n    }\n}","export interface IGetRecordRequest {recordType: string, recordId?: number, additionalFields?: any;};\nexport class GetRecordRequest{\n    recordType: string;\n    recordId?: number;   \n    additionalFields: any;\n    \n    constructor(data: IGetRecordRequest){\n        this.recordType = data.recordType;\n        this.recordId = data.recordId;\n        this.additionalFields = data.additionalFields;           \n    }\n}","import { IRecordReference, RecordReference } from \"shared-models/record-reference\";\nimport {IStateReference, StateReference} from \"orders/models/country-record\"\n\nexport interface IColdChainZip extends IRecordReference{zipcode?: string, city?: string, state?: IStateReference, deliveryDay?: IRecordReference, deliveryTime?: string, hub?: string, route?: string, zone?: RecordReference};\nexport class ColdChainZip extends RecordReference{\n    zipcode?: string;\n    city?: string;\n    state?: StateReference;\n    deliveryDay?: RecordReference;\n    deliveryTime?: string;\n    hub?: string;\n    route?: string;\n    zone?: RecordReference;\n    constructor(data: IColdChainZip){\n        data = data || {}\n        super(data)\n        this.zipcode = data.zipcode || \"\";        \n        this.city = data.city || \"\";        \n        this.state = data.state ? new StateReference(data.state): null;\n        this.deliveryDay = data.deliveryDay ? new RecordReference(data.deliveryDay): null;\n        this.deliveryTime = data.deliveryTime || \"\";\n        this.hub = data.hub || \"\";\n        this.route = data.route || \"\";\n        this.zone = data.zone ? new RecordReference(data.zone): null;\n    }\n\n    zoneNumber(){\n        if(!this.zone){\n            return \"\";\n        }\n        let zoneSplit = this.zone.name.split(\"Zone \");\n        if(zoneSplit.length === 2){\n            return zoneSplit[1].trim();\n        }\n        return this.zone.name;\n    }\n}","import { DefaultService } from \"shared-service/default-service\";\nimport { autoinject } from \"aurelia-framework\";\nimport { User } from \"user/models/user\";\n\n@autoinject\nexport class UserService extends DefaultService {\n    constructor() {\n        super(UserService.name);\n    }\n\n    async getCurrentUser(): Promise<User> {\n        try{\n            let userResponse = await this.get(\"user\");\n            this.logger.info(\"userResponse :: {}\", userResponse);\n            return new User({\n                id: userResponse[\"id\"],\n                name: userResponse[\"name\"],\n                email: userResponse[\"email\"],\n                defaultWinery: userResponse[\"defaultWinery\"],\n                availableWineries: userResponse[\"wineries\"],\n                wineryName: userResponse[\"wineryName\"]\n            });\n        } catch(err){\n            this.logger.error(\"error :: {}\", err);\n            return null;\n        }\n        \n    }\n}","import { IRecordReference, RecordReference } from \"shared-models/record-reference\";\n\nexport interface IUser extends IRecordReference{ \n    name?: string, \n    email?: string, \n    wineryName?: string, \n    wineryImage?: string, \n    defaultWinery?: Winery, \n    availableWineries?: Winery[]};\n\nexport class User extends RecordReference{\n    email: string;\n    defaultWinery: Winery;\n    availableWineries: Winery[];\n    wineryName: string;\n    wineryImage: string;\n    \n    constructor(data?: IUser) {\n        data = data || {};\n        super(data);\n        this.email = data.email;\n        this.wineryName = data.wineryName;\n        this.wineryImage = data.wineryImage;\n        this.defaultWinery = data.defaultWinery;\n        this.availableWineries = (data.availableWineries || []).map((winery)=> new Winery(winery));\n    }\n}\n\nexport interface IWinery extends IRecordReference{\n    wineryImage?: string;\n}\n\nexport class Winery extends RecordReference{    \n    wineryImage: string;    \n    constructor(data: IWinery){\n        data = data || {}\n        super(data);\n        this.wineryImage = data.wineryImage || \"\";        \n    }\n}","/* @preserve\n * The MIT License (MIT)\n * \n * Copyright (c) 2013-2017 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n/**\n * bluebird build version 3.5.0\n * Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each\n*/\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var f;\"undefined\"!=typeof window?f=window:\"undefined\"!=typeof global?f=global:\"undefined\"!=typeof self&&(f=self),f.Promise=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_==\"function\"&&_dereq_;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof _dereq_==\"function\"&&_dereq_;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nvar SomePromiseArray = Promise._SomePromiseArray;\nfunction any(promises) {\n    var ret = new SomePromiseArray(promises);\n    var promise = ret.promise();\n    ret.setHowMany(1);\n    ret.setUnwrap();\n    ret.init();\n    return promise;\n}\n\nPromise.any = function (promises) {\n    return any(promises);\n};\n\nPromise.prototype.any = function () {\n    return any(this);\n};\n\n};\n\n},{}],2:[function(_dereq_,module,exports){\n\"use strict\";\nvar firstLineError;\ntry {throw new Error(); } catch (e) {firstLineError = e;}\nvar schedule = _dereq_(\"./schedule\");\nvar Queue = _dereq_(\"./queue\");\nvar util = _dereq_(\"./util\");\n\nfunction Async() {\n    this._customScheduler = false;\n    this._isTickUsed = false;\n    this._lateQueue = new Queue(16);\n    this._normalQueue = new Queue(16);\n    this._haveDrainedQueues = false;\n    this._trampolineEnabled = true;\n    var self = this;\n    this.drainQueues = function () {\n        self._drainQueues();\n    };\n    this._schedule = schedule;\n}\n\nAsync.prototype.setScheduler = function(fn) {\n    var prev = this._schedule;\n    this._schedule = fn;\n    this._customScheduler = true;\n    return prev;\n};\n\nAsync.prototype.hasCustomScheduler = function() {\n    return this._customScheduler;\n};\n\nAsync.prototype.enableTrampoline = function() {\n    this._trampolineEnabled = true;\n};\n\nAsync.prototype.disableTrampolineIfNecessary = function() {\n    if (util.hasDevTools) {\n        this._trampolineEnabled = false;\n    }\n};\n\nAsync.prototype.haveItemsQueued = function () {\n    return this._isTickUsed || this._haveDrainedQueues;\n};\n\n\nAsync.prototype.fatalError = function(e, isNode) {\n    if (isNode) {\n        process.stderr.write(\"Fatal \" + (e instanceof Error ? e.stack : e) +\n            \"\\n\");\n        process.exit(2);\n    } else {\n        this.throwLater(e);\n    }\n};\n\nAsync.prototype.throwLater = function(fn, arg) {\n    if (arguments.length === 1) {\n        arg = fn;\n        fn = function () { throw arg; };\n    }\n    if (typeof setTimeout !== \"undefined\") {\n        setTimeout(function() {\n            fn(arg);\n        }, 0);\n    } else try {\n        this._schedule(function() {\n            fn(arg);\n        });\n    } catch (e) {\n        throw new Error(\"No async scheduler available\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n};\n\nfunction AsyncInvokeLater(fn, receiver, arg) {\n    this._lateQueue.push(fn, receiver, arg);\n    this._queueTick();\n}\n\nfunction AsyncInvoke(fn, receiver, arg) {\n    this._normalQueue.push(fn, receiver, arg);\n    this._queueTick();\n}\n\nfunction AsyncSettlePromises(promise) {\n    this._normalQueue._pushOne(promise);\n    this._queueTick();\n}\n\nif (!util.hasDevTools) {\n    Async.prototype.invokeLater = AsyncInvokeLater;\n    Async.prototype.invoke = AsyncInvoke;\n    Async.prototype.settlePromises = AsyncSettlePromises;\n} else {\n    Async.prototype.invokeLater = function (fn, receiver, arg) {\n        if (this._trampolineEnabled) {\n            AsyncInvokeLater.call(this, fn, receiver, arg);\n        } else {\n            this._schedule(function() {\n                setTimeout(function() {\n                    fn.call(receiver, arg);\n                }, 100);\n            });\n        }\n    };\n\n    Async.prototype.invoke = function (fn, receiver, arg) {\n        if (this._trampolineEnabled) {\n            AsyncInvoke.call(this, fn, receiver, arg);\n        } else {\n            this._schedule(function() {\n                fn.call(receiver, arg);\n            });\n        }\n    };\n\n    Async.prototype.settlePromises = function(promise) {\n        if (this._trampolineEnabled) {\n            AsyncSettlePromises.call(this, promise);\n        } else {\n            this._schedule(function() {\n                promise._settlePromises();\n            });\n        }\n    };\n}\n\nAsync.prototype._drainQueue = function(queue) {\n    while (queue.length() > 0) {\n        var fn = queue.shift();\n        if (typeof fn !== \"function\") {\n            fn._settlePromises();\n            continue;\n        }\n        var receiver = queue.shift();\n        var arg = queue.shift();\n        fn.call(receiver, arg);\n    }\n};\n\nAsync.prototype._drainQueues = function () {\n    this._drainQueue(this._normalQueue);\n    this._reset();\n    this._haveDrainedQueues = true;\n    this._drainQueue(this._lateQueue);\n};\n\nAsync.prototype._queueTick = function () {\n    if (!this._isTickUsed) {\n        this._isTickUsed = true;\n        this._schedule(this.drainQueues);\n    }\n};\n\nAsync.prototype._reset = function () {\n    this._isTickUsed = false;\n};\n\nmodule.exports = Async;\nmodule.exports.firstLineError = firstLineError;\n\n},{\"./queue\":26,\"./schedule\":29,\"./util\":36}],3:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) {\nvar calledBind = false;\nvar rejectThis = function(_, e) {\n    this._reject(e);\n};\n\nvar targetRejected = function(e, context) {\n    context.promiseRejectionQueued = true;\n    context.bindingPromise._then(rejectThis, rejectThis, null, this, e);\n};\n\nvar bindingResolved = function(thisArg, context) {\n    if (((this._bitField & 50397184) === 0)) {\n        this._resolveCallback(context.target);\n    }\n};\n\nvar bindingRejected = function(e, context) {\n    if (!context.promiseRejectionQueued) this._reject(e);\n};\n\nPromise.prototype.bind = function (thisArg) {\n    if (!calledBind) {\n        calledBind = true;\n        Promise.prototype._propagateFrom = debug.propagateFromFunction();\n        Promise.prototype._boundValue = debug.boundValueFunction();\n    }\n    var maybePromise = tryConvertToPromise(thisArg);\n    var ret = new Promise(INTERNAL);\n    ret._propagateFrom(this, 1);\n    var target = this._target();\n    ret._setBoundTo(maybePromise);\n    if (maybePromise instanceof Promise) {\n        var context = {\n            promiseRejectionQueued: false,\n            promise: ret,\n            target: target,\n            bindingPromise: maybePromise\n        };\n        target._then(INTERNAL, targetRejected, undefined, ret, context);\n        maybePromise._then(\n            bindingResolved, bindingRejected, undefined, ret, context);\n        ret._setOnCancel(maybePromise);\n    } else {\n        ret._resolveCallback(target);\n    }\n    return ret;\n};\n\nPromise.prototype._setBoundTo = function (obj) {\n    if (obj !== undefined) {\n        this._bitField = this._bitField | 2097152;\n        this._boundTo = obj;\n    } else {\n        this._bitField = this._bitField & (~2097152);\n    }\n};\n\nPromise.prototype._isBound = function () {\n    return (this._bitField & 2097152) === 2097152;\n};\n\nPromise.bind = function (thisArg, value) {\n    return Promise.resolve(value).bind(thisArg);\n};\n};\n\n},{}],4:[function(_dereq_,module,exports){\n\"use strict\";\nvar old;\nif (typeof Promise !== \"undefined\") old = Promise;\nfunction noConflict() {\n    try { if (Promise === bluebird) Promise = old; }\n    catch (e) {}\n    return bluebird;\n}\nvar bluebird = _dereq_(\"./promise\")();\nbluebird.noConflict = noConflict;\nmodule.exports = bluebird;\n\n},{\"./promise\":22}],5:[function(_dereq_,module,exports){\n\"use strict\";\nvar cr = Object.create;\nif (cr) {\n    var callerCache = cr(null);\n    var getterCache = cr(null);\n    callerCache[\" size\"] = getterCache[\" size\"] = 0;\n}\n\nmodule.exports = function(Promise) {\nvar util = _dereq_(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar isIdentifier = util.isIdentifier;\n\nvar getMethodCaller;\nvar getGetter;\nif (!true) {\nvar makeMethodCaller = function (methodName) {\n    return new Function(\"ensureMethod\", \"                                    \\n\\\n        return function(obj) {                                               \\n\\\n            'use strict'                                                     \\n\\\n            var len = this.length;                                           \\n\\\n            ensureMethod(obj, 'methodName');                                 \\n\\\n            switch(len) {                                                    \\n\\\n                case 1: return obj.methodName(this[0]);                      \\n\\\n                case 2: return obj.methodName(this[0], this[1]);             \\n\\\n                case 3: return obj.methodName(this[0], this[1], this[2]);    \\n\\\n                case 0: return obj.methodName();                             \\n\\\n                default:                                                     \\n\\\n                    return obj.methodName.apply(obj, this);                  \\n\\\n            }                                                                \\n\\\n        };                                                                   \\n\\\n        \".replace(/methodName/g, methodName))(ensureMethod);\n};\n\nvar makeGetter = function (propertyName) {\n    return new Function(\"obj\", \"                                             \\n\\\n        'use strict';                                                        \\n\\\n        return obj.propertyName;                                             \\n\\\n        \".replace(\"propertyName\", propertyName));\n};\n\nvar getCompiled = function(name, compiler, cache) {\n    var ret = cache[name];\n    if (typeof ret !== \"function\") {\n        if (!isIdentifier(name)) {\n            return null;\n        }\n        ret = compiler(name);\n        cache[name] = ret;\n        cache[\" size\"]++;\n        if (cache[\" size\"] > 512) {\n            var keys = Object.keys(cache);\n            for (var i = 0; i < 256; ++i) delete cache[keys[i]];\n            cache[\" size\"] = keys.length - 256;\n        }\n    }\n    return ret;\n};\n\ngetMethodCaller = function(name) {\n    return getCompiled(name, makeMethodCaller, callerCache);\n};\n\ngetGetter = function(name) {\n    return getCompiled(name, makeGetter, getterCache);\n};\n}\n\nfunction ensureMethod(obj, methodName) {\n    var fn;\n    if (obj != null) fn = obj[methodName];\n    if (typeof fn !== \"function\") {\n        var message = \"Object \" + util.classString(obj) + \" has no method '\" +\n            util.toString(methodName) + \"'\";\n        throw new Promise.TypeError(message);\n    }\n    return fn;\n}\n\nfunction caller(obj) {\n    var methodName = this.pop();\n    var fn = ensureMethod(obj, methodName);\n    return fn.apply(obj, this);\n}\nPromise.prototype.call = function (methodName) {\n    var args = [].slice.call(arguments, 1);;\n    if (!true) {\n        if (canEvaluate) {\n            var maybeCaller = getMethodCaller(methodName);\n            if (maybeCaller !== null) {\n                return this._then(\n                    maybeCaller, undefined, undefined, args, undefined);\n            }\n        }\n    }\n    args.push(methodName);\n    return this._then(caller, undefined, undefined, args, undefined);\n};\n\nfunction namedGetter(obj) {\n    return obj[this];\n}\nfunction indexedGetter(obj) {\n    var index = +this;\n    if (index < 0) index = Math.max(0, index + obj.length);\n    return obj[index];\n}\nPromise.prototype.get = function (propertyName) {\n    var isIndex = (typeof propertyName === \"number\");\n    var getter;\n    if (!isIndex) {\n        if (canEvaluate) {\n            var maybeGetter = getGetter(propertyName);\n            getter = maybeGetter !== null ? maybeGetter : namedGetter;\n        } else {\n            getter = namedGetter;\n        }\n    } else {\n        getter = indexedGetter;\n    }\n    return this._then(getter, undefined, undefined, propertyName, undefined);\n};\n};\n\n},{\"./util\":36}],6:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, PromiseArray, apiRejection, debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nPromise.prototype[\"break\"] = Promise.prototype.cancel = function() {\n    if (!debug.cancellation()) return this._warn(\"cancellation is disabled\");\n\n    var promise = this;\n    var child = promise;\n    while (promise._isCancellable()) {\n        if (!promise._cancelBy(child)) {\n            if (child._isFollowing()) {\n                child._followee().cancel();\n            } else {\n                child._cancelBranched();\n            }\n            break;\n        }\n\n        var parent = promise._cancellationParent;\n        if (parent == null || !parent._isCancellable()) {\n            if (promise._isFollowing()) {\n                promise._followee().cancel();\n            } else {\n                promise._cancelBranched();\n            }\n            break;\n        } else {\n            if (promise._isFollowing()) promise._followee().cancel();\n            promise._setWillBeCancelled();\n            child = promise;\n            promise = parent;\n        }\n    }\n};\n\nPromise.prototype._branchHasCancelled = function() {\n    this._branchesRemainingToCancel--;\n};\n\nPromise.prototype._enoughBranchesHaveCancelled = function() {\n    return this._branchesRemainingToCancel === undefined ||\n           this._branchesRemainingToCancel <= 0;\n};\n\nPromise.prototype._cancelBy = function(canceller) {\n    if (canceller === this) {\n        this._branchesRemainingToCancel = 0;\n        this._invokeOnCancel();\n        return true;\n    } else {\n        this._branchHasCancelled();\n        if (this._enoughBranchesHaveCancelled()) {\n            this._invokeOnCancel();\n            return true;\n        }\n    }\n    return false;\n};\n\nPromise.prototype._cancelBranched = function() {\n    if (this._enoughBranchesHaveCancelled()) {\n        this._cancel();\n    }\n};\n\nPromise.prototype._cancel = function() {\n    if (!this._isCancellable()) return;\n    this._setCancelled();\n    async.invoke(this._cancelPromises, this, undefined);\n};\n\nPromise.prototype._cancelPromises = function() {\n    if (this._length() > 0) this._settlePromises();\n};\n\nPromise.prototype._unsetOnCancel = function() {\n    this._onCancelField = undefined;\n};\n\nPromise.prototype._isCancellable = function() {\n    return this.isPending() && !this._isCancelled();\n};\n\nPromise.prototype.isCancellable = function() {\n    return this.isPending() && !this.isCancelled();\n};\n\nPromise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) {\n    if (util.isArray(onCancelCallback)) {\n        for (var i = 0; i < onCancelCallback.length; ++i) {\n            this._doInvokeOnCancel(onCancelCallback[i], internalOnly);\n        }\n    } else if (onCancelCallback !== undefined) {\n        if (typeof onCancelCallback === \"function\") {\n            if (!internalOnly) {\n                var e = tryCatch(onCancelCallback).call(this._boundValue());\n                if (e === errorObj) {\n                    this._attachExtraTrace(e.e);\n                    async.throwLater(e.e);\n                }\n            }\n        } else {\n            onCancelCallback._resultCancelled(this);\n        }\n    }\n};\n\nPromise.prototype._invokeOnCancel = function() {\n    var onCancelCallback = this._onCancel();\n    this._unsetOnCancel();\n    async.invoke(this._doInvokeOnCancel, this, onCancelCallback);\n};\n\nPromise.prototype._invokeInternalOnCancel = function() {\n    if (this._isCancellable()) {\n        this._doInvokeOnCancel(this._onCancel(), true);\n        this._unsetOnCancel();\n    }\n};\n\nPromise.prototype._resultCancelled = function() {\n    this.cancel();\n};\n\n};\n\n},{\"./util\":36}],7:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(NEXT_FILTER) {\nvar util = _dereq_(\"./util\");\nvar getKeys = _dereq_(\"./es5\").keys;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction catchFilter(instances, cb, promise) {\n    return function(e) {\n        var boundTo = promise._boundValue();\n        predicateLoop: for (var i = 0; i < instances.length; ++i) {\n            var item = instances[i];\n\n            if (item === Error ||\n                (item != null && item.prototype instanceof Error)) {\n                if (e instanceof item) {\n                    return tryCatch(cb).call(boundTo, e);\n                }\n            } else if (typeof item === \"function\") {\n                var matchesPredicate = tryCatch(item).call(boundTo, e);\n                if (matchesPredicate === errorObj) {\n                    return matchesPredicate;\n                } else if (matchesPredicate) {\n                    return tryCatch(cb).call(boundTo, e);\n                }\n            } else if (util.isObject(e)) {\n                var keys = getKeys(item);\n                for (var j = 0; j < keys.length; ++j) {\n                    var key = keys[j];\n                    if (item[key] != e[key]) {\n                        continue predicateLoop;\n                    }\n                }\n                return tryCatch(cb).call(boundTo, e);\n            }\n        }\n        return NEXT_FILTER;\n    };\n}\n\nreturn catchFilter;\n};\n\n},{\"./es5\":13,\"./util\":36}],8:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nvar longStackTraces = false;\nvar contextStack = [];\n\nPromise.prototype._promiseCreated = function() {};\nPromise.prototype._pushContext = function() {};\nPromise.prototype._popContext = function() {return null;};\nPromise._peekContext = Promise.prototype._peekContext = function() {};\n\nfunction Context() {\n    this._trace = new Context.CapturedTrace(peekContext());\n}\nContext.prototype._pushContext = function () {\n    if (this._trace !== undefined) {\n        this._trace._promiseCreated = null;\n        contextStack.push(this._trace);\n    }\n};\n\nContext.prototype._popContext = function () {\n    if (this._trace !== undefined) {\n        var trace = contextStack.pop();\n        var ret = trace._promiseCreated;\n        trace._promiseCreated = null;\n        return ret;\n    }\n    return null;\n};\n\nfunction createContext() {\n    if (longStackTraces) return new Context();\n}\n\nfunction peekContext() {\n    var lastIndex = contextStack.length - 1;\n    if (lastIndex >= 0) {\n        return contextStack[lastIndex];\n    }\n    return undefined;\n}\nContext.CapturedTrace = null;\nContext.create = createContext;\nContext.deactivateLongStackTraces = function() {};\nContext.activateLongStackTraces = function() {\n    var Promise_pushContext = Promise.prototype._pushContext;\n    var Promise_popContext = Promise.prototype._popContext;\n    var Promise_PeekContext = Promise._peekContext;\n    var Promise_peekContext = Promise.prototype._peekContext;\n    var Promise_promiseCreated = Promise.prototype._promiseCreated;\n    Context.deactivateLongStackTraces = function() {\n        Promise.prototype._pushContext = Promise_pushContext;\n        Promise.prototype._popContext = Promise_popContext;\n        Promise._peekContext = Promise_PeekContext;\n        Promise.prototype._peekContext = Promise_peekContext;\n        Promise.prototype._promiseCreated = Promise_promiseCreated;\n        longStackTraces = false;\n    };\n    longStackTraces = true;\n    Promise.prototype._pushContext = Context.prototype._pushContext;\n    Promise.prototype._popContext = Context.prototype._popContext;\n    Promise._peekContext = Promise.prototype._peekContext = peekContext;\n    Promise.prototype._promiseCreated = function() {\n        var ctx = this._peekContext();\n        if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this;\n    };\n};\nreturn Context;\n};\n\n},{}],9:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, Context) {\nvar getDomain = Promise._getDomain;\nvar async = Promise._async;\nvar Warning = _dereq_(\"./errors\").Warning;\nvar util = _dereq_(\"./util\");\nvar canAttachTrace = util.canAttachTrace;\nvar unhandledRejectionHandled;\nvar possiblyUnhandledRejection;\nvar bluebirdFramePattern =\n    /[\\\\\\/]bluebird[\\\\\\/]js[\\\\\\/](release|debug|instrumented)/;\nvar nodeFramePattern = /\\((?:timers\\.js):\\d+:\\d+\\)/;\nvar parseLinePattern = /[\\/<\\(](.+?):(\\d+):(\\d+)\\)?\\s*$/;\nvar stackFramePattern = null;\nvar formatStack = null;\nvar indentStackFrames = false;\nvar printWarning;\nvar debugging = !!(util.env(\"BLUEBIRD_DEBUG\") != 0 &&\n                        (true ||\n                         util.env(\"BLUEBIRD_DEBUG\") ||\n                         util.env(\"NODE_ENV\") === \"development\"));\n\nvar warnings = !!(util.env(\"BLUEBIRD_WARNINGS\") != 0 &&\n    (debugging || util.env(\"BLUEBIRD_WARNINGS\")));\n\nvar longStackTraces = !!(util.env(\"BLUEBIRD_LONG_STACK_TRACES\") != 0 &&\n    (debugging || util.env(\"BLUEBIRD_LONG_STACK_TRACES\")));\n\nvar wForgottenReturn = util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\") != 0 &&\n    (warnings || !!util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\"));\n\nPromise.prototype.suppressUnhandledRejections = function() {\n    var target = this._target();\n    target._bitField = ((target._bitField & (~1048576)) |\n                      524288);\n};\n\nPromise.prototype._ensurePossibleRejectionHandled = function () {\n    if ((this._bitField & 524288) !== 0) return;\n    this._setRejectionIsUnhandled();\n    async.invokeLater(this._notifyUnhandledRejection, this, undefined);\n};\n\nPromise.prototype._notifyUnhandledRejectionIsHandled = function () {\n    fireRejectionEvent(\"rejectionHandled\",\n                                  unhandledRejectionHandled, undefined, this);\n};\n\nPromise.prototype._setReturnedNonUndefined = function() {\n    this._bitField = this._bitField | 268435456;\n};\n\nPromise.prototype._returnedNonUndefined = function() {\n    return (this._bitField & 268435456) !== 0;\n};\n\nPromise.prototype._notifyUnhandledRejection = function () {\n    if (this._isRejectionUnhandled()) {\n        var reason = this._settledValue();\n        this._setUnhandledRejectionIsNotified();\n        fireRejectionEvent(\"unhandledRejection\",\n                                      possiblyUnhandledRejection, reason, this);\n    }\n};\n\nPromise.prototype._setUnhandledRejectionIsNotified = function () {\n    this._bitField = this._bitField | 262144;\n};\n\nPromise.prototype._unsetUnhandledRejectionIsNotified = function () {\n    this._bitField = this._bitField & (~262144);\n};\n\nPromise.prototype._isUnhandledRejectionNotified = function () {\n    return (this._bitField & 262144) > 0;\n};\n\nPromise.prototype._setRejectionIsUnhandled = function () {\n    this._bitField = this._bitField | 1048576;\n};\n\nPromise.prototype._unsetRejectionIsUnhandled = function () {\n    this._bitField = this._bitField & (~1048576);\n    if (this._isUnhandledRejectionNotified()) {\n        this._unsetUnhandledRejectionIsNotified();\n        this._notifyUnhandledRejectionIsHandled();\n    }\n};\n\nPromise.prototype._isRejectionUnhandled = function () {\n    return (this._bitField & 1048576) > 0;\n};\n\nPromise.prototype._warn = function(message, shouldUseOwnTrace, promise) {\n    return warn(message, shouldUseOwnTrace, promise || this);\n};\n\nPromise.onPossiblyUnhandledRejection = function (fn) {\n    var domain = getDomain();\n    possiblyUnhandledRejection =\n        typeof fn === \"function\" ? (domain === null ?\n                                            fn : util.domainBind(domain, fn))\n                                 : undefined;\n};\n\nPromise.onUnhandledRejectionHandled = function (fn) {\n    var domain = getDomain();\n    unhandledRejectionHandled =\n        typeof fn === \"function\" ? (domain === null ?\n                                            fn : util.domainBind(domain, fn))\n                                 : undefined;\n};\n\nvar disableLongStackTraces = function() {};\nPromise.longStackTraces = function () {\n    if (async.haveItemsQueued() && !config.longStackTraces) {\n        throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    if (!config.longStackTraces && longStackTracesIsSupported()) {\n        var Promise_captureStackTrace = Promise.prototype._captureStackTrace;\n        var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace;\n        config.longStackTraces = true;\n        disableLongStackTraces = function() {\n            if (async.haveItemsQueued() && !config.longStackTraces) {\n                throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n            }\n            Promise.prototype._captureStackTrace = Promise_captureStackTrace;\n            Promise.prototype._attachExtraTrace = Promise_attachExtraTrace;\n            Context.deactivateLongStackTraces();\n            async.enableTrampoline();\n            config.longStackTraces = false;\n        };\n        Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace;\n        Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace;\n        Context.activateLongStackTraces();\n        async.disableTrampolineIfNecessary();\n    }\n};\n\nPromise.hasLongStackTraces = function () {\n    return config.longStackTraces && longStackTracesIsSupported();\n};\n\nvar fireDomEvent = (function() {\n    try {\n        if (typeof CustomEvent === \"function\") {\n            var event = new CustomEvent(\"CustomEvent\");\n            util.global.dispatchEvent(event);\n            return function(name, event) {\n                var domEvent = new CustomEvent(name.toLowerCase(), {\n                    detail: event,\n                    cancelable: true\n                });\n                return !util.global.dispatchEvent(domEvent);\n            };\n        } else if (typeof Event === \"function\") {\n            var event = new Event(\"CustomEvent\");\n            util.global.dispatchEvent(event);\n            return function(name, event) {\n                var domEvent = new Event(name.toLowerCase(), {\n                    cancelable: true\n                });\n                domEvent.detail = event;\n                return !util.global.dispatchEvent(domEvent);\n            };\n        } else {\n            var event = document.createEvent(\"CustomEvent\");\n            event.initCustomEvent(\"testingtheevent\", false, true, {});\n            util.global.dispatchEvent(event);\n            return function(name, event) {\n                var domEvent = document.createEvent(\"CustomEvent\");\n                domEvent.initCustomEvent(name.toLowerCase(), false, true,\n                    event);\n                return !util.global.dispatchEvent(domEvent);\n            };\n        }\n    } catch (e) {}\n    return function() {\n        return false;\n    };\n})();\n\nvar fireGlobalEvent = (function() {\n    if (util.isNode) {\n        return function() {\n            return process.emit.apply(process, arguments);\n        };\n    } else {\n        if (!util.global) {\n            return function() {\n                return false;\n            };\n        }\n        return function(name) {\n            var methodName = \"on\" + name.toLowerCase();\n            var method = util.global[methodName];\n            if (!method) return false;\n            method.apply(util.global, [].slice.call(arguments, 1));\n            return true;\n        };\n    }\n})();\n\nfunction generatePromiseLifecycleEventObject(name, promise) {\n    return {promise: promise};\n}\n\nvar eventToObjectGenerator = {\n    promiseCreated: generatePromiseLifecycleEventObject,\n    promiseFulfilled: generatePromiseLifecycleEventObject,\n    promiseRejected: generatePromiseLifecycleEventObject,\n    promiseResolved: generatePromiseLifecycleEventObject,\n    promiseCancelled: generatePromiseLifecycleEventObject,\n    promiseChained: function(name, promise, child) {\n        return {promise: promise, child: child};\n    },\n    warning: function(name, warning) {\n        return {warning: warning};\n    },\n    unhandledRejection: function (name, reason, promise) {\n        return {reason: reason, promise: promise};\n    },\n    rejectionHandled: generatePromiseLifecycleEventObject\n};\n\nvar activeFireEvent = function (name) {\n    var globalEventFired = false;\n    try {\n        globalEventFired = fireGlobalEvent.apply(null, arguments);\n    } catch (e) {\n        async.throwLater(e);\n        globalEventFired = true;\n    }\n\n    var domEventFired = false;\n    try {\n        domEventFired = fireDomEvent(name,\n                    eventToObjectGenerator[name].apply(null, arguments));\n    } catch (e) {\n        async.throwLater(e);\n        domEventFired = true;\n    }\n\n    return domEventFired || globalEventFired;\n};\n\nPromise.config = function(opts) {\n    opts = Object(opts);\n    if (\"longStackTraces\" in opts) {\n        if (opts.longStackTraces) {\n            Promise.longStackTraces();\n        } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) {\n            disableLongStackTraces();\n        }\n    }\n    if (\"warnings\" in opts) {\n        var warningsOption = opts.warnings;\n        config.warnings = !!warningsOption;\n        wForgottenReturn = config.warnings;\n\n        if (util.isObject(warningsOption)) {\n            if (\"wForgottenReturn\" in warningsOption) {\n                wForgottenReturn = !!warningsOption.wForgottenReturn;\n            }\n        }\n    }\n    if (\"cancellation\" in opts && opts.cancellation && !config.cancellation) {\n        if (async.haveItemsQueued()) {\n            throw new Error(\n                \"cannot enable cancellation after promises are in use\");\n        }\n        Promise.prototype._clearCancellationData =\n            cancellationClearCancellationData;\n        Promise.prototype._propagateFrom = cancellationPropagateFrom;\n        Promise.prototype._onCancel = cancellationOnCancel;\n        Promise.prototype._setOnCancel = cancellationSetOnCancel;\n        Promise.prototype._attachCancellationCallback =\n            cancellationAttachCancellationCallback;\n        Promise.prototype._execute = cancellationExecute;\n        propagateFromFunction = cancellationPropagateFrom;\n        config.cancellation = true;\n    }\n    if (\"monitoring\" in opts) {\n        if (opts.monitoring && !config.monitoring) {\n            config.monitoring = true;\n            Promise.prototype._fireEvent = activeFireEvent;\n        } else if (!opts.monitoring && config.monitoring) {\n            config.monitoring = false;\n            Promise.prototype._fireEvent = defaultFireEvent;\n        }\n    }\n    return Promise;\n};\n\nfunction defaultFireEvent() { return false; }\n\nPromise.prototype._fireEvent = defaultFireEvent;\nPromise.prototype._execute = function(executor, resolve, reject) {\n    try {\n        executor(resolve, reject);\n    } catch (e) {\n        return e;\n    }\n};\nPromise.prototype._onCancel = function () {};\nPromise.prototype._setOnCancel = function (handler) { ; };\nPromise.prototype._attachCancellationCallback = function(onCancel) {\n    ;\n};\nPromise.prototype._captureStackTrace = function () {};\nPromise.prototype._attachExtraTrace = function () {};\nPromise.prototype._clearCancellationData = function() {};\nPromise.prototype._propagateFrom = function (parent, flags) {\n    ;\n    ;\n};\n\nfunction cancellationExecute(executor, resolve, reject) {\n    var promise = this;\n    try {\n        executor(resolve, reject, function(onCancel) {\n            if (typeof onCancel !== \"function\") {\n                throw new TypeError(\"onCancel must be a function, got: \" +\n                                    util.toString(onCancel));\n            }\n            promise._attachCancellationCallback(onCancel);\n        });\n    } catch (e) {\n        return e;\n    }\n}\n\nfunction cancellationAttachCancellationCallback(onCancel) {\n    if (!this._isCancellable()) return this;\n\n    var previousOnCancel = this._onCancel();\n    if (previousOnCancel !== undefined) {\n        if (util.isArray(previousOnCancel)) {\n            previousOnCancel.push(onCancel);\n        } else {\n            this._setOnCancel([previousOnCancel, onCancel]);\n        }\n    } else {\n        this._setOnCancel(onCancel);\n    }\n}\n\nfunction cancellationOnCancel() {\n    return this._onCancelField;\n}\n\nfunction cancellationSetOnCancel(onCancel) {\n    this._onCancelField = onCancel;\n}\n\nfunction cancellationClearCancellationData() {\n    this._cancellationParent = undefined;\n    this._onCancelField = undefined;\n}\n\nfunction cancellationPropagateFrom(parent, flags) {\n    if ((flags & 1) !== 0) {\n        this._cancellationParent = parent;\n        var branchesRemainingToCancel = parent._branchesRemainingToCancel;\n        if (branchesRemainingToCancel === undefined) {\n            branchesRemainingToCancel = 0;\n        }\n        parent._branchesRemainingToCancel = branchesRemainingToCancel + 1;\n    }\n    if ((flags & 2) !== 0 && parent._isBound()) {\n        this._setBoundTo(parent._boundTo);\n    }\n}\n\nfunction bindingPropagateFrom(parent, flags) {\n    if ((flags & 2) !== 0 && parent._isBound()) {\n        this._setBoundTo(parent._boundTo);\n    }\n}\nvar propagateFromFunction = bindingPropagateFrom;\n\nfunction boundValueFunction() {\n    var ret = this._boundTo;\n    if (ret !== undefined) {\n        if (ret instanceof Promise) {\n            if (ret.isFulfilled()) {\n                return ret.value();\n            } else {\n                return undefined;\n            }\n        }\n    }\n    return ret;\n}\n\nfunction longStackTracesCaptureStackTrace() {\n    this._trace = new CapturedTrace(this._peekContext());\n}\n\nfunction longStackTracesAttachExtraTrace(error, ignoreSelf) {\n    if (canAttachTrace(error)) {\n        var trace = this._trace;\n        if (trace !== undefined) {\n            if (ignoreSelf) trace = trace._parent;\n        }\n        if (trace !== undefined) {\n            trace.attachExtraTrace(error);\n        } else if (!error.__stackCleaned__) {\n            var parsed = parseStackAndMessage(error);\n            util.notEnumerableProp(error, \"stack\",\n                parsed.message + \"\\n\" + parsed.stack.join(\"\\n\"));\n            util.notEnumerableProp(error, \"__stackCleaned__\", true);\n        }\n    }\n}\n\nfunction checkForgottenReturns(returnValue, promiseCreated, name, promise,\n                               parent) {\n    if (returnValue === undefined && promiseCreated !== null &&\n        wForgottenReturn) {\n        if (parent !== undefined && parent._returnedNonUndefined()) return;\n        if ((promise._bitField & 65535) === 0) return;\n\n        if (name) name = name + \" \";\n        var handlerLine = \"\";\n        var creatorLine = \"\";\n        if (promiseCreated._trace) {\n            var traceLines = promiseCreated._trace.stack.split(\"\\n\");\n            var stack = cleanStack(traceLines);\n            for (var i = stack.length - 1; i >= 0; --i) {\n                var line = stack[i];\n                if (!nodeFramePattern.test(line)) {\n                    var lineMatches = line.match(parseLinePattern);\n                    if (lineMatches) {\n                        handlerLine  = \"at \" + lineMatches[1] +\n                            \":\" + lineMatches[2] + \":\" + lineMatches[3] + \" \";\n                    }\n                    break;\n                }\n            }\n\n            if (stack.length > 0) {\n                var firstUserLine = stack[0];\n                for (var i = 0; i < traceLines.length; ++i) {\n\n                    if (traceLines[i] === firstUserLine) {\n                        if (i > 0) {\n                            creatorLine = \"\\n\" + traceLines[i - 1];\n                        }\n                        break;\n                    }\n                }\n\n            }\n        }\n        var msg = \"a promise was created in a \" + name +\n            \"handler \" + handlerLine + \"but was not returned from it, \" +\n            \"see http://goo.gl/rRqMUw\" +\n            creatorLine;\n        promise._warn(msg, true, promiseCreated);\n    }\n}\n\nfunction deprecated(name, replacement) {\n    var message = name +\n        \" is deprecated and will be removed in a future version.\";\n    if (replacement) message += \" Use \" + replacement + \" instead.\";\n    return warn(message);\n}\n\nfunction warn(message, shouldUseOwnTrace, promise) {\n    if (!config.warnings) return;\n    var warning = new Warning(message);\n    var ctx;\n    if (shouldUseOwnTrace) {\n        promise._attachExtraTrace(warning);\n    } else if (config.longStackTraces && (ctx = Promise._peekContext())) {\n        ctx.attachExtraTrace(warning);\n    } else {\n        var parsed = parseStackAndMessage(warning);\n        warning.stack = parsed.message + \"\\n\" + parsed.stack.join(\"\\n\");\n    }\n\n    if (!activeFireEvent(\"warning\", warning)) {\n        formatAndLogError(warning, \"\", true);\n    }\n}\n\nfunction reconstructStack(message, stacks) {\n    for (var i = 0; i < stacks.length - 1; ++i) {\n        stacks[i].push(\"From previous event:\");\n        stacks[i] = stacks[i].join(\"\\n\");\n    }\n    if (i < stacks.length) {\n        stacks[i] = stacks[i].join(\"\\n\");\n    }\n    return message + \"\\n\" + stacks.join(\"\\n\");\n}\n\nfunction removeDuplicateOrEmptyJumps(stacks) {\n    for (var i = 0; i < stacks.length; ++i) {\n        if (stacks[i].length === 0 ||\n            ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {\n            stacks.splice(i, 1);\n            i--;\n        }\n    }\n}\n\nfunction removeCommonRoots(stacks) {\n    var current = stacks[0];\n    for (var i = 1; i < stacks.length; ++i) {\n        var prev = stacks[i];\n        var currentLastIndex = current.length - 1;\n        var currentLastLine = current[currentLastIndex];\n        var commonRootMeetPoint = -1;\n\n        for (var j = prev.length - 1; j >= 0; --j) {\n            if (prev[j] === currentLastLine) {\n                commonRootMeetPoint = j;\n                break;\n            }\n        }\n\n        for (var j = commonRootMeetPoint; j >= 0; --j) {\n            var line = prev[j];\n            if (current[currentLastIndex] === line) {\n                current.pop();\n                currentLastIndex--;\n            } else {\n                break;\n            }\n        }\n        current = prev;\n    }\n}\n\nfunction cleanStack(stack) {\n    var ret = [];\n    for (var i = 0; i < stack.length; ++i) {\n        var line = stack[i];\n        var isTraceLine = \"    (No stack trace)\" === line ||\n            stackFramePattern.test(line);\n        var isInternalFrame = isTraceLine && shouldIgnore(line);\n        if (isTraceLine && !isInternalFrame) {\n            if (indentStackFrames && line.charAt(0) !== \" \") {\n                line = \"    \" + line;\n            }\n            ret.push(line);\n        }\n    }\n    return ret;\n}\n\nfunction stackFramesAsArray(error) {\n    var stack = error.stack.replace(/\\s+$/g, \"\").split(\"\\n\");\n    for (var i = 0; i < stack.length; ++i) {\n        var line = stack[i];\n        if (\"    (No stack trace)\" === line || stackFramePattern.test(line)) {\n            break;\n        }\n    }\n    if (i > 0 && error.name != \"SyntaxError\") {\n        stack = stack.slice(i);\n    }\n    return stack;\n}\n\nfunction parseStackAndMessage(error) {\n    var stack = error.stack;\n    var message = error.toString();\n    stack = typeof stack === \"string\" && stack.length > 0\n                ? stackFramesAsArray(error) : [\"    (No stack trace)\"];\n    return {\n        message: message,\n        stack: error.name == \"SyntaxError\" ? stack : cleanStack(stack)\n    };\n}\n\nfunction formatAndLogError(error, title, isSoft) {\n    if (typeof console !== \"undefined\") {\n        var message;\n        if (util.isObject(error)) {\n            var stack = error.stack;\n            message = title + formatStack(stack, error);\n        } else {\n            message = title + String(error);\n        }\n        if (typeof printWarning === \"function\") {\n            printWarning(message, isSoft);\n        } else if (typeof console.log === \"function\" ||\n            typeof console.log === \"object\") {\n            console.log(message);\n        }\n    }\n}\n\nfunction fireRejectionEvent(name, localHandler, reason, promise) {\n    var localEventFired = false;\n    try {\n        if (typeof localHandler === \"function\") {\n            localEventFired = true;\n            if (name === \"rejectionHandled\") {\n                localHandler(promise);\n            } else {\n                localHandler(reason, promise);\n            }\n        }\n    } catch (e) {\n        async.throwLater(e);\n    }\n\n    if (name === \"unhandledRejection\") {\n        if (!activeFireEvent(name, reason, promise) && !localEventFired) {\n            formatAndLogError(reason, \"Unhandled rejection \");\n        }\n    } else {\n        activeFireEvent(name, promise);\n    }\n}\n\nfunction formatNonError(obj) {\n    var str;\n    if (typeof obj === \"function\") {\n        str = \"[function \" +\n            (obj.name || \"anonymous\") +\n            \"]\";\n    } else {\n        str = obj && typeof obj.toString === \"function\"\n            ? obj.toString() : util.toString(obj);\n        var ruselessToString = /\\[object [a-zA-Z0-9$_]+\\]/;\n        if (ruselessToString.test(str)) {\n            try {\n                var newStr = JSON.stringify(obj);\n                str = newStr;\n            }\n            catch(e) {\n\n            }\n        }\n        if (str.length === 0) {\n            str = \"(empty array)\";\n        }\n    }\n    return (\"(<\" + snip(str) + \">, no stack trace)\");\n}\n\nfunction snip(str) {\n    var maxChars = 41;\n    if (str.length < maxChars) {\n        return str;\n    }\n    return str.substr(0, maxChars - 3) + \"...\";\n}\n\nfunction longStackTracesIsSupported() {\n    return typeof captureStackTrace === \"function\";\n}\n\nvar shouldIgnore = function() { return false; };\nvar parseLineInfoRegex = /[\\/<\\(]([^:\\/]+):(\\d+):(?:\\d+)\\)?\\s*$/;\nfunction parseLineInfo(line) {\n    var matches = line.match(parseLineInfoRegex);\n    if (matches) {\n        return {\n            fileName: matches[1],\n            line: parseInt(matches[2], 10)\n        };\n    }\n}\n\nfunction setBounds(firstLineError, lastLineError) {\n    if (!longStackTracesIsSupported()) return;\n    var firstStackLines = firstLineError.stack.split(\"\\n\");\n    var lastStackLines = lastLineError.stack.split(\"\\n\");\n    var firstIndex = -1;\n    var lastIndex = -1;\n    var firstFileName;\n    var lastFileName;\n    for (var i = 0; i < firstStackLines.length; ++i) {\n        var result = parseLineInfo(firstStackLines[i]);\n        if (result) {\n            firstFileName = result.fileName;\n            firstIndex = result.line;\n            break;\n        }\n    }\n    for (var i = 0; i < lastStackLines.length; ++i) {\n        var result = parseLineInfo(lastStackLines[i]);\n        if (result) {\n            lastFileName = result.fileName;\n            lastIndex = result.line;\n            break;\n        }\n    }\n    if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||\n        firstFileName !== lastFileName || firstIndex >= lastIndex) {\n        return;\n    }\n\n    shouldIgnore = function(line) {\n        if (bluebirdFramePattern.test(line)) return true;\n        var info = parseLineInfo(line);\n        if (info) {\n            if (info.fileName === firstFileName &&\n                (firstIndex <= info.line && info.line <= lastIndex)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\n\nfunction CapturedTrace(parent) {\n    this._parent = parent;\n    this._promisesCreated = 0;\n    var length = this._length = 1 + (parent === undefined ? 0 : parent._length);\n    captureStackTrace(this, CapturedTrace);\n    if (length > 32) this.uncycle();\n}\nutil.inherits(CapturedTrace, Error);\nContext.CapturedTrace = CapturedTrace;\n\nCapturedTrace.prototype.uncycle = function() {\n    var length = this._length;\n    if (length < 2) return;\n    var nodes = [];\n    var stackToIndex = {};\n\n    for (var i = 0, node = this; node !== undefined; ++i) {\n        nodes.push(node);\n        node = node._parent;\n    }\n    length = this._length = i;\n    for (var i = length - 1; i >= 0; --i) {\n        var stack = nodes[i].stack;\n        if (stackToIndex[stack] === undefined) {\n            stackToIndex[stack] = i;\n        }\n    }\n    for (var i = 0; i < length; ++i) {\n        var currentStack = nodes[i].stack;\n        var index = stackToIndex[currentStack];\n        if (index !== undefined && index !== i) {\n            if (index > 0) {\n                nodes[index - 1]._parent = undefined;\n                nodes[index - 1]._length = 1;\n            }\n            nodes[i]._parent = undefined;\n            nodes[i]._length = 1;\n            var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;\n\n            if (index < length - 1) {\n                cycleEdgeNode._parent = nodes[index + 1];\n                cycleEdgeNode._parent.uncycle();\n                cycleEdgeNode._length =\n                    cycleEdgeNode._parent._length + 1;\n            } else {\n                cycleEdgeNode._parent = undefined;\n                cycleEdgeNode._length = 1;\n            }\n            var currentChildLength = cycleEdgeNode._length + 1;\n            for (var j = i - 2; j >= 0; --j) {\n                nodes[j]._length = currentChildLength;\n                currentChildLength++;\n            }\n            return;\n        }\n    }\n};\n\nCapturedTrace.prototype.attachExtraTrace = function(error) {\n    if (error.__stackCleaned__) return;\n    this.uncycle();\n    var parsed = parseStackAndMessage(error);\n    var message = parsed.message;\n    var stacks = [parsed.stack];\n\n    var trace = this;\n    while (trace !== undefined) {\n        stacks.push(cleanStack(trace.stack.split(\"\\n\")));\n        trace = trace._parent;\n    }\n    removeCommonRoots(stacks);\n    removeDuplicateOrEmptyJumps(stacks);\n    util.notEnumerableProp(error, \"stack\", reconstructStack(message, stacks));\n    util.notEnumerableProp(error, \"__stackCleaned__\", true);\n};\n\nvar captureStackTrace = (function stackDetection() {\n    var v8stackFramePattern = /^\\s*at\\s*/;\n    var v8stackFormatter = function(stack, error) {\n        if (typeof stack === \"string\") return stack;\n\n        if (error.name !== undefined &&\n            error.message !== undefined) {\n            return error.toString();\n        }\n        return formatNonError(error);\n    };\n\n    if (typeof Error.stackTraceLimit === \"number\" &&\n        typeof Error.captureStackTrace === \"function\") {\n        Error.stackTraceLimit += 6;\n        stackFramePattern = v8stackFramePattern;\n        formatStack = v8stackFormatter;\n        var captureStackTrace = Error.captureStackTrace;\n\n        shouldIgnore = function(line) {\n            return bluebirdFramePattern.test(line);\n        };\n        return function(receiver, ignoreUntil) {\n            Error.stackTraceLimit += 6;\n            captureStackTrace(receiver, ignoreUntil);\n            Error.stackTraceLimit -= 6;\n        };\n    }\n    var err = new Error();\n\n    if (typeof err.stack === \"string\" &&\n        err.stack.split(\"\\n\")[0].indexOf(\"stackDetection@\") >= 0) {\n        stackFramePattern = /@/;\n        formatStack = v8stackFormatter;\n        indentStackFrames = true;\n        return function captureStackTrace(o) {\n            o.stack = new Error().stack;\n        };\n    }\n\n    var hasStackAfterThrow;\n    try { throw new Error(); }\n    catch(e) {\n        hasStackAfterThrow = (\"stack\" in e);\n    }\n    if (!(\"stack\" in err) && hasStackAfterThrow &&\n        typeof Error.stackTraceLimit === \"number\") {\n        stackFramePattern = v8stackFramePattern;\n        formatStack = v8stackFormatter;\n        return function captureStackTrace(o) {\n            Error.stackTraceLimit += 6;\n            try { throw new Error(); }\n            catch(e) { o.stack = e.stack; }\n            Error.stackTraceLimit -= 6;\n        };\n    }\n\n    formatStack = function(stack, error) {\n        if (typeof stack === \"string\") return stack;\n\n        if ((typeof error === \"object\" ||\n            typeof error === \"function\") &&\n            error.name !== undefined &&\n            error.message !== undefined) {\n            return error.toString();\n        }\n        return formatNonError(error);\n    };\n\n    return null;\n\n})([]);\n\nif (typeof console !== \"undefined\" && typeof console.warn !== \"undefined\") {\n    printWarning = function (message) {\n        console.warn(message);\n    };\n    if (util.isNode && process.stderr.isTTY) {\n        printWarning = function(message, isSoft) {\n            var color = isSoft ? \"\\u001b[33m\" : \"\\u001b[31m\";\n            console.warn(color + message + \"\\u001b[0m\\n\");\n        };\n    } else if (!util.isNode && typeof (new Error().stack) === \"string\") {\n        printWarning = function(message, isSoft) {\n            console.warn(\"%c\" + message,\n                        isSoft ? \"color: darkorange\" : \"color: red\");\n        };\n    }\n}\n\nvar config = {\n    warnings: warnings,\n    longStackTraces: false,\n    cancellation: false,\n    monitoring: false\n};\n\nif (longStackTraces) Promise.longStackTraces();\n\nreturn {\n    longStackTraces: function() {\n        return config.longStackTraces;\n    },\n    warnings: function() {\n        return config.warnings;\n    },\n    cancellation: function() {\n        return config.cancellation;\n    },\n    monitoring: function() {\n        return config.monitoring;\n    },\n    propagateFromFunction: function() {\n        return propagateFromFunction;\n    },\n    boundValueFunction: function() {\n        return boundValueFunction;\n    },\n    checkForgottenReturns: checkForgottenReturns,\n    setBounds: setBounds,\n    warn: warn,\n    deprecated: deprecated,\n    CapturedTrace: CapturedTrace,\n    fireDomEvent: fireDomEvent,\n    fireGlobalEvent: fireGlobalEvent\n};\n};\n\n},{\"./errors\":12,\"./util\":36}],10:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nfunction returner() {\n    return this.value;\n}\nfunction thrower() {\n    throw this.reason;\n}\n\nPromise.prototype[\"return\"] =\nPromise.prototype.thenReturn = function (value) {\n    if (value instanceof Promise) value.suppressUnhandledRejections();\n    return this._then(\n        returner, undefined, undefined, {value: value}, undefined);\n};\n\nPromise.prototype[\"throw\"] =\nPromise.prototype.thenThrow = function (reason) {\n    return this._then(\n        thrower, undefined, undefined, {reason: reason}, undefined);\n};\n\nPromise.prototype.catchThrow = function (reason) {\n    if (arguments.length <= 1) {\n        return this._then(\n            undefined, thrower, undefined, {reason: reason}, undefined);\n    } else {\n        var _reason = arguments[1];\n        var handler = function() {throw _reason;};\n        return this.caught(reason, handler);\n    }\n};\n\nPromise.prototype.catchReturn = function (value) {\n    if (arguments.length <= 1) {\n        if (value instanceof Promise) value.suppressUnhandledRejections();\n        return this._then(\n            undefined, returner, undefined, {value: value}, undefined);\n    } else {\n        var _value = arguments[1];\n        if (_value instanceof Promise) _value.suppressUnhandledRejections();\n        var handler = function() {return _value;};\n        return this.caught(value, handler);\n    }\n};\n};\n\n},{}],11:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseReduce = Promise.reduce;\nvar PromiseAll = Promise.all;\n\nfunction promiseAllThis() {\n    return PromiseAll(this);\n}\n\nfunction PromiseMapSeries(promises, fn) {\n    return PromiseReduce(promises, fn, INTERNAL, INTERNAL);\n}\n\nPromise.prototype.each = function (fn) {\n    return PromiseReduce(this, fn, INTERNAL, 0)\n              ._then(promiseAllThis, undefined, undefined, this, undefined);\n};\n\nPromise.prototype.mapSeries = function (fn) {\n    return PromiseReduce(this, fn, INTERNAL, INTERNAL);\n};\n\nPromise.each = function (promises, fn) {\n    return PromiseReduce(promises, fn, INTERNAL, 0)\n              ._then(promiseAllThis, undefined, undefined, promises, undefined);\n};\n\nPromise.mapSeries = PromiseMapSeries;\n};\n\n\n},{}],12:[function(_dereq_,module,exports){\n\"use strict\";\nvar es5 = _dereq_(\"./es5\");\nvar Objectfreeze = es5.freeze;\nvar util = _dereq_(\"./util\");\nvar inherits = util.inherits;\nvar notEnumerableProp = util.notEnumerableProp;\n\nfunction subError(nameProperty, defaultMessage) {\n    function SubError(message) {\n        if (!(this instanceof SubError)) return new SubError(message);\n        notEnumerableProp(this, \"message\",\n            typeof message === \"string\" ? message : defaultMessage);\n        notEnumerableProp(this, \"name\", nameProperty);\n        if (Error.captureStackTrace) {\n            Error.captureStackTrace(this, this.constructor);\n        } else {\n            Error.call(this);\n        }\n    }\n    inherits(SubError, Error);\n    return SubError;\n}\n\nvar _TypeError, _RangeError;\nvar Warning = subError(\"Warning\", \"warning\");\nvar CancellationError = subError(\"CancellationError\", \"cancellation error\");\nvar TimeoutError = subError(\"TimeoutError\", \"timeout error\");\nvar AggregateError = subError(\"AggregateError\", \"aggregate error\");\ntry {\n    _TypeError = TypeError;\n    _RangeError = RangeError;\n} catch(e) {\n    _TypeError = subError(\"TypeError\", \"type error\");\n    _RangeError = subError(\"RangeError\", \"range error\");\n}\n\nvar methods = (\"join pop push shift unshift slice filter forEach some \" +\n    \"every map indexOf lastIndexOf reduce reduceRight sort reverse\").split(\" \");\n\nfor (var i = 0; i < methods.length; ++i) {\n    if (typeof Array.prototype[methods[i]] === \"function\") {\n        AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];\n    }\n}\n\nes5.defineProperty(AggregateError.prototype, \"length\", {\n    value: 0,\n    configurable: false,\n    writable: true,\n    enumerable: true\n});\nAggregateError.prototype[\"isOperational\"] = true;\nvar level = 0;\nAggregateError.prototype.toString = function() {\n    var indent = Array(level * 4 + 1).join(\" \");\n    var ret = \"\\n\" + indent + \"AggregateError of:\" + \"\\n\";\n    level++;\n    indent = Array(level * 4 + 1).join(\" \");\n    for (var i = 0; i < this.length; ++i) {\n        var str = this[i] === this ? \"[Circular AggregateError]\" : this[i] + \"\";\n        var lines = str.split(\"\\n\");\n        for (var j = 0; j < lines.length; ++j) {\n            lines[j] = indent + lines[j];\n        }\n        str = lines.join(\"\\n\");\n        ret += str + \"\\n\";\n    }\n    level--;\n    return ret;\n};\n\nfunction OperationalError(message) {\n    if (!(this instanceof OperationalError))\n        return new OperationalError(message);\n    notEnumerableProp(this, \"name\", \"OperationalError\");\n    notEnumerableProp(this, \"message\", message);\n    this.cause = message;\n    this[\"isOperational\"] = true;\n\n    if (message instanceof Error) {\n        notEnumerableProp(this, \"message\", message.message);\n        notEnumerableProp(this, \"stack\", message.stack);\n    } else if (Error.captureStackTrace) {\n        Error.captureStackTrace(this, this.constructor);\n    }\n\n}\ninherits(OperationalError, Error);\n\nvar errorTypes = Error[\"__BluebirdErrorTypes__\"];\nif (!errorTypes) {\n    errorTypes = Objectfreeze({\n        CancellationError: CancellationError,\n        TimeoutError: TimeoutError,\n        OperationalError: OperationalError,\n        RejectionError: OperationalError,\n        AggregateError: AggregateError\n    });\n    es5.defineProperty(Error, \"__BluebirdErrorTypes__\", {\n        value: errorTypes,\n        writable: false,\n        enumerable: false,\n        configurable: false\n    });\n}\n\nmodule.exports = {\n    Error: Error,\n    TypeError: _TypeError,\n    RangeError: _RangeError,\n    CancellationError: errorTypes.CancellationError,\n    OperationalError: errorTypes.OperationalError,\n    TimeoutError: errorTypes.TimeoutError,\n    AggregateError: errorTypes.AggregateError,\n    Warning: Warning\n};\n\n},{\"./es5\":13,\"./util\":36}],13:[function(_dereq_,module,exports){\nvar isES5 = (function(){\n    \"use strict\";\n    return this === undefined;\n})();\n\nif (isES5) {\n    module.exports = {\n        freeze: Object.freeze,\n        defineProperty: Object.defineProperty,\n        getDescriptor: Object.getOwnPropertyDescriptor,\n        keys: Object.keys,\n        names: Object.getOwnPropertyNames,\n        getPrototypeOf: Object.getPrototypeOf,\n        isArray: Array.isArray,\n        isES5: isES5,\n        propertyIsWritable: function(obj, prop) {\n            var descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n            return !!(!descriptor || descriptor.writable || descriptor.set);\n        }\n    };\n} else {\n    var has = {}.hasOwnProperty;\n    var str = {}.toString;\n    var proto = {}.constructor.prototype;\n\n    var ObjectKeys = function (o) {\n        var ret = [];\n        for (var key in o) {\n            if (has.call(o, key)) {\n                ret.push(key);\n            }\n        }\n        return ret;\n    };\n\n    var ObjectGetDescriptor = function(o, key) {\n        return {value: o[key]};\n    };\n\n    var ObjectDefineProperty = function (o, key, desc) {\n        o[key] = desc.value;\n        return o;\n    };\n\n    var ObjectFreeze = function (obj) {\n        return obj;\n    };\n\n    var ObjectGetPrototypeOf = function (obj) {\n        try {\n            return Object(obj).constructor.prototype;\n        }\n        catch (e) {\n            return proto;\n        }\n    };\n\n    var ArrayIsArray = function (obj) {\n        try {\n            return str.call(obj) === \"[object Array]\";\n        }\n        catch(e) {\n            return false;\n        }\n    };\n\n    module.exports = {\n        isArray: ArrayIsArray,\n        keys: ObjectKeys,\n        names: ObjectKeys,\n        defineProperty: ObjectDefineProperty,\n        getDescriptor: ObjectGetDescriptor,\n        freeze: ObjectFreeze,\n        getPrototypeOf: ObjectGetPrototypeOf,\n        isES5: isES5,\n        propertyIsWritable: function() {\n            return true;\n        }\n    };\n}\n\n},{}],14:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseMap = Promise.map;\n\nPromise.prototype.filter = function (fn, options) {\n    return PromiseMap(this, fn, options, INTERNAL);\n};\n\nPromise.filter = function (promises, fn, options) {\n    return PromiseMap(promises, fn, options, INTERNAL);\n};\n};\n\n},{}],15:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, tryConvertToPromise, NEXT_FILTER) {\nvar util = _dereq_(\"./util\");\nvar CancellationError = Promise.CancellationError;\nvar errorObj = util.errorObj;\nvar catchFilter = _dereq_(\"./catch_filter\")(NEXT_FILTER);\n\nfunction PassThroughHandlerContext(promise, type, handler) {\n    this.promise = promise;\n    this.type = type;\n    this.handler = handler;\n    this.called = false;\n    this.cancelPromise = null;\n}\n\nPassThroughHandlerContext.prototype.isFinallyHandler = function() {\n    return this.type === 0;\n};\n\nfunction FinallyHandlerCancelReaction(finallyHandler) {\n    this.finallyHandler = finallyHandler;\n}\n\nFinallyHandlerCancelReaction.prototype._resultCancelled = function() {\n    checkCancel(this.finallyHandler);\n};\n\nfunction checkCancel(ctx, reason) {\n    if (ctx.cancelPromise != null) {\n        if (arguments.length > 1) {\n            ctx.cancelPromise._reject(reason);\n        } else {\n            ctx.cancelPromise._cancel();\n        }\n        ctx.cancelPromise = null;\n        return true;\n    }\n    return false;\n}\n\nfunction succeed() {\n    return finallyHandler.call(this, this.promise._target()._settledValue());\n}\nfunction fail(reason) {\n    if (checkCancel(this, reason)) return;\n    errorObj.e = reason;\n    return errorObj;\n}\nfunction finallyHandler(reasonOrValue) {\n    var promise = this.promise;\n    var handler = this.handler;\n\n    if (!this.called) {\n        this.called = true;\n        var ret = this.isFinallyHandler()\n            ? handler.call(promise._boundValue())\n            : handler.call(promise._boundValue(), reasonOrValue);\n        if (ret === NEXT_FILTER) {\n            return ret;\n        } else if (ret !== undefined) {\n            promise._setReturnedNonUndefined();\n            var maybePromise = tryConvertToPromise(ret, promise);\n            if (maybePromise instanceof Promise) {\n                if (this.cancelPromise != null) {\n                    if (maybePromise._isCancelled()) {\n                        var reason =\n                            new CancellationError(\"late cancellation observer\");\n                        promise._attachExtraTrace(reason);\n                        errorObj.e = reason;\n                        return errorObj;\n                    } else if (maybePromise.isPending()) {\n                        maybePromise._attachCancellationCallback(\n                            new FinallyHandlerCancelReaction(this));\n                    }\n                }\n                return maybePromise._then(\n                    succeed, fail, undefined, this, undefined);\n            }\n        }\n    }\n\n    if (promise.isRejected()) {\n        checkCancel(this);\n        errorObj.e = reasonOrValue;\n        return errorObj;\n    } else {\n        checkCancel(this);\n        return reasonOrValue;\n    }\n}\n\nPromise.prototype._passThrough = function(handler, type, success, fail) {\n    if (typeof handler !== \"function\") return this.then();\n    return this._then(success,\n                      fail,\n                      undefined,\n                      new PassThroughHandlerContext(this, type, handler),\n                      undefined);\n};\n\nPromise.prototype.lastly =\nPromise.prototype[\"finally\"] = function (handler) {\n    return this._passThrough(handler,\n                             0,\n                             finallyHandler,\n                             finallyHandler);\n};\n\n\nPromise.prototype.tap = function (handler) {\n    return this._passThrough(handler, 1, finallyHandler);\n};\n\nPromise.prototype.tapCatch = function (handlerOrPredicate) {\n    var len = arguments.length;\n    if(len === 1) {\n        return this._passThrough(handlerOrPredicate,\n                                 1,\n                                 undefined,\n                                 finallyHandler);\n    } else {\n         var catchInstances = new Array(len - 1),\n            j = 0, i;\n        for (i = 0; i < len - 1; ++i) {\n            var item = arguments[i];\n            if (util.isObject(item)) {\n                catchInstances[j++] = item;\n            } else {\n                return Promise.reject(new TypeError(\n                    \"tapCatch statement predicate: \"\n                    + \"expecting an object but got \" + util.classString(item)\n                ));\n            }\n        }\n        catchInstances.length = j;\n        var handler = arguments[i];\n        return this._passThrough(catchFilter(catchInstances, handler, this),\n                                 1,\n                                 undefined,\n                                 finallyHandler);\n    }\n\n};\n\nreturn PassThroughHandlerContext;\n};\n\n},{\"./catch_filter\":7,\"./util\":36}],16:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n                          apiRejection,\n                          INTERNAL,\n                          tryConvertToPromise,\n                          Proxyable,\n                          debug) {\nvar errors = _dereq_(\"./errors\");\nvar TypeError = errors.TypeError;\nvar util = _dereq_(\"./util\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nvar yieldHandlers = [];\n\nfunction promiseFromYieldHandler(value, yieldHandlers, traceParent) {\n    for (var i = 0; i < yieldHandlers.length; ++i) {\n        traceParent._pushContext();\n        var result = tryCatch(yieldHandlers[i])(value);\n        traceParent._popContext();\n        if (result === errorObj) {\n            traceParent._pushContext();\n            var ret = Promise.reject(errorObj.e);\n            traceParent._popContext();\n            return ret;\n        }\n        var maybePromise = tryConvertToPromise(result, traceParent);\n        if (maybePromise instanceof Promise) return maybePromise;\n    }\n    return null;\n}\n\nfunction PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {\n    if (debug.cancellation()) {\n        var internal = new Promise(INTERNAL);\n        var _finallyPromise = this._finallyPromise = new Promise(INTERNAL);\n        this._promise = internal.lastly(function() {\n            return _finallyPromise;\n        });\n        internal._captureStackTrace();\n        internal._setOnCancel(this);\n    } else {\n        var promise = this._promise = new Promise(INTERNAL);\n        promise._captureStackTrace();\n    }\n    this._stack = stack;\n    this._generatorFunction = generatorFunction;\n    this._receiver = receiver;\n    this._generator = undefined;\n    this._yieldHandlers = typeof yieldHandler === \"function\"\n        ? [yieldHandler].concat(yieldHandlers)\n        : yieldHandlers;\n    this._yieldedPromise = null;\n    this._cancellationPhase = false;\n}\nutil.inherits(PromiseSpawn, Proxyable);\n\nPromiseSpawn.prototype._isResolved = function() {\n    return this._promise === null;\n};\n\nPromiseSpawn.prototype._cleanup = function() {\n    this._promise = this._generator = null;\n    if (debug.cancellation() && this._finallyPromise !== null) {\n        this._finallyPromise._fulfill();\n        this._finallyPromise = null;\n    }\n};\n\nPromiseSpawn.prototype._promiseCancelled = function() {\n    if (this._isResolved()) return;\n    var implementsReturn = typeof this._generator[\"return\"] !== \"undefined\";\n\n    var result;\n    if (!implementsReturn) {\n        var reason = new Promise.CancellationError(\n            \"generator .return() sentinel\");\n        Promise.coroutine.returnSentinel = reason;\n        this._promise._attachExtraTrace(reason);\n        this._promise._pushContext();\n        result = tryCatch(this._generator[\"throw\"]).call(this._generator,\n                                                         reason);\n        this._promise._popContext();\n    } else {\n        this._promise._pushContext();\n        result = tryCatch(this._generator[\"return\"]).call(this._generator,\n                                                          undefined);\n        this._promise._popContext();\n    }\n    this._cancellationPhase = true;\n    this._yieldedPromise = null;\n    this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseFulfilled = function(value) {\n    this._yieldedPromise = null;\n    this._promise._pushContext();\n    var result = tryCatch(this._generator.next).call(this._generator, value);\n    this._promise._popContext();\n    this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseRejected = function(reason) {\n    this._yieldedPromise = null;\n    this._promise._attachExtraTrace(reason);\n    this._promise._pushContext();\n    var result = tryCatch(this._generator[\"throw\"])\n        .call(this._generator, reason);\n    this._promise._popContext();\n    this._continue(result);\n};\n\nPromiseSpawn.prototype._resultCancelled = function() {\n    if (this._yieldedPromise instanceof Promise) {\n        var promise = this._yieldedPromise;\n        this._yieldedPromise = null;\n        promise.cancel();\n    }\n};\n\nPromiseSpawn.prototype.promise = function () {\n    return this._promise;\n};\n\nPromiseSpawn.prototype._run = function () {\n    this._generator = this._generatorFunction.call(this._receiver);\n    this._receiver =\n        this._generatorFunction = undefined;\n    this._promiseFulfilled(undefined);\n};\n\nPromiseSpawn.prototype._continue = function (result) {\n    var promise = this._promise;\n    if (result === errorObj) {\n        this._cleanup();\n        if (this._cancellationPhase) {\n            return promise.cancel();\n        } else {\n            return promise._rejectCallback(result.e, false);\n        }\n    }\n\n    var value = result.value;\n    if (result.done === true) {\n        this._cleanup();\n        if (this._cancellationPhase) {\n            return promise.cancel();\n        } else {\n            return promise._resolveCallback(value);\n        }\n    } else {\n        var maybePromise = tryConvertToPromise(value, this._promise);\n        if (!(maybePromise instanceof Promise)) {\n            maybePromise =\n                promiseFromYieldHandler(maybePromise,\n                                        this._yieldHandlers,\n                                        this._promise);\n            if (maybePromise === null) {\n                this._promiseRejected(\n                    new TypeError(\n                        \"A value %s was yielded that could not be treated as a promise\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\\u000a\".replace(\"%s\", String(value)) +\n                        \"From coroutine:\\u000a\" +\n                        this._stack.split(\"\\n\").slice(1, -7).join(\"\\n\")\n                    )\n                );\n                return;\n            }\n        }\n        maybePromise = maybePromise._target();\n        var bitField = maybePromise._bitField;\n        ;\n        if (((bitField & 50397184) === 0)) {\n            this._yieldedPromise = maybePromise;\n            maybePromise._proxy(this, null);\n        } else if (((bitField & 33554432) !== 0)) {\n            Promise._async.invoke(\n                this._promiseFulfilled, this, maybePromise._value()\n            );\n        } else if (((bitField & 16777216) !== 0)) {\n            Promise._async.invoke(\n                this._promiseRejected, this, maybePromise._reason()\n            );\n        } else {\n            this._promiseCancelled();\n        }\n    }\n};\n\nPromise.coroutine = function (generatorFunction, options) {\n    if (typeof generatorFunction !== \"function\") {\n        throw new TypeError(\"generatorFunction must be a function\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    var yieldHandler = Object(options).yieldHandler;\n    var PromiseSpawn$ = PromiseSpawn;\n    var stack = new Error().stack;\n    return function () {\n        var generator = generatorFunction.apply(this, arguments);\n        var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler,\n                                      stack);\n        var ret = spawn.promise();\n        spawn._generator = generator;\n        spawn._promiseFulfilled(undefined);\n        return ret;\n    };\n};\n\nPromise.coroutine.addYieldHandler = function(fn) {\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    yieldHandlers.push(fn);\n};\n\nPromise.spawn = function (generatorFunction) {\n    debug.deprecated(\"Promise.spawn()\", \"Promise.coroutine()\");\n    if (typeof generatorFunction !== \"function\") {\n        return apiRejection(\"generatorFunction must be a function\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    var spawn = new PromiseSpawn(generatorFunction, this);\n    var ret = spawn.promise();\n    spawn._run(Promise.spawn);\n    return ret;\n};\n};\n\n},{\"./errors\":12,\"./util\":36}],17:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async,\n         getDomain) {\nvar util = _dereq_(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar reject;\n\nif (!true) {\nif (canEvaluate) {\n    var thenCallback = function(i) {\n        return new Function(\"value\", \"holder\", \"                             \\n\\\n            'use strict';                                                    \\n\\\n            holder.pIndex = value;                                           \\n\\\n            holder.checkFulfillment(this);                                   \\n\\\n            \".replace(/Index/g, i));\n    };\n\n    var promiseSetter = function(i) {\n        return new Function(\"promise\", \"holder\", \"                           \\n\\\n            'use strict';                                                    \\n\\\n            holder.pIndex = promise;                                         \\n\\\n            \".replace(/Index/g, i));\n    };\n\n    var generateHolderClass = function(total) {\n        var props = new Array(total);\n        for (var i = 0; i < props.length; ++i) {\n            props[i] = \"this.p\" + (i+1);\n        }\n        var assignment = props.join(\" = \") + \" = null;\";\n        var cancellationCode= \"var promise;\\n\" + props.map(function(prop) {\n            return \"                                                         \\n\\\n                promise = \" + prop + \";                                      \\n\\\n                if (promise instanceof Promise) {                            \\n\\\n                    promise.cancel();                                        \\n\\\n                }                                                            \\n\\\n            \";\n        }).join(\"\\n\");\n        var passedArguments = props.join(\", \");\n        var name = \"Holder$\" + total;\n\n\n        var code = \"return function(tryCatch, errorObj, Promise, async) {    \\n\\\n            'use strict';                                                    \\n\\\n            function [TheName](fn) {                                         \\n\\\n                [TheProperties]                                              \\n\\\n                this.fn = fn;                                                \\n\\\n                this.asyncNeeded = true;                                     \\n\\\n                this.now = 0;                                                \\n\\\n            }                                                                \\n\\\n                                                                             \\n\\\n            [TheName].prototype._callFunction = function(promise) {          \\n\\\n                promise._pushContext();                                      \\n\\\n                var ret = tryCatch(this.fn)([ThePassedArguments]);           \\n\\\n                promise._popContext();                                       \\n\\\n                if (ret === errorObj) {                                      \\n\\\n                    promise._rejectCallback(ret.e, false);                   \\n\\\n                } else {                                                     \\n\\\n                    promise._resolveCallback(ret);                           \\n\\\n                }                                                            \\n\\\n            };                                                               \\n\\\n                                                                             \\n\\\n            [TheName].prototype.checkFulfillment = function(promise) {       \\n\\\n                var now = ++this.now;                                        \\n\\\n                if (now === [TheTotal]) {                                    \\n\\\n                    if (this.asyncNeeded) {                                  \\n\\\n                        async.invoke(this._callFunction, this, promise);     \\n\\\n                    } else {                                                 \\n\\\n                        this._callFunction(promise);                         \\n\\\n                    }                                                        \\n\\\n                                                                             \\n\\\n                }                                                            \\n\\\n            };                                                               \\n\\\n                                                                             \\n\\\n            [TheName].prototype._resultCancelled = function() {              \\n\\\n                [CancellationCode]                                           \\n\\\n            };                                                               \\n\\\n                                                                             \\n\\\n            return [TheName];                                                \\n\\\n        }(tryCatch, errorObj, Promise, async);                               \\n\\\n        \";\n\n        code = code.replace(/\\[TheName\\]/g, name)\n            .replace(/\\[TheTotal\\]/g, total)\n            .replace(/\\[ThePassedArguments\\]/g, passedArguments)\n            .replace(/\\[TheProperties\\]/g, assignment)\n            .replace(/\\[CancellationCode\\]/g, cancellationCode);\n\n        return new Function(\"tryCatch\", \"errorObj\", \"Promise\", \"async\", code)\n                           (tryCatch, errorObj, Promise, async);\n    };\n\n    var holderClasses = [];\n    var thenCallbacks = [];\n    var promiseSetters = [];\n\n    for (var i = 0; i < 8; ++i) {\n        holderClasses.push(generateHolderClass(i + 1));\n        thenCallbacks.push(thenCallback(i + 1));\n        promiseSetters.push(promiseSetter(i + 1));\n    }\n\n    reject = function (reason) {\n        this._reject(reason);\n    };\n}}\n\nPromise.join = function () {\n    var last = arguments.length - 1;\n    var fn;\n    if (last > 0 && typeof arguments[last] === \"function\") {\n        fn = arguments[last];\n        if (!true) {\n            if (last <= 8 && canEvaluate) {\n                var ret = new Promise(INTERNAL);\n                ret._captureStackTrace();\n                var HolderClass = holderClasses[last - 1];\n                var holder = new HolderClass(fn);\n                var callbacks = thenCallbacks;\n\n                for (var i = 0; i < last; ++i) {\n                    var maybePromise = tryConvertToPromise(arguments[i], ret);\n                    if (maybePromise instanceof Promise) {\n                        maybePromise = maybePromise._target();\n                        var bitField = maybePromise._bitField;\n                        ;\n                        if (((bitField & 50397184) === 0)) {\n                            maybePromise._then(callbacks[i], reject,\n                                               undefined, ret, holder);\n                            promiseSetters[i](maybePromise, holder);\n                            holder.asyncNeeded = false;\n                        } else if (((bitField & 33554432) !== 0)) {\n                            callbacks[i].call(ret,\n                                              maybePromise._value(), holder);\n                        } else if (((bitField & 16777216) !== 0)) {\n                            ret._reject(maybePromise._reason());\n                        } else {\n                            ret._cancel();\n                        }\n                    } else {\n                        callbacks[i].call(ret, maybePromise, holder);\n                    }\n                }\n\n                if (!ret._isFateSealed()) {\n                    if (holder.asyncNeeded) {\n                        var domain = getDomain();\n                        if (domain !== null) {\n                            holder.fn = util.domainBind(domain, holder.fn);\n                        }\n                    }\n                    ret._setAsyncGuaranteed();\n                    ret._setOnCancel(holder);\n                }\n                return ret;\n            }\n        }\n    }\n    var args = [].slice.call(arguments);;\n    if (fn) args.pop();\n    var ret = new PromiseArray(args).promise();\n    return fn !== undefined ? ret.spread(fn) : ret;\n};\n\n};\n\n},{\"./util\":36}],18:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n                          PromiseArray,\n                          apiRejection,\n                          tryConvertToPromise,\n                          INTERNAL,\n                          debug) {\nvar getDomain = Promise._getDomain;\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nfunction MappingPromiseArray(promises, fn, limit, _filter) {\n    this.constructor$(promises);\n    this._promise._captureStackTrace();\n    var domain = getDomain();\n    this._callback = domain === null ? fn : util.domainBind(domain, fn);\n    this._preservedValues = _filter === INTERNAL\n        ? new Array(this.length())\n        : null;\n    this._limit = limit;\n    this._inFlight = 0;\n    this._queue = [];\n    async.invoke(this._asyncInit, this, undefined);\n}\nutil.inherits(MappingPromiseArray, PromiseArray);\n\nMappingPromiseArray.prototype._asyncInit = function() {\n    this._init$(undefined, -2);\n};\n\nMappingPromiseArray.prototype._init = function () {};\n\nMappingPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    var values = this._values;\n    var length = this.length();\n    var preservedValues = this._preservedValues;\n    var limit = this._limit;\n\n    if (index < 0) {\n        index = (index * -1) - 1;\n        values[index] = value;\n        if (limit >= 1) {\n            this._inFlight--;\n            this._drainQueue();\n            if (this._isResolved()) return true;\n        }\n    } else {\n        if (limit >= 1 && this._inFlight >= limit) {\n            values[index] = value;\n            this._queue.push(index);\n            return false;\n        }\n        if (preservedValues !== null) preservedValues[index] = value;\n\n        var promise = this._promise;\n        var callback = this._callback;\n        var receiver = promise._boundValue();\n        promise._pushContext();\n        var ret = tryCatch(callback).call(receiver, value, index, length);\n        var promiseCreated = promise._popContext();\n        debug.checkForgottenReturns(\n            ret,\n            promiseCreated,\n            preservedValues !== null ? \"Promise.filter\" : \"Promise.map\",\n            promise\n        );\n        if (ret === errorObj) {\n            this._reject(ret.e);\n            return true;\n        }\n\n        var maybePromise = tryConvertToPromise(ret, this._promise);\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            var bitField = maybePromise._bitField;\n            ;\n            if (((bitField & 50397184) === 0)) {\n                if (limit >= 1) this._inFlight++;\n                values[index] = maybePromise;\n                maybePromise._proxy(this, (index + 1) * -1);\n                return false;\n            } else if (((bitField & 33554432) !== 0)) {\n                ret = maybePromise._value();\n            } else if (((bitField & 16777216) !== 0)) {\n                this._reject(maybePromise._reason());\n                return true;\n            } else {\n                this._cancel();\n                return true;\n            }\n        }\n        values[index] = ret;\n    }\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= length) {\n        if (preservedValues !== null) {\n            this._filter(values, preservedValues);\n        } else {\n            this._resolve(values);\n        }\n        return true;\n    }\n    return false;\n};\n\nMappingPromiseArray.prototype._drainQueue = function () {\n    var queue = this._queue;\n    var limit = this._limit;\n    var values = this._values;\n    while (queue.length > 0 && this._inFlight < limit) {\n        if (this._isResolved()) return;\n        var index = queue.pop();\n        this._promiseFulfilled(values[index], index);\n    }\n};\n\nMappingPromiseArray.prototype._filter = function (booleans, values) {\n    var len = values.length;\n    var ret = new Array(len);\n    var j = 0;\n    for (var i = 0; i < len; ++i) {\n        if (booleans[i]) ret[j++] = values[i];\n    }\n    ret.length = j;\n    this._resolve(ret);\n};\n\nMappingPromiseArray.prototype.preservedValues = function () {\n    return this._preservedValues;\n};\n\nfunction map(promises, fn, options, _filter) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n\n    var limit = 0;\n    if (options !== undefined) {\n        if (typeof options === \"object\" && options !== null) {\n            if (typeof options.concurrency !== \"number\") {\n                return Promise.reject(\n                    new TypeError(\"'concurrency' must be a number but it is \" +\n                                    util.classString(options.concurrency)));\n            }\n            limit = options.concurrency;\n        } else {\n            return Promise.reject(new TypeError(\n                            \"options argument must be an object but it is \" +\n                             util.classString(options)));\n        }\n    }\n    limit = typeof limit === \"number\" &&\n        isFinite(limit) && limit >= 1 ? limit : 0;\n    return new MappingPromiseArray(promises, fn, limit, _filter).promise();\n}\n\nPromise.prototype.map = function (fn, options) {\n    return map(this, fn, options, null);\n};\n\nPromise.map = function (promises, fn, options, _filter) {\n    return map(promises, fn, options, _filter);\n};\n\n\n};\n\n},{\"./util\":36}],19:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\n\nPromise.method = function (fn) {\n    if (typeof fn !== \"function\") {\n        throw new Promise.TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    return function () {\n        var ret = new Promise(INTERNAL);\n        ret._captureStackTrace();\n        ret._pushContext();\n        var value = tryCatch(fn).apply(this, arguments);\n        var promiseCreated = ret._popContext();\n        debug.checkForgottenReturns(\n            value, promiseCreated, \"Promise.method\", ret);\n        ret._resolveFromSyncValue(value);\n        return ret;\n    };\n};\n\nPromise.attempt = Promise[\"try\"] = function (fn) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    ret._pushContext();\n    var value;\n    if (arguments.length > 1) {\n        debug.deprecated(\"calling Promise.try with more than 1 argument\");\n        var arg = arguments[1];\n        var ctx = arguments[2];\n        value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg)\n                                  : tryCatch(fn).call(ctx, arg);\n    } else {\n        value = tryCatch(fn)();\n    }\n    var promiseCreated = ret._popContext();\n    debug.checkForgottenReturns(\n        value, promiseCreated, \"Promise.try\", ret);\n    ret._resolveFromSyncValue(value);\n    return ret;\n};\n\nPromise.prototype._resolveFromSyncValue = function (value) {\n    if (value === util.errorObj) {\n        this._rejectCallback(value.e, false);\n    } else {\n        this._resolveCallback(value, true);\n    }\n};\n};\n\n},{\"./util\":36}],20:[function(_dereq_,module,exports){\n\"use strict\";\nvar util = _dereq_(\"./util\");\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar errors = _dereq_(\"./errors\");\nvar OperationalError = errors.OperationalError;\nvar es5 = _dereq_(\"./es5\");\n\nfunction isUntypedError(obj) {\n    return obj instanceof Error &&\n        es5.getPrototypeOf(obj) === Error.prototype;\n}\n\nvar rErrorKey = /^(?:name|message|stack|cause)$/;\nfunction wrapAsOperationalError(obj) {\n    var ret;\n    if (isUntypedError(obj)) {\n        ret = new OperationalError(obj);\n        ret.name = obj.name;\n        ret.message = obj.message;\n        ret.stack = obj.stack;\n        var keys = es5.keys(obj);\n        for (var i = 0; i < keys.length; ++i) {\n            var key = keys[i];\n            if (!rErrorKey.test(key)) {\n                ret[key] = obj[key];\n            }\n        }\n        return ret;\n    }\n    util.markAsOriginatingFromRejection(obj);\n    return obj;\n}\n\nfunction nodebackForPromise(promise, multiArgs) {\n    return function(err, value) {\n        if (promise === null) return;\n        if (err) {\n            var wrapped = wrapAsOperationalError(maybeWrapAsError(err));\n            promise._attachExtraTrace(wrapped);\n            promise._reject(wrapped);\n        } else if (!multiArgs) {\n            promise._fulfill(value);\n        } else {\n            var args = [].slice.call(arguments, 1);;\n            promise._fulfill(args);\n        }\n        promise = null;\n    };\n}\n\nmodule.exports = nodebackForPromise;\n\n},{\"./errors\":12,\"./es5\":13,\"./util\":36}],21:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nvar util = _dereq_(\"./util\");\nvar async = Promise._async;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction spreadAdapter(val, nodeback) {\n    var promise = this;\n    if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);\n    var ret =\n        tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val));\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\n\nfunction successAdapter(val, nodeback) {\n    var promise = this;\n    var receiver = promise._boundValue();\n    var ret = val === undefined\n        ? tryCatch(nodeback).call(receiver, null)\n        : tryCatch(nodeback).call(receiver, null, val);\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\nfunction errorAdapter(reason, nodeback) {\n    var promise = this;\n    if (!reason) {\n        var newReason = new Error(reason + \"\");\n        newReason.cause = reason;\n        reason = newReason;\n    }\n    var ret = tryCatch(nodeback).call(promise._boundValue(), reason);\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\n\nPromise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback,\n                                                                     options) {\n    if (typeof nodeback == \"function\") {\n        var adapter = successAdapter;\n        if (options !== undefined && Object(options).spread) {\n            adapter = spreadAdapter;\n        }\n        this._then(\n            adapter,\n            errorAdapter,\n            undefined,\n            this,\n            nodeback\n        );\n    }\n    return this;\n};\n};\n\n},{\"./util\":36}],22:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function() {\nvar makeSelfResolutionError = function () {\n    return new TypeError(\"circular promise resolution chain\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n};\nvar reflectHandler = function() {\n    return new Promise.PromiseInspection(this._target());\n};\nvar apiRejection = function(msg) {\n    return Promise.reject(new TypeError(msg));\n};\nfunction Proxyable() {}\nvar UNDEFINED_BINDING = {};\nvar util = _dereq_(\"./util\");\n\nvar getDomain;\nif (util.isNode) {\n    getDomain = function() {\n        var ret = process.domain;\n        if (ret === undefined) ret = null;\n        return ret;\n    };\n} else {\n    getDomain = function() {\n        return null;\n    };\n}\nutil.notEnumerableProp(Promise, \"_getDomain\", getDomain);\n\nvar es5 = _dereq_(\"./es5\");\nvar Async = _dereq_(\"./async\");\nvar async = new Async();\nes5.defineProperty(Promise, \"_async\", {value: async});\nvar errors = _dereq_(\"./errors\");\nvar TypeError = Promise.TypeError = errors.TypeError;\nPromise.RangeError = errors.RangeError;\nvar CancellationError = Promise.CancellationError = errors.CancellationError;\nPromise.TimeoutError = errors.TimeoutError;\nPromise.OperationalError = errors.OperationalError;\nPromise.RejectionError = errors.OperationalError;\nPromise.AggregateError = errors.AggregateError;\nvar INTERNAL = function(){};\nvar APPLY = {};\nvar NEXT_FILTER = {};\nvar tryConvertToPromise = _dereq_(\"./thenables\")(Promise, INTERNAL);\nvar PromiseArray =\n    _dereq_(\"./promise_array\")(Promise, INTERNAL,\n                               tryConvertToPromise, apiRejection, Proxyable);\nvar Context = _dereq_(\"./context\")(Promise);\n /*jshint unused:false*/\nvar createContext = Context.create;\nvar debug = _dereq_(\"./debuggability\")(Promise, Context);\nvar CapturedTrace = debug.CapturedTrace;\nvar PassThroughHandlerContext =\n    _dereq_(\"./finally\")(Promise, tryConvertToPromise, NEXT_FILTER);\nvar catchFilter = _dereq_(\"./catch_filter\")(NEXT_FILTER);\nvar nodebackForPromise = _dereq_(\"./nodeback\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nfunction check(self, executor) {\n    if (self == null || self.constructor !== Promise) {\n        throw new TypeError(\"the promise constructor cannot be invoked directly\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    if (typeof executor !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(executor));\n    }\n\n}\n\nfunction Promise(executor) {\n    if (executor !== INTERNAL) {\n        check(this, executor);\n    }\n    this._bitField = 0;\n    this._fulfillmentHandler0 = undefined;\n    this._rejectionHandler0 = undefined;\n    this._promise0 = undefined;\n    this._receiver0 = undefined;\n    this._resolveFromExecutor(executor);\n    this._promiseCreated();\n    this._fireEvent(\"promiseCreated\", this);\n}\n\nPromise.prototype.toString = function () {\n    return \"[object Promise]\";\n};\n\nPromise.prototype.caught = Promise.prototype[\"catch\"] = function (fn) {\n    var len = arguments.length;\n    if (len > 1) {\n        var catchInstances = new Array(len - 1),\n            j = 0, i;\n        for (i = 0; i < len - 1; ++i) {\n            var item = arguments[i];\n            if (util.isObject(item)) {\n                catchInstances[j++] = item;\n            } else {\n                return apiRejection(\"Catch statement predicate: \" +\n                    \"expecting an object but got \" + util.classString(item));\n            }\n        }\n        catchInstances.length = j;\n        fn = arguments[i];\n        return this.then(undefined, catchFilter(catchInstances, fn, this));\n    }\n    return this.then(undefined, fn);\n};\n\nPromise.prototype.reflect = function () {\n    return this._then(reflectHandler,\n        reflectHandler, undefined, this, undefined);\n};\n\nPromise.prototype.then = function (didFulfill, didReject) {\n    if (debug.warnings() && arguments.length > 0 &&\n        typeof didFulfill !== \"function\" &&\n        typeof didReject !== \"function\") {\n        var msg = \".then() only accepts functions but was passed: \" +\n                util.classString(didFulfill);\n        if (arguments.length > 1) {\n            msg += \", \" + util.classString(didReject);\n        }\n        this._warn(msg);\n    }\n    return this._then(didFulfill, didReject, undefined, undefined, undefined);\n};\n\nPromise.prototype.done = function (didFulfill, didReject) {\n    var promise =\n        this._then(didFulfill, didReject, undefined, undefined, undefined);\n    promise._setIsFinal();\n};\n\nPromise.prototype.spread = function (fn) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n    return this.all()._then(fn, undefined, undefined, APPLY, undefined);\n};\n\nPromise.prototype.toJSON = function () {\n    var ret = {\n        isFulfilled: false,\n        isRejected: false,\n        fulfillmentValue: undefined,\n        rejectionReason: undefined\n    };\n    if (this.isFulfilled()) {\n        ret.fulfillmentValue = this.value();\n        ret.isFulfilled = true;\n    } else if (this.isRejected()) {\n        ret.rejectionReason = this.reason();\n        ret.isRejected = true;\n    }\n    return ret;\n};\n\nPromise.prototype.all = function () {\n    if (arguments.length > 0) {\n        this._warn(\".all() was passed arguments but it does not take any\");\n    }\n    return new PromiseArray(this).promise();\n};\n\nPromise.prototype.error = function (fn) {\n    return this.caught(util.originatesFromRejection, fn);\n};\n\nPromise.getNewLibraryCopy = module.exports;\n\nPromise.is = function (val) {\n    return val instanceof Promise;\n};\n\nPromise.fromNode = Promise.fromCallback = function(fn) {\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs\n                                         : false;\n    var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs));\n    if (result === errorObj) {\n        ret._rejectCallback(result.e, true);\n    }\n    if (!ret._isFateSealed()) ret._setAsyncGuaranteed();\n    return ret;\n};\n\nPromise.all = function (promises) {\n    return new PromiseArray(promises).promise();\n};\n\nPromise.cast = function (obj) {\n    var ret = tryConvertToPromise(obj);\n    if (!(ret instanceof Promise)) {\n        ret = new Promise(INTERNAL);\n        ret._captureStackTrace();\n        ret._setFulfilled();\n        ret._rejectionHandler0 = obj;\n    }\n    return ret;\n};\n\nPromise.resolve = Promise.fulfilled = Promise.cast;\n\nPromise.reject = Promise.rejected = function (reason) {\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    ret._rejectCallback(reason, true);\n    return ret;\n};\n\nPromise.setScheduler = function(fn) {\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    return async.setScheduler(fn);\n};\n\nPromise.prototype._then = function (\n    didFulfill,\n    didReject,\n    _,    receiver,\n    internalData\n) {\n    var haveInternalData = internalData !== undefined;\n    var promise = haveInternalData ? internalData : new Promise(INTERNAL);\n    var target = this._target();\n    var bitField = target._bitField;\n\n    if (!haveInternalData) {\n        promise._propagateFrom(this, 3);\n        promise._captureStackTrace();\n        if (receiver === undefined &&\n            ((this._bitField & 2097152) !== 0)) {\n            if (!((bitField & 50397184) === 0)) {\n                receiver = this._boundValue();\n            } else {\n                receiver = target === this ? undefined : this._boundTo;\n            }\n        }\n        this._fireEvent(\"promiseChained\", this, promise);\n    }\n\n    var domain = getDomain();\n    if (!((bitField & 50397184) === 0)) {\n        var handler, value, settler = target._settlePromiseCtx;\n        if (((bitField & 33554432) !== 0)) {\n            value = target._rejectionHandler0;\n            handler = didFulfill;\n        } else if (((bitField & 16777216) !== 0)) {\n            value = target._fulfillmentHandler0;\n            handler = didReject;\n            target._unsetRejectionIsUnhandled();\n        } else {\n            settler = target._settlePromiseLateCancellationObserver;\n            value = new CancellationError(\"late cancellation observer\");\n            target._attachExtraTrace(value);\n            handler = didReject;\n        }\n\n        async.invoke(settler, target, {\n            handler: domain === null ? handler\n                : (typeof handler === \"function\" &&\n                    util.domainBind(domain, handler)),\n            promise: promise,\n            receiver: receiver,\n            value: value\n        });\n    } else {\n        target._addCallbacks(didFulfill, didReject, promise, receiver, domain);\n    }\n\n    return promise;\n};\n\nPromise.prototype._length = function () {\n    return this._bitField & 65535;\n};\n\nPromise.prototype._isFateSealed = function () {\n    return (this._bitField & 117506048) !== 0;\n};\n\nPromise.prototype._isFollowing = function () {\n    return (this._bitField & 67108864) === 67108864;\n};\n\nPromise.prototype._setLength = function (len) {\n    this._bitField = (this._bitField & -65536) |\n        (len & 65535);\n};\n\nPromise.prototype._setFulfilled = function () {\n    this._bitField = this._bitField | 33554432;\n    this._fireEvent(\"promiseFulfilled\", this);\n};\n\nPromise.prototype._setRejected = function () {\n    this._bitField = this._bitField | 16777216;\n    this._fireEvent(\"promiseRejected\", this);\n};\n\nPromise.prototype._setFollowing = function () {\n    this._bitField = this._bitField | 67108864;\n    this._fireEvent(\"promiseResolved\", this);\n};\n\nPromise.prototype._setIsFinal = function () {\n    this._bitField = this._bitField | 4194304;\n};\n\nPromise.prototype._isFinal = function () {\n    return (this._bitField & 4194304) > 0;\n};\n\nPromise.prototype._unsetCancelled = function() {\n    this._bitField = this._bitField & (~65536);\n};\n\nPromise.prototype._setCancelled = function() {\n    this._bitField = this._bitField | 65536;\n    this._fireEvent(\"promiseCancelled\", this);\n};\n\nPromise.prototype._setWillBeCancelled = function() {\n    this._bitField = this._bitField | 8388608;\n};\n\nPromise.prototype._setAsyncGuaranteed = function() {\n    if (async.hasCustomScheduler()) return;\n    this._bitField = this._bitField | 134217728;\n};\n\nPromise.prototype._receiverAt = function (index) {\n    var ret = index === 0 ? this._receiver0 : this[\n            index * 4 - 4 + 3];\n    if (ret === UNDEFINED_BINDING) {\n        return undefined;\n    } else if (ret === undefined && this._isBound()) {\n        return this._boundValue();\n    }\n    return ret;\n};\n\nPromise.prototype._promiseAt = function (index) {\n    return this[\n            index * 4 - 4 + 2];\n};\n\nPromise.prototype._fulfillmentHandlerAt = function (index) {\n    return this[\n            index * 4 - 4 + 0];\n};\n\nPromise.prototype._rejectionHandlerAt = function (index) {\n    return this[\n            index * 4 - 4 + 1];\n};\n\nPromise.prototype._boundValue = function() {};\n\nPromise.prototype._migrateCallback0 = function (follower) {\n    var bitField = follower._bitField;\n    var fulfill = follower._fulfillmentHandler0;\n    var reject = follower._rejectionHandler0;\n    var promise = follower._promise0;\n    var receiver = follower._receiverAt(0);\n    if (receiver === undefined) receiver = UNDEFINED_BINDING;\n    this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._migrateCallbackAt = function (follower, index) {\n    var fulfill = follower._fulfillmentHandlerAt(index);\n    var reject = follower._rejectionHandlerAt(index);\n    var promise = follower._promiseAt(index);\n    var receiver = follower._receiverAt(index);\n    if (receiver === undefined) receiver = UNDEFINED_BINDING;\n    this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._addCallbacks = function (\n    fulfill,\n    reject,\n    promise,\n    receiver,\n    domain\n) {\n    var index = this._length();\n\n    if (index >= 65535 - 4) {\n        index = 0;\n        this._setLength(0);\n    }\n\n    if (index === 0) {\n        this._promise0 = promise;\n        this._receiver0 = receiver;\n        if (typeof fulfill === \"function\") {\n            this._fulfillmentHandler0 =\n                domain === null ? fulfill : util.domainBind(domain, fulfill);\n        }\n        if (typeof reject === \"function\") {\n            this._rejectionHandler0 =\n                domain === null ? reject : util.domainBind(domain, reject);\n        }\n    } else {\n        var base = index * 4 - 4;\n        this[base + 2] = promise;\n        this[base + 3] = receiver;\n        if (typeof fulfill === \"function\") {\n            this[base + 0] =\n                domain === null ? fulfill : util.domainBind(domain, fulfill);\n        }\n        if (typeof reject === \"function\") {\n            this[base + 1] =\n                domain === null ? reject : util.domainBind(domain, reject);\n        }\n    }\n    this._setLength(index + 1);\n    return index;\n};\n\nPromise.prototype._proxy = function (proxyable, arg) {\n    this._addCallbacks(undefined, undefined, arg, proxyable, null);\n};\n\nPromise.prototype._resolveCallback = function(value, shouldBind) {\n    if (((this._bitField & 117506048) !== 0)) return;\n    if (value === this)\n        return this._rejectCallback(makeSelfResolutionError(), false);\n    var maybePromise = tryConvertToPromise(value, this);\n    if (!(maybePromise instanceof Promise)) return this._fulfill(value);\n\n    if (shouldBind) this._propagateFrom(maybePromise, 2);\n\n    var promise = maybePromise._target();\n\n    if (promise === this) {\n        this._reject(makeSelfResolutionError());\n        return;\n    }\n\n    var bitField = promise._bitField;\n    if (((bitField & 50397184) === 0)) {\n        var len = this._length();\n        if (len > 0) promise._migrateCallback0(this);\n        for (var i = 1; i < len; ++i) {\n            promise._migrateCallbackAt(this, i);\n        }\n        this._setFollowing();\n        this._setLength(0);\n        this._setFollowee(promise);\n    } else if (((bitField & 33554432) !== 0)) {\n        this._fulfill(promise._value());\n    } else if (((bitField & 16777216) !== 0)) {\n        this._reject(promise._reason());\n    } else {\n        var reason = new CancellationError(\"late cancellation observer\");\n        promise._attachExtraTrace(reason);\n        this._reject(reason);\n    }\n};\n\nPromise.prototype._rejectCallback =\nfunction(reason, synchronous, ignoreNonErrorWarnings) {\n    var trace = util.ensureErrorObject(reason);\n    var hasStack = trace === reason;\n    if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) {\n        var message = \"a promise was rejected with a non-error: \" +\n            util.classString(reason);\n        this._warn(message, true);\n    }\n    this._attachExtraTrace(trace, synchronous ? hasStack : false);\n    this._reject(reason);\n};\n\nPromise.prototype._resolveFromExecutor = function (executor) {\n    if (executor === INTERNAL) return;\n    var promise = this;\n    this._captureStackTrace();\n    this._pushContext();\n    var synchronous = true;\n    var r = this._execute(executor, function(value) {\n        promise._resolveCallback(value);\n    }, function (reason) {\n        promise._rejectCallback(reason, synchronous);\n    });\n    synchronous = false;\n    this._popContext();\n\n    if (r !== undefined) {\n        promise._rejectCallback(r, true);\n    }\n};\n\nPromise.prototype._settlePromiseFromHandler = function (\n    handler, receiver, value, promise\n) {\n    var bitField = promise._bitField;\n    if (((bitField & 65536) !== 0)) return;\n    promise._pushContext();\n    var x;\n    if (receiver === APPLY) {\n        if (!value || typeof value.length !== \"number\") {\n            x = errorObj;\n            x.e = new TypeError(\"cannot .spread() a non-array: \" +\n                                    util.classString(value));\n        } else {\n            x = tryCatch(handler).apply(this._boundValue(), value);\n        }\n    } else {\n        x = tryCatch(handler).call(receiver, value);\n    }\n    var promiseCreated = promise._popContext();\n    bitField = promise._bitField;\n    if (((bitField & 65536) !== 0)) return;\n\n    if (x === NEXT_FILTER) {\n        promise._reject(value);\n    } else if (x === errorObj) {\n        promise._rejectCallback(x.e, false);\n    } else {\n        debug.checkForgottenReturns(x, promiseCreated, \"\",  promise, this);\n        promise._resolveCallback(x);\n    }\n};\n\nPromise.prototype._target = function() {\n    var ret = this;\n    while (ret._isFollowing()) ret = ret._followee();\n    return ret;\n};\n\nPromise.prototype._followee = function() {\n    return this._rejectionHandler0;\n};\n\nPromise.prototype._setFollowee = function(promise) {\n    this._rejectionHandler0 = promise;\n};\n\nPromise.prototype._settlePromise = function(promise, handler, receiver, value) {\n    var isPromise = promise instanceof Promise;\n    var bitField = this._bitField;\n    var asyncGuaranteed = ((bitField & 134217728) !== 0);\n    if (((bitField & 65536) !== 0)) {\n        if (isPromise) promise._invokeInternalOnCancel();\n\n        if (receiver instanceof PassThroughHandlerContext &&\n            receiver.isFinallyHandler()) {\n            receiver.cancelPromise = promise;\n            if (tryCatch(handler).call(receiver, value) === errorObj) {\n                promise._reject(errorObj.e);\n            }\n        } else if (handler === reflectHandler) {\n            promise._fulfill(reflectHandler.call(receiver));\n        } else if (receiver instanceof Proxyable) {\n            receiver._promiseCancelled(promise);\n        } else if (isPromise || promise instanceof PromiseArray) {\n            promise._cancel();\n        } else {\n            receiver.cancel();\n        }\n    } else if (typeof handler === \"function\") {\n        if (!isPromise) {\n            handler.call(receiver, value, promise);\n        } else {\n            if (asyncGuaranteed) promise._setAsyncGuaranteed();\n            this._settlePromiseFromHandler(handler, receiver, value, promise);\n        }\n    } else if (receiver instanceof Proxyable) {\n        if (!receiver._isResolved()) {\n            if (((bitField & 33554432) !== 0)) {\n                receiver._promiseFulfilled(value, promise);\n            } else {\n                receiver._promiseRejected(value, promise);\n            }\n        }\n    } else if (isPromise) {\n        if (asyncGuaranteed) promise._setAsyncGuaranteed();\n        if (((bitField & 33554432) !== 0)) {\n            promise._fulfill(value);\n        } else {\n            promise._reject(value);\n        }\n    }\n};\n\nPromise.prototype._settlePromiseLateCancellationObserver = function(ctx) {\n    var handler = ctx.handler;\n    var promise = ctx.promise;\n    var receiver = ctx.receiver;\n    var value = ctx.value;\n    if (typeof handler === \"function\") {\n        if (!(promise instanceof Promise)) {\n            handler.call(receiver, value, promise);\n        } else {\n            this._settlePromiseFromHandler(handler, receiver, value, promise);\n        }\n    } else if (promise instanceof Promise) {\n        promise._reject(value);\n    }\n};\n\nPromise.prototype._settlePromiseCtx = function(ctx) {\n    this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value);\n};\n\nPromise.prototype._settlePromise0 = function(handler, value, bitField) {\n    var promise = this._promise0;\n    var receiver = this._receiverAt(0);\n    this._promise0 = undefined;\n    this._receiver0 = undefined;\n    this._settlePromise(promise, handler, receiver, value);\n};\n\nPromise.prototype._clearCallbackDataAtIndex = function(index) {\n    var base = index * 4 - 4;\n    this[base + 2] =\n    this[base + 3] =\n    this[base + 0] =\n    this[base + 1] = undefined;\n};\n\nPromise.prototype._fulfill = function (value) {\n    var bitField = this._bitField;\n    if (((bitField & 117506048) >>> 16)) return;\n    if (value === this) {\n        var err = makeSelfResolutionError();\n        this._attachExtraTrace(err);\n        return this._reject(err);\n    }\n    this._setFulfilled();\n    this._rejectionHandler0 = value;\n\n    if ((bitField & 65535) > 0) {\n        if (((bitField & 134217728) !== 0)) {\n            this._settlePromises();\n        } else {\n            async.settlePromises(this);\n        }\n    }\n};\n\nPromise.prototype._reject = function (reason) {\n    var bitField = this._bitField;\n    if (((bitField & 117506048) >>> 16)) return;\n    this._setRejected();\n    this._fulfillmentHandler0 = reason;\n\n    if (this._isFinal()) {\n        return async.fatalError(reason, util.isNode);\n    }\n\n    if ((bitField & 65535) > 0) {\n        async.settlePromises(this);\n    } else {\n        this._ensurePossibleRejectionHandled();\n    }\n};\n\nPromise.prototype._fulfillPromises = function (len, value) {\n    for (var i = 1; i < len; i++) {\n        var handler = this._fulfillmentHandlerAt(i);\n        var promise = this._promiseAt(i);\n        var receiver = this._receiverAt(i);\n        this._clearCallbackDataAtIndex(i);\n        this._settlePromise(promise, handler, receiver, value);\n    }\n};\n\nPromise.prototype._rejectPromises = function (len, reason) {\n    for (var i = 1; i < len; i++) {\n        var handler = this._rejectionHandlerAt(i);\n        var promise = this._promiseAt(i);\n        var receiver = this._receiverAt(i);\n        this._clearCallbackDataAtIndex(i);\n        this._settlePromise(promise, handler, receiver, reason);\n    }\n};\n\nPromise.prototype._settlePromises = function () {\n    var bitField = this._bitField;\n    var len = (bitField & 65535);\n\n    if (len > 0) {\n        if (((bitField & 16842752) !== 0)) {\n            var reason = this._fulfillmentHandler0;\n            this._settlePromise0(this._rejectionHandler0, reason, bitField);\n            this._rejectPromises(len, reason);\n        } else {\n            var value = this._rejectionHandler0;\n            this._settlePromise0(this._fulfillmentHandler0, value, bitField);\n            this._fulfillPromises(len, value);\n        }\n        this._setLength(0);\n    }\n    this._clearCancellationData();\n};\n\nPromise.prototype._settledValue = function() {\n    var bitField = this._bitField;\n    if (((bitField & 33554432) !== 0)) {\n        return this._rejectionHandler0;\n    } else if (((bitField & 16777216) !== 0)) {\n        return this._fulfillmentHandler0;\n    }\n};\n\nfunction deferResolve(v) {this.promise._resolveCallback(v);}\nfunction deferReject(v) {this.promise._rejectCallback(v, false);}\n\nPromise.defer = Promise.pending = function() {\n    debug.deprecated(\"Promise.defer\", \"new Promise\");\n    var promise = new Promise(INTERNAL);\n    return {\n        promise: promise,\n        resolve: deferResolve,\n        reject: deferReject\n    };\n};\n\nutil.notEnumerableProp(Promise,\n                       \"_makeSelfResolutionError\",\n                       makeSelfResolutionError);\n\n_dereq_(\"./method\")(Promise, INTERNAL, tryConvertToPromise, apiRejection,\n    debug);\n_dereq_(\"./bind\")(Promise, INTERNAL, tryConvertToPromise, debug);\n_dereq_(\"./cancel\")(Promise, PromiseArray, apiRejection, debug);\n_dereq_(\"./direct_resolve\")(Promise);\n_dereq_(\"./synchronous_inspection\")(Promise);\n_dereq_(\"./join\")(\n    Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, getDomain);\nPromise.Promise = Promise;\nPromise.version = \"3.5.0\";\n_dereq_('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\n_dereq_('./call_get.js')(Promise);\n_dereq_('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug);\n_dereq_('./timers.js')(Promise, INTERNAL, debug);\n_dereq_('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug);\n_dereq_('./nodeify.js')(Promise);\n_dereq_('./promisify.js')(Promise, INTERNAL);\n_dereq_('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection);\n_dereq_('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection);\n_dereq_('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\n_dereq_('./settle.js')(Promise, PromiseArray, debug);\n_dereq_('./some.js')(Promise, PromiseArray, apiRejection);\n_dereq_('./filter.js')(Promise, INTERNAL);\n_dereq_('./each.js')(Promise, INTERNAL);\n_dereq_('./any.js')(Promise);\n                                                         \n    util.toFastProperties(Promise);                                          \n    util.toFastProperties(Promise.prototype);                                \n    function fillTypes(value) {                                              \n        var p = new Promise(INTERNAL);                                       \n        p._fulfillmentHandler0 = value;                                      \n        p._rejectionHandler0 = value;                                        \n        p._promise0 = value;                                                 \n        p._receiver0 = value;                                                \n    }                                                                        \n    // Complete slack tracking, opt out of field-type tracking and           \n    // stabilize map                                                         \n    fillTypes({a: 1});                                                       \n    fillTypes({b: 2});                                                       \n    fillTypes({c: 3});                                                       \n    fillTypes(1);                                                            \n    fillTypes(function(){});                                                 \n    fillTypes(undefined);                                                    \n    fillTypes(false);                                                        \n    fillTypes(new Promise(INTERNAL));                                        \n    debug.setBounds(Async.firstLineError, util.lastLineError);               \n    return Promise;                                                          \n\n};\n\n},{\"./any.js\":1,\"./async\":2,\"./bind\":3,\"./call_get.js\":5,\"./cancel\":6,\"./catch_filter\":7,\"./context\":8,\"./debuggability\":9,\"./direct_resolve\":10,\"./each.js\":11,\"./errors\":12,\"./es5\":13,\"./filter.js\":14,\"./finally\":15,\"./generators.js\":16,\"./join\":17,\"./map.js\":18,\"./method\":19,\"./nodeback\":20,\"./nodeify.js\":21,\"./promise_array\":23,\"./promisify.js\":24,\"./props.js\":25,\"./race.js\":27,\"./reduce.js\":28,\"./settle.js\":30,\"./some.js\":31,\"./synchronous_inspection\":32,\"./thenables\":33,\"./timers.js\":34,\"./using.js\":35,\"./util\":36}],23:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise,\n    apiRejection, Proxyable) {\nvar util = _dereq_(\"./util\");\nvar isArray = util.isArray;\n\nfunction toResolutionValue(val) {\n    switch(val) {\n    case -2: return [];\n    case -3: return {};\n    case -6: return new Map();\n    }\n}\n\nfunction PromiseArray(values) {\n    var promise = this._promise = new Promise(INTERNAL);\n    if (values instanceof Promise) {\n        promise._propagateFrom(values, 3);\n    }\n    promise._setOnCancel(this);\n    this._values = values;\n    this._length = 0;\n    this._totalResolved = 0;\n    this._init(undefined, -2);\n}\nutil.inherits(PromiseArray, Proxyable);\n\nPromiseArray.prototype.length = function () {\n    return this._length;\n};\n\nPromiseArray.prototype.promise = function () {\n    return this._promise;\n};\n\nPromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {\n    var values = tryConvertToPromise(this._values, this._promise);\n    if (values instanceof Promise) {\n        values = values._target();\n        var bitField = values._bitField;\n        ;\n        this._values = values;\n\n        if (((bitField & 50397184) === 0)) {\n            this._promise._setAsyncGuaranteed();\n            return values._then(\n                init,\n                this._reject,\n                undefined,\n                this,\n                resolveValueIfEmpty\n           );\n        } else if (((bitField & 33554432) !== 0)) {\n            values = values._value();\n        } else if (((bitField & 16777216) !== 0)) {\n            return this._reject(values._reason());\n        } else {\n            return this._cancel();\n        }\n    }\n    values = util.asArray(values);\n    if (values === null) {\n        var err = apiRejection(\n            \"expecting an array or an iterable object but got \" + util.classString(values)).reason();\n        this._promise._rejectCallback(err, false);\n        return;\n    }\n\n    if (values.length === 0) {\n        if (resolveValueIfEmpty === -5) {\n            this._resolveEmptyArray();\n        }\n        else {\n            this._resolve(toResolutionValue(resolveValueIfEmpty));\n        }\n        return;\n    }\n    this._iterate(values);\n};\n\nPromiseArray.prototype._iterate = function(values) {\n    var len = this.getActualLength(values.length);\n    this._length = len;\n    this._values = this.shouldCopyValues() ? new Array(len) : this._values;\n    var result = this._promise;\n    var isResolved = false;\n    var bitField = null;\n    for (var i = 0; i < len; ++i) {\n        var maybePromise = tryConvertToPromise(values[i], result);\n\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            bitField = maybePromise._bitField;\n        } else {\n            bitField = null;\n        }\n\n        if (isResolved) {\n            if (bitField !== null) {\n                maybePromise.suppressUnhandledRejections();\n            }\n        } else if (bitField !== null) {\n            if (((bitField & 50397184) === 0)) {\n                maybePromise._proxy(this, i);\n                this._values[i] = maybePromise;\n            } else if (((bitField & 33554432) !== 0)) {\n                isResolved = this._promiseFulfilled(maybePromise._value(), i);\n            } else if (((bitField & 16777216) !== 0)) {\n                isResolved = this._promiseRejected(maybePromise._reason(), i);\n            } else {\n                isResolved = this._promiseCancelled(i);\n            }\n        } else {\n            isResolved = this._promiseFulfilled(maybePromise, i);\n        }\n    }\n    if (!isResolved) result._setAsyncGuaranteed();\n};\n\nPromiseArray.prototype._isResolved = function () {\n    return this._values === null;\n};\n\nPromiseArray.prototype._resolve = function (value) {\n    this._values = null;\n    this._promise._fulfill(value);\n};\n\nPromiseArray.prototype._cancel = function() {\n    if (this._isResolved() || !this._promise._isCancellable()) return;\n    this._values = null;\n    this._promise._cancel();\n};\n\nPromiseArray.prototype._reject = function (reason) {\n    this._values = null;\n    this._promise._rejectCallback(reason, false);\n};\n\nPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    this._values[index] = value;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        this._resolve(this._values);\n        return true;\n    }\n    return false;\n};\n\nPromiseArray.prototype._promiseCancelled = function() {\n    this._cancel();\n    return true;\n};\n\nPromiseArray.prototype._promiseRejected = function (reason) {\n    this._totalResolved++;\n    this._reject(reason);\n    return true;\n};\n\nPromiseArray.prototype._resultCancelled = function() {\n    if (this._isResolved()) return;\n    var values = this._values;\n    this._cancel();\n    if (values instanceof Promise) {\n        values.cancel();\n    } else {\n        for (var i = 0; i < values.length; ++i) {\n            if (values[i] instanceof Promise) {\n                values[i].cancel();\n            }\n        }\n    }\n};\n\nPromiseArray.prototype.shouldCopyValues = function () {\n    return true;\n};\n\nPromiseArray.prototype.getActualLength = function (len) {\n    return len;\n};\n\nreturn PromiseArray;\n};\n\n},{\"./util\":36}],24:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar THIS = {};\nvar util = _dereq_(\"./util\");\nvar nodebackForPromise = _dereq_(\"./nodeback\");\nvar withAppended = util.withAppended;\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar canEvaluate = util.canEvaluate;\nvar TypeError = _dereq_(\"./errors\").TypeError;\nvar defaultSuffix = \"Async\";\nvar defaultPromisified = {__isPromisified__: true};\nvar noCopyProps = [\n    \"arity\",    \"length\",\n    \"name\",\n    \"arguments\",\n    \"caller\",\n    \"callee\",\n    \"prototype\",\n    \"__isPromisified__\"\n];\nvar noCopyPropsPattern = new RegExp(\"^(?:\" + noCopyProps.join(\"|\") + \")$\");\n\nvar defaultFilter = function(name) {\n    return util.isIdentifier(name) &&\n        name.charAt(0) !== \"_\" &&\n        name !== \"constructor\";\n};\n\nfunction propsFilter(key) {\n    return !noCopyPropsPattern.test(key);\n}\n\nfunction isPromisified(fn) {\n    try {\n        return fn.__isPromisified__ === true;\n    }\n    catch (e) {\n        return false;\n    }\n}\n\nfunction hasPromisified(obj, key, suffix) {\n    var val = util.getDataPropertyOrDefault(obj, key + suffix,\n                                            defaultPromisified);\n    return val ? isPromisified(val) : false;\n}\nfunction checkValid(ret, suffix, suffixRegexp) {\n    for (var i = 0; i < ret.length; i += 2) {\n        var key = ret[i];\n        if (suffixRegexp.test(key)) {\n            var keyWithoutAsyncSuffix = key.replace(suffixRegexp, \"\");\n            for (var j = 0; j < ret.length; j += 2) {\n                if (ret[j] === keyWithoutAsyncSuffix) {\n                    throw new TypeError(\"Cannot promisify an API that has normal methods with '%s'-suffix\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\"\n                        .replace(\"%s\", suffix));\n                }\n            }\n        }\n    }\n}\n\nfunction promisifiableMethods(obj, suffix, suffixRegexp, filter) {\n    var keys = util.inheritedDataKeys(obj);\n    var ret = [];\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var value = obj[key];\n        var passesDefaultFilter = filter === defaultFilter\n            ? true : defaultFilter(key, value, obj);\n        if (typeof value === \"function\" &&\n            !isPromisified(value) &&\n            !hasPromisified(obj, key, suffix) &&\n            filter(key, value, obj, passesDefaultFilter)) {\n            ret.push(key, value);\n        }\n    }\n    checkValid(ret, suffix, suffixRegexp);\n    return ret;\n}\n\nvar escapeIdentRegex = function(str) {\n    return str.replace(/([$])/, \"\\\\$\");\n};\n\nvar makeNodePromisifiedEval;\nif (!true) {\nvar switchCaseArgumentOrder = function(likelyArgumentCount) {\n    var ret = [likelyArgumentCount];\n    var min = Math.max(0, likelyArgumentCount - 1 - 3);\n    for(var i = likelyArgumentCount - 1; i >= min; --i) {\n        ret.push(i);\n    }\n    for(var i = likelyArgumentCount + 1; i <= 3; ++i) {\n        ret.push(i);\n    }\n    return ret;\n};\n\nvar argumentSequence = function(argumentCount) {\n    return util.filledRange(argumentCount, \"_arg\", \"\");\n};\n\nvar parameterDeclaration = function(parameterCount) {\n    return util.filledRange(\n        Math.max(parameterCount, 3), \"_arg\", \"\");\n};\n\nvar parameterCount = function(fn) {\n    if (typeof fn.length === \"number\") {\n        return Math.max(Math.min(fn.length, 1023 + 1), 0);\n    }\n    return 0;\n};\n\nmakeNodePromisifiedEval =\nfunction(callback, receiver, originalName, fn, _, multiArgs) {\n    var newParameterCount = Math.max(0, parameterCount(fn) - 1);\n    var argumentOrder = switchCaseArgumentOrder(newParameterCount);\n    var shouldProxyThis = typeof callback === \"string\" || receiver === THIS;\n\n    function generateCallForArgumentCount(count) {\n        var args = argumentSequence(count).join(\", \");\n        var comma = count > 0 ? \", \" : \"\";\n        var ret;\n        if (shouldProxyThis) {\n            ret = \"ret = callback.call(this, {{args}}, nodeback); break;\\n\";\n        } else {\n            ret = receiver === undefined\n                ? \"ret = callback({{args}}, nodeback); break;\\n\"\n                : \"ret = callback.call(receiver, {{args}}, nodeback); break;\\n\";\n        }\n        return ret.replace(\"{{args}}\", args).replace(\", \", comma);\n    }\n\n    function generateArgumentSwitchCase() {\n        var ret = \"\";\n        for (var i = 0; i < argumentOrder.length; ++i) {\n            ret += \"case \" + argumentOrder[i] +\":\" +\n                generateCallForArgumentCount(argumentOrder[i]);\n        }\n\n        ret += \"                                                             \\n\\\n        default:                                                             \\n\\\n            var args = new Array(len + 1);                                   \\n\\\n            var i = 0;                                                       \\n\\\n            for (var i = 0; i < len; ++i) {                                  \\n\\\n               args[i] = arguments[i];                                       \\n\\\n            }                                                                \\n\\\n            args[i] = nodeback;                                              \\n\\\n            [CodeForCall]                                                    \\n\\\n            break;                                                           \\n\\\n        \".replace(\"[CodeForCall]\", (shouldProxyThis\n                                ? \"ret = callback.apply(this, args);\\n\"\n                                : \"ret = callback.apply(receiver, args);\\n\"));\n        return ret;\n    }\n\n    var getFunctionCode = typeof callback === \"string\"\n                                ? (\"this != null ? this['\"+callback+\"'] : fn\")\n                                : \"fn\";\n    var body = \"'use strict';                                                \\n\\\n        var ret = function (Parameters) {                                    \\n\\\n            'use strict';                                                    \\n\\\n            var len = arguments.length;                                      \\n\\\n            var promise = new Promise(INTERNAL);                             \\n\\\n            promise._captureStackTrace();                                    \\n\\\n            var nodeback = nodebackForPromise(promise, \" + multiArgs + \");   \\n\\\n            var ret;                                                         \\n\\\n            var callback = tryCatch([GetFunctionCode]);                      \\n\\\n            switch(len) {                                                    \\n\\\n                [CodeForSwitchCase]                                          \\n\\\n            }                                                                \\n\\\n            if (ret === errorObj) {                                          \\n\\\n                promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\\n\\\n            }                                                                \\n\\\n            if (!promise._isFateSealed()) promise._setAsyncGuaranteed();     \\n\\\n            return promise;                                                  \\n\\\n        };                                                                   \\n\\\n        notEnumerableProp(ret, '__isPromisified__', true);                   \\n\\\n        return ret;                                                          \\n\\\n    \".replace(\"[CodeForSwitchCase]\", generateArgumentSwitchCase())\n        .replace(\"[GetFunctionCode]\", getFunctionCode);\n    body = body.replace(\"Parameters\", parameterDeclaration(newParameterCount));\n    return new Function(\"Promise\",\n                        \"fn\",\n                        \"receiver\",\n                        \"withAppended\",\n                        \"maybeWrapAsError\",\n                        \"nodebackForPromise\",\n                        \"tryCatch\",\n                        \"errorObj\",\n                        \"notEnumerableProp\",\n                        \"INTERNAL\",\n                        body)(\n                    Promise,\n                    fn,\n                    receiver,\n                    withAppended,\n                    maybeWrapAsError,\n                    nodebackForPromise,\n                    util.tryCatch,\n                    util.errorObj,\n                    util.notEnumerableProp,\n                    INTERNAL);\n};\n}\n\nfunction makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) {\n    var defaultThis = (function() {return this;})();\n    var method = callback;\n    if (typeof method === \"string\") {\n        callback = fn;\n    }\n    function promisified() {\n        var _receiver = receiver;\n        if (receiver === THIS) _receiver = this;\n        var promise = new Promise(INTERNAL);\n        promise._captureStackTrace();\n        var cb = typeof method === \"string\" && this !== defaultThis\n            ? this[method] : callback;\n        var fn = nodebackForPromise(promise, multiArgs);\n        try {\n            cb.apply(_receiver, withAppended(arguments, fn));\n        } catch(e) {\n            promise._rejectCallback(maybeWrapAsError(e), true, true);\n        }\n        if (!promise._isFateSealed()) promise._setAsyncGuaranteed();\n        return promise;\n    }\n    util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n    return promisified;\n}\n\nvar makeNodePromisified = canEvaluate\n    ? makeNodePromisifiedEval\n    : makeNodePromisifiedClosure;\n\nfunction promisifyAll(obj, suffix, filter, promisifier, multiArgs) {\n    var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + \"$\");\n    var methods =\n        promisifiableMethods(obj, suffix, suffixRegexp, filter);\n\n    for (var i = 0, len = methods.length; i < len; i+= 2) {\n        var key = methods[i];\n        var fn = methods[i+1];\n        var promisifiedKey = key + suffix;\n        if (promisifier === makeNodePromisified) {\n            obj[promisifiedKey] =\n                makeNodePromisified(key, THIS, key, fn, suffix, multiArgs);\n        } else {\n            var promisified = promisifier(fn, function() {\n                return makeNodePromisified(key, THIS, key,\n                                           fn, suffix, multiArgs);\n            });\n            util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n            obj[promisifiedKey] = promisified;\n        }\n    }\n    util.toFastProperties(obj);\n    return obj;\n}\n\nfunction promisify(callback, receiver, multiArgs) {\n    return makeNodePromisified(callback, receiver, undefined,\n                                callback, null, multiArgs);\n}\n\nPromise.promisify = function (fn, options) {\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    if (isPromisified(fn)) {\n        return fn;\n    }\n    options = Object(options);\n    var receiver = options.context === undefined ? THIS : options.context;\n    var multiArgs = !!options.multiArgs;\n    var ret = promisify(fn, receiver, multiArgs);\n    util.copyDescriptors(fn, ret, propsFilter);\n    return ret;\n};\n\nPromise.promisifyAll = function (target, options) {\n    if (typeof target !== \"function\" && typeof target !== \"object\") {\n        throw new TypeError(\"the target of promisifyAll must be an object or a function\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    options = Object(options);\n    var multiArgs = !!options.multiArgs;\n    var suffix = options.suffix;\n    if (typeof suffix !== \"string\") suffix = defaultSuffix;\n    var filter = options.filter;\n    if (typeof filter !== \"function\") filter = defaultFilter;\n    var promisifier = options.promisifier;\n    if (typeof promisifier !== \"function\") promisifier = makeNodePromisified;\n\n    if (!util.isIdentifier(suffix)) {\n        throw new RangeError(\"suffix must be a valid identifier\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n\n    var keys = util.inheritedDataKeys(target);\n    for (var i = 0; i < keys.length; ++i) {\n        var value = target[keys[i]];\n        if (keys[i] !== \"constructor\" &&\n            util.isClass(value)) {\n            promisifyAll(value.prototype, suffix, filter, promisifier,\n                multiArgs);\n            promisifyAll(value, suffix, filter, promisifier, multiArgs);\n        }\n    }\n\n    return promisifyAll(target, suffix, filter, promisifier, multiArgs);\n};\n};\n\n\n},{\"./errors\":12,\"./nodeback\":20,\"./util\":36}],25:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(\n    Promise, PromiseArray, tryConvertToPromise, apiRejection) {\nvar util = _dereq_(\"./util\");\nvar isObject = util.isObject;\nvar es5 = _dereq_(\"./es5\");\nvar Es6Map;\nif (typeof Map === \"function\") Es6Map = Map;\n\nvar mapToEntries = (function() {\n    var index = 0;\n    var size = 0;\n\n    function extractEntry(value, key) {\n        this[index] = value;\n        this[index + size] = key;\n        index++;\n    }\n\n    return function mapToEntries(map) {\n        size = map.size;\n        index = 0;\n        var ret = new Array(map.size * 2);\n        map.forEach(extractEntry, ret);\n        return ret;\n    };\n})();\n\nvar entriesToMap = function(entries) {\n    var ret = new Es6Map();\n    var length = entries.length / 2 | 0;\n    for (var i = 0; i < length; ++i) {\n        var key = entries[length + i];\n        var value = entries[i];\n        ret.set(key, value);\n    }\n    return ret;\n};\n\nfunction PropertiesPromiseArray(obj) {\n    var isMap = false;\n    var entries;\n    if (Es6Map !== undefined && obj instanceof Es6Map) {\n        entries = mapToEntries(obj);\n        isMap = true;\n    } else {\n        var keys = es5.keys(obj);\n        var len = keys.length;\n        entries = new Array(len * 2);\n        for (var i = 0; i < len; ++i) {\n            var key = keys[i];\n            entries[i] = obj[key];\n            entries[i + len] = key;\n        }\n    }\n    this.constructor$(entries);\n    this._isMap = isMap;\n    this._init$(undefined, isMap ? -6 : -3);\n}\nutil.inherits(PropertiesPromiseArray, PromiseArray);\n\nPropertiesPromiseArray.prototype._init = function () {};\n\nPropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    this._values[index] = value;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        var val;\n        if (this._isMap) {\n            val = entriesToMap(this._values);\n        } else {\n            val = {};\n            var keyOffset = this.length();\n            for (var i = 0, len = this.length(); i < len; ++i) {\n                val[this._values[i + keyOffset]] = this._values[i];\n            }\n        }\n        this._resolve(val);\n        return true;\n    }\n    return false;\n};\n\nPropertiesPromiseArray.prototype.shouldCopyValues = function () {\n    return false;\n};\n\nPropertiesPromiseArray.prototype.getActualLength = function (len) {\n    return len >> 1;\n};\n\nfunction props(promises) {\n    var ret;\n    var castValue = tryConvertToPromise(promises);\n\n    if (!isObject(castValue)) {\n        return apiRejection(\"cannot await properties of a non-object\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    } else if (castValue instanceof Promise) {\n        ret = castValue._then(\n            Promise.props, undefined, undefined, undefined, undefined);\n    } else {\n        ret = new PropertiesPromiseArray(castValue).promise();\n    }\n\n    if (castValue instanceof Promise) {\n        ret._propagateFrom(castValue, 2);\n    }\n    return ret;\n}\n\nPromise.prototype.props = function () {\n    return props(this);\n};\n\nPromise.props = function (promises) {\n    return props(promises);\n};\n};\n\n},{\"./es5\":13,\"./util\":36}],26:[function(_dereq_,module,exports){\n\"use strict\";\nfunction arrayMove(src, srcIndex, dst, dstIndex, len) {\n    for (var j = 0; j < len; ++j) {\n        dst[j + dstIndex] = src[j + srcIndex];\n        src[j + srcIndex] = void 0;\n    }\n}\n\nfunction Queue(capacity) {\n    this._capacity = capacity;\n    this._length = 0;\n    this._front = 0;\n}\n\nQueue.prototype._willBeOverCapacity = function (size) {\n    return this._capacity < size;\n};\n\nQueue.prototype._pushOne = function (arg) {\n    var length = this.length();\n    this._checkCapacity(length + 1);\n    var i = (this._front + length) & (this._capacity - 1);\n    this[i] = arg;\n    this._length = length + 1;\n};\n\nQueue.prototype.push = function (fn, receiver, arg) {\n    var length = this.length() + 3;\n    if (this._willBeOverCapacity(length)) {\n        this._pushOne(fn);\n        this._pushOne(receiver);\n        this._pushOne(arg);\n        return;\n    }\n    var j = this._front + length - 3;\n    this._checkCapacity(length);\n    var wrapMask = this._capacity - 1;\n    this[(j + 0) & wrapMask] = fn;\n    this[(j + 1) & wrapMask] = receiver;\n    this[(j + 2) & wrapMask] = arg;\n    this._length = length;\n};\n\nQueue.prototype.shift = function () {\n    var front = this._front,\n        ret = this[front];\n\n    this[front] = undefined;\n    this._front = (front + 1) & (this._capacity - 1);\n    this._length--;\n    return ret;\n};\n\nQueue.prototype.length = function () {\n    return this._length;\n};\n\nQueue.prototype._checkCapacity = function (size) {\n    if (this._capacity < size) {\n        this._resizeTo(this._capacity << 1);\n    }\n};\n\nQueue.prototype._resizeTo = function (capacity) {\n    var oldCapacity = this._capacity;\n    this._capacity = capacity;\n    var front = this._front;\n    var length = this._length;\n    var moveItemsCount = (front + length) & (oldCapacity - 1);\n    arrayMove(this, 0, this, oldCapacity, moveItemsCount);\n};\n\nmodule.exports = Queue;\n\n},{}],27:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(\n    Promise, INTERNAL, tryConvertToPromise, apiRejection) {\nvar util = _dereq_(\"./util\");\n\nvar raceLater = function (promise) {\n    return promise.then(function(array) {\n        return race(array, promise);\n    });\n};\n\nfunction race(promises, parent) {\n    var maybePromise = tryConvertToPromise(promises);\n\n    if (maybePromise instanceof Promise) {\n        return raceLater(maybePromise);\n    } else {\n        promises = util.asArray(promises);\n        if (promises === null)\n            return apiRejection(\"expecting an array or an iterable object but got \" + util.classString(promises));\n    }\n\n    var ret = new Promise(INTERNAL);\n    if (parent !== undefined) {\n        ret._propagateFrom(parent, 3);\n    }\n    var fulfill = ret._fulfill;\n    var reject = ret._reject;\n    for (var i = 0, len = promises.length; i < len; ++i) {\n        var val = promises[i];\n\n        if (val === undefined && !(i in promises)) {\n            continue;\n        }\n\n        Promise.cast(val)._then(fulfill, reject, undefined, ret, null);\n    }\n    return ret;\n}\n\nPromise.race = function (promises) {\n    return race(promises, undefined);\n};\n\nPromise.prototype.race = function () {\n    return race(this, undefined);\n};\n\n};\n\n},{\"./util\":36}],28:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n                          PromiseArray,\n                          apiRejection,\n                          tryConvertToPromise,\n                          INTERNAL,\n                          debug) {\nvar getDomain = Promise._getDomain;\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\n\nfunction ReductionPromiseArray(promises, fn, initialValue, _each) {\n    this.constructor$(promises);\n    var domain = getDomain();\n    this._fn = domain === null ? fn : util.domainBind(domain, fn);\n    if (initialValue !== undefined) {\n        initialValue = Promise.resolve(initialValue);\n        initialValue._attachCancellationCallback(this);\n    }\n    this._initialValue = initialValue;\n    this._currentCancellable = null;\n    if(_each === INTERNAL) {\n        this._eachValues = Array(this._length);\n    } else if (_each === 0) {\n        this._eachValues = null;\n    } else {\n        this._eachValues = undefined;\n    }\n    this._promise._captureStackTrace();\n    this._init$(undefined, -5);\n}\nutil.inherits(ReductionPromiseArray, PromiseArray);\n\nReductionPromiseArray.prototype._gotAccum = function(accum) {\n    if (this._eachValues !== undefined && \n        this._eachValues !== null && \n        accum !== INTERNAL) {\n        this._eachValues.push(accum);\n    }\n};\n\nReductionPromiseArray.prototype._eachComplete = function(value) {\n    if (this._eachValues !== null) {\n        this._eachValues.push(value);\n    }\n    return this._eachValues;\n};\n\nReductionPromiseArray.prototype._init = function() {};\n\nReductionPromiseArray.prototype._resolveEmptyArray = function() {\n    this._resolve(this._eachValues !== undefined ? this._eachValues\n                                                 : this._initialValue);\n};\n\nReductionPromiseArray.prototype.shouldCopyValues = function () {\n    return false;\n};\n\nReductionPromiseArray.prototype._resolve = function(value) {\n    this._promise._resolveCallback(value);\n    this._values = null;\n};\n\nReductionPromiseArray.prototype._resultCancelled = function(sender) {\n    if (sender === this._initialValue) return this._cancel();\n    if (this._isResolved()) return;\n    this._resultCancelled$();\n    if (this._currentCancellable instanceof Promise) {\n        this._currentCancellable.cancel();\n    }\n    if (this._initialValue instanceof Promise) {\n        this._initialValue.cancel();\n    }\n};\n\nReductionPromiseArray.prototype._iterate = function (values) {\n    this._values = values;\n    var value;\n    var i;\n    var length = values.length;\n    if (this._initialValue !== undefined) {\n        value = this._initialValue;\n        i = 0;\n    } else {\n        value = Promise.resolve(values[0]);\n        i = 1;\n    }\n\n    this._currentCancellable = value;\n\n    if (!value.isRejected()) {\n        for (; i < length; ++i) {\n            var ctx = {\n                accum: null,\n                value: values[i],\n                index: i,\n                length: length,\n                array: this\n            };\n            value = value._then(gotAccum, undefined, undefined, ctx, undefined);\n        }\n    }\n\n    if (this._eachValues !== undefined) {\n        value = value\n            ._then(this._eachComplete, undefined, undefined, this, undefined);\n    }\n    value._then(completed, completed, undefined, value, this);\n};\n\nPromise.prototype.reduce = function (fn, initialValue) {\n    return reduce(this, fn, initialValue, null);\n};\n\nPromise.reduce = function (promises, fn, initialValue, _each) {\n    return reduce(promises, fn, initialValue, _each);\n};\n\nfunction completed(valueOrReason, array) {\n    if (this.isFulfilled()) {\n        array._resolve(valueOrReason);\n    } else {\n        array._reject(valueOrReason);\n    }\n}\n\nfunction reduce(promises, fn, initialValue, _each) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n    var array = new ReductionPromiseArray(promises, fn, initialValue, _each);\n    return array.promise();\n}\n\nfunction gotAccum(accum) {\n    this.accum = accum;\n    this.array._gotAccum(accum);\n    var value = tryConvertToPromise(this.value, this.array._promise);\n    if (value instanceof Promise) {\n        this.array._currentCancellable = value;\n        return value._then(gotValue, undefined, undefined, this, undefined);\n    } else {\n        return gotValue.call(this, value);\n    }\n}\n\nfunction gotValue(value) {\n    var array = this.array;\n    var promise = array._promise;\n    var fn = tryCatch(array._fn);\n    promise._pushContext();\n    var ret;\n    if (array._eachValues !== undefined) {\n        ret = fn.call(promise._boundValue(), value, this.index, this.length);\n    } else {\n        ret = fn.call(promise._boundValue(),\n                              this.accum, value, this.index, this.length);\n    }\n    if (ret instanceof Promise) {\n        array._currentCancellable = ret;\n    }\n    var promiseCreated = promise._popContext();\n    debug.checkForgottenReturns(\n        ret,\n        promiseCreated,\n        array._eachValues !== undefined ? \"Promise.each\" : \"Promise.reduce\",\n        promise\n    );\n    return ret;\n}\n};\n\n},{\"./util\":36}],29:[function(_dereq_,module,exports){\n\"use strict\";\nvar util = _dereq_(\"./util\");\nvar schedule;\nvar noAsyncScheduler = function() {\n    throw new Error(\"No async scheduler available\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n};\nvar NativePromise = util.getNativePromise();\nif (util.isNode && typeof MutationObserver === \"undefined\") {\n    var GlobalSetImmediate = global.setImmediate;\n    var ProcessNextTick = process.nextTick;\n    schedule = util.isRecentNode\n                ? function(fn) { GlobalSetImmediate.call(global, fn); }\n                : function(fn) { ProcessNextTick.call(process, fn); };\n} else if (typeof NativePromise === \"function\" &&\n           typeof NativePromise.resolve === \"function\") {\n    var nativePromise = NativePromise.resolve();\n    schedule = function(fn) {\n        nativePromise.then(fn);\n    };\n} else if ((typeof MutationObserver !== \"undefined\") &&\n          !(typeof window !== \"undefined\" &&\n            window.navigator &&\n            (window.navigator.standalone || window.cordova))) {\n    schedule = (function() {\n        var div = document.createElement(\"div\");\n        var opts = {attributes: true};\n        var toggleScheduled = false;\n        var div2 = document.createElement(\"div\");\n        var o2 = new MutationObserver(function() {\n            div.classList.toggle(\"foo\");\n            toggleScheduled = false;\n        });\n        o2.observe(div2, opts);\n\n        var scheduleToggle = function() {\n            if (toggleScheduled) return;\n            toggleScheduled = true;\n            div2.classList.toggle(\"foo\");\n        };\n\n        return function schedule(fn) {\n            var o = new MutationObserver(function() {\n                o.disconnect();\n                fn();\n            });\n            o.observe(div, opts);\n            scheduleToggle();\n        };\n    })();\n} else if (typeof setImmediate !== \"undefined\") {\n    schedule = function (fn) {\n        setImmediate(fn);\n    };\n} else if (typeof setTimeout !== \"undefined\") {\n    schedule = function (fn) {\n        setTimeout(fn, 0);\n    };\n} else {\n    schedule = noAsyncScheduler;\n}\nmodule.exports = schedule;\n\n},{\"./util\":36}],30:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\n    function(Promise, PromiseArray, debug) {\nvar PromiseInspection = Promise.PromiseInspection;\nvar util = _dereq_(\"./util\");\n\nfunction SettledPromiseArray(values) {\n    this.constructor$(values);\n}\nutil.inherits(SettledPromiseArray, PromiseArray);\n\nSettledPromiseArray.prototype._promiseResolved = function (index, inspection) {\n    this._values[index] = inspection;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        this._resolve(this._values);\n        return true;\n    }\n    return false;\n};\n\nSettledPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    var ret = new PromiseInspection();\n    ret._bitField = 33554432;\n    ret._settledValueField = value;\n    return this._promiseResolved(index, ret);\n};\nSettledPromiseArray.prototype._promiseRejected = function (reason, index) {\n    var ret = new PromiseInspection();\n    ret._bitField = 16777216;\n    ret._settledValueField = reason;\n    return this._promiseResolved(index, ret);\n};\n\nPromise.settle = function (promises) {\n    debug.deprecated(\".settle()\", \".reflect()\");\n    return new SettledPromiseArray(promises).promise();\n};\n\nPromise.prototype.settle = function () {\n    return Promise.settle(this);\n};\n};\n\n},{\"./util\":36}],31:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, apiRejection) {\nvar util = _dereq_(\"./util\");\nvar RangeError = _dereq_(\"./errors\").RangeError;\nvar AggregateError = _dereq_(\"./errors\").AggregateError;\nvar isArray = util.isArray;\nvar CANCELLATION = {};\n\n\nfunction SomePromiseArray(values) {\n    this.constructor$(values);\n    this._howMany = 0;\n    this._unwrap = false;\n    this._initialized = false;\n}\nutil.inherits(SomePromiseArray, PromiseArray);\n\nSomePromiseArray.prototype._init = function () {\n    if (!this._initialized) {\n        return;\n    }\n    if (this._howMany === 0) {\n        this._resolve([]);\n        return;\n    }\n    this._init$(undefined, -5);\n    var isArrayResolved = isArray(this._values);\n    if (!this._isResolved() &&\n        isArrayResolved &&\n        this._howMany > this._canPossiblyFulfill()) {\n        this._reject(this._getRangeError(this.length()));\n    }\n};\n\nSomePromiseArray.prototype.init = function () {\n    this._initialized = true;\n    this._init();\n};\n\nSomePromiseArray.prototype.setUnwrap = function () {\n    this._unwrap = true;\n};\n\nSomePromiseArray.prototype.howMany = function () {\n    return this._howMany;\n};\n\nSomePromiseArray.prototype.setHowMany = function (count) {\n    this._howMany = count;\n};\n\nSomePromiseArray.prototype._promiseFulfilled = function (value) {\n    this._addFulfilled(value);\n    if (this._fulfilled() === this.howMany()) {\n        this._values.length = this.howMany();\n        if (this.howMany() === 1 && this._unwrap) {\n            this._resolve(this._values[0]);\n        } else {\n            this._resolve(this._values);\n        }\n        return true;\n    }\n    return false;\n\n};\nSomePromiseArray.prototype._promiseRejected = function (reason) {\n    this._addRejected(reason);\n    return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._promiseCancelled = function () {\n    if (this._values instanceof Promise || this._values == null) {\n        return this._cancel();\n    }\n    this._addRejected(CANCELLATION);\n    return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._checkOutcome = function() {\n    if (this.howMany() > this._canPossiblyFulfill()) {\n        var e = new AggregateError();\n        for (var i = this.length(); i < this._values.length; ++i) {\n            if (this._values[i] !== CANCELLATION) {\n                e.push(this._values[i]);\n            }\n        }\n        if (e.length > 0) {\n            this._reject(e);\n        } else {\n            this._cancel();\n        }\n        return true;\n    }\n    return false;\n};\n\nSomePromiseArray.prototype._fulfilled = function () {\n    return this._totalResolved;\n};\n\nSomePromiseArray.prototype._rejected = function () {\n    return this._values.length - this.length();\n};\n\nSomePromiseArray.prototype._addRejected = function (reason) {\n    this._values.push(reason);\n};\n\nSomePromiseArray.prototype._addFulfilled = function (value) {\n    this._values[this._totalResolved++] = value;\n};\n\nSomePromiseArray.prototype._canPossiblyFulfill = function () {\n    return this.length() - this._rejected();\n};\n\nSomePromiseArray.prototype._getRangeError = function (count) {\n    var message = \"Input array must contain at least \" +\n            this._howMany + \" items but contains only \" + count + \" items\";\n    return new RangeError(message);\n};\n\nSomePromiseArray.prototype._resolveEmptyArray = function () {\n    this._reject(this._getRangeError(0));\n};\n\nfunction some(promises, howMany) {\n    if ((howMany | 0) !== howMany || howMany < 0) {\n        return apiRejection(\"expecting a positive integer\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    var ret = new SomePromiseArray(promises);\n    var promise = ret.promise();\n    ret.setHowMany(howMany);\n    ret.init();\n    return promise;\n}\n\nPromise.some = function (promises, howMany) {\n    return some(promises, howMany);\n};\n\nPromise.prototype.some = function (howMany) {\n    return some(this, howMany);\n};\n\nPromise._SomePromiseArray = SomePromiseArray;\n};\n\n},{\"./errors\":12,\"./util\":36}],32:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nfunction PromiseInspection(promise) {\n    if (promise !== undefined) {\n        promise = promise._target();\n        this._bitField = promise._bitField;\n        this._settledValueField = promise._isFateSealed()\n            ? promise._settledValue() : undefined;\n    }\n    else {\n        this._bitField = 0;\n        this._settledValueField = undefined;\n    }\n}\n\nPromiseInspection.prototype._settledValue = function() {\n    return this._settledValueField;\n};\n\nvar value = PromiseInspection.prototype.value = function () {\n    if (!this.isFulfilled()) {\n        throw new TypeError(\"cannot get fulfillment value of a non-fulfilled promise\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    return this._settledValue();\n};\n\nvar reason = PromiseInspection.prototype.error =\nPromiseInspection.prototype.reason = function () {\n    if (!this.isRejected()) {\n        throw new TypeError(\"cannot get rejection reason of a non-rejected promise\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    return this._settledValue();\n};\n\nvar isFulfilled = PromiseInspection.prototype.isFulfilled = function() {\n    return (this._bitField & 33554432) !== 0;\n};\n\nvar isRejected = PromiseInspection.prototype.isRejected = function () {\n    return (this._bitField & 16777216) !== 0;\n};\n\nvar isPending = PromiseInspection.prototype.isPending = function () {\n    return (this._bitField & 50397184) === 0;\n};\n\nvar isResolved = PromiseInspection.prototype.isResolved = function () {\n    return (this._bitField & 50331648) !== 0;\n};\n\nPromiseInspection.prototype.isCancelled = function() {\n    return (this._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.__isCancelled = function() {\n    return (this._bitField & 65536) === 65536;\n};\n\nPromise.prototype._isCancelled = function() {\n    return this._target().__isCancelled();\n};\n\nPromise.prototype.isCancelled = function() {\n    return (this._target()._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.isPending = function() {\n    return isPending.call(this._target());\n};\n\nPromise.prototype.isRejected = function() {\n    return isRejected.call(this._target());\n};\n\nPromise.prototype.isFulfilled = function() {\n    return isFulfilled.call(this._target());\n};\n\nPromise.prototype.isResolved = function() {\n    return isResolved.call(this._target());\n};\n\nPromise.prototype.value = function() {\n    return value.call(this._target());\n};\n\nPromise.prototype.reason = function() {\n    var target = this._target();\n    target._unsetRejectionIsUnhandled();\n    return reason.call(target);\n};\n\nPromise.prototype._value = function() {\n    return this._settledValue();\n};\n\nPromise.prototype._reason = function() {\n    this._unsetRejectionIsUnhandled();\n    return this._settledValue();\n};\n\nPromise.PromiseInspection = PromiseInspection;\n};\n\n},{}],33:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar util = _dereq_(\"./util\");\nvar errorObj = util.errorObj;\nvar isObject = util.isObject;\n\nfunction tryConvertToPromise(obj, context) {\n    if (isObject(obj)) {\n        if (obj instanceof Promise) return obj;\n        var then = getThen(obj);\n        if (then === errorObj) {\n            if (context) context._pushContext();\n            var ret = Promise.reject(then.e);\n            if (context) context._popContext();\n            return ret;\n        } else if (typeof then === \"function\") {\n            if (isAnyBluebirdPromise(obj)) {\n                var ret = new Promise(INTERNAL);\n                obj._then(\n                    ret._fulfill,\n                    ret._reject,\n                    undefined,\n                    ret,\n                    null\n                );\n                return ret;\n            }\n            return doThenable(obj, then, context);\n        }\n    }\n    return obj;\n}\n\nfunction doGetThen(obj) {\n    return obj.then;\n}\n\nfunction getThen(obj) {\n    try {\n        return doGetThen(obj);\n    } catch (e) {\n        errorObj.e = e;\n        return errorObj;\n    }\n}\n\nvar hasProp = {}.hasOwnProperty;\nfunction isAnyBluebirdPromise(obj) {\n    try {\n        return hasProp.call(obj, \"_promise0\");\n    } catch (e) {\n        return false;\n    }\n}\n\nfunction doThenable(x, then, context) {\n    var promise = new Promise(INTERNAL);\n    var ret = promise;\n    if (context) context._pushContext();\n    promise._captureStackTrace();\n    if (context) context._popContext();\n    var synchronous = true;\n    var result = util.tryCatch(then).call(x, resolve, reject);\n    synchronous = false;\n\n    if (promise && result === errorObj) {\n        promise._rejectCallback(result.e, true, true);\n        promise = null;\n    }\n\n    function resolve(value) {\n        if (!promise) return;\n        promise._resolveCallback(value);\n        promise = null;\n    }\n\n    function reject(reason) {\n        if (!promise) return;\n        promise._rejectCallback(reason, synchronous, true);\n        promise = null;\n    }\n    return ret;\n}\n\nreturn tryConvertToPromise;\n};\n\n},{\"./util\":36}],34:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, debug) {\nvar util = _dereq_(\"./util\");\nvar TimeoutError = Promise.TimeoutError;\n\nfunction HandleWrapper(handle)  {\n    this.handle = handle;\n}\n\nHandleWrapper.prototype._resultCancelled = function() {\n    clearTimeout(this.handle);\n};\n\nvar afterValue = function(value) { return delay(+this).thenReturn(value); };\nvar delay = Promise.delay = function (ms, value) {\n    var ret;\n    var handle;\n    if (value !== undefined) {\n        ret = Promise.resolve(value)\n                ._then(afterValue, null, null, ms, undefined);\n        if (debug.cancellation() && value instanceof Promise) {\n            ret._setOnCancel(value);\n        }\n    } else {\n        ret = new Promise(INTERNAL);\n        handle = setTimeout(function() { ret._fulfill(); }, +ms);\n        if (debug.cancellation()) {\n            ret._setOnCancel(new HandleWrapper(handle));\n        }\n        ret._captureStackTrace();\n    }\n    ret._setAsyncGuaranteed();\n    return ret;\n};\n\nPromise.prototype.delay = function (ms) {\n    return delay(ms, this);\n};\n\nvar afterTimeout = function (promise, message, parent) {\n    var err;\n    if (typeof message !== \"string\") {\n        if (message instanceof Error) {\n            err = message;\n        } else {\n            err = new TimeoutError(\"operation timed out\");\n        }\n    } else {\n        err = new TimeoutError(message);\n    }\n    util.markAsOriginatingFromRejection(err);\n    promise._attachExtraTrace(err);\n    promise._reject(err);\n\n    if (parent != null) {\n        parent.cancel();\n    }\n};\n\nfunction successClear(value) {\n    clearTimeout(this.handle);\n    return value;\n}\n\nfunction failureClear(reason) {\n    clearTimeout(this.handle);\n    throw reason;\n}\n\nPromise.prototype.timeout = function (ms, message) {\n    ms = +ms;\n    var ret, parent;\n\n    var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() {\n        if (ret.isPending()) {\n            afterTimeout(ret, message, parent);\n        }\n    }, ms));\n\n    if (debug.cancellation()) {\n        parent = this.then();\n        ret = parent._then(successClear, failureClear,\n                            undefined, handleWrapper, undefined);\n        ret._setOnCancel(handleWrapper);\n    } else {\n        ret = this._then(successClear, failureClear,\n                            undefined, handleWrapper, undefined);\n    }\n\n    return ret;\n};\n\n};\n\n},{\"./util\":36}],35:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function (Promise, apiRejection, tryConvertToPromise,\n    createContext, INTERNAL, debug) {\n    var util = _dereq_(\"./util\");\n    var TypeError = _dereq_(\"./errors\").TypeError;\n    var inherits = _dereq_(\"./util\").inherits;\n    var errorObj = util.errorObj;\n    var tryCatch = util.tryCatch;\n    var NULL = {};\n\n    function thrower(e) {\n        setTimeout(function(){throw e;}, 0);\n    }\n\n    function castPreservingDisposable(thenable) {\n        var maybePromise = tryConvertToPromise(thenable);\n        if (maybePromise !== thenable &&\n            typeof thenable._isDisposable === \"function\" &&\n            typeof thenable._getDisposer === \"function\" &&\n            thenable._isDisposable()) {\n            maybePromise._setDisposable(thenable._getDisposer());\n        }\n        return maybePromise;\n    }\n    function dispose(resources, inspection) {\n        var i = 0;\n        var len = resources.length;\n        var ret = new Promise(INTERNAL);\n        function iterator() {\n            if (i >= len) return ret._fulfill();\n            var maybePromise = castPreservingDisposable(resources[i++]);\n            if (maybePromise instanceof Promise &&\n                maybePromise._isDisposable()) {\n                try {\n                    maybePromise = tryConvertToPromise(\n                        maybePromise._getDisposer().tryDispose(inspection),\n                        resources.promise);\n                } catch (e) {\n                    return thrower(e);\n                }\n                if (maybePromise instanceof Promise) {\n                    return maybePromise._then(iterator, thrower,\n                                              null, null, null);\n                }\n            }\n            iterator();\n        }\n        iterator();\n        return ret;\n    }\n\n    function Disposer(data, promise, context) {\n        this._data = data;\n        this._promise = promise;\n        this._context = context;\n    }\n\n    Disposer.prototype.data = function () {\n        return this._data;\n    };\n\n    Disposer.prototype.promise = function () {\n        return this._promise;\n    };\n\n    Disposer.prototype.resource = function () {\n        if (this.promise().isFulfilled()) {\n            return this.promise().value();\n        }\n        return NULL;\n    };\n\n    Disposer.prototype.tryDispose = function(inspection) {\n        var resource = this.resource();\n        var context = this._context;\n        if (context !== undefined) context._pushContext();\n        var ret = resource !== NULL\n            ? this.doDispose(resource, inspection) : null;\n        if (context !== undefined) context._popContext();\n        this._promise._unsetDisposable();\n        this._data = null;\n        return ret;\n    };\n\n    Disposer.isDisposer = function (d) {\n        return (d != null &&\n                typeof d.resource === \"function\" &&\n                typeof d.tryDispose === \"function\");\n    };\n\n    function FunctionDisposer(fn, promise, context) {\n        this.constructor$(fn, promise, context);\n    }\n    inherits(FunctionDisposer, Disposer);\n\n    FunctionDisposer.prototype.doDispose = function (resource, inspection) {\n        var fn = this.data();\n        return fn.call(resource, resource, inspection);\n    };\n\n    function maybeUnwrapDisposer(value) {\n        if (Disposer.isDisposer(value)) {\n            this.resources[this.index]._setDisposable(value);\n            return value.promise();\n        }\n        return value;\n    }\n\n    function ResourceList(length) {\n        this.length = length;\n        this.promise = null;\n        this[length-1] = null;\n    }\n\n    ResourceList.prototype._resultCancelled = function() {\n        var len = this.length;\n        for (var i = 0; i < len; ++i) {\n            var item = this[i];\n            if (item instanceof Promise) {\n                item.cancel();\n            }\n        }\n    };\n\n    Promise.using = function () {\n        var len = arguments.length;\n        if (len < 2) return apiRejection(\n                        \"you must pass at least 2 arguments to Promise.using\");\n        var fn = arguments[len - 1];\n        if (typeof fn !== \"function\") {\n            return apiRejection(\"expecting a function but got \" + util.classString(fn));\n        }\n        var input;\n        var spreadArgs = true;\n        if (len === 2 && Array.isArray(arguments[0])) {\n            input = arguments[0];\n            len = input.length;\n            spreadArgs = false;\n        } else {\n            input = arguments;\n            len--;\n        }\n        var resources = new ResourceList(len);\n        for (var i = 0; i < len; ++i) {\n            var resource = input[i];\n            if (Disposer.isDisposer(resource)) {\n                var disposer = resource;\n                resource = resource.promise();\n                resource._setDisposable(disposer);\n            } else {\n                var maybePromise = tryConvertToPromise(resource);\n                if (maybePromise instanceof Promise) {\n                    resource =\n                        maybePromise._then(maybeUnwrapDisposer, null, null, {\n                            resources: resources,\n                            index: i\n                    }, undefined);\n                }\n            }\n            resources[i] = resource;\n        }\n\n        var reflectedResources = new Array(resources.length);\n        for (var i = 0; i < reflectedResources.length; ++i) {\n            reflectedResources[i] = Promise.resolve(resources[i]).reflect();\n        }\n\n        var resultPromise = Promise.all(reflectedResources)\n            .then(function(inspections) {\n                for (var i = 0; i < inspections.length; ++i) {\n                    var inspection = inspections[i];\n                    if (inspection.isRejected()) {\n                        errorObj.e = inspection.error();\n                        return errorObj;\n                    } else if (!inspection.isFulfilled()) {\n                        resultPromise.cancel();\n                        return;\n                    }\n                    inspections[i] = inspection.value();\n                }\n                promise._pushContext();\n\n                fn = tryCatch(fn);\n                var ret = spreadArgs\n                    ? fn.apply(undefined, inspections) : fn(inspections);\n                var promiseCreated = promise._popContext();\n                debug.checkForgottenReturns(\n                    ret, promiseCreated, \"Promise.using\", promise);\n                return ret;\n            });\n\n        var promise = resultPromise.lastly(function() {\n            var inspection = new Promise.PromiseInspection(resultPromise);\n            return dispose(resources, inspection);\n        });\n        resources.promise = promise;\n        promise._setOnCancel(resources);\n        return promise;\n    };\n\n    Promise.prototype._setDisposable = function (disposer) {\n        this._bitField = this._bitField | 131072;\n        this._disposer = disposer;\n    };\n\n    Promise.prototype._isDisposable = function () {\n        return (this._bitField & 131072) > 0;\n    };\n\n    Promise.prototype._getDisposer = function () {\n        return this._disposer;\n    };\n\n    Promise.prototype._unsetDisposable = function () {\n        this._bitField = this._bitField & (~131072);\n        this._disposer = undefined;\n    };\n\n    Promise.prototype.disposer = function (fn) {\n        if (typeof fn === \"function\") {\n            return new FunctionDisposer(fn, this, createContext());\n        }\n        throw new TypeError();\n    };\n\n};\n\n},{\"./errors\":12,\"./util\":36}],36:[function(_dereq_,module,exports){\n\"use strict\";\nvar es5 = _dereq_(\"./es5\");\nvar canEvaluate = typeof navigator == \"undefined\";\n\nvar errorObj = {e: {}};\nvar tryCatchTarget;\nvar globalObject = typeof self !== \"undefined\" ? self :\n    typeof window !== \"undefined\" ? window :\n    typeof global !== \"undefined\" ? global :\n    this !== undefined ? this : null;\n\nfunction tryCatcher() {\n    try {\n        var target = tryCatchTarget;\n        tryCatchTarget = null;\n        return target.apply(this, arguments);\n    } catch (e) {\n        errorObj.e = e;\n        return errorObj;\n    }\n}\nfunction tryCatch(fn) {\n    tryCatchTarget = fn;\n    return tryCatcher;\n}\n\nvar inherits = function(Child, Parent) {\n    var hasProp = {}.hasOwnProperty;\n\n    function T() {\n        this.constructor = Child;\n        this.constructor$ = Parent;\n        for (var propertyName in Parent.prototype) {\n            if (hasProp.call(Parent.prototype, propertyName) &&\n                propertyName.charAt(propertyName.length-1) !== \"$\"\n           ) {\n                this[propertyName + \"$\"] = Parent.prototype[propertyName];\n            }\n        }\n    }\n    T.prototype = Parent.prototype;\n    Child.prototype = new T();\n    return Child.prototype;\n};\n\n\nfunction isPrimitive(val) {\n    return val == null || val === true || val === false ||\n        typeof val === \"string\" || typeof val === \"number\";\n\n}\n\nfunction isObject(value) {\n    return typeof value === \"function\" ||\n           typeof value === \"object\" && value !== null;\n}\n\nfunction maybeWrapAsError(maybeError) {\n    if (!isPrimitive(maybeError)) return maybeError;\n\n    return new Error(safeToString(maybeError));\n}\n\nfunction withAppended(target, appendee) {\n    var len = target.length;\n    var ret = new Array(len + 1);\n    var i;\n    for (i = 0; i < len; ++i) {\n        ret[i] = target[i];\n    }\n    ret[i] = appendee;\n    return ret;\n}\n\nfunction getDataPropertyOrDefault(obj, key, defaultValue) {\n    if (es5.isES5) {\n        var desc = Object.getOwnPropertyDescriptor(obj, key);\n\n        if (desc != null) {\n            return desc.get == null && desc.set == null\n                    ? desc.value\n                    : defaultValue;\n        }\n    } else {\n        return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;\n    }\n}\n\nfunction notEnumerableProp(obj, name, value) {\n    if (isPrimitive(obj)) return obj;\n    var descriptor = {\n        value: value,\n        configurable: true,\n        enumerable: false,\n        writable: true\n    };\n    es5.defineProperty(obj, name, descriptor);\n    return obj;\n}\n\nfunction thrower(r) {\n    throw r;\n}\n\nvar inheritedDataKeys = (function() {\n    var excludedPrototypes = [\n        Array.prototype,\n        Object.prototype,\n        Function.prototype\n    ];\n\n    var isExcludedProto = function(val) {\n        for (var i = 0; i < excludedPrototypes.length; ++i) {\n            if (excludedPrototypes[i] === val) {\n                return true;\n            }\n        }\n        return false;\n    };\n\n    if (es5.isES5) {\n        var getKeys = Object.getOwnPropertyNames;\n        return function(obj) {\n            var ret = [];\n            var visitedKeys = Object.create(null);\n            while (obj != null && !isExcludedProto(obj)) {\n                var keys;\n                try {\n                    keys = getKeys(obj);\n                } catch (e) {\n                    return ret;\n                }\n                for (var i = 0; i < keys.length; ++i) {\n                    var key = keys[i];\n                    if (visitedKeys[key]) continue;\n                    visitedKeys[key] = true;\n                    var desc = Object.getOwnPropertyDescriptor(obj, key);\n                    if (desc != null && desc.get == null && desc.set == null) {\n                        ret.push(key);\n                    }\n                }\n                obj = es5.getPrototypeOf(obj);\n            }\n            return ret;\n        };\n    } else {\n        var hasProp = {}.hasOwnProperty;\n        return function(obj) {\n            if (isExcludedProto(obj)) return [];\n            var ret = [];\n\n            /*jshint forin:false */\n            enumeration: for (var key in obj) {\n                if (hasProp.call(obj, key)) {\n                    ret.push(key);\n                } else {\n                    for (var i = 0; i < excludedPrototypes.length; ++i) {\n                        if (hasProp.call(excludedPrototypes[i], key)) {\n                            continue enumeration;\n                        }\n                    }\n                    ret.push(key);\n                }\n            }\n            return ret;\n        };\n    }\n\n})();\n\nvar thisAssignmentPattern = /this\\s*\\.\\s*\\S+\\s*=/;\nfunction isClass(fn) {\n    try {\n        if (typeof fn === \"function\") {\n            var keys = es5.names(fn.prototype);\n\n            var hasMethods = es5.isES5 && keys.length > 1;\n            var hasMethodsOtherThanConstructor = keys.length > 0 &&\n                !(keys.length === 1 && keys[0] === \"constructor\");\n            var hasThisAssignmentAndStaticMethods =\n                thisAssignmentPattern.test(fn + \"\") && es5.names(fn).length > 0;\n\n            if (hasMethods || hasMethodsOtherThanConstructor ||\n                hasThisAssignmentAndStaticMethods) {\n                return true;\n            }\n        }\n        return false;\n    } catch (e) {\n        return false;\n    }\n}\n\nfunction toFastProperties(obj) {\n    /*jshint -W027,-W055,-W031*/\n    function FakeConstructor() {}\n    FakeConstructor.prototype = obj;\n    var l = 8;\n    while (l--) new FakeConstructor();\n    return obj;\n    eval(obj);\n}\n\nvar rident = /^[a-z$_][a-z$_0-9]*$/i;\nfunction isIdentifier(str) {\n    return rident.test(str);\n}\n\nfunction filledRange(count, prefix, suffix) {\n    var ret = new Array(count);\n    for(var i = 0; i < count; ++i) {\n        ret[i] = prefix + i + suffix;\n    }\n    return ret;\n}\n\nfunction safeToString(obj) {\n    try {\n        return obj + \"\";\n    } catch (e) {\n        return \"[no string representation]\";\n    }\n}\n\nfunction isError(obj) {\n    return obj !== null &&\n           typeof obj === \"object\" &&\n           typeof obj.message === \"string\" &&\n           typeof obj.name === \"string\";\n}\n\nfunction markAsOriginatingFromRejection(e) {\n    try {\n        notEnumerableProp(e, \"isOperational\", true);\n    }\n    catch(ignore) {}\n}\n\nfunction originatesFromRejection(e) {\n    if (e == null) return false;\n    return ((e instanceof Error[\"__BluebirdErrorTypes__\"].OperationalError) ||\n        e[\"isOperational\"] === true);\n}\n\nfunction canAttachTrace(obj) {\n    return isError(obj) && es5.propertyIsWritable(obj, \"stack\");\n}\n\nvar ensureErrorObject = (function() {\n    if (!(\"stack\" in new Error())) {\n        return function(value) {\n            if (canAttachTrace(value)) return value;\n            try {throw new Error(safeToString(value));}\n            catch(err) {return err;}\n        };\n    } else {\n        return function(value) {\n            if (canAttachTrace(value)) return value;\n            return new Error(safeToString(value));\n        };\n    }\n})();\n\nfunction classString(obj) {\n    return {}.toString.call(obj);\n}\n\nfunction copyDescriptors(from, to, filter) {\n    var keys = es5.names(from);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        if (filter(key)) {\n            try {\n                es5.defineProperty(to, key, es5.getDescriptor(from, key));\n            } catch (ignore) {}\n        }\n    }\n}\n\nvar asArray = function(v) {\n    if (es5.isArray(v)) {\n        return v;\n    }\n    return null;\n};\n\nif (typeof Symbol !== \"undefined\" && Symbol.iterator) {\n    var ArrayFrom = typeof Array.from === \"function\" ? function(v) {\n        return Array.from(v);\n    } : function(v) {\n        var ret = [];\n        var it = v[Symbol.iterator]();\n        var itResult;\n        while (!((itResult = it.next()).done)) {\n            ret.push(itResult.value);\n        }\n        return ret;\n    };\n\n    asArray = function(v) {\n        if (es5.isArray(v)) {\n            return v;\n        } else if (v != null && typeof v[Symbol.iterator] === \"function\") {\n            return ArrayFrom(v);\n        }\n        return null;\n    };\n}\n\nvar isNode = typeof process !== \"undefined\" &&\n        classString(process).toLowerCase() === \"[object process]\";\n\nvar hasEnvVariables = typeof process !== \"undefined\" &&\n    typeof process.env !== \"undefined\";\n\nfunction env(key) {\n    return hasEnvVariables ? process.env[key] : undefined;\n}\n\nfunction getNativePromise() {\n    if (typeof Promise === \"function\") {\n        try {\n            var promise = new Promise(function(){});\n            if ({}.toString.call(promise) === \"[object Promise]\") {\n                return Promise;\n            }\n        } catch (e) {}\n    }\n}\n\nfunction domainBind(self, cb) {\n    return self.bind(cb);\n}\n\nvar ret = {\n    isClass: isClass,\n    isIdentifier: isIdentifier,\n    inheritedDataKeys: inheritedDataKeys,\n    getDataPropertyOrDefault: getDataPropertyOrDefault,\n    thrower: thrower,\n    isArray: es5.isArray,\n    asArray: asArray,\n    notEnumerableProp: notEnumerableProp,\n    isPrimitive: isPrimitive,\n    isObject: isObject,\n    isError: isError,\n    canEvaluate: canEvaluate,\n    errorObj: errorObj,\n    tryCatch: tryCatch,\n    inherits: inherits,\n    withAppended: withAppended,\n    maybeWrapAsError: maybeWrapAsError,\n    toFastProperties: toFastProperties,\n    filledRange: filledRange,\n    toString: safeToString,\n    canAttachTrace: canAttachTrace,\n    ensureErrorObject: ensureErrorObject,\n    originatesFromRejection: originatesFromRejection,\n    markAsOriginatingFromRejection: markAsOriginatingFromRejection,\n    classString: classString,\n    copyDescriptors: copyDescriptors,\n    hasDevTools: typeof chrome !== \"undefined\" && chrome &&\n                 typeof chrome.loadTimes === \"function\",\n    isNode: isNode,\n    hasEnvVariables: hasEnvVariables,\n    env: env,\n    global: globalObject,\n    getNativePromise: getNativePromise,\n    domainBind: domainBind\n};\nret.isRecentNode = ret.isNode && (function() {\n    var version = process.versions.node.split(\".\").map(Number);\n    return (version[0] === 0 && version[1] > 10) || (version[0] > 0);\n})();\n\nif (ret.isNode) ret.toFastProperties(process);\n\ntry {throw new Error(); } catch (e) {ret.lastLineError = e;}\nmodule.exports = ret;\n\n},{\"./es5\":13}]},{},[4])(4)\n});                    ;if (typeof window !== 'undefined' && window !== null) {                               window.P = window.Promise;                                                     } else if (typeof self !== 'undefined' && self !== null) {                             self.P = self.Promise;                                                         }","(function (global, undefined) {\n    \"use strict\";\n\n    if (global.setImmediate) {\n        return;\n    }\n\n    var nextHandle = 1; // Spec says greater than zero\n    var tasksByHandle = {};\n    var currentlyRunningATask = false;\n    var doc = global.document;\n    var registerImmediate;\n\n    function setImmediate(callback) {\n      // Callback can either be a function or a string\n      if (typeof callback !== \"function\") {\n        callback = new Function(\"\" + callback);\n      }\n      // Copy function arguments\n      var args = new Array(arguments.length - 1);\n      for (var i = 0; i < args.length; i++) {\n          args[i] = arguments[i + 1];\n      }\n      // Store and register the task\n      var task = { callback: callback, args: args };\n      tasksByHandle[nextHandle] = task;\n      registerImmediate(nextHandle);\n      return nextHandle++;\n    }\n\n    function clearImmediate(handle) {\n        delete tasksByHandle[handle];\n    }\n\n    function run(task) {\n        var callback = task.callback;\n        var args = task.args;\n        switch (args.length) {\n        case 0:\n            callback();\n            break;\n        case 1:\n            callback(args[0]);\n            break;\n        case 2:\n            callback(args[0], args[1]);\n            break;\n        case 3:\n            callback(args[0], args[1], args[2]);\n            break;\n        default:\n            callback.apply(undefined, args);\n            break;\n        }\n    }\n\n    function runIfPresent(handle) {\n        // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n        // So if we're currently running a task, we'll need to delay this invocation.\n        if (currentlyRunningATask) {\n            // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n            // \"too much recursion\" error.\n            setTimeout(runIfPresent, 0, handle);\n        } else {\n            var task = tasksByHandle[handle];\n            if (task) {\n                currentlyRunningATask = true;\n                try {\n                    run(task);\n                } finally {\n                    clearImmediate(handle);\n                    currentlyRunningATask = false;\n                }\n            }\n        }\n    }\n\n    function installNextTickImplementation() {\n        registerImmediate = function(handle) {\n            process.nextTick(function () { runIfPresent(handle); });\n        };\n    }\n\n    function canUsePostMessage() {\n        // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n        // where `global.postMessage` means something completely different and can't be used for this purpose.\n        if (global.postMessage && !global.importScripts) {\n            var postMessageIsAsynchronous = true;\n            var oldOnMessage = global.onmessage;\n            global.onmessage = function() {\n                postMessageIsAsynchronous = false;\n            };\n            global.postMessage(\"\", \"*\");\n            global.onmessage = oldOnMessage;\n            return postMessageIsAsynchronous;\n        }\n    }\n\n    function installPostMessageImplementation() {\n        // Installs an event handler on `global` for the `message` event: see\n        // * https://developer.mozilla.org/en/DOM/window.postMessage\n        // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n        var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n        var onGlobalMessage = function(event) {\n            if (event.source === global &&\n                typeof event.data === \"string\" &&\n                event.data.indexOf(messagePrefix) === 0) {\n                runIfPresent(+event.data.slice(messagePrefix.length));\n            }\n        };\n\n        if (global.addEventListener) {\n            global.addEventListener(\"message\", onGlobalMessage, false);\n        } else {\n            global.attachEvent(\"onmessage\", onGlobalMessage);\n        }\n\n        registerImmediate = function(handle) {\n            global.postMessage(messagePrefix + handle, \"*\");\n        };\n    }\n\n    function installMessageChannelImplementation() {\n        var channel = new MessageChannel();\n        channel.port1.onmessage = function(event) {\n            var handle = event.data;\n            runIfPresent(handle);\n        };\n\n        registerImmediate = function(handle) {\n            channel.port2.postMessage(handle);\n        };\n    }\n\n    function installReadyStateChangeImplementation() {\n        var html = doc.documentElement;\n        registerImmediate = function(handle) {\n            // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n            // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n            var script = doc.createElement(\"script\");\n            script.onreadystatechange = function () {\n                runIfPresent(handle);\n                script.onreadystatechange = null;\n                html.removeChild(script);\n                script = null;\n            };\n            html.appendChild(script);\n        };\n    }\n\n    function installSetTimeoutImplementation() {\n        registerImmediate = function(handle) {\n            setTimeout(runIfPresent, 0, handle);\n        };\n    }\n\n    // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n    var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n    attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n    // Don't get fooled by e.g. browserify environments.\n    if ({}.toString.call(global.process) === \"[object process]\") {\n        // For Node.js before 0.9\n        installNextTickImplementation();\n\n    } else if (canUsePostMessage()) {\n        // For non-IE10 modern browsers\n        installPostMessageImplementation();\n\n    } else if (global.MessageChannel) {\n        // For web workers, where supported\n        installMessageChannelImplementation();\n\n    } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n        // For IE 6–8\n        installReadyStateChangeImplementation();\n\n    } else {\n        // For older browsers\n        installSetTimeoutImplementation();\n    }\n\n    attachTo.setImmediate = setImmediate;\n    attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n","module.exports = global[\"jQuery\"] = require(\"-!.\\\\jquery.js\");","/*!\n * jQuery JavaScript Library v3.5.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2020-05-04T22:49Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n      // Support: Chrome <=57, Firefox <=52\n      // In some browsers, typeof returns \"function\" for HTML <object> elements\n      // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n      // We don't want to classify *any* DOM node as a function.\n      return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n  };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.5.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( _i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.5\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2020-03-14\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[ \"ID\" ] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[ \"TAG\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr[ \"CHILD\" ].test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"odd\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"gt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos[ \"nth\" ] = Expr.pseudos[ \"eq\" ];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rcombinators.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[ \"TAG\" ]( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[ \"needsContext\" ].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px\";\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = parseInt( trStyle.height ) > 3;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = (\n\t\t\t\t\tdataPriv.get( cur, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script\n\t\t\tif ( !isSuccess && jQuery.inArray( \"script\", s.dataTypes ) > -1 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tif ( typeof props.top === \"number\" ) {\n\t\t\t\tprops.top += \"px\";\n\t\t\t}\n\t\t\tif ( typeof props.left === \"number\" ) {\n\t\t\t\tprops.left += \"px\";\n\t\t\t}\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t} );\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","import { IRecordReference, RecordReference } from \"shared-models/record-reference\";\n\nexport interface ICarrierReference extends IRecordReference{shippingMethods: IShippingMethodReference[]};\nexport class CarrierReference extends RecordReference{   \n    shippingMethods: ShippingMethodReference[]\n    constructor(data: ICarrierReference){\n        super(data)  \n        this.shippingMethods = (data.shippingMethods || []).map((shippingMethod) => new ShippingMethodReference(shippingMethod));      \n    }\n\n    hasColdChainShipMethod(): boolean {\n        let foundShipMethod = this.getColdChainShipMethod();\n        if(foundShipMethod){\n            return true;\n        }\n        return false;\n    }\n\n    getColdChainShipMethod(): ShippingMethodReference {\n        return this.shippingMethods.find((shipMethod) => shipMethod.isColdChain());\n    }\n}\n\nexport interface IShippingMethodReference extends IRecordReference{};\nexport class ShippingMethodReference extends RecordReference{   \n    constructor(data: IShippingMethodReference){\n        super(data)        \n    }\n\n    isColdChain(): boolean{\n        if(this.name.indexOf(\"Cold Chain\") > -1){\n            return true;\n        }\n        return false;\n    }\n}"," /*\n * # Fomantic UI - 2.7.6\n * https://github.com/fomantic/Fomantic-UI\n * http://fomantic-ui.com/\n *\n * Copyright 2014 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n/*!\n * # Fomantic-UI - Site\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n$.isFunction = $.isFunction || function(obj) {\n    return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\n$.site = $.fn.site = function(parameters) {\n  var\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    settings        = ( $.isPlainObject(parameters) )\n      ? $.extend(true, {}, $.site.settings, parameters)\n      : $.extend({}, $.site.settings),\n\n    namespace       = settings.namespace,\n    error           = settings.error,\n\n    moduleNamespace = 'module-' + namespace,\n\n    $document       = $(document),\n    $module         = $document,\n    element         = this,\n    instance        = $module.data(moduleNamespace),\n\n    module,\n    returnedValue\n  ;\n  module = {\n\n    initialize: function() {\n      module.instantiate();\n    },\n\n    instantiate: function() {\n      module.verbose('Storing instance of site', module);\n      instance = module;\n      $module\n        .data(moduleNamespace, module)\n      ;\n    },\n\n    normalize: function() {\n      module.fix.console();\n      module.fix.requestAnimationFrame();\n    },\n\n    fix: {\n      console: function() {\n        module.debug('Normalizing window.console');\n        if (console === undefined || console.log === undefined) {\n          module.verbose('Console not available, normalizing events');\n          module.disable.console();\n        }\n        if (typeof console.group == 'undefined' || typeof console.groupEnd == 'undefined' || typeof console.groupCollapsed == 'undefined') {\n          module.verbose('Console group not available, normalizing events');\n          window.console.group = function() {};\n          window.console.groupEnd = function() {};\n          window.console.groupCollapsed = function() {};\n        }\n        if (typeof console.markTimeline == 'undefined') {\n          module.verbose('Mark timeline not available, normalizing events');\n          window.console.markTimeline = function() {};\n        }\n      },\n      consoleClear: function() {\n        module.debug('Disabling programmatic console clearing');\n        window.console.clear = function() {};\n      },\n      requestAnimationFrame: function() {\n        module.debug('Normalizing requestAnimationFrame');\n        if(window.requestAnimationFrame === undefined) {\n          module.debug('RequestAnimationFrame not available, normalizing event');\n          window.requestAnimationFrame = window.requestAnimationFrame\n            || window.mozRequestAnimationFrame\n            || window.webkitRequestAnimationFrame\n            || window.msRequestAnimationFrame\n            || function(callback) { setTimeout(callback, 0); }\n          ;\n        }\n      }\n    },\n\n    moduleExists: function(name) {\n      return ($.fn[name] !== undefined && $.fn[name].settings !== undefined);\n    },\n\n    enabled: {\n      modules: function(modules) {\n        var\n          enabledModules = []\n        ;\n        modules = modules || settings.modules;\n        $.each(modules, function(index, name) {\n          if(module.moduleExists(name)) {\n            enabledModules.push(name);\n          }\n        });\n        return enabledModules;\n      }\n    },\n\n    disabled: {\n      modules: function(modules) {\n        var\n          disabledModules = []\n        ;\n        modules = modules || settings.modules;\n        $.each(modules, function(index, name) {\n          if(!module.moduleExists(name)) {\n            disabledModules.push(name);\n          }\n        });\n        return disabledModules;\n      }\n    },\n\n    change: {\n      setting: function(setting, value, modules, modifyExisting) {\n        modules = (typeof modules === 'string')\n          ? (modules === 'all')\n            ? settings.modules\n            : [modules]\n          : modules || settings.modules\n        ;\n        modifyExisting = (modifyExisting !== undefined)\n          ? modifyExisting\n          : true\n        ;\n        $.each(modules, function(index, name) {\n          var\n            namespace = (module.moduleExists(name))\n              ? $.fn[name].settings.namespace || false\n              : true,\n            $existingModules\n          ;\n          if(module.moduleExists(name)) {\n            module.verbose('Changing default setting', setting, value, name);\n            $.fn[name].settings[setting] = value;\n            if(modifyExisting && namespace) {\n              $existingModules = $(':data(module-' + namespace + ')');\n              if($existingModules.length > 0) {\n                module.verbose('Modifying existing settings', $existingModules);\n                $existingModules[name]('setting', setting, value);\n              }\n            }\n          }\n        });\n      },\n      settings: function(newSettings, modules, modifyExisting) {\n        modules = (typeof modules === 'string')\n          ? [modules]\n          : modules || settings.modules\n        ;\n        modifyExisting = (modifyExisting !== undefined)\n          ? modifyExisting\n          : true\n        ;\n        $.each(modules, function(index, name) {\n          var\n            $existingModules\n          ;\n          if(module.moduleExists(name)) {\n            module.verbose('Changing default setting', newSettings, name);\n            $.extend(true, $.fn[name].settings, newSettings);\n            if(modifyExisting && namespace) {\n              $existingModules = $(':data(module-' + namespace + ')');\n              if($existingModules.length > 0) {\n                module.verbose('Modifying existing settings', $existingModules);\n                $existingModules[name]('setting', newSettings);\n              }\n            }\n          }\n        });\n      }\n    },\n\n    enable: {\n      console: function() {\n        module.console(true);\n      },\n      debug: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Enabling debug for modules', modules);\n        module.change.setting('debug', true, modules, modifyExisting);\n      },\n      verbose: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Enabling verbose debug for modules', modules);\n        module.change.setting('verbose', true, modules, modifyExisting);\n      }\n    },\n    disable: {\n      console: function() {\n        module.console(false);\n      },\n      debug: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Disabling debug for modules', modules);\n        module.change.setting('debug', false, modules, modifyExisting);\n      },\n      verbose: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Disabling verbose debug for modules', modules);\n        module.change.setting('verbose', false, modules, modifyExisting);\n      }\n    },\n\n    console: function(enable) {\n      if(enable) {\n        if(instance.cache.console === undefined) {\n          module.error(error.console);\n          return;\n        }\n        module.debug('Restoring console function');\n        window.console = instance.cache.console;\n      }\n      else {\n        module.debug('Disabling console function');\n        instance.cache.console = window.console;\n        window.console = {\n          clear          : function(){},\n          error          : function(){},\n          group          : function(){},\n          groupCollapsed : function(){},\n          groupEnd       : function(){},\n          info           : function(){},\n          log            : function(){},\n          markTimeline   : function(){},\n          warn           : function(){}\n        };\n      }\n    },\n\n    destroy: function() {\n      module.verbose('Destroying previous site for', $module);\n      $module\n        .removeData(moduleNamespace)\n      ;\n    },\n\n    cache: {},\n\n    setting: function(name, value) {\n      if( $.isPlainObject(name) ) {\n        $.extend(true, settings, name);\n      }\n      else if(value !== undefined) {\n        settings[name] = value;\n      }\n      else {\n        return settings[name];\n      }\n    },\n    internal: function(name, value) {\n      if( $.isPlainObject(name) ) {\n        $.extend(true, module, name);\n      }\n      else if(value !== undefined) {\n        module[name] = value;\n      }\n      else {\n        return module[name];\n      }\n    },\n    debug: function() {\n      if(settings.debug) {\n        if(settings.performance) {\n          module.performance.log(arguments);\n        }\n        else {\n          module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n          module.debug.apply(console, arguments);\n        }\n      }\n    },\n    verbose: function() {\n      if(settings.verbose && settings.debug) {\n        if(settings.performance) {\n          module.performance.log(arguments);\n        }\n        else {\n          module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n          module.verbose.apply(console, arguments);\n        }\n      }\n    },\n    error: function() {\n      module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n      module.error.apply(console, arguments);\n    },\n    performance: {\n      log: function(message) {\n        var\n          currentTime,\n          executionTime,\n          previousTime\n        ;\n        if(settings.performance) {\n          currentTime   = new Date().getTime();\n          previousTime  = time || currentTime;\n          executionTime = currentTime - previousTime;\n          time          = currentTime;\n          performance.push({\n            'Element'        : element,\n            'Name'           : message[0],\n            'Arguments'      : [].slice.call(message, 1) || '',\n            'Execution Time' : executionTime\n          });\n        }\n        clearTimeout(module.performance.timer);\n        module.performance.timer = setTimeout(module.performance.display, 500);\n      },\n      display: function() {\n        var\n          title = settings.name + ':',\n          totalTime = 0\n        ;\n        time = false;\n        clearTimeout(module.performance.timer);\n        $.each(performance, function(index, data) {\n          totalTime += data['Execution Time'];\n        });\n        title += ' ' + totalTime + 'ms';\n        if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n          console.groupCollapsed(title);\n          if(console.table) {\n            console.table(performance);\n          }\n          else {\n            $.each(performance, function(index, data) {\n              console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n            });\n          }\n          console.groupEnd();\n        }\n        performance = [];\n      }\n    },\n    invoke: function(query, passedArguments, context) {\n      var\n        object = instance,\n        maxDepth,\n        found,\n        response\n      ;\n      passedArguments = passedArguments || queryArguments;\n      context         = element         || context;\n      if(typeof query == 'string' && object !== undefined) {\n        query    = query.split(/[\\. ]/);\n        maxDepth = query.length - 1;\n        $.each(query, function(depth, value) {\n          var camelCaseValue = (depth != maxDepth)\n            ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n            : query\n          ;\n          if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n            object = object[camelCaseValue];\n          }\n          else if( object[camelCaseValue] !== undefined ) {\n            found = object[camelCaseValue];\n            return false;\n          }\n          else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n            object = object[value];\n          }\n          else if( object[value] !== undefined ) {\n            found = object[value];\n            return false;\n          }\n          else {\n            module.error(error.method, query);\n            return false;\n          }\n        });\n      }\n      if ( $.isFunction( found ) ) {\n        response = found.apply(context, passedArguments);\n      }\n      else if(found !== undefined) {\n        response = found;\n      }\n      if(Array.isArray(returnedValue)) {\n        returnedValue.push(response);\n      }\n      else if(returnedValue !== undefined) {\n        returnedValue = [returnedValue, response];\n      }\n      else if(response !== undefined) {\n        returnedValue = response;\n      }\n      return found;\n    }\n  };\n\n  if(methodInvoked) {\n    if(instance === undefined) {\n      module.initialize();\n    }\n    module.invoke(query);\n  }\n  else {\n    if(instance !== undefined) {\n      module.destroy();\n    }\n    module.initialize();\n  }\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.site.settings = {\n\n  name        : 'Site',\n  namespace   : 'site',\n\n  error : {\n    console : 'Console cannot be restored, most likely it was overwritten outside of module',\n    method : 'The method you called is not defined.'\n  },\n\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  modules: [\n    'accordion',\n    'api',\n    'calendar',\n    'checkbox',\n    'dimmer',\n    'dropdown',\n    'embed',\n    'form',\n    'modal',\n    'nag',\n    'popup',\n    'slider',\n    'rating',\n    'shape',\n    'sidebar',\n    'state',\n    'sticky',\n    'tab',\n    'toast',\n    'transition',\n    'visibility',\n    'visit'\n  ],\n\n  siteNamespace   : 'site',\n  namespaceStub   : {\n    cache     : {},\n    config    : {},\n    sections  : {},\n    section   : {},\n    utilities : {}\n  }\n\n};\n\n// allows for selection of elements with data attributes\n$.extend($.expr[ \":\" ], {\n  data: ($.expr.createPseudo)\n    ? $.expr.createPseudo(function(dataName) {\n        return function(elem) {\n          return !!$.data(elem, dataName);\n        };\n      })\n    : function(elem, i, match) {\n      // support: jQuery < 1.8\n      return !!$.data(elem, match[ 3 ]);\n    }\n});\n\n\n})( jQuery, window, document );\n\n/*!\n * # Fomantic-UI - Form Validation\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n'use strict';\n\n$.isFunction = $.isFunction || function(obj) {\n  return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.form = function(parameters) {\n  var\n    $allModules      = $(this),\n    moduleSelector   = $allModules.selector || '',\n\n    time             = new Date().getTime(),\n    performance      = [],\n\n    query            = arguments[0],\n    legacyParameters = arguments[1],\n    methodInvoked    = (typeof query == 'string'),\n    queryArguments   = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        $module     = $(this),\n        element     = this,\n\n        formErrors  = [],\n        keyHeldDown = false,\n\n        // set at run-time\n        $field,\n        $group,\n        $message,\n        $prompt,\n        $submit,\n        $clear,\n        $reset,\n\n        settings,\n        validation,\n\n        metadata,\n        selector,\n        className,\n        regExp,\n        error,\n\n        namespace,\n        moduleNamespace,\n        eventNamespace,\n\n        submitting = false,\n        dirty = false,\n        history = ['clean', 'clean'],\n\n        instance,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n\n          // settings grabbed at run time\n          module.get.settings();\n          if(methodInvoked) {\n            if(instance === undefined) {\n              module.instantiate();\n            }\n            module.invoke(query);\n          }\n          else {\n            if(instance !== undefined) {\n              instance.invoke('destroy');\n            }\n            module.verbose('Initializing form validation', $module, settings);\n            module.bindEvents();\n            module.set.defaults();\n            module.instantiate();\n          }\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', instance);\n          module.removeEvents();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $field      = $module.find(selector.field);\n          $group      = $module.find(selector.group);\n          $message    = $module.find(selector.message);\n          $prompt     = $module.find(selector.prompt);\n\n          $submit     = $module.find(selector.submit);\n          $clear      = $module.find(selector.clear);\n          $reset      = $module.find(selector.reset);\n        },\n\n        submit: function() {\n          module.verbose('Submitting form', $module);\n          submitting = true;\n          $module.submit();\n        },\n\n        attachEvents: function(selector, action) {\n          action = action || 'submit';\n          $(selector).on('click' + eventNamespace, function(event) {\n            module[action]();\n            event.preventDefault();\n          });\n        },\n\n        bindEvents: function() {\n          module.verbose('Attaching form events');\n          $module\n            .on('submit' + eventNamespace, module.validate.form)\n            .on('blur'   + eventNamespace, selector.field, module.event.field.blur)\n            .on('click'  + eventNamespace, selector.submit, module.submit)\n            .on('click'  + eventNamespace, selector.reset, module.reset)\n            .on('click'  + eventNamespace, selector.clear, module.clear)\n          ;\n          if(settings.keyboardShortcuts) {\n            $module.on('keydown' + eventNamespace, selector.field, module.event.field.keydown);\n          }\n          $field.each(function(index, el) {\n            var\n              $input     = $(el),\n              type       = $input.prop('type'),\n              inputEvent = module.get.changeEvent(type, $input)\n            ;\n            $input.on(inputEvent + eventNamespace, module.event.field.change);\n          });\n\n          // Dirty events\n          if (settings.preventLeaving) {\n            $(window).on('beforeunload' + eventNamespace, module.event.beforeUnload);\n          }\n\n          $field.on('change click keyup keydown blur', function(e) {\n            $(this).trigger(e.type + \".dirty\");\n          });\n\n          $field.on('change.dirty click.dirty keyup.dirty keydown.dirty blur.dirty', module.determine.isDirty);\n\n          $module.on('dirty' + eventNamespace, function(e) {\n            settings.onDirty.call();\n          });\n\n          $module.on('clean' + eventNamespace, function(e) {\n            settings.onClean.call();\n          })\n        },\n\n        clear: function() {\n          $field.each(function (index, el) {\n            var\n              $field       = $(el),\n              $element     = $field.parent(),\n              $fieldGroup  = $field.closest($group),\n              $prompt      = $fieldGroup.find(selector.prompt),\n              $calendar    = $field.closest(selector.uiCalendar),\n              defaultValue = $field.data(metadata.defaultValue) || '',\n              isCheckbox   = $element.is(selector.uiCheckbox),\n              isDropdown   = $element.is(selector.uiDropdown),\n              isCalendar   = ($calendar.length > 0),\n              isErrored    = $fieldGroup.hasClass(className.error)\n            ;\n            if(isErrored) {\n              module.verbose('Resetting error on field', $fieldGroup);\n              $fieldGroup.removeClass(className.error);\n              $prompt.remove();\n            }\n            if(isDropdown) {\n              module.verbose('Resetting dropdown value', $element, defaultValue);\n              $element.dropdown('clear');\n            }\n            else if(isCheckbox) {\n              $field.prop('checked', false);\n            }\n            else if (isCalendar) {\n              $calendar.calendar('clear');\n            }\n            else {\n              module.verbose('Resetting field value', $field, defaultValue);\n              $field.val('');\n            }\n          });\n        },\n\n        reset: function() {\n          $field.each(function (index, el) {\n            var\n              $field       = $(el),\n              $element     = $field.parent(),\n              $fieldGroup  = $field.closest($group),\n              $calendar    = $field.closest(selector.uiCalendar),\n              $prompt      = $fieldGroup.find(selector.prompt),\n              defaultValue = $field.data(metadata.defaultValue),\n              isCheckbox   = $element.is(selector.uiCheckbox),\n              isDropdown   = $element.is(selector.uiDropdown),\n              isCalendar   = ($calendar.length > 0),\n              isErrored    = $fieldGroup.hasClass(className.error)\n            ;\n            if(defaultValue === undefined) {\n              return;\n            }\n            if(isErrored) {\n              module.verbose('Resetting error on field', $fieldGroup);\n              $fieldGroup.removeClass(className.error);\n              $prompt.remove();\n            }\n            if(isDropdown) {\n              module.verbose('Resetting dropdown value', $element, defaultValue);\n              $element.dropdown('restore defaults');\n            }\n            else if(isCheckbox) {\n              module.verbose('Resetting checkbox value', $element, defaultValue);\n              $field.prop('checked', defaultValue);\n            }\n            else if (isCalendar) {\n              $calendar.calendar('set date', defaultValue);\n            }\n            else {\n              module.verbose('Resetting field value', $field, defaultValue);\n              $field.val(defaultValue);\n            }\n          });\n\n          module.determine.isDirty();\n        },\n\n        determine: {\n          isValid: function() {\n            var\n              allValid = true\n            ;\n            $.each(validation, function(fieldName, field) {\n              if( !( module.validate.field(field, fieldName, true) ) ) {\n                allValid = false;\n              }\n            });\n            return allValid;\n          },\n          isDirty: function(e) {\n            var formIsDirty = false;\n\n            $field.each(function(index, el) {\n              var\n                $el = $(el),\n                isCheckbox = ($el.filter(selector.checkbox).length > 0),\n                isDirty\n              ;\n\n              if (isCheckbox) {\n                isDirty = module.is.checkboxDirty($el);\n              } else {\n                isDirty = module.is.fieldDirty($el);\n              }\n\n              $el.data(settings.metadata.isDirty, isDirty);\n\n              formIsDirty |= isDirty;\n            });\n\n            if (formIsDirty) {\n              module.set.dirty();\n            } else {\n              module.set.clean();\n            }\n\n            if (e && e.namespace === 'dirty') {\n              e.stopImmediatePropagation();\n              e.preventDefault();\n            }\n          }\n        },\n\n        is: {\n          bracketedRule: function(rule) {\n            return (rule.type && rule.type.match(settings.regExp.bracket));\n          },\n          shorthandFields: function(fields) {\n            var\n              fieldKeys = Object.keys(fields),\n              firstRule = fields[fieldKeys[0]]\n            ;\n            return module.is.shorthandRules(firstRule);\n          },\n          // duck type rule test\n          shorthandRules: function(rules) {\n            return (typeof rules == 'string' || Array.isArray(rules));\n          },\n          empty: function($field) {\n            if(!$field || $field.length === 0) {\n              return true;\n            }\n            else if($field.is(selector.checkbox)) {\n              return !$field.is(':checked');\n            }\n            else {\n              return module.is.blank($field);\n            }\n          },\n          blank: function($field) {\n            return $.trim($field.val()) === '';\n          },\n          valid: function(field) {\n            var\n              allValid = true\n            ;\n            if(field) {\n              module.verbose('Checking if field is valid', field);\n              return module.validate.field(validation[field], field, false);\n            }\n            else {\n              module.verbose('Checking if form is valid');\n              $.each(validation, function(fieldName, field) {\n                if( !module.is.valid(fieldName) ) {\n                  allValid = false;\n                }\n              });\n              return allValid;\n            }\n          },\n          dirty: function() {\n            return dirty;\n          },\n          clean: function() {\n            return !dirty;\n          },\n          fieldDirty: function($el) {\n            var initialValue = $el.data(metadata.defaultValue);\n            // Explicitly check for null/undefined here as value may be `false`, so ($el.data(dataInitialValue) || '') would not work\n            if (initialValue == null) { initialValue = ''; }\n            var currentValue = $el.val();\n            if (currentValue == null) { currentValue = ''; }\n\n            // Boolean values can be encoded as \"true/false\" or \"True/False\" depending on underlying frameworks so we need a case insensitive comparison\n            var boolRegex = /^(true|false)$/i;\n            var isBoolValue = boolRegex.test(initialValue) && boolRegex.test(currentValue);\n            if (isBoolValue) {\n              var regex = new RegExp(\"^\" + initialValue + \"$\", \"i\");\n              return !regex.test(currentValue);\n            }\n\n            return currentValue !== initialValue;\n          },\n          checkboxDirty: function($el) {\n            var initialValue = $el.data(metadata.defaultValue);\n            var currentValue = $el.is(\":checked\");\n\n            return initialValue !== currentValue;\n          },\n          justDirty: function() {\n            return (history[0] === 'dirty');\n          },\n          justClean: function() {\n            return (history[0] === 'clean');\n          }\n        },\n\n        removeEvents: function() {\n          $module.off(eventNamespace);\n          $field.off(eventNamespace);\n          $submit.off(eventNamespace);\n          $field.off(eventNamespace);\n        },\n\n        event: {\n          field: {\n            keydown: function(event) {\n              var\n                $field       = $(this),\n                key          = event.which,\n                isInput      = $field.is(selector.input),\n                isCheckbox   = $field.is(selector.checkbox),\n                isInDropdown = ($field.closest(selector.uiDropdown).length > 0),\n                keyCode      = {\n                  enter  : 13,\n                  escape : 27\n                }\n              ;\n              if( key == keyCode.escape) {\n                module.verbose('Escape key pressed blurring field');\n                $field\n                  .blur()\n                ;\n              }\n              if(!event.ctrlKey && key == keyCode.enter && isInput && !isInDropdown && !isCheckbox) {\n                if(!keyHeldDown) {\n                  $field.one('keyup' + eventNamespace, module.event.field.keyup);\n                  module.submit();\n                  module.debug('Enter pressed on input submitting form');\n                }\n                keyHeldDown = true;\n              }\n            },\n            keyup: function() {\n              keyHeldDown = false;\n            },\n            blur: function(event) {\n              var\n                $field          = $(this),\n                $fieldGroup     = $field.closest($group),\n                validationRules = module.get.validation($field)\n              ;\n              if( $fieldGroup.hasClass(className.error) ) {\n                module.debug('Revalidating field', $field, validationRules);\n                if(validationRules) {\n                  module.validate.field( validationRules );\n                }\n              }\n              else if(settings.on == 'blur') {\n                if(validationRules) {\n                  module.validate.field( validationRules );\n                }\n              }\n            },\n            change: function(event) {\n              var\n                $field      = $(this),\n                $fieldGroup = $field.closest($group),\n                validationRules = module.get.validation($field)\n              ;\n              if(validationRules && (settings.on == 'change' || ( $fieldGroup.hasClass(className.error) && settings.revalidate) )) {\n                clearTimeout(module.timer);\n                module.timer = setTimeout(function() {\n                  module.debug('Revalidating field', $field,  module.get.validation($field));\n                  module.validate.field( validationRules );\n                }, settings.delay);\n              }\n            }\n          },\n          beforeUnload: function(event) {\n            if (module.is.dirty() && !submitting) {\n              var event = event || window.event;\n\n              // For modern browsers\n              if (event) {\n                event.returnValue = settings.text.leavingMessage;\n              }\n\n              // For olders...\n              return settings.text.leavingMessage;\n            }\n          }\n\n        },\n\n        get: {\n          ancillaryValue: function(rule) {\n            if(!rule.type || (!rule.value && !module.is.bracketedRule(rule))) {\n              return false;\n            }\n            return (rule.value !== undefined)\n              ? rule.value\n              : rule.type.match(settings.regExp.bracket)[1] + ''\n            ;\n          },\n          ruleName: function(rule) {\n            if( module.is.bracketedRule(rule) ) {\n              return rule.type.replace(rule.type.match(settings.regExp.bracket)[0], '');\n            }\n            return rule.type;\n          },\n          changeEvent: function(type, $input) {\n            if(type == 'checkbox' || type == 'radio' || type == 'hidden' || $input.is('select')) {\n              return 'change';\n            }\n            else {\n              return module.get.inputEvent();\n            }\n          },\n          inputEvent: function() {\n            return (document.createElement('input').oninput !== undefined)\n              ? 'input'\n              : (document.createElement('input').onpropertychange !== undefined)\n                ? 'propertychange'\n                : 'keyup'\n            ;\n          },\n          fieldsFromShorthand: function(fields) {\n            var\n              fullFields = {}\n            ;\n            $.each(fields, function(name, rules) {\n              if(typeof rules == 'string') {\n                rules = [rules];\n              }\n              fullFields[name] = {\n                rules: []\n              };\n              $.each(rules, function(index, rule) {\n                fullFields[name].rules.push({ type: rule });\n              });\n            });\n            return fullFields;\n          },\n          prompt: function(rule, field) {\n            var\n              ruleName      = module.get.ruleName(rule),\n              ancillary     = module.get.ancillaryValue(rule),\n              $field        = module.get.field(field.identifier),\n              value         = $field.val(),\n              prompt        = $.isFunction(rule.prompt)\n                ? rule.prompt(value)\n                : rule.prompt || settings.prompt[ruleName] || settings.text.unspecifiedRule,\n              requiresValue = (prompt.search('{value}') !== -1),\n              requiresName  = (prompt.search('{name}') !== -1),\n              $label,\n              name\n            ;\n            if(requiresValue) {\n              prompt = prompt.replace('{value}', $field.val());\n            }\n            if(requiresName) {\n              $label = $field.closest(selector.group).find('label').eq(0);\n              name = ($label.length == 1)\n                ? $label.text()\n                : $field.prop('placeholder') || settings.text.unspecifiedField\n              ;\n              prompt = prompt.replace('{name}', name);\n            }\n            prompt = prompt.replace('{identifier}', field.identifier);\n            prompt = prompt.replace('{ruleValue}', ancillary);\n            if(!rule.prompt) {\n              module.verbose('Using default validation prompt for type', prompt, ruleName);\n            }\n            return prompt;\n          },\n          settings: function() {\n            if($.isPlainObject(parameters)) {\n              var\n                keys     = Object.keys(parameters),\n                isLegacySettings = (keys.length > 0)\n                  ? (parameters[keys[0]].identifier !== undefined && parameters[keys[0]].rules !== undefined)\n                  : false\n              ;\n              if(isLegacySettings) {\n                // 1.x (ducktyped)\n                settings   = $.extend(true, {}, $.fn.form.settings, legacyParameters);\n                validation = $.extend({}, $.fn.form.settings.defaults, parameters);\n                module.error(settings.error.oldSyntax, element);\n                module.verbose('Extending settings from legacy parameters', validation, settings);\n              }\n              else {\n                // 2.x\n                if(parameters.fields && module.is.shorthandFields(parameters.fields)) {\n                  parameters.fields = module.get.fieldsFromShorthand(parameters.fields);\n                }\n                settings   = $.extend(true, {}, $.fn.form.settings, parameters);\n                validation = $.extend({}, $.fn.form.settings.defaults, settings.fields);\n                module.verbose('Extending settings', validation, settings);\n              }\n            }\n            else {\n              settings   = $.fn.form.settings;\n              validation = $.fn.form.settings.defaults;\n              module.verbose('Using default form validation', validation, settings);\n            }\n\n            // shorthand\n            namespace       = settings.namespace;\n            metadata        = settings.metadata;\n            selector        = settings.selector;\n            className       = settings.className;\n            regExp          = settings.regExp;\n            error           = settings.error;\n            moduleNamespace = 'module-' + namespace;\n            eventNamespace  = '.' + namespace;\n\n            // grab instance\n            instance = $module.data(moduleNamespace);\n\n            // refresh selector cache\n            module.refresh();\n          },\n          field: function(identifier) {\n            module.verbose('Finding field with identifier', identifier);\n            identifier = module.escape.string(identifier);\n            var t;\n            if((t=$field.filter('#' + identifier)).length > 0 ) {\n              return t;\n            }\n            if((t=$field.filter('[name=\"' + identifier +'\"]')).length > 0 ) {\n              return t;\n            }\n            if((t=$field.filter('[name=\"' + identifier +'[]\"]')).length > 0 ) {\n              return t;\n            }\n            if((t=$field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]')).length > 0 ) {\n              return t;\n            }\n            return $('<input/>');\n          },\n          fields: function(fields) {\n            var\n              $fields = $()\n            ;\n            $.each(fields, function(index, name) {\n              $fields = $fields.add( module.get.field(name) );\n            });\n            return $fields;\n          },\n          validation: function($field) {\n            var\n              fieldValidation,\n              identifier\n            ;\n            if(!validation) {\n              return false;\n            }\n            $.each(validation, function(fieldName, field) {\n              identifier = field.identifier || fieldName;\n              $.each(module.get.field(identifier), function(index, groupField) {\n                if(groupField == $field[0]) {\n                  field.identifier = identifier;\n                  fieldValidation = field;\n                  return false;\n                }\n              });\n            });\n            return fieldValidation || false;\n          },\n          value: function (field) {\n            var\n              fields = [],\n              results\n            ;\n            fields.push(field);\n            results = module.get.values.call(element, fields);\n            return results[field];\n          },\n          values: function (fields) {\n            var\n              $fields = Array.isArray(fields)\n                ? module.get.fields(fields)\n                : $field,\n              values = {}\n            ;\n            $fields.each(function(index, field) {\n              var\n                $field       = $(field),\n                $calendar    = $field.closest(selector.uiCalendar),\n                name         = $field.prop('name'),\n                value        = $field.val(),\n                isCheckbox   = $field.is(selector.checkbox),\n                isRadio      = $field.is(selector.radio),\n                isMultiple   = (name.indexOf('[]') !== -1),\n                isCalendar   = ($calendar.length > 0),\n                isChecked    = (isCheckbox)\n                  ? $field.is(':checked')\n                  : false\n              ;\n              if(name) {\n                if(isMultiple) {\n                  name = name.replace('[]', '');\n                  if(!values[name]) {\n                    values[name] = [];\n                  }\n                  if(isCheckbox) {\n                    if(isChecked) {\n                      values[name].push(value || true);\n                    }\n                    else {\n                      values[name].push(false);\n                    }\n                  }\n                  else {\n                    values[name].push(value);\n                  }\n                }\n                else {\n                  if(isRadio) {\n                    if(values[name] === undefined || values[name] == false) {\n                      values[name] = (isChecked)\n                        ? value || true\n                        : false\n                      ;\n                    }\n                  }\n                  else if(isCheckbox) {\n                    if(isChecked) {\n                      values[name] = value || true;\n                    }\n                    else {\n                      values[name] = false;\n                    }\n                  }\n                  else if(isCalendar) {\n                    var date = $calendar.calendar('get date');\n\n                    if (date !== null) {\n                      if (settings.dateHandling == 'date') {\n                        values[name] = date;\n                      } else if(settings.dateHandling == 'input') {\n                        values[name] = $calendar.calendar('get input date')\n                      } else if (settings.dateHandling == 'formatter') {\n                        var type = $calendar.calendar('setting', 'type');\n\n                        switch(type) {\n                          case 'date':\n                          values[name] = settings.formatter.date(date);\n                          break;\n                          \n                          case 'datetime':\n                          values[name] = settings.formatter.datetime(date);\n                          break;\n                          \n                          case 'time':\n                          values[name] = settings.formatter.time(date);\n                          break;\n                          \n                          case 'month':\n                          values[name] = settings.formatter.month(date);\n                          break;\n                          \n                          case 'year':\n                          values[name] = settings.formatter.year(date);\n                          break;\n  \n                          default:\n                          module.debug('Wrong calendar mode', $calendar, type);\n                          values[name] = '';\n                        }\n                      }\n                    } else {\n                      values[name] = '';\n                    }\n                  } else {\n                    values[name] = value;\n                  }\n                }\n              }\n            });\n            return values;\n          },\n          dirtyFields: function() {\n            return $field.filter(function(index, e) {\n              return $(e).data(metadata.isDirty);\n            });\n          }\n        },\n\n        has: {\n\n          field: function(identifier) {\n            module.verbose('Checking for existence of a field with identifier', identifier);\n            identifier = module.escape.string(identifier);\n            if(typeof identifier !== 'string') {\n              module.error(error.identifier, identifier);\n            }\n            if($field.filter('#' + identifier).length > 0 ) {\n              return true;\n            }\n            else if( $field.filter('[name=\"' + identifier +'\"]').length > 0 ) {\n              return true;\n            }\n            else if( $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]').length > 0 ) {\n              return true;\n            }\n            return false;\n          }\n\n        },\n\n        escape: {\n          string: function(text) {\n            text =  String(text);\n            return text.replace(regExp.escape, '\\\\$&');\n          }\n        },\n\n        add: {\n          // alias\n          rule: function(name, rules) {\n            module.add.field(name, rules);\n          },\n          field: function(name, rules) {\n            var\n              newValidation = {}\n            ;\n            if(module.is.shorthandRules(rules)) {\n              rules = Array.isArray(rules)\n                ? rules\n                : [rules]\n              ;\n              newValidation[name] = {\n                rules: []\n              };\n              $.each(rules, function(index, rule) {\n                newValidation[name].rules.push({ type: rule });\n              });\n            }\n            else {\n              newValidation[name] = rules;\n            }\n            validation = $.extend({}, validation, newValidation);\n            module.debug('Adding rules', newValidation, validation);\n          },\n          fields: function(fields) {\n            var\n              newValidation\n            ;\n            if(fields && module.is.shorthandFields(fields)) {\n              newValidation = module.get.fieldsFromShorthand(fields);\n            }\n            else {\n              newValidation = fields;\n            }\n            validation = $.extend({}, validation, newValidation);\n          },\n          prompt: function(identifier, errors, internal) {\n            var\n              $field       = module.get.field(identifier),\n              $fieldGroup  = $field.closest($group),\n              $prompt      = $fieldGroup.children(selector.prompt),\n              promptExists = ($prompt.length !== 0)\n            ;\n            errors = (typeof errors == 'string')\n              ? [errors]\n              : errors\n            ;\n            module.verbose('Adding field error state', identifier);\n            if(!internal) {\n              $fieldGroup\n                  .addClass(className.error)\n              ;\n            }\n            if(settings.inline) {\n              if(!promptExists) {\n                $prompt = settings.templates.prompt(errors);\n                $prompt\n                  .appendTo($fieldGroup)\n                ;\n              }\n              $prompt\n                .html(errors[0])\n              ;\n              if(!promptExists) {\n                if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                  module.verbose('Displaying error with css transition', settings.transition);\n                  $prompt.transition(settings.transition + ' in', settings.duration);\n                }\n                else {\n                  module.verbose('Displaying error with fallback javascript animation');\n                  $prompt\n                    .fadeIn(settings.duration)\n                  ;\n                }\n              }\n              else {\n                module.verbose('Inline errors are disabled, no inline error added', identifier);\n              }\n            }\n          },\n          errors: function(errors) {\n            module.debug('Adding form error messages', errors);\n            module.set.error();\n            $message\n              .html( settings.templates.error(errors) )\n            ;\n          }\n        },\n\n        remove: {\n          rule: function(field, rule) {\n            var\n              rules = Array.isArray(rule)\n                ? rule\n                : [rule]\n            ;\n            if(validation[field] === undefined || !Array.isArray(validation[field].rules)) {\n              return;\n            }\n            if(rule === undefined) {\n              module.debug('Removed all rules');\n              validation[field].rules = [];\n              return;\n            }\n            $.each(validation[field].rules, function(index, rule) {\n              if(rule && rules.indexOf(rule.type) !== -1) {\n                module.debug('Removed rule', rule.type);\n                validation[field].rules.splice(index, 1);\n              }\n            });\n          },\n          field: function(field) {\n            var\n              fields = Array.isArray(field)\n                ? field\n                : [field]\n            ;\n            $.each(fields, function(index, field) {\n              module.remove.rule(field);\n            });\n          },\n          // alias\n          rules: function(field, rules) {\n            if(Array.isArray(field)) {\n              $.each(field, function(index, field) {\n                module.remove.rule(field, rules);\n              });\n            }\n            else {\n              module.remove.rule(field, rules);\n            }\n          },\n          fields: function(fields) {\n            module.remove.field(fields);\n          },\n          prompt: function(identifier) {\n            var\n              $field      = module.get.field(identifier),\n              $fieldGroup = $field.closest($group),\n              $prompt     = $fieldGroup.children(selector.prompt)\n            ;\n            $fieldGroup\n              .removeClass(className.error)\n            ;\n            if(settings.inline && $prompt.is(':visible')) {\n              module.verbose('Removing prompt for field', identifier);\n              if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                $prompt.transition(settings.transition + ' out', settings.duration, function() {\n                  $prompt.remove();\n                });\n              }\n              else {\n                $prompt\n                  .fadeOut(settings.duration, function(){\n                    $prompt.remove();\n                  })\n                ;\n              }\n            }\n          }\n        },\n\n        set: {\n          success: function() {\n            $module\n              .removeClass(className.error)\n              .addClass(className.success)\n            ;\n          },\n          defaults: function () {\n            $field.each(function (index, el) {\n              var\n                $el        = $(el),\n                $parent    = $el.parent(),\n                isCheckbox = ($el.filter(selector.checkbox).length > 0),\n                isDropdown = $parent.is(selector.uiDropdown),\n                value      = (isCheckbox)\n                  ? $el.is(':checked')\n                  : $el.val()\n              ;\n              if (isDropdown) {\n                $parent.dropdown('save defaults');\n              }\n              $el.data(metadata.defaultValue, value);\n              $el.data(metadata.isDirty, false);\n            });\n          },\n          error: function() {\n            $module\n              .removeClass(className.success)\n              .addClass(className.error)\n            ;\n          },\n          value: function (field, value) {\n            var\n              fields = {}\n            ;\n            fields[field] = value;\n            return module.set.values.call(element, fields);\n          },\n          values: function (fields) {\n            if($.isEmptyObject(fields)) {\n              return;\n            }\n            $.each(fields, function(key, value) {\n              var\n                $field      = module.get.field(key),\n                $element    = $field.parent(),\n                isMultiple  = Array.isArray(value),\n                isCheckbox  = $element.is(selector.uiCheckbox),\n                isDropdown  = $element.is(selector.uiDropdown),\n                isRadio     = ($field.is(selector.radio) && isCheckbox),\n                fieldExists = ($field.length > 0),\n                $multipleField\n              ;\n              if(fieldExists) {\n                if(isMultiple && isCheckbox) {\n                  module.verbose('Selecting multiple', value, $field);\n                  $element.checkbox('uncheck');\n                  $.each(value, function(index, value) {\n                    $multipleField = $field.filter('[value=\"' + value + '\"]');\n                    $element       = $multipleField.parent();\n                    if($multipleField.length > 0) {\n                      $element.checkbox('check');\n                    }\n                  });\n                }\n                else if(isRadio) {\n                  module.verbose('Selecting radio value', value, $field);\n                  $field.filter('[value=\"' + value + '\"]')\n                    .parent(selector.uiCheckbox)\n                      .checkbox('check')\n                  ;\n                }\n                else if(isCheckbox) {\n                  module.verbose('Setting checkbox value', value, $element);\n                  if(value === true) {\n                    $element.checkbox('check');\n                  }\n                  else {\n                    $element.checkbox('uncheck');\n                  }\n                }\n                else if(isDropdown) {\n                  module.verbose('Setting dropdown value', value, $element);\n                  $element.dropdown('set selected', value);\n                }\n                else {\n                  module.verbose('Setting field value', value, $field);\n                  $field.val(value);\n                }\n              }\n            });\n          },\n          dirty: function() {\n            module.verbose('Setting state dirty');\n            dirty = true;\n            history[0] = history[1];\n            history[1] = 'dirty';\n\n            if (module.is.justClean()) {\n              $module.trigger('dirty');\n            }\n          },\n          clean: function() {\n            module.verbose('Setting state clean');\n            dirty = false;\n            history[0] = history[1];\n            history[1] = 'clean';\n\n            if (module.is.justDirty()) {\n              $module.trigger('clean');\n            }\n          },\n          asClean: function() {\n            module.set.defaults();\n            module.set.clean();\n          },\n          asDirty: function() {\n            module.set.defaults();\n            module.set.dirty();\n          }\n        },\n\n        validate: {\n\n          form: function(event, ignoreCallbacks) {\n            var values = module.get.values();\n\n            // input keydown event will fire submit repeatedly by browser default\n            if(keyHeldDown) {\n              return false;\n            }\n\n            // reset errors\n            formErrors = [];\n            if( module.determine.isValid() ) {\n              module.debug('Form has no validation errors, submitting');\n              module.set.success();\n              if(ignoreCallbacks !== true) {\n                return settings.onSuccess.call(element, event, values);\n              }\n            }\n            else {\n              module.debug('Form has errors');\n              module.set.error();\n              if(!settings.inline) {\n                module.add.errors(formErrors);\n              }\n              // prevent ajax submit\n              if(event && $module.data('moduleApi') !== undefined) {\n                event.stopImmediatePropagation();\n              }\n              if(ignoreCallbacks !== true) {\n                return settings.onFailure.call(element, formErrors, values);\n              }\n            }\n          },\n\n          // takes a validation object and returns whether field passes validation\n          field: function(field, fieldName, showErrors) {\n            showErrors = (showErrors !== undefined)\n              ? showErrors\n              : true\n            ;\n            if(typeof field == 'string') {\n              module.verbose('Validating field', field);\n              fieldName = field;\n              field     = validation[field];\n            }\n            var\n              identifier    = field.identifier || fieldName,\n              $field        = module.get.field(identifier),\n              $dependsField = (field.depends)\n                ? module.get.field(field.depends)\n                : false,\n              fieldValid  = true,\n              fieldErrors = []\n            ;\n            if(!field.identifier) {\n              module.debug('Using field name as identifier', identifier);\n              field.identifier = identifier;\n            }\n            var isDisabled = true;\n            $.each($field, function(){\n                if(!$(this).prop('disabled')) {\n                  isDisabled = false;\n                  return false;\n                }\n            });\n            if(isDisabled) {\n              module.debug('Field is disabled. Skipping', identifier);\n            }\n            else if(field.optional && module.is.blank($field)){\n              module.debug('Field is optional and blank. Skipping', identifier);\n            }\n            else if(field.depends && module.is.empty($dependsField)) {\n              module.debug('Field depends on another value that is not present or empty. Skipping', $dependsField);\n            }\n            else if(field.rules !== undefined) {\n              $field.closest($group).removeClass(className.error);\n              $.each(field.rules, function(index, rule) {\n                if( module.has.field(identifier)) {\n                  var invalidFields = module.validate.rule(field, rule,true) || [];\n                  if (invalidFields.length>0){\n                    module.debug('Field is invalid', identifier, rule.type);\n                    fieldErrors.push(module.get.prompt(rule, field));\n                    fieldValid = false;\n                    if(showErrors){\n                      $(invalidFields).closest($group).addClass(className.error);\n                    }\n                  }\n                }\n              });\n            }\n            if(fieldValid) {\n              if(showErrors) {\n                module.remove.prompt(identifier, fieldErrors);\n                settings.onValid.call($field);\n              }\n            }\n            else {\n              if(showErrors) {\n                formErrors = formErrors.concat(fieldErrors);\n                module.add.prompt(identifier, fieldErrors, true);\n                settings.onInvalid.call($field, fieldErrors);\n              }\n              return false;\n            }\n            return true;\n          },\n\n          // takes validation rule and returns whether field passes rule\n          rule: function(field, rule, internal) {\n            var\n              $field       = module.get.field(field.identifier),\n              ancillary    = module.get.ancillaryValue(rule),\n              ruleName     = module.get.ruleName(rule),\n              ruleFunction = settings.rules[ruleName],\n              invalidFields = [],\n              isCheckbox = $field.is(selector.checkbox),\n              isValid = function(field){\n                var value = (isCheckbox ? $(field).filter(':checked').val() : $(field).val());\n                // cast to string avoiding encoding special values\n                value = (value === undefined || value === '' || value === null)\n                    ? ''\n                    : (settings.shouldTrim) ? $.trim(value + '') : String(value + '')\n                ;\n                return ruleFunction.call(field, value, ancillary, $module);\n              }\n            ;\n            if( !$.isFunction(ruleFunction) ) {\n              module.error(error.noRule, ruleName);\n              return;\n            }\n            if(isCheckbox) {\n              if (!isValid($field)) {\n                invalidFields = $field;\n              }\n            } else {\n              $.each($field, function (index, field) {\n                if (!isValid(field)) {\n                  invalidFields.push(field);\n                }\n              });\n            }\n            return internal ? invalidFields : !(invalidFields.length>0);\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if(Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      module.initialize();\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.form.settings = {\n\n  name              : 'Form',\n  namespace         : 'form',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  fields            : false,\n\n  keyboardShortcuts : true,\n  on                : 'submit',\n  inline            : false,\n\n  delay             : 200,\n  revalidate        : true,\n  shouldTrim        : true,\n\n  transition        : 'scale',\n  duration          : 200,\n\n  preventLeaving    : false,\n  dateHandling      : 'date', // 'date', 'input', 'formatter'\n\n  onValid           : function() {},\n  onInvalid         : function() {},\n  onSuccess         : function() { return true; },\n  onFailure         : function() { return false; },\n  onDirty           : function() {},\n  onClean           : function() {},\n\n  metadata : {\n    defaultValue : 'default',\n    validate     : 'validate',\n    isDirty      : 'isDirty'\n  },\n\n  regExp: {\n    htmlID  : /^[a-zA-Z][\\w:.-]*$/g,\n    bracket : /\\[(.*)\\]/i,\n    decimal : /^\\d+\\.?\\d*$/,\n    email   : /^[a-z0-9!#$%&'*+\\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,\n    escape  : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|:,=@]/g,\n    flags   : /^\\/(.*)\\/(.*)?/,\n    integer : /^\\-?\\d+$/,\n    number  : /^\\-?\\d*(\\.\\d+)?$/,\n    url     : /(https?:\\/\\/(?:www\\.|(?!www))[^\\s\\.]+\\.[^\\s]{2,}|www\\.[^\\s]+\\.[^\\s]{2,})/i\n  },\n\n  text: {\n    unspecifiedRule  : 'Please enter a valid value',\n    unspecifiedField : 'This field',\n    leavingMessage   : 'There are unsaved changes on this page which will be discarded if you continue.'\n  },\n\n  prompt: {\n    empty                : '{name} must have a value',\n    checked              : '{name} must be checked',\n    email                : '{name} must be a valid e-mail',\n    url                  : '{name} must be a valid url',\n    regExp               : '{name} is not formatted correctly',\n    integer              : '{name} must be an integer',\n    decimal              : '{name} must be a decimal number',\n    number               : '{name} must be set to a number',\n    is                   : '{name} must be \"{ruleValue}\"',\n    isExactly            : '{name} must be exactly \"{ruleValue}\"',\n    not                  : '{name} cannot be set to \"{ruleValue}\"',\n    notExactly           : '{name} cannot be set to exactly \"{ruleValue}\"',\n    contain              : '{name} must contain \"{ruleValue}\"',\n    containExactly       : '{name} must contain exactly \"{ruleValue}\"',\n    doesntContain        : '{name} cannot contain  \"{ruleValue}\"',\n    doesntContainExactly : '{name} cannot contain exactly \"{ruleValue}\"',\n    minLength            : '{name} must be at least {ruleValue} characters',\n    length               : '{name} must be at least {ruleValue} characters',\n    exactLength          : '{name} must be exactly {ruleValue} characters',\n    maxLength            : '{name} cannot be longer than {ruleValue} characters',\n    match                : '{name} must match {ruleValue} field',\n    different            : '{name} must have a different value than {ruleValue} field',\n    creditCard           : '{name} must be a valid credit card number',\n    minCount             : '{name} must have at least {ruleValue} choices',\n    exactCount           : '{name} must have exactly {ruleValue} choices',\n    maxCount             : '{name} must have {ruleValue} or less choices'\n  },\n\n  selector : {\n    checkbox   : 'input[type=\"checkbox\"], input[type=\"radio\"]',\n    clear      : '.clear',\n    field      : 'input, textarea, select',\n    group      : '.field',\n    input      : 'input',\n    message    : '.error.message',\n    prompt     : '.prompt.label',\n    radio      : 'input[type=\"radio\"]',\n    reset      : '.reset:not([type=\"reset\"])',\n    submit     : '.submit:not([type=\"submit\"])',\n    uiCheckbox : '.ui.checkbox',\n    uiDropdown : '.ui.dropdown',\n    uiCalendar : '.ui.calendar'\n  },\n\n  className : {\n    error   : 'error',\n    label   : 'ui prompt label',\n    pressed : 'down',\n    success : 'success'\n  },\n\n  error: {\n    identifier : 'You must specify a string identifier for each field',\n    method     : 'The method you called is not defined.',\n    noRule     : 'There is no rule matching the one you specified',\n    oldSyntax  : 'Starting in 2.0 forms now only take a single settings object. Validation settings converted to new syntax automatically.'\n  },\n\n  templates: {\n\n    // template that produces error message\n    error: function(errors) {\n      var\n        html = '<ul class=\"list\">'\n      ;\n      $.each(errors, function(index, value) {\n        html += '<li>' + value + '</li>';\n      });\n      html += '</ul>';\n      return $(html);\n    },\n\n    // template that produces label\n    prompt: function(errors) {\n      return $('<div/>')\n        .addClass('ui basic red pointing prompt label')\n        .html(errors[0])\n      ;\n    }\n  },\n\n  formatter: {\n    date: function(date) {\n      return Intl.DateTimeFormat('en-GB').format(date);\n    },\n    datetime: function(date) {\n      return Intl.DateTimeFormat('en-GB', {\n        year: \"numeric\",\n        month: \"2-digit\",\n        day: \"2-digit\",\n        hour: '2-digit',\n        minute: '2-digit',\n        second: '2-digit'\n      }).format(date);\n    },\n    time: function(date) {\n      return Intl.DateTimeFormat('en-GB', {\n        hour: '2-digit',\n        minute: '2-digit',\n        second: '2-digit'\n      }).format(date);\n    },\n    month: function(date) {\n      return Intl.DateTimeFormat('en-GB', {\n        month: '2-digit',\n        year: 'numeric'\n      }).format(date);\n    },\n    year: function(date) {\n      return Intl.DateTimeFormat('en-GB', {\n        year: 'numeric'\n      }).format(date);\n    }\n  },\n\n  rules: {\n\n    // is not empty or blank string\n    empty: function(value) {\n      return !(value === undefined || '' === value || Array.isArray(value) && value.length === 0);\n    },\n\n    // checkbox checked\n    checked: function() {\n      return ($(this).filter(':checked').length > 0);\n    },\n\n    // is most likely an email\n    email: function(value){\n      return $.fn.form.settings.regExp.email.test(value);\n    },\n\n    // value is most likely url\n    url: function(value) {\n      return $.fn.form.settings.regExp.url.test(value);\n    },\n\n    // matches specified regExp\n    regExp: function(value, regExp) {\n      if(regExp instanceof RegExp) {\n        return value.match(regExp);\n      }\n      var\n        regExpParts = regExp.match($.fn.form.settings.regExp.flags),\n        flags\n      ;\n      // regular expression specified as /baz/gi (flags)\n      if(regExpParts) {\n        regExp = (regExpParts.length >= 2)\n          ? regExpParts[1]\n          : regExp\n        ;\n        flags = (regExpParts.length >= 3)\n          ? regExpParts[2]\n          : ''\n        ;\n      }\n      return value.match( new RegExp(regExp, flags) );\n    },\n\n    // is valid integer or matches range\n    integer: function(value, range) {\n      var\n        intRegExp = $.fn.form.settings.regExp.integer,\n        min,\n        max,\n        parts\n      ;\n      if( !range || ['', '..'].indexOf(range) !== -1) {\n        // do nothing\n      }\n      else if(range.indexOf('..') == -1) {\n        if(intRegExp.test(range)) {\n          min = max = range - 0;\n        }\n      }\n      else {\n        parts = range.split('..', 2);\n        if(intRegExp.test(parts[0])) {\n          min = parts[0] - 0;\n        }\n        if(intRegExp.test(parts[1])) {\n          max = parts[1] - 0;\n        }\n      }\n      return (\n        intRegExp.test(value) &&\n        (min === undefined || value >= min) &&\n        (max === undefined || value <= max)\n      );\n    },\n\n    // is valid number (with decimal)\n    decimal: function(value) {\n      return $.fn.form.settings.regExp.decimal.test(value);\n    },\n\n    // is valid number\n    number: function(value) {\n      return $.fn.form.settings.regExp.number.test(value);\n    },\n\n    // is value (case insensitive)\n    is: function(value, text) {\n      text = (typeof text == 'string')\n        ? text.toLowerCase()\n        : text\n      ;\n      value = (typeof value == 'string')\n        ? value.toLowerCase()\n        : value\n      ;\n      return (value == text);\n    },\n\n    // is value\n    isExactly: function(value, text) {\n      return (value == text);\n    },\n\n    // value is not another value (case insensitive)\n    not: function(value, notValue) {\n      value = (typeof value == 'string')\n        ? value.toLowerCase()\n        : value\n      ;\n      notValue = (typeof notValue == 'string')\n        ? notValue.toLowerCase()\n        : notValue\n      ;\n      return (value != notValue);\n    },\n\n    // value is not another value (case sensitive)\n    notExactly: function(value, notValue) {\n      return (value != notValue);\n    },\n\n    // value contains text (insensitive)\n    contains: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text, 'i') ) !== -1);\n    },\n\n    // value contains text (case sensitive)\n    containsExactly: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text) ) !== -1);\n    },\n\n    // value contains text (insensitive)\n    doesntContain: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text, 'i') ) === -1);\n    },\n\n    // value contains text (case sensitive)\n    doesntContainExactly: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text) ) === -1);\n    },\n\n    // is at least string length\n    minLength: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length >= requiredLength)\n        : false\n      ;\n    },\n\n    // see rls notes for 2.0.6 (this is a duplicate of minLength)\n    length: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length >= requiredLength)\n        : false\n      ;\n    },\n\n    // is exactly length\n    exactLength: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length == requiredLength)\n        : false\n      ;\n    },\n\n    // is less than length\n    maxLength: function(value, maxLength) {\n      return (value !== undefined)\n        ? (value.length <= maxLength)\n        : false\n      ;\n    },\n\n    // matches another field\n    match: function(value, identifier, $module) {\n      var\n        matchingValue,\n        matchingElement\n      ;\n      if((matchingElement = $module.find('[data-validate=\"'+ identifier +'\"]')).length > 0 ) {\n        matchingValue = matchingElement.val();\n      }\n      else if((matchingElement = $module.find('#' + identifier)).length > 0) {\n        matchingValue = matchingElement.val();\n      }\n      else if((matchingElement = $module.find('[name=\"' + identifier +'\"]')).length > 0) {\n        matchingValue = matchingElement.val();\n      }\n      else if((matchingElement = $module.find('[name=\"' + identifier +'[]\"]')).length > 0 ) {\n        matchingValue = matchingElement;\n      }\n      return (matchingValue !== undefined)\n        ? ( value.toString() == matchingValue.toString() )\n        : false\n      ;\n    },\n\n    // different than another field\n    different: function(value, identifier, $module) {\n      // use either id or name of field\n      var\n        matchingValue,\n        matchingElement\n      ;\n      if((matchingElement = $module.find('[data-validate=\"'+ identifier +'\"]')).length > 0 ) {\n        matchingValue = matchingElement.val();\n      }\n      else if((matchingElement = $module.find('#' + identifier)).length > 0) {\n        matchingValue = matchingElement.val();\n      }\n      else if((matchingElement = $module.find('[name=\"' + identifier +'\"]')).length > 0) {\n        matchingValue = matchingElement.val();\n      }\n      else if((matchingElement = $module.find('[name=\"' + identifier +'[]\"]')).length > 0 ) {\n        matchingValue = matchingElement;\n      }\n      return (matchingValue !== undefined)\n        ? ( value.toString() !== matchingValue.toString() )\n        : false\n      ;\n    },\n\n    creditCard: function(cardNumber, cardTypes) {\n      var\n        cards = {\n          visa: {\n            pattern : /^4/,\n            length  : [16]\n          },\n          amex: {\n            pattern : /^3[47]/,\n            length  : [15]\n          },\n          mastercard: {\n            pattern : /^5[1-5]/,\n            length  : [16]\n          },\n          discover: {\n            pattern : /^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)/,\n            length  : [16]\n          },\n          unionPay: {\n            pattern : /^(62|88)/,\n            length  : [16, 17, 18, 19]\n          },\n          jcb: {\n            pattern : /^35(2[89]|[3-8][0-9])/,\n            length  : [16]\n          },\n          maestro: {\n            pattern : /^(5018|5020|5038|6304|6759|676[1-3])/,\n            length  : [12, 13, 14, 15, 16, 17, 18, 19]\n          },\n          dinersClub: {\n            pattern : /^(30[0-5]|^36)/,\n            length  : [14]\n          },\n          laser: {\n            pattern : /^(6304|670[69]|6771)/,\n            length  : [16, 17, 18, 19]\n          },\n          visaElectron: {\n            pattern : /^(4026|417500|4508|4844|491(3|7))/,\n            length  : [16]\n          }\n        },\n        valid         = {},\n        validCard     = false,\n        requiredTypes = (typeof cardTypes == 'string')\n          ? cardTypes.split(',')\n          : false,\n        unionPay,\n        validation\n      ;\n\n      if(typeof cardNumber !== 'string' || cardNumber.length === 0) {\n        return;\n      }\n\n      // allow dashes in card\n      cardNumber = cardNumber.replace(/[\\-]/g, '');\n\n      // verify card types\n      if(requiredTypes) {\n        $.each(requiredTypes, function(index, type){\n          // verify each card type\n          validation = cards[type];\n          if(validation) {\n            valid = {\n              length  : ($.inArray(cardNumber.length, validation.length) !== -1),\n              pattern : (cardNumber.search(validation.pattern) !== -1)\n            };\n            if(valid.length && valid.pattern) {\n              validCard = true;\n            }\n          }\n        });\n\n        if(!validCard) {\n          return false;\n        }\n      }\n\n      // skip luhn for UnionPay\n      unionPay = {\n        number  : ($.inArray(cardNumber.length, cards.unionPay.length) !== -1),\n        pattern : (cardNumber.search(cards.unionPay.pattern) !== -1)\n      };\n      if(unionPay.number && unionPay.pattern) {\n        return true;\n      }\n\n      // verify luhn, adapted from  <https://gist.github.com/2134376>\n      var\n        length        = cardNumber.length,\n        multiple      = 0,\n        producedValue = [\n          [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n          [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]\n        ],\n        sum           = 0\n      ;\n      while (length--) {\n        sum += producedValue[multiple][parseInt(cardNumber.charAt(length), 10)];\n        multiple ^= 1;\n      }\n      return (sum % 10 === 0 && sum > 0);\n    },\n\n    minCount: function(value, minCount) {\n      if(minCount == 0) {\n        return true;\n      }\n      if(minCount == 1) {\n        return (value !== '');\n      }\n      return (value.split(',').length >= minCount);\n    },\n\n    exactCount: function(value, exactCount) {\n      if(exactCount == 0) {\n        return (value === '');\n      }\n      if(exactCount == 1) {\n        return (value !== '' && value.search(',') === -1);\n      }\n      return (value.split(',').length == exactCount);\n    },\n\n    maxCount: function(value, maxCount) {\n      if(maxCount == 0) {\n        return false;\n      }\n      if(maxCount == 1) {\n        return (value.search(',') === -1);\n      }\n      return (value.split(',').length <= maxCount);\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Fomantic-UI - Accordion\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n'use strict';\n\n$.isFunction = $.isFunction || function(obj) {\n  return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.accordion = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.accordion.settings, parameters)\n          : $.extend({}, $.fn.accordion.settings),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n        moduleSelector  = $allModules.selector || '',\n\n        $module  = $(this),\n        $title   = $module.find(selector.title),\n        $content = $module.find(selector.content),\n\n        element  = this,\n        instance = $module.data(moduleNamespace),\n        observer,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing', $module);\n          module.bind.events();\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.debug('Destroying previous instance', $module);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          $title   = $module.find(selector.title);\n          $content = $module.find(selector.content);\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, updating selector cache');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.debug('Binding delegated events');\n            $module\n              .on(settings.on + eventNamespace, selector.trigger, module.event.click)\n            ;\n          }\n        },\n\n        event: {\n          click: function() {\n            module.toggle.call(this);\n          }\n        },\n\n        toggle: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating = $activeContent.hasClass(className.animating),\n            isActive    = $activeContent.hasClass(className.active),\n            isOpen      = (isActive && !isAnimating),\n            isOpening   = (!isActive && isAnimating)\n          ;\n          module.debug('Toggling visibility of content', $activeTitle);\n          if(isOpen || isOpening) {\n            if(settings.collapsible) {\n              module.close.call($activeTitle);\n            }\n            else {\n              module.debug('Cannot close accordion content collapsing is disabled');\n            }\n          }\n          else {\n            module.open.call($activeTitle);\n          }\n        },\n\n        open: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating = $activeContent.hasClass(className.animating),\n            isActive    = $activeContent.hasClass(className.active),\n            isOpen      = (isActive || isAnimating)\n          ;\n          if(isOpen) {\n            module.debug('Accordion already open, skipping', $activeContent);\n            return;\n          }\n          module.debug('Opening accordion content', $activeTitle);\n          settings.onOpening.call($activeContent);\n          settings.onChanging.call($activeContent);\n          if(settings.exclusive) {\n            module.closeOthers.call($activeTitle);\n          }\n          $activeTitle\n            .addClass(className.active)\n          ;\n          $activeContent\n            .stop(true, true)\n            .addClass(className.animating)\n          ;\n          if(settings.animateChildren) {\n            if($.fn.transition !== undefined && $module.transition('is supported')) {\n              $activeContent\n                .children()\n                  .transition({\n                    animation        : 'fade in',\n                    queue            : false,\n                    useFailSafe      : true,\n                    debug            : settings.debug,\n                    verbose          : settings.verbose,\n                    duration         : settings.duration,\n                    skipInlineHidden : true\n                  })\n              ;\n            }\n            else {\n              $activeContent\n                .children()\n                  .stop(true, true)\n                  .animate({\n                    opacity: 1\n                  }, settings.duration, module.resetOpacity)\n              ;\n            }\n          }\n          $activeContent\n            .slideDown(settings.duration, settings.easing, function() {\n              $activeContent\n                .removeClass(className.animating)\n                .addClass(className.active)\n              ;\n              module.reset.display.call(this);\n              settings.onOpen.call(this);\n              settings.onChange.call(this);\n            })\n          ;\n        },\n\n        close: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating    = $activeContent.hasClass(className.animating),\n            isActive       = $activeContent.hasClass(className.active),\n            isOpening      = (!isActive && isAnimating),\n            isClosing      = (isActive && isAnimating)\n          ;\n          if((isActive || isOpening) && !isClosing) {\n            module.debug('Closing accordion content', $activeContent);\n            settings.onClosing.call($activeContent);\n            settings.onChanging.call($activeContent);\n            $activeTitle\n              .removeClass(className.active)\n            ;\n            $activeContent\n              .stop(true, true)\n              .addClass(className.animating)\n            ;\n            if(settings.animateChildren) {\n              if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $activeContent\n                  .children()\n                    .transition({\n                      animation        : 'fade out',\n                      queue            : false,\n                      useFailSafe      : true,\n                      debug            : settings.debug,\n                      verbose          : settings.verbose,\n                      duration         : settings.duration,\n                      skipInlineHidden : true\n                    })\n                ;\n              }\n              else {\n                $activeContent\n                  .children()\n                    .stop(true, true)\n                    .animate({\n                      opacity: 0\n                    }, settings.duration, module.resetOpacity)\n                ;\n              }\n            }\n            $activeContent\n              .slideUp(settings.duration, settings.easing, function() {\n                $activeContent\n                  .removeClass(className.animating)\n                  .removeClass(className.active)\n                ;\n                module.reset.display.call(this);\n                settings.onClose.call(this);\n                settings.onChange.call(this);\n              })\n            ;\n          }\n        },\n\n        closeOthers: function(index) {\n          var\n            $activeTitle = (index !== undefined)\n              ? $title.eq(index)\n              : $(this).closest(selector.title),\n            $parentTitles    = $activeTitle.parents(selector.content).prev(selector.title),\n            $activeAccordion = $activeTitle.closest(selector.accordion),\n            activeSelector   = selector.title + '.' + className.active + ':visible',\n            activeContent    = selector.content + '.' + className.active + ':visible',\n            $openTitles,\n            $nestedTitles,\n            $openContents\n          ;\n          if(settings.closeNested) {\n            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);\n            $openContents = $openTitles.next($content);\n          }\n          else {\n            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);\n            $nestedTitles = $activeAccordion.find(activeContent).find(activeSelector).not($parentTitles);\n            $openTitles   = $openTitles.not($nestedTitles);\n            $openContents = $openTitles.next($content);\n          }\n          if( ($openTitles.length > 0) ) {\n            module.debug('Exclusive enabled, closing other content', $openTitles);\n            $openTitles\n              .removeClass(className.active)\n            ;\n            $openContents\n              .removeClass(className.animating)\n              .stop(true, true)\n            ;\n            if(settings.animateChildren) {\n              if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $openContents\n                  .children()\n                    .transition({\n                      animation        : 'fade out',\n                      useFailSafe      : true,\n                      debug            : settings.debug,\n                      verbose          : settings.verbose,\n                      duration         : settings.duration,\n                      skipInlineHidden : true\n                    })\n                ;\n              }\n              else {\n                $openContents\n                  .children()\n                    .stop(true, true)\n                    .animate({\n                      opacity: 0\n                    }, settings.duration, module.resetOpacity)\n                ;\n              }\n            }\n            $openContents\n              .slideUp(settings.duration , settings.easing, function() {\n                $(this).removeClass(className.active);\n                module.reset.display.call(this);\n              })\n            ;\n          }\n        },\n\n        reset: {\n\n          display: function() {\n            module.verbose('Removing inline display from element', this);\n            $(this).css('display', '');\n            if( $(this).attr('style') === '') {\n              $(this)\n                .attr('style', '')\n                .removeAttr('style')\n              ;\n            }\n          },\n\n          opacity: function() {\n            module.verbose('Removing inline opacity from element', this);\n            $(this).css('opacity', '');\n            if( $(this).attr('style') === '') {\n              $(this)\n                .attr('style', '')\n                .removeAttr('style')\n              ;\n            }\n          },\n\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          module.debug('Changing internal', name, value);\n          if(value !== undefined) {\n            if( $.isPlainObject(name) ) {\n              $.extend(true, module, name);\n            }\n            else {\n              module[name] = value;\n            }\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if(Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.accordion.settings = {\n\n  name            : 'Accordion',\n  namespace       : 'accordion',\n\n  silent          : false,\n  debug           : false,\n  verbose         : false,\n  performance     : true,\n\n  on              : 'click', // event on title that opens accordion\n\n  observeChanges  : true,  // whether accordion should automatically refresh on DOM insertion\n\n  exclusive       : true,  // whether a single accordion content panel should be open at once\n  collapsible     : true,  // whether accordion content can be closed\n  closeNested     : false, // whether nested content should be closed when a panel is closed\n  animateChildren : true,  // whether children opacity should be animated\n\n  duration        : 350, // duration of animation\n  easing          : 'easeOutQuad', // easing equation for animation\n\n  onOpening       : function(){}, // callback before open animation\n  onClosing       : function(){}, // callback before closing animation\n  onChanging      : function(){}, // callback before closing or opening animation\n\n  onOpen          : function(){}, // callback after open animation\n  onClose         : function(){}, // callback after closing animation\n  onChange        : function(){}, // callback after closing or opening animation\n\n  error: {\n    method : 'The method you called is not defined'\n  },\n\n  className   : {\n    active    : 'active',\n    animating : 'animating'\n  },\n\n  selector    : {\n    accordion : '.accordion',\n    title     : '.title',\n    trigger   : '.title',\n    content   : '.content'\n  }\n\n};\n\n// Adds easing\n$.extend( $.easing, {\n  easeOutQuad: function (x, t, b, c, d) {\n    return -c *(t/=d)*(t-2) + b;\n  }\n});\n\n})( jQuery, window, document );\n\n\n/*!\n * # Fomantic-UI - Calendar\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n'use strict';\n\n$.isFunction = $.isFunction || function(obj) {\n  return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.calendar = function(parameters) {\n  var\n    $allModules    = $(this),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue,\n    timeGapTable = {\n      '5': {'row': 4, 'column': 3 },\n      '10': {'row': 3, 'column': 2 },\n      '15': {'row': 2, 'column': 2 },\n      '20': {'row': 3, 'column': 1 },\n      '30': {'row': 2, 'column': 1 }\n    }\n  ;\n\n  $allModules\n    .each(function () {\n      var\n        settings = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.calendar.settings, parameters)\n          : $.extend({}, $.fn.calendar.settings),\n\n        className = settings.className,\n        namespace = settings.namespace,\n        selector = settings.selector,\n        formatter = settings.formatter,\n        parser = settings.parser,\n        metadata = settings.metadata,\n        timeGap = timeGapTable[settings.minTimeGap],\n        error = settings.error,\n\n        eventNamespace = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module = $(this),\n        $input = $module.find(selector.input),\n        $container = $module.find(selector.popup),\n        $activator = $module.find(selector.activator),\n\n        element = this,\n        instance = $module.data(moduleNamespace),\n\n        isTouch,\n        isTouchDown = false,\n        focusDateUsedForRange = false,\n        module\n      ;\n\n      module = {\n\n        initialize: function () {\n          module.debug('Initializing calendar for', element, $module);\n\n          isTouch = module.get.isTouch();\n          module.setup.config();\n          module.setup.popup();\n          module.setup.inline();\n          module.setup.input();\n          module.setup.date();\n          module.create.calendar();\n\n          module.bind.events();\n          module.instantiate();\n        },\n\n        instantiate: function () {\n          module.verbose('Storing instance of calendar');\n          instance = module;\n          $module.data(moduleNamespace, instance);\n        },\n\n        destroy: function () {\n          module.verbose('Destroying previous calendar for', element);\n          $module.removeData(moduleNamespace);\n          module.unbind.events();\n        },\n\n        setup: {\n          config: function () {\n            if (module.get.minDate() !== null) {\n              module.set.minDate($module.data(metadata.minDate));\n            }\n            if (module.get.maxDate() !== null) {\n              module.set.maxDate($module.data(metadata.maxDate));\n            }\n          },\n          popup: function () {\n            if (settings.inline) {\n              return;\n            }\n            if (!$activator.length) {\n              $activator = $module.children().first();\n              if (!$activator.length) {\n                return;\n              }\n            }\n            if ($.fn.popup === undefined) {\n              module.error(error.popup);\n              return;\n            }\n            if (!$container.length) {\n              //prepend the popup element to the activator's parent so that it has less chance of messing with\n              //the styling (eg input action button needs to be the last child to have correct border radius)\n              var $activatorParent = $activator.parent(),\n                  domPositionFunction = $activatorParent.closest(selector.append).length !== 0 ? 'appendTo' : 'prependTo';\n              $container = $('<div/>').addClass(className.popup)[domPositionFunction]($activatorParent);\n            }\n            $container.addClass(className.calendar);\n            var onVisible = settings.onVisible;\n            var onHidden = settings.onHidden;\n            if (!$input.length) {\n              //no input, $container has to handle focus/blur\n              $container.attr('tabindex', '0');\n              onVisible = function () {\n                module.focus();\n                return settings.onVisible.apply($container, arguments);\n              };\n              onHidden = function () {\n                module.blur();\n                return settings.onHidden.apply($container, arguments);\n              };\n            }\n            var onShow = function () {\n              //reset the focus date onShow\n              module.set.focusDate(module.get.date());\n              module.set.mode(settings.startMode);\n              return settings.onShow.apply($container, arguments);\n            };\n            var on = settings.on || ($input.length ? 'focus' : 'click');\n            var options = $.extend({}, settings.popupOptions, {\n              popup: $container,\n              on: on,\n              hoverable: on === 'hover',\n              onShow: onShow,\n              onVisible: onVisible,\n              onHide: settings.onHide,\n              onHidden: onHidden\n            });\n            module.popup(options);\n          },\n          inline: function () {\n            if ($activator.length && !settings.inline) {\n              return;\n            }\n            $container = $('<div/>').addClass(className.calendar).appendTo($module);\n            if (!$input.length) {\n              $container.attr('tabindex', '0');\n            }\n          },\n          input: function () {\n            if (settings.touchReadonly && $input.length && isTouch) {\n              $input.prop('readonly', true);\n            }\n          },\n          date: function () {\n            if (settings.initialDate) {\n              var date = parser.date(settings.initialDate, settings);\n              module.set.date(date, settings.formatInput, false);\n            } else if ($module.data(metadata.date) !== undefined) {\n              var date = parser.date($module.data(metadata.date), settings);\n              module.set.date(date, settings.formatInput, false);\n            } else if ($input.length) {\n              var val = $input.val();\n              var date = parser.date(val, settings);\n              module.set.date(date, settings.formatInput, false);\n            }\n          }\n        },\n\n        create: {\n          calendar: function () {\n            var i, r, c, p, row, cell, pageGrid;\n\n            var mode = module.get.mode();\n            var today = new Date();\n            var date = module.get.date();\n            var focusDate = module.get.focusDate();\n            var display = focusDate || date || settings.initialDate || today;\n            display = module.helper.dateInRange(display);\n\n            if (!focusDate) {\n              focusDate = display;\n              module.set.focusDate(focusDate, false, false);\n            }\n\n            var isYear = mode === 'year';\n            var isMonth = mode === 'month';\n            var isDay = mode === 'day';\n            var isHour = mode === 'hour';\n            var isMinute = mode === 'minute';\n            var isTimeOnly = settings.type === 'time';\n\n            var multiMonth = Math.max(settings.multiMonth, 1);\n            var monthOffset = !isDay ? 0 : module.get.monthOffset();\n\n            var minute = display.getMinutes();\n            var hour = display.getHours();\n            var day = display.getDate();\n            var startMonth = display.getMonth() + monthOffset;\n            var year = display.getFullYear();\n\n            var columns = isDay ? settings.showWeekNumbers ? 8 : 7 : isHour ? 4 : timeGap['column'];\n            var rows = isDay || isHour ? 6 : timeGap['row'];\n            var pages = isDay ? multiMonth : 1;\n\n            var container = $container;\n            var tooltipPosition = container.hasClass(\"left\") ? \"right center\" : \"left center\";\n            container.empty();\n            if (pages > 1) {\n              pageGrid = $('<div/>').addClass(className.grid).appendTo(container);\n            }\n\n            for (p = 0; p < pages; p++) {\n              if (pages > 1) {\n                var pageColumn = $('<div/>').addClass(className.column).appendTo(pageGrid);\n                container = pageColumn;\n              }\n\n              var month = startMonth + p;\n              var firstMonthDayColumn = (new Date(year, month, 1).getDay() - settings.firstDayOfWeek % 7 + 7) % 7;\n              if (!settings.constantHeight && isDay) {\n                var requiredCells = new Date(year, month + 1, 0).getDate() + firstMonthDayColumn;\n                rows = Math.ceil(requiredCells / 7);\n              }\n\n              var yearChange = isYear ? 10 : isMonth ? 1 : 0;\n              var monthChange = isDay ? 1 : 0;\n              var dayChange = isHour || isMinute ? 1 : 0;\n              var prevNextDay = isHour || isMinute ? day : 1;\n              var prevDate = new Date(year - yearChange, month - monthChange, prevNextDay - dayChange, hour);\n              var nextDate = new Date(year + yearChange, month + monthChange, prevNextDay + dayChange, hour);\n\n              var prevLast = isYear ? new Date(Math.ceil(year / 10) * 10 - 9, 0, 0) :\n                isMonth ? new Date(year, 0, 0) : isDay ? new Date(year, month, 0) : new Date(year, month, day, -1);\n              var nextFirst = isYear ? new Date(Math.ceil(year / 10) * 10 + 1, 0, 1) :\n                isMonth ? new Date(year + 1, 0, 1) : isDay ? new Date(year, month + 1, 1) : new Date(year, month, day + 1);\n\n              var tempMode = mode;\n              if (isDay && settings.showWeekNumbers){\n                tempMode += ' andweek';\n              }\n              var table = $('<table/>').addClass(className.table).addClass(tempMode).appendTo(container);\n              var textColumns = columns;\n              //no header for time-only mode\n              if (!isTimeOnly) {\n                var thead = $('<thead/>').appendTo(table);\n\n                row = $('<tr/>').appendTo(thead);\n                cell = $('<th/>').attr('colspan', '' + columns).appendTo(row);\n\n                var headerDate = isYear || isMonth ? new Date(year, 0, 1) :\n                  isDay ? new Date(year, month, 1) : new Date(year, month, day, hour, minute);\n                var headerText = $('<span/>').addClass(className.link).appendTo(cell);\n                headerText.text(formatter.header(headerDate, mode, settings));\n                var newMode = isMonth ? (settings.disableYear ? 'day' : 'year') :\n                  isDay ? (settings.disableMonth ? 'year' : 'month') : 'day';\n                headerText.data(metadata.mode, newMode);\n\n                if (p === 0) {\n                  var prev = $('<span/>').addClass(className.prev).appendTo(cell);\n                  prev.data(metadata.focusDate, prevDate);\n                  prev.toggleClass(className.disabledCell, !module.helper.isDateInRange(prevLast, mode));\n                  $('<i/>').addClass(className.prevIcon).appendTo(prev);\n                }\n\n                if (p === pages - 1) {\n                  var next = $('<span/>').addClass(className.next).appendTo(cell);\n                  next.data(metadata.focusDate, nextDate);\n                  next.toggleClass(className.disabledCell, !module.helper.isDateInRange(nextFirst, mode));\n                  $('<i/>').addClass(className.nextIcon).appendTo(next);\n                }\n                if (isDay) {\n                  row = $('<tr/>').appendTo(thead);\n                  if(settings.showWeekNumbers) {\n                      cell = $('<th/>').appendTo(row);\n                      cell.text(settings.text.weekNo);\n                      cell.addClass(className.weekCell);\n                      textColumns--;\n                  }\n                  for (i = 0; i < textColumns; i++) {\n                    cell = $('<th/>').appendTo(row);\n                    cell.text(formatter.dayColumnHeader((i + settings.firstDayOfWeek) % 7, settings));\n                  }\n                }\n              }\n\n              var tbody = $('<tbody/>').appendTo(table);\n              i = isYear ? Math.ceil(year / 10) * 10 - 9 : isDay ? 1 - firstMonthDayColumn : 0;\n              for (r = 0; r < rows; r++) {\n                row = $('<tr/>').appendTo(tbody);\n                if(isDay && settings.showWeekNumbers){\n                    cell = $('<th/>').appendTo(row);\n                    cell.text(module.get.weekOfYear(year,month,i+1-settings.firstDayOfWeek));\n                    cell.addClass(className.weekCell);\n                }\n                for (c = 0; c < textColumns; c++, i++) {\n                  var cellDate = isYear ? new Date(i, month, 1, hour, minute) :\n                    isMonth ? new Date(year, i, 1, hour, minute) : isDay ? new Date(year, month, i, hour, minute) :\n                      isHour ? new Date(year, month, day, i) : new Date(year, month, day, hour, i * settings.minTimeGap);\n                  var cellText = isYear ? i :\n                    isMonth ? settings.text.monthsShort[i] : isDay ? cellDate.getDate() :\n                      formatter.time(cellDate, settings, true);\n                  cell = $('<td/>').addClass(className.cell).appendTo(row);\n                  cell.text(cellText);\n                  cell.data(metadata.date, cellDate);\n                  var adjacent = isDay && cellDate.getMonth() !== ((month + 12) % 12);\n                  var disabled = (!settings.selectAdjacentDays && adjacent) || !module.helper.isDateInRange(cellDate, mode) || settings.isDisabled(cellDate, mode) || module.helper.isDisabled(cellDate, mode) || !module.helper.isEnabled(cellDate, mode);\n                  if (disabled) {\n                    var disabledDate = module.helper.findDayAsObject(cellDate, mode, settings.disabledDates);\n                    if (disabledDate !== null && disabledDate[metadata.message]) {\n                      cell.attr(\"data-tooltip\", disabledDate[metadata.message]);\n                      cell.attr(\"data-position\", tooltipPosition);\n                    }\n                  } else {\n                    var eventDate = module.helper.findDayAsObject(cellDate, mode, settings.eventDates);\n                    if (eventDate !== null) {\n                      cell.addClass(eventDate[metadata.class] || settings.eventClass);\n                      if (eventDate[metadata.message]) {\n                        cell.attr(\"data-tooltip\", eventDate[metadata.message]);\n                        cell.attr(\"data-position\", tooltipPosition);\n                      }\n                    }\n                  }\n                  var active = module.helper.dateEqual(cellDate, date, mode);\n                  var isToday = module.helper.dateEqual(cellDate, today, mode);\n                  cell.toggleClass(className.adjacentCell, adjacent);\n                  cell.toggleClass(className.disabledCell, disabled);\n                  cell.toggleClass(className.activeCell, active && !adjacent);\n                  if (!isHour && !isMinute) {\n                    cell.toggleClass(className.todayCell, !adjacent && isToday);\n                  }\n\n                  // Allow for external modifications of each cell\n                  var cellOptions = {\n                    mode: mode,\n                    adjacent: adjacent,\n                    disabled: disabled,\n                    active: active,\n                    today: isToday\n                  };\n                  formatter.cell(cell, cellDate, cellOptions);\n\n                  if (module.helper.dateEqual(cellDate, focusDate, mode)) {\n                    //ensure that the focus date is exactly equal to the cell date\n                    //so that, if selected, the correct value is set\n                    module.set.focusDate(cellDate, false, false);\n                  }\n                }\n              }\n\n              if (settings.today) {\n                var todayRow = $('<tr/>').appendTo(tbody);\n                var todayButton = $('<td/>').attr('colspan', '' + columns).addClass(className.today).appendTo(todayRow);\n                todayButton.text(formatter.today(settings));\n                todayButton.data(metadata.date, today);\n              }\n\n              module.update.focus(false, table);\n            }\n          }\n        },\n\n        update: {\n          focus: function (updateRange, container) {\n            container = container || $container;\n            var mode = module.get.mode();\n            var date = module.get.date();\n            var focusDate = module.get.focusDate();\n            var startDate = module.get.startDate();\n            var endDate = module.get.endDate();\n            var rangeDate = (updateRange ? focusDate : null) || date || (!isTouch ? focusDate : null);\n\n            container.find('td').each(function () {\n              var cell = $(this);\n              var cellDate = cell.data(metadata.date);\n              if (!cellDate) {\n                return;\n              }\n              var disabled = cell.hasClass(className.disabledCell);\n              var active = cell.hasClass(className.activeCell);\n              var adjacent = cell.hasClass(className.adjacentCell);\n              var focused = module.helper.dateEqual(cellDate, focusDate, mode);\n              var inRange = !rangeDate ? false :\n                ((!!startDate && module.helper.isDateInRange(cellDate, mode, startDate, rangeDate)) ||\n                (!!endDate && module.helper.isDateInRange(cellDate, mode, rangeDate, endDate)));\n              cell.toggleClass(className.focusCell, focused && (!isTouch || isTouchDown) && (!adjacent || (settings.selectAdjacentDays && adjacent)) && !disabled);\n              cell.toggleClass(className.rangeCell, inRange && !active && !disabled);\n            });\n          }\n        },\n\n        refresh: function () {\n          module.create.calendar();\n        },\n\n        bind: {\n          events: function () {\n            module.debug('Binding events');\n            $container.on('mousedown' + eventNamespace, module.event.mousedown);\n            $container.on('touchstart' + eventNamespace, module.event.mousedown);\n            $container.on('mouseup' + eventNamespace, module.event.mouseup);\n            $container.on('touchend' + eventNamespace, module.event.mouseup);\n            $container.on('mouseover' + eventNamespace, module.event.mouseover);\n            if ($input.length) {\n              $input.on('input' + eventNamespace, module.event.inputChange);\n              $input.on('focus' + eventNamespace, module.event.inputFocus);\n              $input.on('blur' + eventNamespace, module.event.inputBlur);\n              $input.on('click' + eventNamespace, module.event.inputClick);\n              $input.on('keydown' + eventNamespace, module.event.keydown);\n            } else {\n              $container.on('keydown' + eventNamespace, module.event.keydown);\n            }\n          }\n        },\n\n        unbind: {\n          events: function () {\n            module.debug('Unbinding events');\n            $container.off(eventNamespace);\n            if ($input.length) {\n              $input.off(eventNamespace);\n            }\n          }\n        },\n\n        event: {\n          mouseover: function (event) {\n            var target = $(event.target);\n            var date = target.data(metadata.date);\n            var mousedown = event.buttons === 1;\n            if (date) {\n              module.set.focusDate(date, false, true, mousedown);\n            }\n          },\n          mousedown: function (event) {\n            if ($input.length) {\n              //prevent the mousedown on the calendar causing the input to lose focus\n              event.preventDefault();\n            }\n            isTouchDown = event.type.indexOf('touch') >= 0;\n            var target = $(event.target);\n            var date = target.data(metadata.date);\n            if (date) {\n              module.set.focusDate(date, false, true, true);\n            }\n          },\n          mouseup: function (event) {\n            //ensure input has focus so that it receives keydown events for calendar navigation\n            module.focus();\n            event.preventDefault();\n            event.stopPropagation();\n            isTouchDown = false;\n            var target = $(event.target);\n            if (target.hasClass(\"disabled\")) {\n              return;\n            }\n            var parent = target.parent();\n            if (parent.data(metadata.date) || parent.data(metadata.focusDate) || parent.data(metadata.mode)) {\n              //clicked on a child element, switch to parent (used when clicking directly on prev/next <i> icon element)\n              target = parent;\n            }\n            var date = target.data(metadata.date);\n            var focusDate = target.data(metadata.focusDate);\n            var mode = target.data(metadata.mode);\n            if (date && settings.onSelect.call(element, date, module.get.mode()) !== false) {\n              var forceSet = target.hasClass(className.today);\n              module.selectDate(date, forceSet);\n            }\n            else if (focusDate) {\n              module.set.focusDate(focusDate);\n            }\n            else if (mode) {\n              module.set.mode(mode);\n            }\n          },\n          keydown: function (event) {\n            var keyCode = event.which;\n            if (keyCode === 27 || keyCode === 9) {\n              //esc || tab\n              module.popup('hide');\n            }\n\n            if (module.popup('is visible')) {\n              if (keyCode === 37 || keyCode === 38 || keyCode === 39 || keyCode === 40) {\n                //arrow keys\n                var mode = module.get.mode();\n                var bigIncrement = mode === 'day' ? 7 : mode === 'hour' ? 4 : mode === 'minute' ? timeGap['column'] : 3;\n                var increment = keyCode === 37 ? -1 : keyCode === 38 ? -bigIncrement : keyCode == 39 ? 1 : bigIncrement;\n                increment *= mode === 'minute' ? settings.minTimeGap : 1;\n                var focusDate = module.get.focusDate() || module.get.date() || new Date();\n                var year = focusDate.getFullYear() + (mode === 'year' ? increment : 0);\n                var month = focusDate.getMonth() + (mode === 'month' ? increment : 0);\n                var day = focusDate.getDate() + (mode === 'day' ? increment : 0);\n                var hour = focusDate.getHours() + (mode === 'hour' ? increment : 0);\n                var minute = focusDate.getMinutes() + (mode === 'minute' ? increment : 0);\n                var newFocusDate = new Date(year, month, day, hour, minute);\n                if (settings.type === 'time') {\n                  newFocusDate = module.helper.mergeDateTime(focusDate, newFocusDate);\n                }\n                if (module.helper.isDateInRange(newFocusDate, mode)) {\n                  module.set.focusDate(newFocusDate);\n                }\n              } else if (keyCode === 13) {\n                //enter\n                var mode = module.get.mode();\n                var date = module.get.focusDate();\n                if (date && !settings.isDisabled(date, mode) && !module.helper.isDisabled(date, mode) && module.helper.isEnabled(date, mode)) {\n                  module.selectDate(date);\n                }\n                //disable form submission:\n                event.preventDefault();\n                event.stopPropagation();\n              }\n            }\n\n            if (keyCode === 38 || keyCode === 40) {\n              //arrow-up || arrow-down\n              event.preventDefault(); //don't scroll\n              module.popup('show');\n            }\n          },\n          inputChange: function () {\n            var val = $input.val();\n            var date = parser.date(val, settings);\n            module.set.date(date, false);\n          },\n          inputFocus: function () {\n            $container.addClass(className.active);\n          },\n          inputBlur: function () {\n            $container.removeClass(className.active);\n            if (settings.formatInput) {\n              var date = module.get.date();\n              var text = formatter.datetime(date, settings);\n              $input.val(text);\n            }\n          },\n          inputClick: function () {\n            module.popup('show');\n          }\n        },\n\n        get: {\n          weekOfYear: function(weekYear,weekMonth,weekDay) {\n              // adapted from http://www.merlyn.demon.co.uk/weekcalc.htm\n              var ms1d = 864e5, // milliseconds in a day\n                  ms7d = 7 * ms1d; // milliseconds in a week\n\n              return function() { // return a closure so constants get calculated only once\n                  var DC3 = Date.UTC(weekYear, weekMonth, weekDay + 3) / ms1d, // an Absolute Day Number\n                      AWN = Math.floor(DC3 / 7), // an Absolute Week Number\n                      Wyr = new Date(AWN * ms7d).getUTCFullYear();\n\n                  return AWN - Math.floor(Date.UTC(Wyr, 0, 7) / ms7d) + 1;\n              }();\n          },\n          date: function () {\n            return module.helper.sanitiseDate($module.data(metadata.date)) || null;\n          },\n          inputDate: function() {\n            return $input.val();\n          },\n          focusDate: function () {\n            return $module.data(metadata.focusDate) || null;\n          },\n          startDate: function () {\n            var startModule = module.get.calendarModule(settings.startCalendar);\n            return (startModule ? startModule.get.date() : $module.data(metadata.startDate)) || null;\n          },\n          endDate: function () {\n            var endModule = module.get.calendarModule(settings.endCalendar);\n            return (endModule ? endModule.get.date() : $module.data(metadata.endDate)) || null;\n          },\n          minDate: function() {\n            return $module.data(metadata.minDate) || null;\n          },\n          maxDate: function() {\n            return $module.data(metadata.maxDate) || null;\n          },\n          monthOffset: function () {\n            return $module.data(metadata.monthOffset) || 0;\n          },\n          mode: function () {\n            //only returns valid modes for the current settings\n            var mode = $module.data(metadata.mode) || settings.startMode;\n            var validModes = module.get.validModes();\n            if ($.inArray(mode, validModes) >= 0) {\n              return mode;\n            }\n            return settings.type === 'time' ? 'hour' :\n              settings.type === 'month' ? 'month' :\n                settings.type === 'year' ? 'year' : 'day';\n          },\n          validModes: function () {\n            var validModes = [];\n            if (settings.type !== 'time') {\n              if (!settings.disableYear || settings.type === 'year') {\n                validModes.push('year');\n              }\n              if (!(settings.disableMonth || settings.type === 'year') || settings.type === 'month') {\n                validModes.push('month');\n              }\n              if (settings.type.indexOf('date') >= 0) {\n                validModes.push('day');\n              }\n            }\n            if (settings.type.indexOf('time') >= 0) {\n              validModes.push('hour');\n              if (!settings.disableMinute) {\n                validModes.push('minute');\n              }\n            }\n            return validModes;\n          },\n          isTouch: function () {\n            try {\n              document.createEvent('TouchEvent');\n              return true;\n            }\n            catch (e) {\n              return false;\n            }\n          },\n          calendarModule: function (selector) {\n            if (!selector) {\n              return null;\n            }\n            if (!(selector instanceof $)) {\n              selector = $(selector).first();\n            }\n            //assume range related calendars are using the same namespace\n            return selector.data(moduleNamespace);\n          }\n        },\n\n        set: {\n          date: function (date, updateInput, fireChange) {\n            updateInput = updateInput !== false;\n            fireChange = fireChange !== false;\n            date = module.helper.sanitiseDate(date);\n            date = module.helper.dateInRange(date);\n\n            var mode = module.get.mode();\n            var text = formatter.datetime(date, settings);\n            if (fireChange && settings.onChange.call(element, date, text, mode) === false) {\n              return false;\n            }\n\n            module.set.focusDate(date);\n\n            if (settings.isDisabled(date, mode)) {\n              return false;\n            }\n\n            var endDate = module.get.endDate();\n            if (!!endDate && !!date && date > endDate) {\n              //selected date is greater than end date in range, so clear end date\n              module.set.endDate(undefined);\n            }\n            module.set.dataKeyValue(metadata.date, date);\n\n            if (updateInput && $input.length) {\n              $input.val(text);\n            }\n          },\n          startDate: function (date, refreshCalendar) {\n            date = module.helper.sanitiseDate(date);\n            var startModule = module.get.calendarModule(settings.startCalendar);\n            if (startModule) {\n              startModule.set.date(date);\n            }\n            module.set.dataKeyValue(metadata.startDate, date, refreshCalendar);\n          },\n          endDate: function (date, refreshCalendar) {\n            date = module.helper.sanitiseDate(date);\n            var endModule = module.get.calendarModule(settings.endCalendar);\n            if (endModule) {\n              endModule.set.date(date);\n            }\n            module.set.dataKeyValue(metadata.endDate, date, refreshCalendar);\n          },\n          focusDate: function (date, refreshCalendar, updateFocus, updateRange) {\n            date = module.helper.sanitiseDate(date);\n            date = module.helper.dateInRange(date);\n            var isDay = module.get.mode() === 'day';\n            var oldFocusDate = module.get.focusDate();\n            if (isDay && date && oldFocusDate) {\n              var yearDelta = date.getFullYear() - oldFocusDate.getFullYear();\n              var monthDelta = yearDelta * 12 + date.getMonth() - oldFocusDate.getMonth();\n              if (monthDelta) {\n                var monthOffset = module.get.monthOffset() - monthDelta;\n                module.set.monthOffset(monthOffset, false);\n              }\n            }\n            var changed = module.set.dataKeyValue(metadata.focusDate, date, refreshCalendar);\n            updateFocus = (updateFocus !== false && changed && refreshCalendar === false) || focusDateUsedForRange != updateRange;\n            focusDateUsedForRange = updateRange;\n            if (updateFocus) {\n              module.update.focus(updateRange);\n            }\n          },\n          minDate: function (date) {\n            date = module.helper.sanitiseDate(date);\n            if (settings.maxDate !== null && settings.maxDate <= date) {\n              module.verbose('Unable to set minDate variable bigger that maxDate variable', date, settings.maxDate);\n            } else {\n              module.setting('minDate', date);\n              module.set.dataKeyValue(metadata.minDate, date);\n            }\n          },\n          maxDate: function (date) {\n            date = module.helper.sanitiseDate(date);\n            if (settings.minDate !== null && settings.minDate >= date) {\n              module.verbose('Unable to set maxDate variable lower that minDate variable', date, settings.minDate);\n            } else {\n              module.setting('maxDate', date);\n              module.set.dataKeyValue(metadata.maxDate, date);\n            }\n          },\n          monthOffset: function (monthOffset, refreshCalendar) {\n            var multiMonth = Math.max(settings.multiMonth, 1);\n            monthOffset = Math.max(1 - multiMonth, Math.min(0, monthOffset));\n            module.set.dataKeyValue(metadata.monthOffset, monthOffset, refreshCalendar);\n          },\n          mode: function (mode, refreshCalendar) {\n            module.set.dataKeyValue(metadata.mode, mode, refreshCalendar);\n          },\n          dataKeyValue: function (key, value, refreshCalendar) {\n            var oldValue = $module.data(key);\n            var equal = oldValue === value || (oldValue <= value && oldValue >= value); //equality test for dates and string objects\n            if (value) {\n              $module.data(key, value);\n            } else {\n              $module.removeData(key);\n            }\n            refreshCalendar = refreshCalendar !== false && !equal;\n            if (refreshCalendar) {\n              module.refresh();\n            }\n            return !equal;\n          }\n        },\n\n        selectDate: function (date, forceSet) {\n          module.verbose('New date selection', date);\n          var mode = module.get.mode();\n          var complete = forceSet || mode === 'minute' ||\n            (settings.disableMinute && mode === 'hour') ||\n            (settings.type === 'date' && mode === 'day') ||\n            (settings.type === 'month' && mode === 'month') ||\n            (settings.type === 'year' && mode === 'year');\n          if (complete) {\n            var canceled = module.set.date(date) === false;\n            if (!canceled && settings.closable) {\n              module.popup('hide');\n              //if this is a range calendar, show the end date calendar popup and focus the input\n              var endModule = module.get.calendarModule(settings.endCalendar);\n              if (endModule) {\n                endModule.popup('show');\n                endModule.focus();\n              }\n            }\n          } else {\n            var newMode = mode === 'year' ? (!settings.disableMonth ? 'month' : 'day') :\n              mode === 'month' ? 'day' : mode === 'day' ? 'hour' : 'minute';\n            module.set.mode(newMode);\n            if (mode === 'hour' || (mode === 'day' && module.get.date())) {\n              //the user has chosen enough to consider a valid date/time has been chosen\n              module.set.date(date);\n            } else {\n              module.set.focusDate(date);\n            }\n          }\n        },\n\n        changeDate: function (date) {\n          module.set.date(date);\n        },\n\n        clear: function () {\n          module.set.date(undefined);\n        },\n\n        popup: function () {\n          return $activator.popup.apply($activator, arguments);\n        },\n\n        focus: function () {\n          if ($input.length) {\n            $input.focus();\n          } else {\n            $container.focus();\n          }\n        },\n        blur: function () {\n          if ($input.length) {\n            $input.blur();\n          } else {\n            $container.blur();\n          }\n        },\n\n        helper: {\n          isDisabled: function(date, mode) {\n            return mode === 'day' && ((settings.disabledDaysOfWeek.indexOf(date.getDay()) !== -1) || settings.disabledDates.some(function(d){\n              if(typeof d === 'string') {\n                d = module.helper.sanitiseDate(d);\n              }\n              if (d instanceof Date) {\n                return module.helper.dateEqual(date, d, mode);\n              }\n              if (d !== null && typeof d === 'object' && d[metadata.date]) {\n                return module.helper.dateEqual(date, module.helper.sanitiseDate(d[metadata.date]), mode);\n              }\n            }));\n          },\n          isEnabled: function(date, mode) {\n            if (mode === 'day') {\n              return settings.enabledDates.length === 0 || settings.enabledDates.some(function(d){\n                if(typeof d === 'string') {\n                  d = module.helper.sanitiseDate(d);\n                }\n                if (d instanceof Date) {\n                  return module.helper.dateEqual(date, d, mode);\n                }\n                if (d !== null && typeof d === 'object' && d[metadata.date]) {\n                  return module.helper.dateEqual(date, module.helper.sanitiseDate(d[metadata.date]), mode);\n                }\n              });\n            } else {\n              return true;\n            }\n          },\n          findDayAsObject: function(date, mode, dates) {\n            if (mode === 'day') {\n              var i = 0, il = dates.length;\n              var d;\n              for (; i < il; i++) {\n                d = dates[i];\n                if(typeof d === 'string') {\n                  d = module.helper.sanitiseDate(d);\n                }\n                if (d instanceof Date && module.helper.dateEqual(date, d, mode)) {\n                  var dateObject = {};\n                  dateObject[metadata.date] = d;\n                  return dateObject;\n                }\n                else if (d !== null && typeof d === 'object' && d[metadata.date] && module.helper.dateEqual(date,module.helper.sanitiseDate(d[metadata.date]), mode)  ) {\n                  return d;\n                }\n              }\n            }\n            return null;\n          },\n          sanitiseDate: function (date) {\n            if (!date) {\n              return undefined;\n            }\n            if (!(date instanceof Date)) {\n              date = parser.date('' + date, settings);\n            }\n            if (!date || date === null || isNaN(date.getTime())) {\n              return undefined;\n            }\n            return date;\n          },\n          dateDiff: function (date1, date2, mode) {\n            mode = mode || 'day';\n            var isTimeOnly = settings.type === 'time';\n            var isYear = mode === 'year';\n            var isYearOrMonth = isYear || mode === 'month';\n            var isMinute = mode === 'minute';\n            var isHourOrMinute = isMinute || mode === 'hour';\n            //only care about a minute accuracy of settings.minTimeGap\n            date1 = new Date(\n              isTimeOnly ? 2000 : date1.getFullYear(),\n              isTimeOnly ? 0 : isYear ? 0 : date1.getMonth(),\n              isTimeOnly ? 1 : isYearOrMonth ? 1 : date1.getDate(),\n              !isHourOrMinute ? 0 : date1.getHours(),\n              !isMinute ? 0 : settings.minTimeGap * Math.floor(date1.getMinutes() / settings.minTimeGap));\n            date2 = new Date(\n              isTimeOnly ? 2000 : date2.getFullYear(),\n              isTimeOnly ? 0 : isYear ? 0 : date2.getMonth(),\n              isTimeOnly ? 1 : isYearOrMonth ? 1 : date2.getDate(),\n              !isHourOrMinute ? 0 : date2.getHours(),\n              !isMinute ? 0 : settings.minTimeGap * Math.floor(date2.getMinutes() / settings.minTimeGap));\n            return date2.getTime() - date1.getTime();\n          },\n          dateEqual: function (date1, date2, mode) {\n            return !!date1 && !!date2 && module.helper.dateDiff(date1, date2, mode) === 0;\n          },\n          isDateInRange: function (date, mode, minDate, maxDate) {\n            if (!minDate && !maxDate) {\n              var startDate = module.get.startDate();\n              minDate = startDate && settings.minDate ? new Date(Math.max(startDate, settings.minDate)) : startDate || settings.minDate;\n              maxDate = settings.maxDate;\n            }\n            minDate = minDate && new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate(), minDate.getHours(), settings.minTimeGap * Math.ceil(minDate.getMinutes() / settings.minTimeGap));\n            return !(!date ||\n            (minDate && module.helper.dateDiff(date, minDate, mode) > 0) ||\n            (maxDate && module.helper.dateDiff(maxDate, date, mode) > 0));\n          },\n          dateInRange: function (date, minDate, maxDate) {\n            if (!minDate && !maxDate) {\n              var startDate = module.get.startDate();\n              minDate = startDate && settings.minDate ? new Date(Math.max(startDate, settings.minDate)) : startDate || settings.minDate;\n              maxDate = settings.maxDate;\n            }\n            minDate = minDate && new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate(), minDate.getHours(), settings.minTimeGap * Math.ceil(minDate.getMinutes() / settings.minTimeGap));\n            var isTimeOnly = settings.type === 'time';\n            return !date ? date :\n              (minDate && module.helper.dateDiff(date, minDate, 'minute') > 0) ?\n                (isTimeOnly ? module.helper.mergeDateTime(date, minDate) : minDate) :\n                (maxDate && module.helper.dateDiff(maxDate, date, 'minute') > 0) ?\n                  (isTimeOnly ? module.helper.mergeDateTime(date, maxDate) : maxDate) :\n                  date;\n          },\n          mergeDateTime: function (date, time) {\n            return (!date || !time) ? time :\n              new Date(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes());\n          }\n        },\n\n        setting: function (name, value) {\n          module.debug('Changing setting', name, value);\n          if ($.isPlainObject(name)) {\n            $.extend(true, settings, name);\n          }\n          else if (value !== undefined) {\n            if ($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function (name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function () {\n          if (!settings.silent && settings.debug) {\n            if (settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function () {\n          if (!settings.silent && settings.verbose && settings.debug) {\n            if (settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function () {\n          if (!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function (message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n              ;\n            if (settings.performance) {\n              currentTime = new Date().getTime();\n              previousTime = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time = currentTime;\n              performance.push({\n                'Name': message[0],\n                'Arguments': [].slice.call(message, 1) || '',\n                'Element': element,\n                'Execution Time': executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function () {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n              ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function (index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if (moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if ((console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if (console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function (index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time'] + 'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function (query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n            ;\n          passedArguments = passedArguments || queryArguments;\n          context = element || context;\n          if (typeof query == 'string' && object !== undefined) {\n            query = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function (depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                  ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                  : query\n                ;\n              if ($.isPlainObject(object[camelCaseValue]) && (depth != maxDepth)) {\n                object = object[camelCaseValue];\n              }\n              else if (object[camelCaseValue] !== undefined) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if ($.isPlainObject(object[value]) && (depth != maxDepth)) {\n                object = object[value];\n              }\n              else if (object[value] !== undefined) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ($.isFunction(found)) {\n            response = found.apply(context, passedArguments);\n          }\n          else if (found !== undefined) {\n            response = found;\n          }\n          if (Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if (returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if (response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if (methodInvoked) {\n        if (instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if (instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n    ;\n};\n\n$.fn.calendar.settings = {\n\n  name            : 'Calendar',\n  namespace       : 'calendar',\n\n  silent: false,\n  debug: false,\n  verbose: false,\n  performance: false,\n\n  type               : 'datetime', // picker type, can be 'datetime', 'date', 'time', 'month', or 'year'\n  firstDayOfWeek     : 0,          // day for first day column (0 = Sunday)\n  constantHeight     : true,       // add rows to shorter months to keep day calendar height consistent (6 rows)\n  today              : false,      // show a 'today/now' button at the bottom of the calendar\n  closable           : true,       // close the popup after selecting a date/time\n  monthFirst         : true,       // month before day when parsing/converting date from/to text\n  touchReadonly      : true,       // set input to readonly on touch devices\n  inline             : false,      // create the calendar inline instead of inside a popup\n  on                 : null,       // when to show the popup (defaults to 'focus' for input, 'click' for others)\n  initialDate        : null,       // date to display initially when no date is selected (null = now)\n  startMode          : false,      // display mode to start in, can be 'year', 'month', 'day', 'hour', 'minute' (false = 'day')\n  minDate            : null,       // minimum date/time that can be selected, dates/times before are disabled\n  maxDate            : null,       // maximum date/time that can be selected, dates/times after are disabled\n  ampm               : true,       // show am/pm in time mode\n  disableYear        : false,      // disable year selection mode\n  disableMonth       : false,      // disable month selection mode\n  disableMinute      : false,      // disable minute selection mode\n  formatInput        : true,       // format the input text upon input blur and module creation\n  startCalendar      : null,       // jquery object or selector for another calendar that represents the start date of a date range\n  endCalendar        : null,       // jquery object or selector for another calendar that represents the end date of a date range\n  multiMonth         : 1,          // show multiple months when in 'day' mode\n  minTimeGap         : 5,\n  showWeekNumbers    : null,       // show Number of Week at the very first column of a dayView\n  disabledDates      : [],         // specific day(s) which won't be selectable and contain additional information.\n  disabledDaysOfWeek : [],         // day(s) which won't be selectable(s) (0 = Sunday)\n  enabledDates       : [],         // specific day(s) which will be selectable, all other days will be disabled\n  eventDates         : [],         // specific day(s) which will be shown in a different color and using tooltips\n  centuryBreak       : 60,         // starting short year until 99 where it will be assumed to belong to the last century\n  currentCentury     : 2000,       // century to be added to 2-digit years (00 to {centuryBreak}-1)\n  selectAdjacentDays : false,     // The calendar can show dates from adjacent month. These adjacent month dates can also be made selectable.\n  // popup options ('popup', 'on', 'hoverable', and show/hide callbacks are overridden)\n  popupOptions: {\n    position: 'bottom left',\n    lastResort: 'bottom left',\n    prefer: 'opposite',\n    hideOnScroll: false\n  },\n\n  text: {\n    days: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n    months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n    monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n    today: 'Today',\n    now: 'Now',\n    am: 'AM',\n    pm: 'PM',\n    weekNo: 'Week'\n  },\n\n  formatter: {\n    header: function (date, mode, settings) {\n      return mode === 'year' ? settings.formatter.yearHeader(date, settings) :\n        mode === 'month' ? settings.formatter.monthHeader(date, settings) :\n          mode === 'day' ? settings.formatter.dayHeader(date, settings) :\n            mode === 'hour' ? settings.formatter.hourHeader(date, settings) :\n              settings.formatter.minuteHeader(date, settings);\n    },\n    yearHeader: function (date, settings) {\n      var decadeYear = Math.ceil(date.getFullYear() / 10) * 10;\n      return (decadeYear - 9) + ' - ' + (decadeYear + 2);\n    },\n    monthHeader: function (date, settings) {\n      return date.getFullYear();\n    },\n    dayHeader: function (date, settings) {\n      var month = settings.text.months[date.getMonth()];\n      var year = date.getFullYear();\n      return month + ' ' + year;\n    },\n    hourHeader: function (date, settings) {\n      return settings.formatter.date(date, settings);\n    },\n    minuteHeader: function (date, settings) {\n      return settings.formatter.date(date, settings);\n    },\n    dayColumnHeader: function (day, settings) {\n      return settings.text.days[day];\n    },\n    datetime: function (date, settings) {\n      if (!date) {\n        return '';\n      }\n      var day = settings.type === 'time' ? '' : settings.formatter.date(date, settings);\n      var time = settings.type.indexOf('time') < 0 ? '' : settings.formatter.time(date, settings, false);\n      var separator = settings.type === 'datetime' ? ' ' : '';\n      return day + separator + time;\n    },\n    date: function (date, settings) {\n      if (!date) {\n        return '';\n      }\n      var day = date.getDate();\n      var month = settings.text.months[date.getMonth()];\n      var year = date.getFullYear();\n      return settings.type === 'year' ? year :\n        settings.type === 'month' ? month + ' ' + year :\n        (settings.monthFirst ? month + ' ' + day : day + ' ' + month) + ', ' + year;\n    },\n    time: function (date, settings, forCalendar) {\n      if (!date) {\n        return '';\n      }\n      var hour = date.getHours();\n      var minute = date.getMinutes();\n      var ampm = '';\n      if (settings.ampm) {\n        ampm = ' ' + (hour < 12 ? settings.text.am : settings.text.pm);\n        hour = hour === 0 ? 12 : hour > 12 ? hour - 12 : hour;\n      }\n      return hour + ':' + (minute < 10 ? '0' : '') + minute + ampm;\n    },\n    today: function (settings) {\n      return settings.type === 'date' ? settings.text.today : settings.text.now;\n    },\n    cell: function (cell, date, cellOptions) {\n    }\n  },\n\n  parser: {\n    date: function (text, settings) {\n      if (text instanceof Date) {\n        return text;\n      }\n      if (!text) {\n        return null;\n      }\n      text = ('' + text).trim().toLowerCase();\n      if (text.length === 0) {\n        return null;\n      }\n      var textDate = new Date(text);\n      if(!isNaN(textDate.getDate())) {\n        return textDate;\n      }\n\n      var i, j, k;\n      var minute = -1, hour = -1, day = -1, month = -1, year = -1;\n      var isAm = undefined;\n\n      var isTimeOnly = settings.type === 'time';\n      var isDateOnly = settings.type.indexOf('time') < 0;\n\n      var words = text.split(settings.regExp.dateWords);\n      var numbers = text.split(settings.regExp.dateNumbers);\n\n      if (!isDateOnly) {\n        //am/pm\n        isAm = $.inArray(settings.text.am.toLowerCase(), words) >= 0 ? true :\n          $.inArray(settings.text.pm.toLowerCase(), words) >= 0 ? false : undefined;\n\n        //time with ':'\n        for (i = 0; i < numbers.length; i++) {\n          var number = numbers[i];\n          if (number.indexOf(':') >= 0) {\n            if (hour < 0 || minute < 0) {\n              var parts = number.split(':');\n              for (k = 0; k < Math.min(2, parts.length); k++) {\n                j = parseInt(parts[k]);\n                if (isNaN(j)) {\n                  j = 0;\n                }\n                if (k === 0) {\n                  hour = j % 24;\n                } else {\n                  minute = j % 60;\n                }\n              }\n            }\n            numbers.splice(i, 1);\n          }\n        }\n      }\n\n      if (!isTimeOnly) {\n        //textual month\n        for (i = 0; i < words.length; i++) {\n          var word = words[i];\n          if (word.length <= 0) {\n            continue;\n          }\n          word = word.substring(0, Math.min(word.length, 3));\n          for (j = 0; j < settings.text.months.length; j++) {\n            var monthString = settings.text.months[j];\n            monthString = monthString.substring(0, Math.min(word.length, Math.min(monthString.length, 3))).toLowerCase();\n            if (monthString === word) {\n              month = j + 1;\n              break;\n            }\n          }\n          if (month >= 0) {\n            break;\n          }\n        }\n\n        //year > settings.centuryBreak\n        for (i = 0; i < numbers.length; i++) {\n          j = parseInt(numbers[i]);\n          if (isNaN(j)) {\n            continue;\n          }\n          if (j >= settings.centuryBreak && i === numbers.length-1) {\n            if (j <= 99) {\n              j += settings.currentCentury - 100;\n            }\n            year = j;\n            numbers.splice(i, 1);\n            break;\n          }\n        }\n\n        //numeric month\n        if (month < 0) {\n          for (i = 0; i < numbers.length; i++) {\n            k = i > 1 || settings.monthFirst ? i : i === 1 ? 0 : 1;\n            j = parseInt(numbers[k]);\n            if (isNaN(j)) {\n              continue;\n            }\n            if (1 <= j && j <= 12) {\n              month = j;\n              numbers.splice(k, 1);\n              break;\n            }\n          }\n        }\n\n        //day\n        for (i = 0; i < numbers.length; i++) {\n          j = parseInt(numbers[i]);\n          if (isNaN(j)) {\n            continue;\n          }\n          if (1 <= j && j <= 31) {\n            day = j;\n            numbers.splice(i, 1);\n            break;\n          }\n        }\n\n        //year <= settings.centuryBreak\n        if (year < 0) {\n          for (i = numbers.length - 1; i >= 0; i--) {\n            j = parseInt(numbers[i]);\n            if (isNaN(j)) {\n              continue;\n            }\n            if (j <= 99) {\n              j += settings.currentCentury;\n            }\n            year = j;\n            numbers.splice(i, 1);\n            break;\n          }\n        }\n      }\n\n      if (!isDateOnly) {\n        //hour\n        if (hour < 0) {\n          for (i = 0; i < numbers.length; i++) {\n            j = parseInt(numbers[i]);\n            if (isNaN(j)) {\n              continue;\n            }\n            if (0 <= j && j <= 23) {\n              hour = j;\n              numbers.splice(i, 1);\n              break;\n            }\n          }\n        }\n\n        //minute\n        if (minute < 0) {\n          for (i = 0; i < numbers.length; i++) {\n            j = parseInt(numbers[i]);\n            if (isNaN(j)) {\n              continue;\n            }\n            if (0 <= j && j <= 59) {\n              minute = j;\n              numbers.splice(i, 1);\n              break;\n            }\n          }\n        }\n      }\n\n      if (minute < 0 && hour < 0 && day < 0 && month < 0 && year < 0) {\n        return null;\n      }\n\n      if (minute < 0) {\n        minute = 0;\n      }\n      if (hour < 0) {\n        hour = 0;\n      }\n      if (day < 0) {\n        day = 1;\n      }\n      if (month < 0) {\n        month = 1;\n      }\n      if (year < 0) {\n        year = new Date().getFullYear();\n      }\n\n      if (isAm !== undefined) {\n        if (isAm) {\n          if (hour === 12) {\n            hour = 0;\n          }\n        } else if (hour < 12) {\n          hour += 12;\n        }\n      }\n\n      var date = new Date(year, month - 1, day, hour, minute);\n      if (date.getMonth() !== month - 1 || date.getFullYear() !== year) {\n        //month or year don't match up, switch to last day of the month\n        date = new Date(year, month, 0, hour, minute);\n      }\n      return isNaN(date.getTime()) ? null : date;\n    }\n  },\n\n  // callback when date changes, return false to cancel the change\n  onChange: function (date, text, mode) {\n    return true;\n  },\n\n  // callback before show animation, return false to prevent show\n  onShow: function () {\n  },\n\n  // callback after show animation\n  onVisible: function () {\n  },\n\n  // callback before hide animation, return false to prevent hide\n  onHide: function () {\n  },\n\n  // callback after hide animation\n  onHidden: function () {\n  },\n\n  // callback before item is selected, return false to prevent selection\n  onSelect: function (date, mode) {\n  },\n\n  // is the given date disabled?\n  isDisabled: function (date, mode) {\n    return false;\n  },\n\n  selector: {\n    popup: '.ui.popup',\n    input: 'input',\n    activator: 'input',\n    append: '.inline.field,.inline.fields'\n  },\n\n  regExp: {\n    dateWords: /[^A-Za-z\\u00C0-\\u024F]+/g,\n    dateNumbers: /[^\\d:]+/g\n  },\n\n  error: {\n    popup: 'UI Popup, a required component is not included in this page',\n    method: 'The method you called is not defined.'\n  },\n\n  className: {\n    calendar: 'calendar',\n    active: 'active',\n    popup: 'ui popup',\n    grid: 'ui equal width grid',\n    column: 'column',\n    table: 'ui celled center aligned unstackable table',\n    prev: 'prev link',\n    next: 'next link',\n    prevIcon: 'chevron left icon',\n    nextIcon: 'chevron right icon',\n    link: 'link',\n    cell: 'link',\n    disabledCell: 'disabled',\n    weekCell: 'disabled',\n    adjacentCell: 'adjacent',\n    activeCell: 'active',\n    rangeCell: 'range',\n    focusCell: 'focus',\n    todayCell: 'today',\n    today: 'today link'\n  },\n\n  metadata: {\n    date: 'date',\n    focusDate: 'focusDate',\n    startDate: 'startDate',\n    endDate: 'endDate',\n    minDate: 'minDate',\n    maxDate: 'maxDate',\n    mode: 'mode',\n    monthOffset: 'monthOffset',\n    message: 'message',\n    class: 'class'\n  },\n\n  eventClass: 'blue'\n};\n\n})(jQuery, window, document);\n\n/*!\n * # Fomantic-UI - Checkbox\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n'use strict';\n\n$.isFunction = $.isFunction || function(obj) {\n  return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.checkbox = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = $.extend(true, {}, $.fn.checkbox.settings, parameters),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $label          = $(this).children(selector.label),\n        $input          = $(this).children(selector.input),\n        input           = $input[0],\n\n        initialLoad     = false,\n        shortcutPressed = false,\n        instance        = $module.data(moduleNamespace),\n\n        observer,\n        element         = this,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n          module.verbose('Initializing checkbox', settings);\n\n          module.create.label();\n          module.bind.events();\n\n          module.set.tabbable();\n          module.hide.input();\n\n          module.observeChanges();\n          module.instantiate();\n          module.setup();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying module');\n          module.unbind.events();\n          module.show.input();\n          $module.removeData(moduleNamespace);\n        },\n\n        fix: {\n          reference: function() {\n            if( $module.is(selector.input) ) {\n              module.debug('Behavior called on <input> adjusting invoked element');\n              $module = $module.closest(selector.checkbox);\n              module.refresh();\n            }\n          }\n        },\n\n        setup: function() {\n          module.set.initialLoad();\n          if( module.is.indeterminate() ) {\n            module.debug('Initial value is indeterminate');\n            module.indeterminate();\n          }\n          else if( module.is.checked() ) {\n            module.debug('Initial value is checked');\n            module.check();\n          }\n          else {\n            module.debug('Initial value is unchecked');\n            module.uncheck();\n          }\n          module.remove.initialLoad();\n        },\n\n        refresh: function() {\n          $label = $module.children(selector.label);\n          $input = $module.children(selector.input);\n          input  = $input[0];\n        },\n\n        hide: {\n          input: function() {\n            module.verbose('Modifying <input> z-index to be unselectable');\n            $input.addClass(className.hidden);\n          }\n        },\n        show: {\n          input: function() {\n            module.verbose('Modifying <input> z-index to be selectable');\n            $input.removeClass(className.hidden);\n          }\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, updating selector cache');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $element = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($element.length > 0) {\n            module.debug('Attaching checkbox events to element', selector, event);\n            $element\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound);\n          }\n        },\n\n        preventDefaultOnInputTarget: function() {\n          if(typeof event !== 'undefined' && $(event.target).is(selector.input)) {\n            module.verbose('Preventing default check action after manual check action');\n            event.preventDefault();\n          }\n        },\n\n        event: {\n          change: function(event) {\n            if( !module.should.ignoreCallbacks() ) {\n              settings.onChange.call(input);\n            }\n          },\n          click: function(event) {\n            var\n              $target = $(event.target)\n            ;\n            if( $target.is(selector.input) ) {\n              module.verbose('Using default check action on initialized checkbox');\n              return;\n            }\n            if( $target.is(selector.link) ) {\n              module.debug('Clicking link inside checkbox, skipping toggle');\n              return;\n            }\n            module.toggle();\n            $input.focus();\n            event.preventDefault();\n          },\n          keydown: function(event) {\n            var\n              key     = event.which,\n              keyCode = {\n                enter  : 13,\n                space  : 32,\n                escape : 27,\n                left   : 37,\n                up     : 38,\n                right  : 39,\n                down   : 40\n              }\n            ;\n\n            var r = module.get.radios(),\n                rIndex = r.index($module),\n                rLen = r.length,\n                checkIndex = false;\n\n            if(key == keyCode.left || key == keyCode.up) {\n              checkIndex = (rIndex === 0 ? rLen : rIndex) - 1;\n            } else if(key == keyCode.right || key == keyCode.down) {\n              checkIndex = rIndex === rLen-1 ? 0 : rIndex+1;\n            }\n\n            if (!module.should.ignoreCallbacks() && checkIndex !== false) {\n              if(settings.beforeUnchecked.apply(input)===false) {\n                module.verbose('Option not allowed to be unchecked, cancelling key navigation');\n                return false;\n              }\n              if (settings.beforeChecked.apply($(r[checkIndex]).children(selector.input)[0])===false) {\n                module.verbose('Next option should not allow check, cancelling key navigation');\n                return false;\n              }\n            }\n\n            if(key == keyCode.escape) {\n              module.verbose('Escape key pressed blurring field');\n              $input.blur();\n              shortcutPressed = true;\n            }\n            else if(!event.ctrlKey && ( key == keyCode.space || key == keyCode.enter) ) {\n              module.verbose('Enter/space key pressed, toggling checkbox');\n              module.toggle();\n              shortcutPressed = true;\n            }\n            else {\n              shortcutPressed = false;\n            }\n          },\n          keyup: function(event) {\n            if(shortcutPressed) {\n              event.preventDefault();\n            }\n          }\n        },\n\n        check: function() {\n          if( !module.should.allowCheck() ) {\n            return;\n          }\n          module.debug('Checking checkbox', $input);\n          module.set.checked();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onChecked.call(input);\n            module.trigger.change();\n          }\n          module.preventDefaultOnInputTarget();\n        },\n\n        uncheck: function() {\n          if( !module.should.allowUncheck() ) {\n            return;\n          }\n          module.debug('Unchecking checkbox');\n          module.set.unchecked();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onUnchecked.call(input);\n            module.trigger.change();\n          }\n          module.preventDefaultOnInputTarget();\n        },\n\n        indeterminate: function() {\n          if( module.should.allowIndeterminate() ) {\n            module.debug('Checkbox is already indeterminate');\n            return;\n          }\n          module.debug('Making checkbox indeterminate');\n          module.set.indeterminate();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onIndeterminate.call(input);\n            module.trigger.change();\n          }\n        },\n\n        determinate: function() {\n          if( module.should.allowDeterminate() ) {\n            module.debug('Checkbox is already determinate');\n            return;\n          }\n          module.debug('Making checkbox determinate');\n          module.set.determinate();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onDeterminate.call(input);\n            module.trigger.change();\n          }\n        },\n\n        enable: function() {\n          if( module.is.enabled() ) {\n            module.debug('Checkbox is already enabled');\n            return;\n          }\n          module.debug('Enabling checkbox');\n          module.set.enabled();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onEnable.call(input);\n            // preserve legacy callbacks\n            settings.onEnabled.call(input);\n            module.trigger.change();\n          }\n        },\n\n        disable: function() {\n          if( module.is.disabled() ) {\n            module.debug('Checkbox is already disabled');\n            return;\n          }\n          module.debug('Disabling checkbox');\n          module.set.disabled();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onDisable.call(input);\n            // preserve legacy callbacks\n            settings.onDisabled.call(input);\n            module.trigger.change();\n          }\n        },\n\n        get: {\n          radios: function() {\n            var\n              name = module.get.name()\n            ;\n            return $('input[name=\"' + name + '\"]').closest(selector.checkbox);\n          },\n          otherRadios: function() {\n            return module.get.radios().not($module);\n          },\n          name: function() {\n            return $input.attr('name');\n          }\n        },\n\n        is: {\n          initialLoad: function() {\n            return initialLoad;\n          },\n          radio: function() {\n            return ($input.hasClass(className.radio) || $input.attr('type') == 'radio');\n          },\n          indeterminate: function() {\n            return $input.prop('indeterminate') !== undefined && $input.prop('indeterminate');\n          },\n          checked: function() {\n            return $input.prop('checked') !== undefined && $input.prop('checked');\n          },\n          disabled: function() {\n            return $input.prop('disabled') !== undefined && $input.prop('disabled');\n          },\n          enabled: function() {\n            return !module.is.disabled();\n          },\n          determinate: function() {\n            return !module.is.indeterminate();\n          },\n          unchecked: function() {\n            return !module.is.checked();\n          }\n        },\n\n        should: {\n          allowCheck: function() {\n            if(module.is.determinate() && module.is.checked() && !module.is.initialLoad() ) {\n              module.debug('Should not allow check, checkbox is already checked');\n              return false;\n            }\n            if(!module.should.ignoreCallbacks() && settings.beforeChecked.apply(input) === false) {\n              module.debug('Should not allow check, beforeChecked cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowUncheck: function() {\n            if(module.is.determinate() && module.is.unchecked() && !module.is.initialLoad() ) {\n              module.debug('Should not allow uncheck, checkbox is already unchecked');\n              return false;\n            }\n            if(!module.should.ignoreCallbacks() && settings.beforeUnchecked.apply(input) === false) {\n              module.debug('Should not allow uncheck, beforeUnchecked cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowIndeterminate: function() {\n            if(module.is.indeterminate() && !module.is.initialLoad() ) {\n              module.debug('Should not allow indeterminate, checkbox is already indeterminate');\n              return false;\n            }\n            if(!module.should.ignoreCallbacks() && settings.beforeIndeterminate.apply(input) === false) {\n              module.debug('Should not allow indeterminate, beforeIndeterminate cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowDeterminate: function() {\n            if(module.is.determinate() && !module.is.initialLoad() ) {\n              module.debug('Should not allow determinate, checkbox is already determinate');\n              return false;\n            }\n            if(!module.should.ignoreCallbacks() && settings.beforeDeterminate.apply(input) === false) {\n              module.debug('Should not allow determinate, beforeDeterminate cancelled');\n              return false;\n            }\n            return true;\n          },\n          ignoreCallbacks: function() {\n            return (initialLoad && !settings.fireOnInit);\n          }\n        },\n\n        can: {\n          change: function() {\n            return !( $module.hasClass(className.disabled) || $module.hasClass(className.readOnly) || $input.prop('disabled') || $input.prop('readonly') );\n          },\n          uncheck: function() {\n            return (typeof settings.uncheckable === 'boolean')\n              ? settings.uncheckable\n              : !module.is.radio()\n            ;\n          }\n        },\n\n        set: {\n          initialLoad: function() {\n            initialLoad = true;\n          },\n          checked: function() {\n            module.verbose('Setting class to checked');\n            $module\n              .removeClass(className.indeterminate)\n              .addClass(className.checked)\n            ;\n            if( module.is.radio() ) {\n              module.uncheckOthers();\n            }\n            if(!module.is.indeterminate() && module.is.checked()) {\n              module.debug('Input is already checked, skipping input property change');\n              return;\n            }\n            module.verbose('Setting state to checked', input);\n            $input\n              .prop('indeterminate', false)\n              .prop('checked', true)\n            ;\n          },\n          unchecked: function() {\n            module.verbose('Removing checked class');\n            $module\n              .removeClass(className.indeterminate)\n              .removeClass(className.checked)\n            ;\n            if(!module.is.indeterminate() &&  module.is.unchecked() ) {\n              module.debug('Input is already unchecked');\n              return;\n            }\n            module.debug('Setting state to unchecked');\n            $input\n              .prop('indeterminate', false)\n              .prop('checked', false)\n            ;\n          },\n          indeterminate: function() {\n            module.verbose('Setting class to indeterminate');\n            $module\n              .addClass(className.indeterminate)\n            ;\n            if( module.is.indeterminate() ) {\n              module.debug('Input is already indeterminate, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to indeterminate');\n            $input\n              .prop('indeterminate', true)\n            ;\n          },\n          determinate: function() {\n            module.verbose('Removing indeterminate class');\n            $module\n              .removeClass(className.indeterminate)\n            ;\n            if( module.is.determinate() ) {\n              module.debug('Input is already determinate, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to determinate');\n            $input\n              .prop('indeterminate', false)\n            ;\n          },\n          disabled: function() {\n            module.verbose('Setting class to disabled');\n            $module\n              .addClass(className.disabled)\n            ;\n            if( module.is.disabled() ) {\n              module.debug('Input is already disabled, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to disabled');\n            $input\n              .prop('disabled', 'disabled')\n            ;\n          },\n          enabled: function() {\n            module.verbose('Removing disabled class');\n            $module.removeClass(className.disabled);\n            if( module.is.enabled() ) {\n              module.debug('Input is already enabled, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to enabled');\n            $input\n              .prop('disabled', false)\n            ;\n          },\n          tabbable: function() {\n            module.verbose('Adding tabindex to checkbox');\n            if( $input.attr('tabindex') === undefined) {\n              $input.attr('tabindex', 0);\n            }\n          }\n        },\n\n        remove: {\n          initialLoad: function() {\n            initialLoad = false;\n          }\n        },\n\n        trigger: {\n          change: function() {\n            var\n              events       = document.createEvent('HTMLEvents'),\n              inputElement = $input[0]\n            ;\n            if(inputElement) {\n              module.verbose('Triggering native change event');\n              events.initEvent('change', true, false);\n              inputElement.dispatchEvent(events);\n            }\n          }\n        },\n\n\n        create: {\n          label: function() {\n            if($input.prevAll(selector.label).length > 0) {\n              $input.prev(selector.label).detach().insertAfter($input);\n              module.debug('Moving existing label', $label);\n            }\n            else if( !module.has.label() ) {\n              $label = $('<label>').insertAfter($input);\n              module.debug('Creating label', $label);\n            }\n          }\n        },\n\n        has: {\n          label: function() {\n            return ($label.length > 0);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Attaching checkbox events');\n            $module\n              .on('click'   + eventNamespace, module.event.click)\n              .on('change'  + eventNamespace, module.event.change)\n              .on('keydown' + eventNamespace, selector.input, module.event.keydown)\n              .on('keyup'   + eventNamespace, selector.input, module.event.keyup)\n            ;\n          }\n        },\n\n        unbind: {\n          events: function() {\n            module.debug('Removing events');\n            $module\n              .off(eventNamespace)\n            ;\n          }\n        },\n\n        uncheckOthers: function() {\n          var\n            $radios = module.get.otherRadios()\n          ;\n          module.debug('Unchecking other radios', $radios);\n          $radios.removeClass(className.checked);\n        },\n\n        toggle: function() {\n          if( !module.can.change() ) {\n            if(!module.is.radio()) {\n              module.debug('Checkbox is read-only or disabled, ignoring toggle');\n            }\n            return;\n          }\n          if( module.is.indeterminate() || module.is.unchecked() ) {\n            module.debug('Currently unchecked');\n            module.check();\n          }\n          else if( module.is.checked() && module.can.uncheck() ) {\n            module.debug('Currently checked');\n            module.uncheck();\n          }\n        },\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if(Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.checkbox.settings = {\n\n  name                : 'Checkbox',\n  namespace           : 'checkbox',\n\n  silent              : false,\n  debug               : false,\n  verbose             : true,\n  performance         : true,\n\n  // delegated event context\n  uncheckable         : 'auto',\n  fireOnInit          : false,\n\n  onChange            : function(){},\n\n  beforeChecked       : function(){},\n  beforeUnchecked     : function(){},\n  beforeDeterminate   : function(){},\n  beforeIndeterminate : function(){},\n\n  onChecked           : function(){},\n  onUnchecked         : function(){},\n\n  onDeterminate       : function() {},\n  onIndeterminate     : function() {},\n\n  onEnable            : function(){},\n  onDisable           : function(){},\n\n  // preserve misspelled callbacks (will be removed in 3.0)\n  onEnabled           : function(){},\n  onDisabled          : function(){},\n\n  className       : {\n    checked       : 'checked',\n    indeterminate : 'indeterminate',\n    disabled      : 'disabled',\n    hidden        : 'hidden',\n    radio         : 'radio',\n    readOnly      : 'read-only'\n  },\n\n  error     : {\n    method       : 'The method you called is not defined'\n  },\n\n  selector : {\n    checkbox : '.ui.checkbox',\n    label    : 'label, .box',\n    input    : 'input[type=\"checkbox\"], input[type=\"radio\"]',\n    link     : 'a[href]'\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Fomantic-UI - Dimmer\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n'use strict';\n\n$.isFunction = $.isFunction || function(obj) {\n  return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.dimmer = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.dimmer.settings, parameters)\n          : $.extend({}, $.fn.dimmer.settings),\n\n        selector        = settings.selector,\n        namespace       = settings.namespace,\n        className       = settings.className,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n        moduleSelector  = $allModules.selector || '',\n\n        clickEvent      = ('ontouchstart' in document.documentElement)\n          ? 'touchstart'\n          : 'click',\n\n        $module = $(this),\n        $dimmer,\n        $dimmable,\n\n        element   = this,\n        instance  = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        preinitialize: function() {\n          if( module.is.dimmer() ) {\n\n            $dimmable = $module.parent();\n            $dimmer   = $module;\n          }\n          else {\n            $dimmable = $module;\n            if( module.has.dimmer() ) {\n              if(settings.dimmerName) {\n                $dimmer = $dimmable.find(selector.dimmer).filter('.' + settings.dimmerName);\n              }\n              else {\n                $dimmer = $dimmable.find(selector.dimmer);\n              }\n            }\n            else {\n              $dimmer = module.create();\n            }\n          }\n        },\n\n        initialize: function() {\n          module.debug('Initializing dimmer', settings);\n\n          module.bind.events();\n          module.set.dimmable();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', $dimmer);\n          module.unbind.events();\n          module.remove.variation();\n          $dimmable\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            if(settings.on == 'hover') {\n              $dimmable\n                .on('mouseenter' + eventNamespace, module.show)\n                .on('mouseleave' + eventNamespace, module.hide)\n              ;\n            }\n            else if(settings.on == 'click') {\n              $dimmable\n                .on(clickEvent + eventNamespace, module.toggle)\n              ;\n            }\n            if( module.is.page() ) {\n              module.debug('Setting as a page dimmer', $dimmable);\n              module.set.pageDimmer();\n            }\n\n            if( module.is.closable() ) {\n              module.verbose('Adding dimmer close event', $dimmer);\n              $dimmable\n                .on(clickEvent + eventNamespace, selector.dimmer, module.event.click)\n              ;\n            }\n          }\n        },\n\n        unbind: {\n          events: function() {\n            $module\n              .removeData(moduleNamespace)\n            ;\n            $dimmable\n              .off(eventNamespace)\n            ;\n          }\n        },\n\n        event: {\n          click: function(event) {\n            module.verbose('Determining if event occured on dimmer', event);\n            if( $dimmer.find(event.target).length === 0 || $(event.target).is(selector.content) ) {\n              module.hide();\n              event.stopImmediatePropagation();\n            }\n          }\n        },\n\n        addContent: function(element) {\n          var\n            $content = $(element)\n          ;\n          module.debug('Add content to dimmer', $content);\n          if($content.parent()[0] !== $dimmer[0]) {\n            $content.detach().appendTo($dimmer);\n          }\n        },\n\n        create: function() {\n          var\n            $element = $( settings.template.dimmer(settings) )\n          ;\n          if(settings.dimmerName) {\n            module.debug('Creating named dimmer', settings.dimmerName);\n            $element.addClass(settings.dimmerName);\n          }\n          $element\n            .appendTo($dimmable)\n          ;\n          return $element;\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.debug('Showing dimmer', $dimmer, settings);\n          module.set.variation();\n          if( (!module.is.dimmed() || module.is.animating()) && module.is.enabled() ) {\n            module.animate.show(callback);\n            settings.onShow.call(element);\n            settings.onChange.call(element);\n          }\n          else {\n            module.debug('Dimmer is already shown or disabled');\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.dimmed() || module.is.animating() ) {\n            module.debug('Hiding dimmer', $dimmer);\n            module.animate.hide(callback);\n            settings.onHide.call(element);\n            settings.onChange.call(element);\n          }\n          else {\n            module.debug('Dimmer is not visible');\n          }\n        },\n\n        toggle: function() {\n          module.verbose('Toggling dimmer visibility', $dimmer);\n          if( !module.is.dimmed() ) {\n            module.show();\n          }\n          else {\n            if ( module.is.closable() ) {\n              module.hide();\n            }\n          }\n        },\n\n        animate: {\n          show: function(callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {\n              if(settings.useFlex) {\n                module.debug('Using flex dimmer');\n                module.remove.legacy();\n              }\n              else {\n                module.debug('Using legacy non-flex dimmer');\n                module.set.legacy();\n              }\n              if(settings.opacity !== 'auto') {\n                module.set.opacity();\n              }\n              $dimmer\n                .transition({\n                  displayType : settings.useFlex\n                    ? 'flex'\n                    : 'block',\n                  animation   : settings.transition + ' in',\n                  queue       : false,\n                  duration    : module.get.duration(),\n                  useFailSafe : true,\n                  onStart     : function() {\n                    module.set.dimmed();\n                  },\n                  onComplete  : function() {\n                    module.set.active();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.verbose('Showing dimmer animation with javascript');\n              module.set.dimmed();\n              if(settings.opacity == 'auto') {\n                settings.opacity = 0.8;\n              }\n              $dimmer\n                .stop()\n                .css({\n                  opacity : 0,\n                  width   : '100%',\n                  height  : '100%'\n                })\n                .fadeTo(module.get.duration(), settings.opacity, function() {\n                  $dimmer.removeAttr('style');\n                  module.set.active();\n                  callback();\n                })\n              ;\n            }\n          },\n          hide: function(callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {\n              module.verbose('Hiding dimmer with css');\n              $dimmer\n                .transition({\n                  displayType : settings.useFlex\n                    ? 'flex'\n                    : 'block',\n                  animation   : settings.transition + ' out',\n                  queue       : false,\n                  duration    : module.get.duration(),\n                  useFailSafe : true,\n                  onComplete  : function() {\n                    module.remove.dimmed();\n                    module.remove.variation();\n                    module.remove.active();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.verbose('Hiding dimmer with javascript');\n              $dimmer\n                .stop()\n                .fadeOut(module.get.duration(), function() {\n                  module.remove.dimmed();\n                  module.remove.active();\n                  $dimmer.removeAttr('style');\n                  callback();\n                })\n              ;\n            }\n          }\n        },\n\n        get: {\n          dimmer: function() {\n            return $dimmer;\n          },\n          duration: function() {\n            if(typeof settings.duration == 'object') {\n              if( module.is.active() ) {\n                return settings.duration.hide;\n              }\n              else {\n                return settings.duration.show;\n              }\n            }\n            return settings.duration;\n          }\n        },\n\n        has: {\n          dimmer: function() {\n            if(settings.dimmerName) {\n              return ($module.find(selector.dimmer).filter('.' + settings.dimmerName).length > 0);\n            }\n            else {\n              return ( $module.find(selector.dimmer).length > 0 );\n            }\n          }\n        },\n\n        is: {\n          active: function() {\n            return $dimmer.hasClass(className.active);\n          },\n          animating: function() {\n            return ( $dimmer.is(':animated') || $dimmer.hasClass(className.animating) );\n          },\n          closable: function() {\n            if(settings.closable == 'auto') {\n              if(settings.on == 'hover') {\n                return false;\n              }\n              return true;\n            }\n            return settings.closable;\n          },\n          dimmer: function() {\n            return $module.hasClass(className.dimmer);\n          },\n          dimmable: function() {\n            return $module.hasClass(className.dimmable);\n          },\n          dimmed: function() {\n            return $dimmable.hasClass(className.dimmed);\n          },\n          disabled: function() {\n            return $dimmable.hasClass(className.disabled);\n          },\n          enabled: function() {\n            return !module.is.disabled();\n          },\n          page: function () {\n            return $dimmable.is('body');\n          },\n          pageDimmer: function() {\n            return $dimmer.hasClass(className.pageDimmer);\n          }\n        },\n\n        can: {\n          show: function() {\n            return !$dimmer.hasClass(className.disabled);\n          }\n        },\n\n        set: {\n          opacity: function(opacity) {\n            var\n              color      = $dimmer.css('background-color'),\n              colorArray = color.split(','),\n              isRGB      = (colorArray && colorArray.length == 3),\n              isRGBA     = (colorArray && colorArray.length == 4)\n            ;\n            opacity    = settings.opacity === 0 ? 0 : settings.opacity || opacity;\n            if(isRGB || isRGBA) {\n              colorArray[3] = opacity + ')';\n              color         = colorArray.join(',');\n            }\n            else {\n              color = 'rgba(0, 0, 0, ' + opacity + ')';\n            }\n            module.debug('Setting opacity to', opacity);\n            $dimmer.css('background-color', color);\n          },\n          legacy: function() {\n            $dimmer.addClass(className.legacy);\n          },\n          active: function() {\n            $dimmer.addClass(className.active);\n          },\n          dimmable: function() {\n            $dimmable.addClass(className.dimmable);\n          },\n          dimmed: function() {\n            $dimmable.addClass(className.dimmed);\n          },\n          pageDimmer: function() {\n            $dimmer.addClass(className.pageDimmer);\n          },\n          disabled: function() {\n            $dimmer.addClass(className.disabled);\n          },\n          variation: function(variation) {\n            variation = variation || settings.variation;\n            if(variation) {\n              $dimmer.addClass(variation);\n            }\n          }\n        },\n\n        remove: {\n          active: function() {\n            $dimmer\n              .removeClass(className.active)\n            ;\n          },\n          legacy: function() {\n            $dimmer.removeClass(className.legacy);\n          },\n          dimmed: function() {\n            $dimmable.removeClass(className.dimmed);\n          },\n          disabled: function() {\n            $dimmer.removeClass(className.disabled);\n          },\n          variation: function(variation) {\n            variation = variation || settings.variation;\n            if(variation) {\n              $dimmer.removeClass(variation);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if(Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      module.preinitialize();\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.dimmer.settings = {\n\n  name        : 'Dimmer',\n  namespace   : 'dimmer',\n\n  silent      : false,\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  // whether should use flex layout\n  useFlex     : true,\n\n  // name to distinguish between multiple dimmers in context\n  dimmerName  : false,\n\n  // whether to add a variation type\n  variation   : false,\n\n  // whether to bind close events\n  closable    : 'auto',\n\n  // whether to use css animations\n  useCSS      : true,\n\n  // css animation to use\n  transition  : 'fade',\n\n  // event to bind to\n  on          : false,\n\n  // overriding opacity value\n  opacity     : 'auto',\n\n  // transition durations\n  duration    : {\n    show : 500,\n    hide : 500\n  },\n// whether the dynamically created dimmer should have a loader\n  displayLoader: false,\n  loaderText  : false,\n  loaderVariation : '',\n\n  onChange    : function(){},\n  onShow      : function(){},\n  onHide      : function(){},\n\n  error   : {\n    method   : 'The method you called is not defined.'\n  },\n\n  className : {\n    active     : 'active',\n    animating  : 'animating',\n    dimmable   : 'dimmable',\n    dimmed     : 'dimmed',\n    dimmer     : 'dimmer',\n    disabled   : 'disabled',\n    hide       : 'hide',\n    legacy     : 'legacy',\n    pageDimmer : 'page',\n    show       : 'show',\n    loader     : 'ui loader'\n  },\n\n  selector: {\n    dimmer   : '> .ui.dimmer',\n    content  : '.ui.dimmer > .content, .ui.dimmer > .content > .center'\n  },\n\n  template: {\n    dimmer: function(settings) {\n        var d = $('<div/>').addClass('ui dimmer'),l;\n        if(settings.displayLoader) {\n          l = $('<div/>')\n              .addClass(settings.className.loader)\n              .addClass(settings.loaderVariation);\n          if(!!settings.loaderText){\n            l.text(settings.loaderText);\n            l.addClass('text');\n          }\n          d.append(l);\n        }\n        return d;\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Fomantic-UI - Dropdown\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n'use strict';\n\n$.isFunction = $.isFunction || function(obj) {\n  return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.dropdown = function(parameters) {\n  var\n    $allModules    = $(this),\n    $document      = $(document),\n\n    moduleSelector = $allModules.selector || '',\n\n    hasTouch       = ('ontouchstart' in document.documentElement),\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function(elementIndex) {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.dropdown.settings, parameters)\n          : $.extend({}, $.fn.dropdown.settings),\n\n        className       = settings.className,\n        message         = settings.message,\n        fields          = settings.fields,\n        keys            = settings.keys,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        regExp          = settings.regExp,\n        selector        = settings.selector,\n        error           = settings.error,\n        templates       = settings.templates,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n        $text           = $module.find(selector.text),\n        $search         = $module.find(selector.search),\n        $sizer          = $module.find(selector.sizer),\n        $input          = $module.find(selector.input),\n        $icon           = $module.find(selector.icon),\n        $clear          = $module.find(selector.clearIcon),\n\n        $combo = ($module.prev().find(selector.text).length > 0)\n          ? $module.prev().find(selector.text)\n          : $module.prev(),\n\n        $menu           = $module.children(selector.menu),\n        $item           = $menu.find(selector.item),\n        $divider        = settings.hideDividers ? $item.parent().children(selector.divider) : $(),\n\n        activated       = false,\n        itemActivated   = false,\n        internalChange  = false,\n        iconClicked     = false,\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        initialLoad,\n        pageLostFocus,\n        willRefocus,\n        elementNamespace,\n        id,\n        selectObserver,\n        menuObserver,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing dropdown', settings);\n\n          if( module.is.alreadySetup() ) {\n            module.setup.reference();\n          }\n          else {\n            if (settings.ignoreDiacritics && !String.prototype.normalize) {\n              settings.ignoreDiacritics = false;\n              module.error(error.noNormalize, element);\n            }\n\n            module.setup.layout();\n\n            if(settings.values) {\n              module.change.values(settings.values);\n            }\n\n            module.refreshData();\n\n            module.save.defaults();\n            module.restore.selected();\n\n            module.create.id();\n            module.bind.events();\n\n            module.observeChanges();\n            module.instantiate();\n          }\n\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of dropdown', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous dropdown', $module);\n          module.remove.tabbable();\n          module.remove.active();\n          $menu.transition('stop all');\n          $menu.removeClass(className.visible).addClass(className.hidden);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n          $menu\n            .off(eventNamespace)\n          ;\n          $document\n            .off(elementNamespace)\n          ;\n          module.disconnect.menuObserver();\n          module.disconnect.selectObserver();\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            selectObserver = new MutationObserver(module.event.select.mutation);\n            menuObserver   = new MutationObserver(module.event.menu.mutation);\n            module.debug('Setting up mutation observer', selectObserver, menuObserver);\n            module.observe.select();\n            module.observe.menu();\n          }\n        },\n\n        disconnect: {\n          menuObserver: function() {\n            if(menuObserver) {\n              menuObserver.disconnect();\n            }\n          },\n          selectObserver: function() {\n            if(selectObserver) {\n              selectObserver.disconnect();\n            }\n          }\n        },\n        observe: {\n          select: function() {\n            if(module.has.input() && selectObserver) {\n              selectObserver.observe($module[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          },\n          menu: function() {\n            if(module.has.menu() && menuObserver) {\n              menuObserver.observe($menu[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          }\n        },\n\n        create: {\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2, 8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          },\n          userChoice: function(values) {\n            var\n              $userChoices,\n              $userChoice,\n              isUserValue,\n              html\n            ;\n            values = values || module.get.userValues();\n            if(!values) {\n              return false;\n            }\n            values = Array.isArray(values)\n              ? values\n              : [values]\n            ;\n            $.each(values, function(index, value) {\n              if(module.get.item(value) === false) {\n                html         = settings.templates.addition( module.add.variables(message.addResult, value) );\n                $userChoice  = $('<div />')\n                  .html(html)\n                  .attr('data-' + metadata.value, value)\n                  .attr('data-' + metadata.text, value)\n                  .addClass(className.addition)\n                  .addClass(className.item)\n                ;\n                if(settings.hideAdditions) {\n                  $userChoice.addClass(className.hidden);\n                }\n                $userChoices = ($userChoices === undefined)\n                  ? $userChoice\n                  : $userChoices.add($userChoice)\n                ;\n                module.verbose('Creating user choices for value', value, $userChoice);\n              }\n            });\n            return $userChoices;\n          },\n          userLabels: function(value) {\n            var\n              userValues = module.get.userValues()\n            ;\n            if(userValues) {\n              module.debug('Adding user labels', userValues);\n              $.each(userValues, function(index, value) {\n                module.verbose('Adding custom user value');\n                module.add.label(value, value);\n              });\n            }\n          },\n          menu: function() {\n            $menu = $('<div />')\n              .addClass(className.menu)\n              .appendTo($module)\n            ;\n          },\n          sizer: function() {\n            $sizer = $('<span />')\n              .addClass(className.sizer)\n              .insertAfter($search)\n            ;\n          }\n        },\n\n        search: function(query) {\n          query = (query !== undefined)\n            ? query\n            : module.get.query()\n          ;\n          module.verbose('Searching for query', query);\n          if(module.has.minCharacters(query)) {\n            module.filter(query);\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        select: {\n          firstUnfiltered: function() {\n            module.verbose('Selecting first non-filtered element');\n            module.remove.selectedItem();\n            $item\n              .not(selector.unselectable)\n              .not(selector.addition + selector.hidden)\n                .eq(0)\n                .addClass(className.selected)\n            ;\n          },\n          nextAvailable: function($selected) {\n            $selected = $selected.eq(0);\n            var\n              $nextAvailable = $selected.nextAll(selector.item).not(selector.unselectable).eq(0),\n              $prevAvailable = $selected.prevAll(selector.item).not(selector.unselectable).eq(0),\n              hasNext        = ($nextAvailable.length > 0)\n            ;\n            if(hasNext) {\n              module.verbose('Moving selection to', $nextAvailable);\n              $nextAvailable.addClass(className.selected);\n            }\n            else {\n              module.verbose('Moving selection to', $prevAvailable);\n              $prevAvailable.addClass(className.selected);\n            }\n          }\n        },\n\n        setup: {\n          api: function() {\n            var\n              apiSettings = {\n                debug   : settings.debug,\n                urlData : {\n                  value : module.get.value(),\n                  query : module.get.query()\n                },\n                on    : false\n              }\n            ;\n            module.verbose('First request, initializing API');\n            $module\n              .api(apiSettings)\n            ;\n          },\n          layout: function() {\n            if( $module.is('select') ) {\n              module.setup.select();\n              module.setup.returnedObject();\n            }\n            if( !module.has.menu() ) {\n              module.create.menu();\n            }\n            if ( module.is.selection() && module.is.clearable() && !module.has.clearItem() ) {\n              module.verbose('Adding clear icon');\n              $clear = $('<i />')\n                .addClass('remove icon')\n                .insertBefore($text)\n              ;\n            }\n            if( module.is.search() && !module.has.search() ) {\n              module.verbose('Adding search input');\n              $search = $('<input />')\n                .addClass(className.search)\n                .prop('autocomplete', 'off')\n                .insertBefore($text)\n              ;\n            }\n            if( module.is.multiple() && module.is.searchSelection() && !module.has.sizer()) {\n              module.create.sizer();\n            }\n            if(settings.allowTab) {\n              module.set.tabbable();\n            }\n          },\n          select: function() {\n            var\n              selectValues  = module.get.selectValues()\n            ;\n            module.debug('Dropdown initialized on a select', selectValues);\n            if( $module.is('select') ) {\n              $input = $module;\n            }\n            // see if select is placed correctly already\n            if($input.parent(selector.dropdown).length > 0) {\n              module.debug('UI dropdown already exists. Creating dropdown menu only');\n              $module = $input.closest(selector.dropdown);\n              if( !module.has.menu() ) {\n                module.create.menu();\n              }\n              $menu = $module.children(selector.menu);\n              module.setup.menu(selectValues);\n            }\n            else {\n              module.debug('Creating entire dropdown from select');\n              $module = $('<div />')\n                .attr('class', $input.attr('class') )\n                .addClass(className.selection)\n                .addClass(className.dropdown)\n                .html( templates.dropdown(selectValues,settings.preserveHTML, settings.className) )\n                .insertBefore($input)\n              ;\n              if($input.hasClass(className.multiple) && $input.prop('multiple') === false) {\n                module.error(error.missingMultiple);\n                $input.prop('multiple', true);\n              }\n              if($input.is('[multiple]')) {\n                module.set.multiple();\n              }\n              if ($input.prop('disabled')) {\n                module.debug('Disabling dropdown');\n                $module.addClass(className.disabled);\n              }\n              $input\n                .removeAttr('class')\n                .detach()\n                .prependTo($module)\n              ;\n            }\n            module.refresh();\n          },\n          menu: function(values) {\n            $menu.html( templates.menu(values, fields,settings.preserveHTML,settings.className));\n            $item    = $menu.find(selector.item);\n            $divider = settings.hideDividers ? $item.parent().children(selector.divider) : $();\n          },\n          reference: function() {\n            module.debug('Dropdown behavior was called on select, replacing with closest dropdown');\n            // replace module reference\n            $module  = $module.parent(selector.dropdown);\n            instance = $module.data(moduleNamespace);\n            element  = $module.get(0);\n            module.refresh();\n            module.setup.returnedObject();\n          },\n          returnedObject: function() {\n            var\n              $firstModules = $allModules.slice(0, elementIndex),\n              $lastModules  = $allModules.slice(elementIndex + 1)\n            ;\n            // adjust all modules to use correct reference\n            $allModules = $firstModules.add($module).add($lastModules);\n          }\n        },\n\n        refresh: function() {\n          module.refreshSelectors();\n          module.refreshData();\n        },\n\n        refreshItems: function() {\n          $item    = $menu.find(selector.item);\n          $divider = settings.hideDividers ? $item.parent().children(selector.divider) : $();\n        },\n\n        refreshSelectors: function() {\n          module.verbose('Refreshing selector cache');\n          $text   = $module.find(selector.text);\n          $search = $module.find(selector.search);\n          $input  = $module.find(selector.input);\n          $icon   = $module.find(selector.icon);\n          $combo  = ($module.prev().find(selector.text).length > 0)\n            ? $module.prev().find(selector.text)\n            : $module.prev()\n          ;\n          $menu    = $module.children(selector.menu);\n          $item    = $menu.find(selector.item);\n          $divider = settings.hideDividers ? $item.parent().children(selector.divider) : $();\n        },\n\n        refreshData: function() {\n          module.verbose('Refreshing cached metadata');\n          $item\n            .removeData(metadata.text)\n            .removeData(metadata.value)\n          ;\n        },\n\n        clearData: function() {\n          module.verbose('Clearing metadata');\n          $item\n            .removeData(metadata.text)\n            .removeData(metadata.value)\n          ;\n          $module\n            .removeData(metadata.defaultText)\n            .removeData(metadata.defaultValue)\n            .removeData(metadata.placeholderText)\n          ;\n        },\n\n        toggle: function() {\n          module.verbose('Toggling menu visibility');\n          if( !module.is.active() ) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(!module.can.show() && module.is.remote()) {\n            module.debug('No API results retrieved, searching before show');\n            module.queryRemote(module.get.query(), module.show);\n          }\n          if( module.can.show() && !module.is.active() ) {\n            module.debug('Showing dropdown');\n            if(module.has.message() && !(module.has.maxSelections() || module.has.allResultsFiltered()) ) {\n              module.remove.message();\n            }\n            if(module.is.allFiltered()) {\n              return true;\n            }\n            if(settings.onShow.call(element) !== false) {\n              module.animate.show(function() {\n                if( module.can.click() ) {\n                  module.bind.intent();\n                }\n                if(module.has.search()) {\n                  module.focusSearch();\n                }\n                module.set.visible();\n                callback.call(element);\n              });\n            }\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.active() && !module.is.animatingOutward() ) {\n            module.debug('Hiding dropdown');\n            if(settings.onHide.call(element) !== false) {\n              module.animate.hide(function() {\n                module.remove.visible();\n                // hidding search focus\n                if ( module.is.focusedOnSearch() ) {\n                  $search.blur();\n                }\n                callback.call(element);\n              });\n            }\n          } else if( module.can.click() ) {\n              module.unbind.intent();\n          }\n        },\n\n        hideOthers: function() {\n          module.verbose('Finding other dropdowns to hide');\n          $allModules\n            .not($module)\n              .has(selector.menu + '.' + className.visible)\n                .dropdown('hide')\n          ;\n        },\n\n        hideMenu: function() {\n          module.verbose('Hiding menu  instantaneously');\n          module.remove.active();\n          module.remove.visible();\n          $menu.transition('hide');\n        },\n\n        hideSubMenus: function() {\n          var\n            $subMenus = $menu.children(selector.item).find(selector.menu)\n          ;\n          module.verbose('Hiding sub menus', $subMenus);\n          $subMenus.transition('hide');\n        },\n\n        bind: {\n          events: function() {\n            if(hasTouch) {\n              module.bind.touchEvents();\n            }\n            module.bind.keyboardEvents();\n            module.bind.inputEvents();\n            module.bind.mouseEvents();\n          },\n          touchEvents: function() {\n            module.debug('Touch device detected binding additional touch events');\n            if( module.is.searchSelection() ) {\n              // do nothing special yet\n            }\n            else if( module.is.single() ) {\n              $module\n                .on('touchstart' + eventNamespace, module.event.test.toggle)\n              ;\n            }\n            $menu\n              .on('touchstart' + eventNamespace, selector.item, module.event.item.mouseenter)\n            ;\n          },\n          keyboardEvents: function() {\n            module.verbose('Binding keyboard events');\n            $module\n              .on('keydown' + eventNamespace, module.event.keydown)\n            ;\n            if( module.has.search() ) {\n              $module\n                .on(module.get.inputEvent() + eventNamespace, selector.search, module.event.input)\n              ;\n            }\n            if( module.is.multiple() ) {\n              $document\n                .on('keydown' + elementNamespace, module.event.document.keydown)\n              ;\n            }\n          },\n          inputEvents: function() {\n            module.verbose('Binding input change events');\n            $module\n              .on('change' + eventNamespace, selector.input, module.event.change)\n            ;\n          },\n          mouseEvents: function() {\n            module.verbose('Binding mouse events');\n            if(module.is.multiple()) {\n              $module\n                .on('click'   + eventNamespace, selector.label,  module.event.label.click)\n                .on('click'   + eventNamespace, selector.remove, module.event.remove.click)\n              ;\n            }\n            if( module.is.searchSelection() ) {\n              $module\n                .on('mousedown' + eventNamespace, module.event.mousedown)\n                .on('mouseup'   + eventNamespace, module.event.mouseup)\n                .on('mousedown' + eventNamespace, selector.menu,   module.event.menu.mousedown)\n                .on('mouseup'   + eventNamespace, selector.menu,   module.event.menu.mouseup)\n                .on('click'     + eventNamespace, selector.icon,   module.event.icon.click)\n                .on('click'     + eventNamespace, selector.clearIcon, module.event.clearIcon.click)\n                .on('focus'     + eventNamespace, selector.search, module.event.search.focus)\n                .on('click'     + eventNamespace, selector.search, module.event.search.focus)\n                .on('blur'      + eventNamespace, selector.search, module.event.search.blur)\n                .on('click'     + eventNamespace, selector.text,   module.event.text.focus)\n              ;\n              if(module.is.multiple()) {\n                $module\n                  .on('click' + eventNamespace, module.event.click)\n                ;\n              }\n            }\n            else {\n              if(settings.on == 'click') {\n                $module\n                  .on('click' + eventNamespace, selector.icon, module.event.icon.click)\n                  .on('click' + eventNamespace, module.event.test.toggle)\n                ;\n              }\n              else if(settings.on == 'hover') {\n                $module\n                  .on('mouseenter' + eventNamespace, module.delay.show)\n                  .on('mouseleave' + eventNamespace, module.delay.hide)\n                ;\n              }\n              else {\n                $module\n                  .on(settings.on + eventNamespace, module.toggle)\n                ;\n              }\n              $module\n                .on('mousedown' + eventNamespace, module.event.mousedown)\n                .on('mouseup'   + eventNamespace, module.event.mouseup)\n                .on('focus'     + eventNamespace, module.event.focus)\n                .on('click'     + eventNamespace, selector.clearIcon, module.event.clearIcon.click)\n              ;\n              if(module.has.menuSearch() ) {\n                $module\n                  .on('blur' + eventNamespace, selector.search, module.event.search.blur)\n                ;\n              }\n              else {\n                $module\n                  .on('blur' + eventNamespace, module.event.blur)\n                ;\n              }\n            }\n            $menu\n              .on('mouseenter' + eventNamespace, selector.item, module.event.item.mouseenter)\n              .on('mouseleave' + eventNamespace, selector.item, module.event.item.mouseleave)\n              .on('click'      + eventNamespace, selector.item, module.event.item.click)\n            ;\n          },\n          intent: function() {\n            module.verbose('Binding hide intent event to document');\n            if(hasTouch) {\n              $document\n                .on('touchstart' + elementNamespace, module.event.test.touch)\n                .on('touchmove'  + elementNamespace, module.event.test.touch)\n              ;\n            }\n            $document\n              .on('click' + elementNamespace, module.event.test.hide)\n            ;\n          }\n        },\n\n        unbind: {\n          intent: function() {\n            module.verbose('Removing hide intent event from document');\n            if(hasTouch) {\n              $document\n                .off('touchstart' + elementNamespace)\n                .off('touchmove' + elementNamespace)\n              ;\n            }\n            $document\n              .off('click' + elementNamespace)\n            ;\n          }\n        },\n\n        filter: function(query) {\n          var\n            searchTerm = (query !== undefined)\n              ? query\n              : module.get.query(),\n            afterFiltered = function() {\n              if(module.is.multiple()) {\n                module.filterActive();\n              }\n              if(query || (!query && module.get.activeItem().length == 0)) {\n                module.select.firstUnfiltered();\n              }\n              if( module.has.allResultsFiltered() ) {\n                if( settings.onNoResults.call(element, searchTerm) ) {\n                  if(settings.allowAdditions) {\n                    if(settings.hideAdditions) {\n                      module.verbose('User addition with no menu, setting empty style');\n                      module.set.empty();\n                      module.hideMenu();\n                    }\n                  }\n                  else {\n                    module.verbose('All items filtered, showing message', searchTerm);\n                    module.add.message(message.noResults);\n                  }\n                }\n                else {\n                  module.verbose('All items filtered, hiding dropdown', searchTerm);\n                  module.hideMenu();\n                }\n              }\n              else {\n                module.remove.empty();\n                module.remove.message();\n              }\n              if(settings.allowAdditions) {\n                module.add.userSuggestion(module.escape.htmlEntities(query));\n              }\n              if(module.is.searchSelection() && module.can.show() && module.is.focusedOnSearch() ) {\n                module.show();\n              }\n            }\n          ;\n          if(settings.useLabels && module.has.maxSelections()) {\n            return;\n          }\n          if(settings.apiSettings) {\n            if( module.can.useAPI() ) {\n              module.queryRemote(searchTerm, function() {\n                if(settings.filterRemoteData) {\n                  module.filterItems(searchTerm);\n                }\n                var preSelected = $input.val();\n                if(!Array.isArray(preSelected)) {\n                    preSelected = preSelected && preSelected!==\"\" ? preSelected.split(settings.delimiter) : [];\n                }\n                $.each(preSelected,function(index,value){\n                  $item.filter('[data-value=\"'+value+'\"]')\n                      .addClass(className.filtered)\n                  ;\n                });\n                afterFiltered();\n              });\n            }\n            else {\n              module.error(error.noAPI);\n            }\n          }\n          else {\n            module.filterItems(searchTerm);\n            afterFiltered();\n          }\n        },\n\n        queryRemote: function(query, callback) {\n          var\n            apiSettings = {\n              errorDuration : false,\n              cache         : 'local',\n              throttle      : settings.throttle,\n              urlData       : {\n                query: query\n              },\n              onError: function() {\n                module.add.message(message.serverError);\n                callback();\n              },\n              onFailure: function() {\n                module.add.message(message.serverError);\n                callback();\n              },\n              onSuccess : function(response) {\n                var\n                  values          = response[fields.remoteValues]\n                ;\n                if (!Array.isArray(values)){\n                    values = [];\n                }\n                module.remove.message();\n                module.setup.menu({\n                  values: values\n                });\n\n                if(values.length===0 && !settings.allowAdditions) {\n                  module.add.message(message.noResults);\n                }\n                callback();\n              }\n            }\n          ;\n          if( !$module.api('get request') ) {\n            module.setup.api();\n          }\n          apiSettings = $.extend(true, {}, apiSettings, settings.apiSettings);\n          $module\n            .api('setting', apiSettings)\n            .api('query')\n          ;\n        },\n\n        filterItems: function(query) {\n          var\n            searchTerm = module.remove.diacritics(query !== undefined\n              ? query\n              : module.get.query()\n            ),\n            results          =  null,\n            escapedTerm      = module.escape.string(searchTerm),\n            beginsWithRegExp = new RegExp('^' + escapedTerm, 'igm')\n          ;\n          // avoid loop if we're matching nothing\n          if( module.has.query() ) {\n            results = [];\n\n            module.verbose('Searching for matching values', searchTerm);\n            $item\n              .each(function(){\n                var\n                  $choice = $(this),\n                  text,\n                  value\n                ;\n                if(settings.match === 'both' || settings.match === 'text') {\n                  text = module.remove.diacritics(String(module.get.choiceText($choice, false)));\n                  if(text.search(beginsWithRegExp) !== -1) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, text)) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === true && module.fuzzySearch(searchTerm, text)) {\n                    results.push(this);\n                    return true;\n                  }\n                }\n                if(settings.match === 'both' || settings.match === 'value') {\n                  value = module.remove.diacritics(String(module.get.choiceValue($choice, text)));\n                  if(value.search(beginsWithRegExp) !== -1) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, value)) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === true && module.fuzzySearch(searchTerm, value)) {\n                    results.push(this);\n                    return true;\n                  }\n                }\n              })\n            ;\n          }\n          module.debug('Showing only matched items', searchTerm);\n          module.remove.filteredItem();\n          if(results) {\n            $item\n              .not(results)\n              .addClass(className.filtered)\n            ;\n          }\n\n          if(!module.has.query()) {\n            $divider\n              .removeClass(className.hidden);\n          } else if(settings.hideDividers === true) {\n            $divider\n              .addClass(className.hidden);\n          } else if(settings.hideDividers === 'empty') {\n            $divider\n              .removeClass(className.hidden)\n              .filter(function() {\n                // First find the last divider in this divider group\n                // Dividers which are direct siblings are considered a group\n                var lastDivider = $(this).nextUntil(selector.item);\n\n                return (lastDivider.length ? lastDivider : $(this))\n                // Count all non-filtered items until the next divider (or end of the dropdown)\n                  .nextUntil(selector.divider)\n                  .filter(selector.item + \":not(.\" + className.filtered + \")\")\n                  // Hide divider if no items are found\n                  .length === 0;\n              })\n              .addClass(className.hidden);\n          }\n        },\n\n        fuzzySearch: function(query, term) {\n          var\n            termLength  = term.length,\n            queryLength = query.length\n          ;\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(queryLength > termLength) {\n            return false;\n          }\n          if(queryLength === termLength) {\n            return (query === term);\n          }\n          search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\n            var\n              queryCharacter = query.charCodeAt(characterIndex)\n            ;\n            while(nextCharacterIndex < termLength) {\n              if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\n                continue search;\n              }\n            }\n            return false;\n          }\n          return true;\n        },\n        exactSearch: function (query, term) {\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          return term.indexOf(query) > -1;\n\n        },\n        filterActive: function() {\n          if(settings.useLabels) {\n            $item.filter('.' + className.active)\n              .addClass(className.filtered)\n            ;\n          }\n        },\n\n        focusSearch: function(skipHandler) {\n          if( module.has.search() && !module.is.focusedOnSearch() ) {\n            if(skipHandler) {\n              $module.off('focus' + eventNamespace, selector.search);\n              $search.focus();\n              $module.on('focus'  + eventNamespace, selector.search, module.event.search.focus);\n            }\n            else {\n              $search.focus();\n            }\n          }\n        },\n\n        blurSearch: function() {\n          if( module.has.search() ) {\n            $search.blur();\n          }\n        },\n\n        forceSelection: function() {\n          var\n            $currentlySelected = $item.not(className.filtered).filter('.' + className.selected).eq(0),\n            $activeItem        = $item.not(className.filtered).filter('.' + className.active).eq(0),\n            $selectedItem      = ($currentlySelected.length > 0)\n              ? $currentlySelected\n              : $activeItem,\n            hasSelected = ($selectedItem.length > 0)\n          ;\n          if(hasSelected && !module.is.multiple()) {\n            module.debug('Forcing partial selection to selected item', $selectedItem);\n            module.event.item.click.call($selectedItem, {}, true);\n          }\n          else {\n            if(settings.allowAdditions) {\n              module.set.selected(module.get.query());\n              module.remove.searchTerm();\n            }\n            else {\n              module.remove.searchTerm();\n            }\n          }\n        },\n\n        change: {\n          values: function(values) {\n            if(!settings.allowAdditions) {\n              module.clear();\n            }\n            module.debug('Creating dropdown with specified values', values);\n            module.setup.menu({values: values});\n            $.each(values, function(index, item) {\n              if(item.selected == true) {\n                module.debug('Setting initial selection to', item[fields.value]);\n                module.set.selected(item[fields.value]);\n                if(!module.is.multiple()) {\n                  return false;\n                }\n              }\n            });\n          }\n        },\n\n        event: {\n          change: function() {\n            if(!internalChange) {\n              module.debug('Input changed, updating selection');\n              module.set.selected();\n            }\n          },\n          focus: function() {\n            if(settings.showOnFocus && !activated && module.is.hidden() && !pageLostFocus) {\n              module.show();\n            }\n          },\n          blur: function(event) {\n            pageLostFocus = (document.activeElement === this);\n            if(!activated && !pageLostFocus) {\n              module.remove.activeLabel();\n              module.hide();\n            }\n          },\n          mousedown: function() {\n            if(module.is.searchSelection()) {\n              // prevent menu hiding on immediate re-focus\n              willRefocus = true;\n            }\n            else {\n              // prevents focus callback from occurring on mousedown\n              activated = true;\n            }\n          },\n          mouseup: function() {\n            if(module.is.searchSelection()) {\n              // prevent menu hiding on immediate re-focus\n              willRefocus = false;\n            }\n            else {\n              activated = false;\n            }\n          },\n          click: function(event) {\n            var\n              $target = $(event.target)\n            ;\n            // focus search\n            if($target.is($module)) {\n              if(!module.is.focusedOnSearch()) {\n                module.focusSearch();\n              }\n              else {\n                module.show();\n              }\n            }\n          },\n          search: {\n            focus: function(event) {\n              activated = true;\n              if(module.is.multiple()) {\n                module.remove.activeLabel();\n              }\n              if(settings.showOnFocus || (event.type !== 'focus' && event.type !== 'focusin')) {\n                module.search();\n              }\n            },\n            blur: function(event) {\n              pageLostFocus = (document.activeElement === this);\n              if(module.is.searchSelection() && !willRefocus) {\n                if(!itemActivated && !pageLostFocus) {\n                  if(settings.forceSelection) {\n                    module.forceSelection();\n                  }\n                  module.hide();\n                }\n              }\n              willRefocus = false;\n            }\n          },\n          clearIcon: {\n            click: function(event) {\n              module.clear();\n              if(module.is.searchSelection()) {\n                module.remove.searchTerm();\n              }\n              module.hide();\n              event.stopPropagation();\n            }\n          },\n          icon: {\n            click: function(event) {\n              iconClicked=true;\n              if(module.has.search()) {\n                if(!module.is.active()) {\n                    if(settings.showOnFocus){\n                      module.focusSearch();\n                    } else {\n                      module.toggle();\n                    }\n                } else {\n                  module.blurSearch();\n                }\n              } else {\n                module.toggle();\n              }\n            }\n          },\n          text: {\n            focus: function(event) {\n              activated = true;\n              module.focusSearch();\n            }\n          },\n          input: function(event) {\n            if(module.is.multiple() || module.is.searchSelection()) {\n              module.set.filtered();\n            }\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.search, settings.delay.search);\n          },\n          label: {\n            click: function(event) {\n              var\n                $label        = $(this),\n                $labels       = $module.find(selector.label),\n                $activeLabels = $labels.filter('.' + className.active),\n                $nextActive   = $label.nextAll('.' + className.active),\n                $prevActive   = $label.prevAll('.' + className.active),\n                $range = ($nextActive.length > 0)\n                  ? $label.nextUntil($nextActive).add($activeLabels).add($label)\n                  : $label.prevUntil($prevActive).add($activeLabels).add($label)\n              ;\n              if(event.shiftKey) {\n                $activeLabels.removeClass(className.active);\n                $range.addClass(className.active);\n              }\n              else if(event.ctrlKey) {\n                $label.toggleClass(className.active);\n              }\n              else {\n                $activeLabels.removeClass(className.active);\n                $label.addClass(className.active);\n              }\n              settings.onLabelSelect.apply(this, $labels.filter('.' + className.active));\n            }\n          },\n          remove: {\n            click: function() {\n              var\n                $label = $(this).parent()\n              ;\n              if( $label.hasClass(className.active) ) {\n                // remove all selected labels\n                module.remove.activeLabels();\n              }\n              else {\n                // remove this label only\n                module.remove.activeLabels( $label );\n              }\n            }\n          },\n          test: {\n            toggle: function(event) {\n              var\n                toggleBehavior = (module.is.multiple())\n                  ? module.show\n                  : module.toggle\n              ;\n              if(module.is.bubbledLabelClick(event) || module.is.bubbledIconClick(event)) {\n                return;\n              }\n              if( module.determine.eventOnElement(event, toggleBehavior) ) {\n                event.preventDefault();\n              }\n            },\n            touch: function(event) {\n              module.determine.eventOnElement(event, function() {\n                if(event.type == 'touchstart') {\n                  module.timer = setTimeout(function() {\n                    module.hide();\n                  }, settings.delay.touch);\n                }\n                else if(event.type == 'touchmove') {\n                  clearTimeout(module.timer);\n                }\n              });\n              event.stopPropagation();\n            },\n            hide: function(event) {\n              if(module.determine.eventInModule(event, module.hide)){\n                  event.preventDefault();\n              }\n            }\n          },\n          select: {\n            mutation: function(mutations) {\n              module.debug('<select> modified, recreating menu');\n              if(module.is.selectMutation(mutations)) {\n                module.disconnect.selectObserver();\n                module.refresh();\n                module.setup.select();\n                module.set.selected();\n                module.observe.select();\n              }\n            }\n          },\n          menu: {\n            mutation: function(mutations) {\n              var\n                mutation   = mutations[0],\n                $addedNode = mutation.addedNodes\n                  ? $(mutation.addedNodes[0])\n                  : $(false),\n                $removedNode = mutation.removedNodes\n                  ? $(mutation.removedNodes[0])\n                  : $(false),\n                $changedNodes  = $addedNode.add($removedNode),\n                isUserAddition = $changedNodes.is(selector.addition) || $changedNodes.closest(selector.addition).length > 0,\n                isMessage      = $changedNodes.is(selector.message)  || $changedNodes.closest(selector.message).length > 0\n              ;\n              if(isUserAddition || isMessage) {\n                module.debug('Updating item selector cache');\n                module.refreshItems();\n              }\n              else {\n                module.debug('Menu modified, updating selector cache');\n                module.refresh();\n              }\n            },\n            mousedown: function() {\n              itemActivated = true;\n            },\n            mouseup: function() {\n              itemActivated = false;\n            }\n          },\n          item: {\n            mouseenter: function(event) {\n              var\n                $target        = $(event.target),\n                $item          = $(this),\n                $subMenu       = $item.children(selector.menu),\n                $otherMenus    = $item.siblings(selector.item).children(selector.menu),\n                hasSubMenu     = ($subMenu.length > 0),\n                isBubbledEvent = ($subMenu.find($target).length > 0)\n              ;\n              if( !isBubbledEvent && hasSubMenu ) {\n                clearTimeout(module.itemTimer);\n                module.itemTimer = setTimeout(function() {\n                  module.verbose('Showing sub-menu', $subMenu);\n                  $.each($otherMenus, function() {\n                    module.animate.hide(false, $(this));\n                  });\n                  module.animate.show(false, $subMenu);\n                }, settings.delay.show);\n                event.preventDefault();\n              }\n            },\n            mouseleave: function(event) {\n              var\n                $subMenu = $(this).children(selector.menu)\n              ;\n              if($subMenu.length > 0) {\n                clearTimeout(module.itemTimer);\n                module.itemTimer = setTimeout(function() {\n                  module.verbose('Hiding sub-menu', $subMenu);\n                  module.animate.hide(false, $subMenu);\n                }, settings.delay.hide);\n              }\n            },\n            click: function (event, skipRefocus) {\n              var\n                $choice        = $(this),\n                $target        = (event)\n                  ? $(event.target)\n                  : $(''),\n                $subMenu       = $choice.find(selector.menu),\n                text           = module.get.choiceText($choice),\n                value          = module.get.choiceValue($choice, text),\n                hasSubMenu     = ($subMenu.length > 0),\n                isBubbledEvent = ($subMenu.find($target).length > 0)\n              ;\n              // prevents IE11 bug where menu receives focus even though `tabindex=-1`\n              if (!module.has.search() || !document.activeElement.isEqualNode($search[0])) {\n                $(document.activeElement).blur();\n              }\n              if(!isBubbledEvent && (!hasSubMenu || settings.allowCategorySelection)) {\n                if(module.is.searchSelection()) {\n                  if(settings.allowAdditions) {\n                    module.remove.userAddition();\n                  }\n                  module.remove.searchTerm();\n                  if(!module.is.focusedOnSearch() && !(skipRefocus == true)) {\n                    module.focusSearch(true);\n                  }\n                }\n                if(!settings.useLabels) {\n                  module.remove.filteredItem();\n                  module.set.scrollPosition($choice);\n                }\n                module.determine.selectAction.call(this, text, value);\n              }\n            }\n          },\n\n          document: {\n            // label selection should occur even when element has no focus\n            keydown: function(event) {\n              var\n                pressedKey    = event.which,\n                isShortcutKey = module.is.inObject(pressedKey, keys)\n              ;\n              if(isShortcutKey) {\n                var\n                  $label            = $module.find(selector.label),\n                  $activeLabel      = $label.filter('.' + className.active),\n                  activeValue       = $activeLabel.data(metadata.value),\n                  labelIndex        = $label.index($activeLabel),\n                  labelCount        = $label.length,\n                  hasActiveLabel    = ($activeLabel.length > 0),\n                  hasMultipleActive = ($activeLabel.length > 1),\n                  isFirstLabel      = (labelIndex === 0),\n                  isLastLabel       = (labelIndex + 1 == labelCount),\n                  isSearch          = module.is.searchSelection(),\n                  isFocusedOnSearch = module.is.focusedOnSearch(),\n                  isFocused         = module.is.focused(),\n                  caretAtStart      = (isFocusedOnSearch && module.get.caretPosition(false) === 0),\n                  isSelectedSearch  = (caretAtStart && module.get.caretPosition(true) !== 0),\n                  $nextLabel\n                ;\n                if(isSearch && !hasActiveLabel && !isFocusedOnSearch) {\n                  return;\n                }\n\n                if(pressedKey == keys.leftArrow) {\n                  // activate previous label\n                  if((isFocused || caretAtStart) && !hasActiveLabel) {\n                    module.verbose('Selecting previous label');\n                    $label.last().addClass(className.active);\n                  }\n                  else if(hasActiveLabel) {\n                    if(!event.shiftKey) {\n                      module.verbose('Selecting previous label');\n                      $label.removeClass(className.active);\n                    }\n                    else {\n                      module.verbose('Adding previous label to selection');\n                    }\n                    if(isFirstLabel && !hasMultipleActive) {\n                      $activeLabel.addClass(className.active);\n                    }\n                    else {\n                      $activeLabel.prev(selector.siblingLabel)\n                        .addClass(className.active)\n                        .end()\n                      ;\n                    }\n                    event.preventDefault();\n                  }\n                }\n                else if(pressedKey == keys.rightArrow) {\n                  // activate first label\n                  if(isFocused && !hasActiveLabel) {\n                    $label.first().addClass(className.active);\n                  }\n                  // activate next label\n                  if(hasActiveLabel) {\n                    if(!event.shiftKey) {\n                      module.verbose('Selecting next label');\n                      $label.removeClass(className.active);\n                    }\n                    else {\n                      module.verbose('Adding next label to selection');\n                    }\n                    if(isLastLabel) {\n                      if(isSearch) {\n                        if(!isFocusedOnSearch) {\n                          module.focusSearch();\n                        }\n                        else {\n                          $label.removeClass(className.active);\n                        }\n                      }\n                      else if(hasMultipleActive) {\n                        $activeLabel.next(selector.siblingLabel).addClass(className.active);\n                      }\n                      else {\n                        $activeLabel.addClass(className.active);\n                      }\n                    }\n                    else {\n                      $activeLabel.next(selector.siblingLabel).addClass(className.active);\n                    }\n                    event.preventDefault();\n                  }\n                }\n                else if(pressedKey == keys.deleteKey || pressedKey == keys.backspace) {\n                  if(hasActiveLabel) {\n                    module.verbose('Removing active labels');\n                    if(isLastLabel) {\n                      if(isSearch && !isFocusedOnSearch) {\n                        module.focusSearch();\n                      }\n                    }\n                    $activeLabel.last().next(selector.siblingLabel).addClass(className.active);\n                    module.remove.activeLabels($activeLabel);\n                    event.preventDefault();\n                  }\n                  else if(caretAtStart && !isSelectedSearch && !hasActiveLabel && pressedKey == keys.backspace) {\n                    module.verbose('Removing last label on input backspace');\n                    $activeLabel = $label.last().addClass(className.active);\n                    module.remove.activeLabels($activeLabel);\n                  }\n                }\n                else {\n                  $activeLabel.removeClass(className.active);\n                }\n              }\n            }\n          },\n\n          keydown: function(event) {\n            var\n              pressedKey    = event.which,\n              isShortcutKey = module.is.inObject(pressedKey, keys)\n            ;\n            if(isShortcutKey) {\n              var\n                $currentlySelected = $item.not(selector.unselectable).filter('.' + className.selected).eq(0),\n                $activeItem        = $menu.children('.' + className.active).eq(0),\n                $selectedItem      = ($currentlySelected.length > 0)\n                  ? $currentlySelected\n                  : $activeItem,\n                $visibleItems = ($selectedItem.length > 0)\n                  ? $selectedItem.siblings(':not(.' + className.filtered +')').addBack()\n                  : $menu.children(':not(.' + className.filtered +')'),\n                $subMenu              = $selectedItem.children(selector.menu),\n                $parentMenu           = $selectedItem.closest(selector.menu),\n                inVisibleMenu         = ($parentMenu.hasClass(className.visible) || $parentMenu.hasClass(className.animating) || $parentMenu.parent(selector.menu).length > 0),\n                hasSubMenu            = ($subMenu.length> 0),\n                hasSelectedItem       = ($selectedItem.length > 0),\n                selectedIsSelectable  = ($selectedItem.not(selector.unselectable).length > 0),\n                delimiterPressed      = (pressedKey == keys.delimiter && settings.allowAdditions && module.is.multiple()),\n                isAdditionWithoutMenu = (settings.allowAdditions && settings.hideAdditions && (pressedKey == keys.enter || delimiterPressed) && selectedIsSelectable),\n                $nextItem,\n                isSubMenuItem,\n                newIndex\n              ;\n              // allow selection with menu closed\n              if(isAdditionWithoutMenu) {\n                module.verbose('Selecting item from keyboard shortcut', $selectedItem);\n                module.event.item.click.call($selectedItem, event);\n                if(module.is.searchSelection()) {\n                  module.remove.searchTerm();\n                }\n                if(module.is.multiple()){\n                    event.preventDefault();\n                }\n              }\n\n              // visible menu keyboard shortcuts\n              if( module.is.visible() ) {\n\n                // enter (select or open sub-menu)\n                if(pressedKey == keys.enter || delimiterPressed) {\n                  if(pressedKey == keys.enter && hasSelectedItem && hasSubMenu && !settings.allowCategorySelection) {\n                    module.verbose('Pressed enter on unselectable category, opening sub menu');\n                    pressedKey = keys.rightArrow;\n                  }\n                  else if(selectedIsSelectable) {\n                    module.verbose('Selecting item from keyboard shortcut', $selectedItem);\n                    module.event.item.click.call($selectedItem, event);\n                    if(module.is.searchSelection()) {\n                      module.remove.searchTerm();\n                      if(module.is.multiple()) {\n                          $search.focus();\n                      }\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // sub-menu actions\n                if(hasSelectedItem) {\n\n                  if(pressedKey == keys.leftArrow) {\n\n                    isSubMenuItem = ($parentMenu[0] !== $menu[0]);\n\n                    if(isSubMenuItem) {\n                      module.verbose('Left key pressed, closing sub-menu');\n                      module.animate.hide(false, $parentMenu);\n                      $selectedItem\n                        .removeClass(className.selected)\n                      ;\n                      $parentMenu\n                        .closest(selector.item)\n                          .addClass(className.selected)\n                      ;\n                      event.preventDefault();\n                    }\n                  }\n\n                  // right arrow (show sub-menu)\n                  if(pressedKey == keys.rightArrow) {\n                    if(hasSubMenu) {\n                      module.verbose('Right key pressed, opening sub-menu');\n                      module.animate.show(false, $subMenu);\n                      $selectedItem\n                        .removeClass(className.selected)\n                      ;\n                      $subMenu\n                        .find(selector.item).eq(0)\n                          .addClass(className.selected)\n                      ;\n                      event.preventDefault();\n                    }\n                  }\n                }\n\n                // up arrow (traverse menu up)\n                if(pressedKey == keys.upArrow) {\n                  $nextItem = (hasSelectedItem && inVisibleMenu)\n                    ? $selectedItem.prevAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)\n                    : $item.eq(0)\n                  ;\n                  if($visibleItems.index( $nextItem ) < 0) {\n                    module.verbose('Up key pressed but reached top of current menu');\n                    event.preventDefault();\n                    return;\n                  }\n                  else {\n                    module.verbose('Up key pressed, changing active item');\n                    $selectedItem\n                      .removeClass(className.selected)\n                    ;\n                    $nextItem\n                      .addClass(className.selected)\n                    ;\n                    module.set.scrollPosition($nextItem);\n                    if(settings.selectOnKeydown && module.is.single()) {\n                      module.set.selectedItem($nextItem);\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // down arrow (traverse menu down)\n                if(pressedKey == keys.downArrow) {\n                  $nextItem = (hasSelectedItem && inVisibleMenu)\n                    ? $nextItem = $selectedItem.nextAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)\n                    : $item.eq(0)\n                  ;\n                  if($nextItem.length === 0) {\n                    module.verbose('Down key pressed but reached bottom of current menu');\n                    event.preventDefault();\n                    return;\n                  }\n                  else {\n                    module.verbose('Down key pressed, changing active item');\n                    $item\n                      .removeClass(className.selected)\n                    ;\n                    $nextItem\n                      .addClass(className.selected)\n                    ;\n                    module.set.scrollPosition($nextItem);\n                    if(settings.selectOnKeydown && module.is.single()) {\n                      module.set.selectedItem($nextItem);\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // page down (show next page)\n                if(pressedKey == keys.pageUp) {\n                  module.scrollPage('up');\n                  event.preventDefault();\n                }\n                if(pressedKey == keys.pageDown) {\n                  module.scrollPage('down');\n                  event.preventDefault();\n                }\n\n                // escape (close menu)\n                if(pressedKey == keys.escape) {\n                  module.verbose('Escape key pressed, closing dropdown');\n                  module.hide();\n                }\n\n              }\n              else {\n                // delimiter key\n                if(delimiterPressed) {\n                  event.preventDefault();\n                }\n                // down arrow (open menu)\n                if(pressedKey == keys.downArrow && !module.is.visible()) {\n                  module.verbose('Down key pressed, showing dropdown');\n                  module.show();\n                  event.preventDefault();\n                }\n              }\n            }\n            else {\n              if( !module.has.search() ) {\n                module.set.selectedLetter( String.fromCharCode(pressedKey) );\n              }\n            }\n          }\n        },\n\n        trigger: {\n          change: function() {\n            var\n              events       = document.createEvent('HTMLEvents'),\n              inputElement = $input[0]\n            ;\n            if(inputElement) {\n              module.verbose('Triggering native change event');\n              events.initEvent('change', true, false);\n              inputElement.dispatchEvent(events);\n            }\n          }\n        },\n\n        determine: {\n          selectAction: function(text, value) {\n            module.verbose('Determining action', settings.action);\n            if( $.isFunction( module.action[settings.action] ) ) {\n              module.verbose('Triggering preset action', settings.action, text, value);\n              module.action[ settings.action ].call(element, text, value, this);\n            }\n            else if( $.isFunction(settings.action) ) {\n              module.verbose('Triggering user action', settings.action, text, value);\n              settings.action.call(element, text, value, this);\n            }\n            else {\n              module.error(error.action, settings.action);\n            }\n          },\n          eventInModule: function(event, callback) {\n            var\n              $target    = $(event.target),\n              inDocument = ($target.closest(document.documentElement).length > 0),\n              inModule   = ($target.closest($module).length > 0)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(inDocument && !inModule) {\n              module.verbose('Triggering event', callback);\n              callback();\n              return true;\n            }\n            else {\n              module.verbose('Event occurred in dropdown, canceling callback');\n              return false;\n            }\n          },\n          eventOnElement: function(event, callback) {\n            var\n              $target      = $(event.target),\n              $label       = $target.closest(selector.siblingLabel),\n              inVisibleDOM = document.body.contains(event.target),\n              notOnLabel   = ($module.find($label).length === 0 || !(module.is.multiple() && settings.useLabels)),\n              notInMenu    = ($target.closest($menu).length === 0)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(inVisibleDOM && notOnLabel && notInMenu) {\n              module.verbose('Triggering event', callback);\n              callback();\n              return true;\n            }\n            else {\n              module.verbose('Event occurred in dropdown menu, canceling callback');\n              return false;\n            }\n          }\n        },\n\n        action: {\n\n          nothing: function() {},\n\n          activate: function(text, value, element) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            if( module.can.activate( $(element) ) ) {\n              module.set.selected(value, $(element));\n              if(!module.is.multiple()) {\n                module.hideAndClear();\n              }\n            }\n          },\n\n          select: function(text, value, element) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            if( module.can.activate( $(element) ) ) {\n              module.set.value(value, text, $(element));\n              if(!module.is.multiple()) {\n                module.hideAndClear();\n              }\n            }\n          },\n\n          combo: function(text, value, element) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            module.set.selected(value, $(element));\n            module.hideAndClear();\n          },\n\n          hide: function(text, value, element) {\n            module.set.value(value, text, $(element));\n            module.hideAndClear();\n          }\n\n        },\n\n        get: {\n          id: function() {\n            return id;\n          },\n          defaultText: function() {\n            return $module.data(metadata.defaultText);\n          },\n          defaultValue: function() {\n            return $module.data(metadata.defaultValue);\n          },\n          placeholderText: function() {\n            if(settings.placeholder != 'auto' && typeof settings.placeholder == 'string') {\n              return settings.placeholder;\n            }\n            return $module.data(metadata.placeholderText) || '';\n          },\n          text: function() {\n            return $text.text();\n          },\n          query: function() {\n            return $.trim($search.val());\n          },\n          searchWidth: function(value) {\n            value = (value !== undefined)\n              ? value\n              : $search.val()\n            ;\n            $sizer.text(value);\n            // prevent rounding issues\n            return Math.ceil( $sizer.width() + 1);\n          },\n          selectionCount: function() {\n            var\n              values = module.get.values(),\n              count\n            ;\n            count = ( module.is.multiple() )\n              ? Array.isArray(values)\n                ? values.length\n                : 0\n              : (module.get.value() !== '')\n                ? 1\n                : 0\n            ;\n            return count;\n          },\n          transition: function($subMenu) {\n            return (settings.transition == 'auto')\n              ? module.is.upward($subMenu)\n                ? 'slide up'\n                : 'slide down'\n              : settings.transition\n            ;\n          },\n          userValues: function() {\n            var\n              values = module.get.values()\n            ;\n            if(!values) {\n              return false;\n            }\n            values = Array.isArray(values)\n              ? values\n              : [values]\n            ;\n            return $.grep(values, function(value) {\n              return (module.get.item(value) === false);\n            });\n          },\n          uniqueArray: function(array) {\n            return $.grep(array, function (value, index) {\n                return $.inArray(value, array) === index;\n            });\n          },\n          caretPosition: function(returnEndPos) {\n            var\n              input = $search.get(0),\n              range,\n              rangeLength\n            ;\n            if(returnEndPos && 'selectionEnd' in input){\n              return input.selectionEnd;\n            }\n            else if(!returnEndPos && 'selectionStart' in input) {\n              return input.selectionStart;\n            }\n            if (document.selection) {\n              input.focus();\n              range       = document.selection.createRange();\n              rangeLength = range.text.length;\n              if(returnEndPos) {\n                return rangeLength;\n              }\n              range.moveStart('character', -input.value.length);\n              return range.text.length - rangeLength;\n            }\n          },\n          value: function() {\n            var\n              value = ($input.length > 0)\n                ? $input.val()\n                : $module.data(metadata.value),\n              isEmptyMultiselect = (Array.isArray(value) && value.length === 1 && value[0] === '')\n            ;\n            // prevents placeholder element from being selected when multiple\n            return (value === undefined || isEmptyMultiselect)\n              ? ''\n              : value\n            ;\n          },\n          values: function() {\n            var\n              value = module.get.value()\n            ;\n            if(value === '') {\n              return '';\n            }\n            return ( !module.has.selectInput() && module.is.multiple() )\n              ? (typeof value == 'string') // delimited string\n                ? value.split(settings.delimiter)\n                : ''\n              : value\n            ;\n          },\n          remoteValues: function() {\n            var\n              values = module.get.values(),\n              remoteValues = false\n            ;\n            if(values) {\n              if(typeof values == 'string') {\n                values = [values];\n              }\n              $.each(values, function(index, value) {\n                var\n                  name = module.read.remoteData(value)\n                ;\n                module.verbose('Restoring value from session data', name, value);\n                if(name) {\n                  if(!remoteValues) {\n                    remoteValues = {};\n                  }\n                  remoteValues[value] = name;\n                }\n              });\n            }\n            return remoteValues;\n          },\n          choiceText: function($choice, preserveHTML) {\n            preserveHTML = (preserveHTML !== undefined)\n              ? preserveHTML\n              : settings.preserveHTML\n            ;\n            if($choice) {\n              if($choice.find(selector.menu).length > 0) {\n                module.verbose('Retrieving text of element with sub-menu');\n                $choice = $choice.clone();\n                $choice.find(selector.menu).remove();\n                $choice.find(selector.menuIcon).remove();\n              }\n              return ($choice.data(metadata.text) !== undefined)\n                ? $choice.data(metadata.text)\n                : (preserveHTML)\n                  ? $.trim($choice.html())\n                  : $.trim($choice.text())\n              ;\n            }\n          },\n          choiceValue: function($choice, choiceText) {\n            choiceText = choiceText || module.get.choiceText($choice);\n            if(!$choice) {\n              return false;\n            }\n            return ($choice.data(metadata.value) !== undefined)\n              ? String( $choice.data(metadata.value) )\n              : (typeof choiceText === 'string')\n                ? $.trim(choiceText.toLowerCase())\n                : String(choiceText)\n            ;\n          },\n          inputEvent: function() {\n            var\n              input = $search[0]\n            ;\n            if(input) {\n              return (input.oninput !== undefined)\n                ? 'input'\n                : (input.onpropertychange !== undefined)\n                  ? 'propertychange'\n                  : 'keyup'\n              ;\n            }\n            return false;\n          },\n          selectValues: function() {\n            var\n              select = {}\n            ;\n            select.values = [];\n            $module\n              .find('option')\n                .each(function() {\n                  var\n                    $option  = $(this),\n                    name     = $option.html(),\n                    disabled = $option.attr('disabled'),\n                    value    = ( $option.attr('value') !== undefined )\n                      ? $option.attr('value')\n                      : name\n                  ;\n                  if(settings.placeholder === 'auto' && value === '') {\n                    select.placeholder = name;\n                  }\n                  else {\n                    select.values.push({\n                      name     : name,\n                      value    : value,\n                      disabled : disabled\n                    });\n                  }\n                })\n            ;\n            if(settings.placeholder && settings.placeholder !== 'auto') {\n              module.debug('Setting placeholder value to', settings.placeholder);\n              select.placeholder = settings.placeholder;\n            }\n            if(settings.sortSelect) {\n              if(settings.sortSelect === true) {\n                select.values.sort(function(a, b) {\n                  return a.name.localeCompare(b.name);\n                });\n              } else if(settings.sortSelect === 'natural') {\n                select.values.sort(function(a, b) {\n                  return (a.name.toLowerCase().localeCompare(b.name.toLowerCase()));\n                });\n              } else if($.isFunction(settings.sortSelect)) {\n                select.values.sort(settings.sortSelect);\n              }\n              module.debug('Retrieved and sorted values from select', select);\n            }\n            else {\n              module.debug('Retrieved values from select', select);\n            }\n            return select;\n          },\n          activeItem: function() {\n            return $item.filter('.'  + className.active);\n          },\n          selectedItem: function() {\n            var\n              $selectedItem = $item.not(selector.unselectable).filter('.'  + className.selected)\n            ;\n            return ($selectedItem.length > 0)\n              ? $selectedItem\n              : $item.eq(0)\n            ;\n          },\n          itemWithAdditions: function(value) {\n            var\n              $items       = module.get.item(value),\n              $userItems   = module.create.userChoice(value),\n              hasUserItems = ($userItems && $userItems.length > 0)\n            ;\n            if(hasUserItems) {\n              $items = ($items.length > 0)\n                ? $items.add($userItems)\n                : $userItems\n              ;\n            }\n            return $items;\n          },\n          item: function(value, strict) {\n            var\n              $selectedItem = false,\n              shouldSearch,\n              isMultiple\n            ;\n            value = (value !== undefined)\n              ? value\n              : ( module.get.values() !== undefined)\n                ? module.get.values()\n                : module.get.text()\n            ;\n            shouldSearch = (isMultiple)\n              ? (value.length > 0)\n              : (value !== undefined && value !== null)\n            ;\n            isMultiple = (module.is.multiple() && Array.isArray(value));\n            strict     = (value === '' || value === false  || value === true)\n              ? true\n              : strict || false\n            ;\n            if(shouldSearch) {\n              $item\n                .each(function() {\n                  var\n                    $choice       = $(this),\n                    optionText    = module.get.choiceText($choice),\n                    optionValue   = module.get.choiceValue($choice, optionText)\n                  ;\n                  // safe early exit\n                  if(optionValue === null || optionValue === undefined) {\n                    return;\n                  }\n                  if(isMultiple) {\n                    if($.inArray( String(optionValue), value) !== -1) {\n                      $selectedItem = ($selectedItem)\n                        ? $selectedItem.add($choice)\n                        : $choice\n                      ;\n                    }\n                  }\n                  else if(strict) {\n                    module.verbose('Ambiguous dropdown value using strict type check', $choice, value);\n                    if( optionValue === value) {\n                      $selectedItem = $choice;\n                      return true;\n                    }\n                  }\n                  else {\n                    if( String(optionValue) == String(value)) {\n                      module.verbose('Found select item by value', optionValue, value);\n                      $selectedItem = $choice;\n                      return true;\n                    }\n                  }\n                })\n              ;\n            }\n            return $selectedItem;\n          }\n        },\n\n        check: {\n          maxSelections: function(selectionCount) {\n            if(settings.maxSelections) {\n              selectionCount = (selectionCount !== undefined)\n                ? selectionCount\n                : module.get.selectionCount()\n              ;\n              if(selectionCount >= settings.maxSelections) {\n                module.debug('Maximum selection count reached');\n                if(settings.useLabels) {\n                  $item.addClass(className.filtered);\n                  module.add.message(message.maxSelections);\n                }\n                return true;\n              }\n              else {\n                module.verbose('No longer at maximum selection count');\n                module.remove.message();\n                module.remove.filteredItem();\n                if(module.is.searchSelection()) {\n                  module.filterItems();\n                }\n                return false;\n              }\n            }\n            return true;\n          }\n        },\n\n        restore: {\n          defaults: function() {\n            module.clear();\n            module.restore.defaultText();\n            module.restore.defaultValue();\n          },\n          defaultText: function() {\n            var\n              defaultText     = module.get.defaultText(),\n              placeholderText = module.get.placeholderText\n            ;\n            if(defaultText === placeholderText) {\n              module.debug('Restoring default placeholder text', defaultText);\n              module.set.placeholderText(defaultText);\n            }\n            else {\n              module.debug('Restoring default text', defaultText);\n              module.set.text(defaultText);\n            }\n          },\n          placeholderText: function() {\n            module.set.placeholderText();\n          },\n          defaultValue: function() {\n            var\n              defaultValue = module.get.defaultValue()\n            ;\n            if(defaultValue !== undefined) {\n              module.debug('Restoring default value', defaultValue);\n              if(defaultValue !== '') {\n                module.set.value(defaultValue);\n                module.set.selected();\n              }\n              else {\n                module.remove.activeItem();\n                module.remove.selectedItem();\n              }\n            }\n          },\n          labels: function() {\n            if(settings.allowAdditions) {\n              if(!settings.useLabels) {\n                module.error(error.labels);\n                settings.useLabels = true;\n              }\n              module.debug('Restoring selected values');\n              module.create.userLabels();\n            }\n            module.check.maxSelections();\n          },\n          selected: function() {\n            module.restore.values();\n            if(module.is.multiple()) {\n              module.debug('Restoring previously selected values and labels');\n              module.restore.labels();\n            }\n            else {\n              module.debug('Restoring previously selected values');\n            }\n          },\n          values: function() {\n            // prevents callbacks from occurring on initial load\n            module.set.initialLoad();\n            if(settings.apiSettings && settings.saveRemoteData && module.get.remoteValues()) {\n              module.restore.remoteValues();\n            }\n            else {\n              module.set.selected();\n            }\n            if(module.get.item()) {\n              $input.removeClass(className.noselection);\n            } else {\n              $input.addClass(className.noselection);\n            }\n            module.remove.initialLoad();\n          },\n          remoteValues: function() {\n            var\n              values = module.get.remoteValues()\n            ;\n            module.debug('Recreating selected from session data', values);\n            if(values) {\n              if( module.is.single() ) {\n                $.each(values, function(value, name) {\n                  module.set.text(name);\n                });\n              }\n              else {\n                $.each(values, function(value, name) {\n                  module.add.label(value, name);\n                });\n              }\n            }\n          }\n        },\n\n        read: {\n          remoteData: function(value) {\n            var\n              name\n            ;\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            name = sessionStorage.getItem(value);\n            return (name !== undefined)\n              ? name\n              : false\n            ;\n          }\n        },\n\n        save: {\n          defaults: function() {\n            module.save.defaultText();\n            module.save.placeholderText();\n            module.save.defaultValue();\n          },\n          defaultValue: function() {\n            var\n              value = module.get.value()\n            ;\n            module.verbose('Saving default value as', value);\n            $module.data(metadata.defaultValue, value);\n          },\n          defaultText: function() {\n            var\n              text = module.get.text()\n            ;\n            module.verbose('Saving default text as', text);\n            $module.data(metadata.defaultText, text);\n          },\n          placeholderText: function() {\n            var\n              text\n            ;\n            if(settings.placeholder !== false && $text.hasClass(className.placeholder)) {\n              text = module.get.text();\n              module.verbose('Saving placeholder text as', text);\n              $module.data(metadata.placeholderText, text);\n            }\n          },\n          remoteData: function(name, value) {\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            module.verbose('Saving remote data to session storage', value, name);\n            sessionStorage.setItem(value, name);\n          }\n        },\n\n        clear: function() {\n          if(module.is.multiple() && settings.useLabels) {\n            module.remove.labels();\n          }\n          else {\n            module.remove.activeItem();\n            module.remove.selectedItem();\n            module.remove.filteredItem();\n          }\n          module.set.placeholderText();\n          module.clearValue();\n        },\n\n        clearValue: function() {\n          module.set.value('');\n        },\n\n        scrollPage: function(direction, $selectedItem) {\n          var\n            $currentItem  = $selectedItem || module.get.selectedItem(),\n            $menu         = $currentItem.closest(selector.menu),\n            menuHeight    = $menu.outerHeight(),\n            currentScroll = $menu.scrollTop(),\n            itemHeight    = $item.eq(0).outerHeight(),\n            itemsPerPage  = Math.floor(menuHeight / itemHeight),\n            maxScroll     = $menu.prop('scrollHeight'),\n            newScroll     = (direction == 'up')\n              ? currentScroll - (itemHeight * itemsPerPage)\n              : currentScroll + (itemHeight * itemsPerPage),\n            $selectableItem = $item.not(selector.unselectable),\n            isWithinRange,\n            $nextSelectedItem,\n            elementIndex\n          ;\n          elementIndex      = (direction == 'up')\n            ? $selectableItem.index($currentItem) - itemsPerPage\n            : $selectableItem.index($currentItem) + itemsPerPage\n          ;\n          isWithinRange = (direction == 'up')\n            ? (elementIndex >= 0)\n            : (elementIndex < $selectableItem.length)\n          ;\n          $nextSelectedItem = (isWithinRange)\n            ? $selectableItem.eq(elementIndex)\n            : (direction == 'up')\n              ? $selectableItem.first()\n              : $selectableItem.last()\n          ;\n          if($nextSelectedItem.length > 0) {\n            module.debug('Scrolling page', direction, $nextSelectedItem);\n            $currentItem\n              .removeClass(className.selected)\n            ;\n            $nextSelectedItem\n              .addClass(className.selected)\n            ;\n            if(settings.selectOnKeydown && module.is.single()) {\n              module.set.selectedItem($nextSelectedItem);\n            }\n            $menu\n              .scrollTop(newScroll)\n            ;\n          }\n        },\n\n        set: {\n          filtered: function() {\n            var\n              isMultiple       = module.is.multiple(),\n              isSearch         = module.is.searchSelection(),\n              isSearchMultiple = (isMultiple && isSearch),\n              searchValue      = (isSearch)\n                ? module.get.query()\n                : '',\n              hasSearchValue   = (typeof searchValue === 'string' && searchValue.length > 0),\n              searchWidth      = module.get.searchWidth(),\n              valueIsSet       = searchValue !== ''\n            ;\n            if(isMultiple && hasSearchValue) {\n              module.verbose('Adjusting input width', searchWidth, settings.glyphWidth);\n              $search.css('width', searchWidth);\n            }\n            if(hasSearchValue || (isSearchMultiple && valueIsSet)) {\n              module.verbose('Hiding placeholder text');\n              $text.addClass(className.filtered);\n            }\n            else if(!isMultiple || (isSearchMultiple && !valueIsSet)) {\n              module.verbose('Showing placeholder text');\n              $text.removeClass(className.filtered);\n            }\n          },\n          empty: function() {\n            $module.addClass(className.empty);\n          },\n          loading: function() {\n            $module.addClass(className.loading);\n          },\n          placeholderText: function(text) {\n            text = text || module.get.placeholderText();\n            module.debug('Setting placeholder text', text);\n            module.set.text(text);\n            $text.addClass(className.placeholder);\n          },\n          tabbable: function() {\n            if( module.is.searchSelection() ) {\n              module.debug('Added tabindex to searchable dropdown');\n              $search\n                .val('')\n                .attr('tabindex', 0)\n              ;\n              $menu\n                .attr('tabindex', -1)\n              ;\n            }\n            else {\n              module.debug('Added tabindex to dropdown');\n              if( $module.attr('tabindex') === undefined) {\n                $module\n                  .attr('tabindex', 0)\n                ;\n                $menu\n                  .attr('tabindex', -1)\n                ;\n              }\n            }\n          },\n          initialLoad: function() {\n            module.verbose('Setting initial load');\n            initialLoad = true;\n          },\n          activeItem: function($item) {\n            if( settings.allowAdditions && $item.filter(selector.addition).length > 0 ) {\n              $item.addClass(className.filtered);\n            }\n            else {\n              $item.addClass(className.active);\n            }\n          },\n          partialSearch: function(text) {\n            var\n              length = module.get.query().length\n            ;\n            $search.val( text.substr(0, length));\n          },\n          scrollPosition: function($item, forceScroll) {\n            var\n              edgeTolerance = 5,\n              $menu,\n              hasActive,\n              offset,\n              itemHeight,\n              itemOffset,\n              menuOffset,\n              menuScroll,\n              menuHeight,\n              abovePage,\n              belowPage\n            ;\n\n            $item       = $item || module.get.selectedItem();\n            $menu       = $item.closest(selector.menu);\n            hasActive   = ($item && $item.length > 0);\n            forceScroll = (forceScroll !== undefined)\n              ? forceScroll\n              : false\n            ;\n            if($item && $menu.length > 0 && hasActive) {\n              itemOffset = $item.position().top;\n\n              $menu.addClass(className.loading);\n              menuScroll = $menu.scrollTop();\n              menuOffset = $menu.offset().top;\n              itemOffset = $item.offset().top;\n              offset     = menuScroll - menuOffset + itemOffset;\n              if(!forceScroll) {\n                menuHeight = $menu.height();\n                belowPage  = menuScroll + menuHeight < (offset + edgeTolerance);\n                abovePage  = ((offset - edgeTolerance) < menuScroll);\n              }\n              module.debug('Scrolling to active item', offset);\n              if(forceScroll || abovePage || belowPage) {\n                $menu.scrollTop(offset);\n              }\n              $menu.removeClass(className.loading);\n            }\n          },\n          text: function(text) {\n            if(settings.action === 'combo') {\n              module.debug('Changing combo button text', text, $combo);\n              if(settings.preserveHTML) {\n                $combo.html(text);\n              }\n              else {\n                $combo.text(text);\n              }\n            }\n            else if(settings.action === 'activate') {\n              if(text !== module.get.placeholderText()) {\n                $text.removeClass(className.placeholder);\n              }\n              module.debug('Changing text', text, $text);\n              $text\n                .removeClass(className.filtered)\n              ;\n              if(settings.preserveHTML) {\n                $text.html(text);\n              }\n              else {\n                $text.text(text);\n              }\n            }\n          },\n          selectedItem: function($item) {\n            var\n              value      = module.get.choiceValue($item),\n              searchText = module.get.choiceText($item, false),\n              text       = module.get.choiceText($item, true)\n            ;\n            module.debug('Setting user selection to item', $item);\n            module.remove.activeItem();\n            module.set.partialSearch(searchText);\n            module.set.activeItem($item);\n            module.set.selected(value, $item);\n            module.set.text(text);\n          },\n          selectedLetter: function(letter) {\n            var\n              $selectedItem         = $item.filter('.' + className.selected),\n              alreadySelectedLetter = $selectedItem.length > 0 && module.has.firstLetter($selectedItem, letter),\n              $nextValue            = false,\n              $nextItem\n            ;\n            // check next of same letter\n            if(alreadySelectedLetter) {\n              $nextItem = $selectedItem.nextAll($item).eq(0);\n              if( module.has.firstLetter($nextItem, letter) ) {\n                $nextValue  = $nextItem;\n              }\n            }\n            // check all values\n            if(!$nextValue) {\n              $item\n                .each(function(){\n                  if(module.has.firstLetter($(this), letter)) {\n                    $nextValue = $(this);\n                    return false;\n                  }\n                })\n              ;\n            }\n            // set next value\n            if($nextValue) {\n              module.verbose('Scrolling to next value with letter', letter);\n              module.set.scrollPosition($nextValue);\n              $selectedItem.removeClass(className.selected);\n              $nextValue.addClass(className.selected);\n              if(settings.selectOnKeydown && module.is.single()) {\n                module.set.selectedItem($nextValue);\n              }\n            }\n          },\n          direction: function($menu) {\n            if(settings.direction == 'auto') {\n              // reset position, remove upward if it's base menu\n              if (!$menu) {\n                module.remove.upward();\n              } else if (module.is.upward($menu)) {\n                //we need make sure when make assertion openDownward for $menu, $menu does not have upward class\n                module.remove.upward($menu);\n              }\n\n              if(module.can.openDownward($menu)) {\n                module.remove.upward($menu);\n              }\n              else {\n                module.set.upward($menu);\n              }\n              if(!module.is.leftward($menu) && !module.can.openRightward($menu)) {\n                module.set.leftward($menu);\n              }\n            }\n            else if(settings.direction == 'upward') {\n              module.set.upward($menu);\n            }\n          },\n          upward: function($currentMenu) {\n            var $element = $currentMenu || $module;\n            $element.addClass(className.upward);\n          },\n          leftward: function($currentMenu) {\n            var $element = $currentMenu || $menu;\n            $element.addClass(className.leftward);\n          },\n          value: function(value, text, $selected) {\n            if(value !== undefined && value !== '' && !(Array.isArray(value) && value.length === 0)) {\n              $input.removeClass(className.noselection);\n            } else {\n              $input.addClass(className.noselection);\n            }\n            var\n              escapedValue = module.escape.value(value),\n              hasInput     = ($input.length > 0),\n              currentValue = module.get.values(),\n              stringValue  = (value !== undefined)\n                ? String(value)\n                : value,\n              newValue\n            ;\n            if(hasInput) {\n              if(!settings.allowReselection && stringValue == currentValue) {\n                module.verbose('Skipping value update already same value', value, currentValue);\n                if(!module.is.initialLoad()) {\n                  return;\n                }\n              }\n\n              if( module.is.single() && module.has.selectInput() && module.can.extendSelect() ) {\n                module.debug('Adding user option', value);\n                module.add.optionValue(value);\n              }\n              module.debug('Updating input value', escapedValue, currentValue);\n              internalChange = true;\n              $input\n                .val(escapedValue)\n              ;\n              if(settings.fireOnInit === false && module.is.initialLoad()) {\n                module.debug('Input native change event ignored on initial load');\n              }\n              else {\n                module.trigger.change();\n              }\n              internalChange = false;\n            }\n            else {\n              module.verbose('Storing value in metadata', escapedValue, $input);\n              if(escapedValue !== currentValue) {\n                $module.data(metadata.value, stringValue);\n              }\n            }\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('No callback on initial load', settings.onChange);\n            }\n            else {\n              settings.onChange.call(element, value, text, $selected);\n            }\n          },\n          active: function() {\n            $module\n              .addClass(className.active)\n            ;\n          },\n          multiple: function() {\n            $module.addClass(className.multiple);\n          },\n          visible: function() {\n            $module.addClass(className.visible);\n          },\n          exactly: function(value, $selectedItem) {\n            module.debug('Setting selected to exact values');\n            module.clear();\n            module.set.selected(value, $selectedItem);\n          },\n          selected: function(value, $selectedItem) {\n            var\n              isMultiple = module.is.multiple()\n            ;\n            $selectedItem = (settings.allowAdditions)\n              ? $selectedItem || module.get.itemWithAdditions(value)\n              : $selectedItem || module.get.item(value)\n            ;\n            if(!$selectedItem) {\n              return;\n            }\n            module.debug('Setting selected menu item to', $selectedItem);\n            if(module.is.multiple()) {\n              module.remove.searchWidth();\n            }\n            if(module.is.single()) {\n              module.remove.activeItem();\n              module.remove.selectedItem();\n            }\n            else if(settings.useLabels) {\n              module.remove.selectedItem();\n            }\n            // select each item\n            $selectedItem\n              .each(function() {\n                var\n                  $selected      = $(this),\n                  selectedText   = module.get.choiceText($selected),\n                  selectedValue  = module.get.choiceValue($selected, selectedText),\n\n                  isFiltered     = $selected.hasClass(className.filtered),\n                  isActive       = $selected.hasClass(className.active),\n                  isUserValue    = $selected.hasClass(className.addition),\n                  shouldAnimate  = (isMultiple && $selectedItem.length == 1)\n                ;\n                if(isMultiple) {\n                  if(!isActive || isUserValue) {\n                    if(settings.apiSettings && settings.saveRemoteData) {\n                      module.save.remoteData(selectedText, selectedValue);\n                    }\n                    if(settings.useLabels) {\n                      module.add.label(selectedValue, selectedText, shouldAnimate);\n                      module.add.value(selectedValue, selectedText, $selected);\n                      module.set.activeItem($selected);\n                      module.filterActive();\n                      module.select.nextAvailable($selectedItem);\n                    }\n                    else {\n                      module.add.value(selectedValue, selectedText, $selected);\n                      module.set.text(module.add.variables(message.count));\n                      module.set.activeItem($selected);\n                    }\n                  }\n                  else if(!isFiltered) {\n                    module.debug('Selected active value, removing label');\n                    module.remove.selected(selectedValue);\n                  }\n                }\n                else {\n                  if(settings.apiSettings && settings.saveRemoteData) {\n                    module.save.remoteData(selectedText, selectedValue);\n                  }\n                  module.set.text(selectedText);\n                  module.set.value(selectedValue, selectedText, $selected);\n                  $selected\n                    .addClass(className.active)\n                    .addClass(className.selected)\n                  ;\n                }\n              })\n            ;\n          },\n        },\n\n        add: {\n          label: function(value, text, shouldAnimate) {\n            var\n              $next  = module.is.searchSelection()\n                ? $search\n                : $text,\n              escapedValue = module.escape.value(value),\n              $label\n            ;\n            if(settings.ignoreCase) {\n              escapedValue = escapedValue.toLowerCase();\n            }\n            $label =  $('<a />')\n              .addClass(className.label)\n              .attr('data-' + metadata.value, escapedValue)\n              .html(templates.label(escapedValue, text, settings.preserveHTML, settings.className))\n            ;\n            $label = settings.onLabelCreate.call($label, escapedValue, text);\n\n            if(module.has.label(value)) {\n              module.debug('User selection already exists, skipping', escapedValue);\n              return;\n            }\n            if(settings.label.variation) {\n              $label.addClass(settings.label.variation);\n            }\n            if(shouldAnimate === true) {\n              module.debug('Animating in label', $label);\n              $label\n                .addClass(className.hidden)\n                .insertBefore($next)\n                .transition({\n                    animation  : settings.label.transition,\n                    debug      : settings.debug,\n                    verbose    : settings.verbose,\n                    duration   : settings.label.duration\n                })\n              ;\n            }\n            else {\n              module.debug('Adding selection label', $label);\n              $label\n                .insertBefore($next)\n              ;\n            }\n          },\n          message: function(message) {\n            var\n              $message = $menu.children(selector.message),\n              html     = settings.templates.message(module.add.variables(message))\n            ;\n            if($message.length > 0) {\n              $message\n                .html(html)\n              ;\n            }\n            else {\n              $message = $('<div/>')\n                .html(html)\n                .addClass(className.message)\n                .appendTo($menu)\n              ;\n            }\n          },\n          optionValue: function(value) {\n            var\n              escapedValue = module.escape.value(value),\n              $option      = $input.find('option[value=\"' + module.escape.string(escapedValue) + '\"]'),\n              hasOption    = ($option.length > 0)\n            ;\n            if(hasOption) {\n              return;\n            }\n            // temporarily disconnect observer\n            module.disconnect.selectObserver();\n            if( module.is.single() ) {\n              module.verbose('Removing previous user addition');\n              $input.find('option.' + className.addition).remove();\n            }\n            $('<option/>')\n              .prop('value', escapedValue)\n              .addClass(className.addition)\n              .html(value)\n              .appendTo($input)\n            ;\n            module.verbose('Adding user addition as an <option>', value);\n            module.observe.select();\n          },\n          userSuggestion: function(value) {\n            var\n              $addition         = $menu.children(selector.addition),\n              $existingItem     = module.get.item(value),\n              alreadyHasValue   = $existingItem && $existingItem.not(selector.addition).length,\n              hasUserSuggestion = $addition.length > 0,\n              html\n            ;\n            if(settings.useLabels && module.has.maxSelections()) {\n              return;\n            }\n            if(value === '' || alreadyHasValue) {\n              $addition.remove();\n              return;\n            }\n            if(hasUserSuggestion) {\n              $addition\n                .data(metadata.value, value)\n                .data(metadata.text, value)\n                .attr('data-' + metadata.value, value)\n                .attr('data-' + metadata.text, value)\n                .removeClass(className.filtered)\n              ;\n              if(!settings.hideAdditions) {\n                html = settings.templates.addition( module.add.variables(message.addResult, value) );\n                $addition\n                  .html(html)\n                ;\n              }\n              module.verbose('Replacing user suggestion with new value', $addition);\n            }\n            else {\n              $addition = module.create.userChoice(value);\n              $addition\n                .prependTo($menu)\n              ;\n              module.verbose('Adding item choice to menu corresponding with user choice addition', $addition);\n            }\n            if(!settings.hideAdditions || module.is.allFiltered()) {\n              $addition\n                .addClass(className.selected)\n                .siblings()\n                .removeClass(className.selected)\n              ;\n            }\n            module.refreshItems();\n          },\n          variables: function(message, term) {\n            var\n              hasCount    = (message.search('{count}') !== -1),\n              hasMaxCount = (message.search('{maxCount}') !== -1),\n              hasTerm     = (message.search('{term}') !== -1),\n              count,\n              query\n            ;\n            module.verbose('Adding templated variables to message', message);\n            if(hasCount) {\n              count  = module.get.selectionCount();\n              message = message.replace('{count}', count);\n            }\n            if(hasMaxCount) {\n              count  = module.get.selectionCount();\n              message = message.replace('{maxCount}', settings.maxSelections);\n            }\n            if(hasTerm) {\n              query   = term || module.get.query();\n              message = message.replace('{term}', query);\n            }\n            return message;\n          },\n          value: function(addedValue, addedText, $selectedItem) {\n            var\n              currentValue = module.get.values(),\n              newValue\n            ;\n            if(module.has.value(addedValue)) {\n              module.debug('Value already selected');\n              return;\n            }\n            if(addedValue === '') {\n              module.debug('Cannot select blank values from multiselect');\n              return;\n            }\n            // extend current array\n            if(Array.isArray(currentValue)) {\n              newValue = currentValue.concat([addedValue]);\n              newValue = module.get.uniqueArray(newValue);\n            }\n            else {\n              newValue = [addedValue];\n            }\n            // add values\n            if( module.has.selectInput() ) {\n              if(module.can.extendSelect()) {\n                module.debug('Adding value to select', addedValue, newValue, $input);\n                module.add.optionValue(addedValue);\n              }\n            }\n            else {\n              newValue = newValue.join(settings.delimiter);\n              module.debug('Setting hidden input to delimited value', newValue, $input);\n            }\n\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('Skipping onadd callback on initial load', settings.onAdd);\n            }\n            else {\n              settings.onAdd.call(element, addedValue, addedText, $selectedItem);\n            }\n            module.set.value(newValue, addedValue, addedText, $selectedItem);\n            module.check.maxSelections();\n          },\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          activeLabel: function() {\n            $module.find(selector.label).removeClass(className.active);\n          },\n          empty: function() {\n            $module.removeClass(className.empty);\n          },\n          loading: function() {\n            $module.removeClass(className.loading);\n          },\n          initialLoad: function() {\n            initialLoad = false;\n          },\n          upward: function($currentMenu) {\n            var $element = $currentMenu || $module;\n            $element.removeClass(className.upward);\n          },\n          leftward: function($currentMenu) {\n            var $element = $currentMenu || $menu;\n            $element.removeClass(className.leftward);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          activeItem: function() {\n            $item.removeClass(className.active);\n          },\n          filteredItem: function() {\n            if(settings.useLabels && module.has.maxSelections() ) {\n              return;\n            }\n            if(settings.useLabels && module.is.multiple()) {\n              $item.not('.' + className.active).removeClass(className.filtered);\n            }\n            else {\n              $item.removeClass(className.filtered);\n            }\n            if(settings.hideDividers) {\n              $divider.removeClass(className.hidden);\n            }\n            module.remove.empty();\n          },\n          optionValue: function(value) {\n            var\n              escapedValue = module.escape.value(value),\n              $option      = $input.find('option[value=\"' + module.escape.string(escapedValue) + '\"]'),\n              hasOption    = ($option.length > 0)\n            ;\n            if(!hasOption || !$option.hasClass(className.addition)) {\n              return;\n            }\n            // temporarily disconnect observer\n            if(selectObserver) {\n              selectObserver.disconnect();\n              module.verbose('Temporarily disconnecting mutation observer');\n            }\n            $option.remove();\n            module.verbose('Removing user addition as an <option>', escapedValue);\n            if(selectObserver) {\n              selectObserver.observe($input[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          },\n          message: function() {\n            $menu.children(selector.message).remove();\n          },\n          searchWidth: function() {\n            $search.css('width', '');\n          },\n          searchTerm: function() {\n            module.verbose('Cleared search term');\n            $search.val('');\n            module.set.filtered();\n          },\n          userAddition: function() {\n            $item.filter(selector.addition).remove();\n          },\n          selected: function(value, $selectedItem) {\n            $selectedItem = (settings.allowAdditions)\n              ? $selectedItem || module.get.itemWithAdditions(value)\n              : $selectedItem || module.get.item(value)\n            ;\n\n            if(!$selectedItem) {\n              return false;\n            }\n\n            $selectedItem\n              .each(function() {\n                var\n                  $selected     = $(this),\n                  selectedText  = module.get.choiceText($selected),\n                  selectedValue = module.get.choiceValue($selected, selectedText)\n                ;\n                if(module.is.multiple()) {\n                  if(settings.useLabels) {\n                    module.remove.value(selectedValue, selectedText, $selected);\n                    module.remove.label(selectedValue);\n                  }\n                  else {\n                    module.remove.value(selectedValue, selectedText, $selected);\n                    if(module.get.selectionCount() === 0) {\n                      module.set.placeholderText();\n                    }\n                    else {\n                      module.set.text(module.add.variables(message.count));\n                    }\n                  }\n                }\n                else {\n                  module.remove.value(selectedValue, selectedText, $selected);\n                }\n                $selected\n                  .removeClass(className.filtered)\n                  .removeClass(className.active)\n                ;\n                if(settings.useLabels) {\n                  $selected.removeClass(className.selected);\n                }\n              })\n            ;\n          },\n          selectedItem: function() {\n            $item.removeClass(className.selected);\n          },\n          value: function(removedValue, removedText, $removedItem) {\n            var\n              values = module.get.values(),\n              newValue\n            ;\n            if( module.has.selectInput() ) {\n              module.verbose('Input is <select> removing selected option', removedValue);\n              newValue = module.remove.arrayValue(removedValue, values);\n              module.remove.optionValue(removedValue);\n            }\n            else {\n              module.verbose('Removing from delimited values', removedValue);\n              newValue = module.remove.arrayValue(removedValue, values);\n              newValue = newValue.join(settings.delimiter);\n            }\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('No callback on initial load', settings.onRemove);\n            }\n            else {\n              settings.onRemove.call(element, removedValue, removedText, $removedItem);\n            }\n            module.set.value(newValue, removedText, $removedItem);\n            module.check.maxSelections();\n          },\n          arrayValue: function(removedValue, values) {\n            if( !Array.isArray(values) ) {\n              values = [values];\n            }\n            values = $.grep(values, function(value){\n              return (removedValue != value);\n            });\n            module.verbose('Removed value from delimited string', removedValue, values);\n            return values;\n          },\n          label: function(value, shouldAnimate) {\n            var\n              $labels       = $module.find(selector.label),\n              $removedLabel = $labels.filter('[data-' + metadata.value + '=\"' + module.escape.string(value) +'\"]')\n            ;\n            module.verbose('Removing label', $removedLabel);\n            $removedLabel.remove();\n          },\n          activeLabels: function($activeLabels) {\n            $activeLabels = $activeLabels || $module.find(selector.label).filter('.' + className.active);\n            module.verbose('Removing active label selections', $activeLabels);\n            module.remove.labels($activeLabels);\n          },\n          labels: function($labels) {\n            $labels = $labels || $module.find(selector.label);\n            module.verbose('Removing labels', $labels);\n            $labels\n              .each(function(){\n                var\n                  $label      = $(this),\n                  value       = $label.data(metadata.value),\n                  stringValue = (value !== undefined)\n                    ? String(value)\n                    : value,\n                  isUserValue = module.is.userValue(stringValue)\n                ;\n                if(settings.onLabelRemove.call($label, value) === false) {\n                  module.debug('Label remove callback cancelled removal');\n                  return;\n                }\n                module.remove.message();\n                if(isUserValue) {\n                  module.remove.value(stringValue);\n                  module.remove.label(stringValue);\n                }\n                else {\n                  // selected will also remove label\n                  module.remove.selected(stringValue);\n                }\n              })\n            ;\n          },\n          tabbable: function() {\n            if( module.is.searchSelection() ) {\n              module.debug('Searchable dropdown initialized');\n              $search\n                .removeAttr('tabindex')\n              ;\n              $menu\n                .removeAttr('tabindex')\n              ;\n            }\n            else {\n              module.debug('Simple selection dropdown initialized');\n              $module\n                .removeAttr('tabindex')\n              ;\n              $menu\n                .removeAttr('tabindex')\n              ;\n            }\n          },\n          diacritics: function(text) {\n            return settings.ignoreDiacritics ?  text.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '') : text;\n          }\n        },\n\n        has: {\n          menuSearch: function() {\n            return (module.has.search() && $search.closest($menu).length > 0);\n          },\n          clearItem: function() {\n            return ($clear.length > 0);\n          },\n          search: function() {\n            return ($search.length > 0);\n          },\n          sizer: function() {\n            return ($sizer.length > 0);\n          },\n          selectInput: function() {\n            return ( $input.is('select') );\n          },\n          minCharacters: function(searchTerm) {\n            if(settings.minCharacters && !iconClicked) {\n              searchTerm = (searchTerm !== undefined)\n                ? String(searchTerm)\n                : String(module.get.query())\n              ;\n              return (searchTerm.length >= settings.minCharacters);\n            }\n            iconClicked=false;\n            return true;\n          },\n          firstLetter: function($item, letter) {\n            var\n              text,\n              firstLetter\n            ;\n            if(!$item || $item.length === 0 || typeof letter !== 'string') {\n              return false;\n            }\n            text        = module.get.choiceText($item, false);\n            letter      = letter.toLowerCase();\n            firstLetter = String(text).charAt(0).toLowerCase();\n            return (letter == firstLetter);\n          },\n          input: function() {\n            return ($input.length > 0);\n          },\n          items: function() {\n            return ($item.length > 0);\n          },\n          menu: function() {\n            return ($menu.length > 0);\n          },\n          message: function() {\n            return ($menu.children(selector.message).length !== 0);\n          },\n          label: function(value) {\n            var\n              escapedValue = module.escape.value(value),\n              $labels      = $module.find(selector.label)\n            ;\n            if(settings.ignoreCase) {\n              escapedValue = escapedValue.toLowerCase();\n            }\n            return ($labels.filter('[data-' + metadata.value + '=\"' + module.escape.string(escapedValue) +'\"]').length > 0);\n          },\n          maxSelections: function() {\n            return (settings.maxSelections && module.get.selectionCount() >= settings.maxSelections);\n          },\n          allResultsFiltered: function() {\n            var\n              $normalResults = $item.not(selector.addition)\n            ;\n            return ($normalResults.filter(selector.unselectable).length === $normalResults.length);\n          },\n          userSuggestion: function() {\n            return ($menu.children(selector.addition).length > 0);\n          },\n          query: function() {\n            return (module.get.query() !== '');\n          },\n          value: function(value) {\n            return (settings.ignoreCase)\n              ? module.has.valueIgnoringCase(value)\n              : module.has.valueMatchingCase(value)\n            ;\n          },\n          valueMatchingCase: function(value) {\n            var\n              values   = module.get.values(),\n              hasValue = Array.isArray(values)\n               ? values && ($.inArray(value, values) !== -1)\n               : (values == value)\n            ;\n            return (hasValue)\n              ? true\n              : false\n            ;\n          },\n          valueIgnoringCase: function(value) {\n            var\n              values   = module.get.values(),\n              hasValue = false\n            ;\n            if(!Array.isArray(values)) {\n              values = [values];\n            }\n            $.each(values, function(index, existingValue) {\n              if(String(value).toLowerCase() == String(existingValue).toLowerCase()) {\n                hasValue = true;\n                return false;\n              }\n            });\n            return hasValue;\n          }\n        },\n\n        is: {\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          animatingInward: function() {\n            return $menu.transition('is inward');\n          },\n          animatingOutward: function() {\n            return $menu.transition('is outward');\n          },\n          bubbledLabelClick: function(event) {\n            return $(event.target).is('select, input') && $module.closest('label').length > 0;\n          },\n          bubbledIconClick: function(event) {\n            return $(event.target).closest($icon).length > 0;\n          },\n          alreadySetup: function() {\n            return ($module.is('select') && $module.parent(selector.dropdown).data(moduleNamespace) !== undefined && $module.prev().length === 0);\n          },\n          animating: function($subMenu) {\n            return ($subMenu)\n              ? $subMenu.transition && $subMenu.transition('is animating')\n              : $menu.transition    && $menu.transition('is animating')\n            ;\n          },\n          leftward: function($subMenu) {\n            var $selectedMenu = $subMenu || $menu;\n            return $selectedMenu.hasClass(className.leftward);\n          },\n          clearable: function() {\n            return ($module.hasClass(className.clearable) || settings.clearable);\n          },\n          disabled: function() {\n            return $module.hasClass(className.disabled);\n          },\n          focused: function() {\n            return (document.activeElement === $module[0]);\n          },\n          focusedOnSearch: function() {\n            return (document.activeElement === $search[0]);\n          },\n          allFiltered: function() {\n            return( (module.is.multiple() || module.has.search()) && !(settings.hideAdditions == false && module.has.userSuggestion()) && !module.has.message() && module.has.allResultsFiltered() );\n          },\n          hidden: function($subMenu) {\n            return !module.is.visible($subMenu);\n          },\n          initialLoad: function() {\n            return initialLoad;\n          },\n          inObject: function(needle, object) {\n            var\n              found = false\n            ;\n            $.each(object, function(index, property) {\n              if(property == needle) {\n                found = true;\n                return true;\n              }\n            });\n            return found;\n          },\n          multiple: function() {\n            return $module.hasClass(className.multiple);\n          },\n          remote: function() {\n            return settings.apiSettings && module.can.useAPI();\n          },\n          single: function() {\n            return !module.is.multiple();\n          },\n          selectMutation: function(mutations) {\n            var\n              selectChanged = false\n            ;\n            $.each(mutations, function(index, mutation) {\n              if($(mutation.target).is('select') || $(mutation.addedNodes).is('select')) {\n                selectChanged = true;\n                return false;\n              }\n            });\n            return selectChanged;\n          },\n          search: function() {\n            return $module.hasClass(className.search);\n          },\n          searchSelection: function() {\n            return ( module.has.search() && $search.parent(selector.dropdown).length === 1 );\n          },\n          selection: function() {\n            return $module.hasClass(className.selection);\n          },\n          userValue: function(value) {\n            return ($.inArray(value, module.get.userValues()) !== -1);\n          },\n          upward: function($menu) {\n            var $element = $menu || $module;\n            return $element.hasClass(className.upward);\n          },\n          visible: function($subMenu) {\n            return ($subMenu)\n              ? $subMenu.hasClass(className.visible)\n              : $menu.hasClass(className.visible)\n            ;\n          },\n          verticallyScrollableContext: function() {\n            var\n              overflowY = ($context.get(0) !== window)\n                ? $context.css('overflow-y')\n                : false\n            ;\n            return (overflowY == 'auto' || overflowY == 'scroll');\n          },\n          horizontallyScrollableContext: function() {\n            var\n              overflowX = ($context.get(0) !== window)\n                ? $context.css('overflow-X')\n                : false\n            ;\n            return (overflowX == 'auto' || overflowX == 'scroll');\n          }\n        },\n\n        can: {\n          activate: function($item) {\n            if(settings.useLabels) {\n              return true;\n            }\n            if(!module.has.maxSelections()) {\n              return true;\n            }\n            if(module.has.maxSelections() && $item.hasClass(className.active)) {\n              return true;\n            }\n            return false;\n          },\n          openDownward: function($subMenu) {\n            var\n              $currentMenu    = $subMenu || $menu,\n              canOpenDownward = true,\n              onScreen        = {},\n              calculations\n            ;\n            $currentMenu\n              .addClass(className.loading)\n            ;\n            calculations = {\n              context: {\n                offset    : ($context.get(0) === window)\n                  ? { top: 0, left: 0}\n                  : $context.offset(),\n                scrollTop : $context.scrollTop(),\n                height    : $context.outerHeight()\n              },\n              menu : {\n                offset: $currentMenu.offset(),\n                height: $currentMenu.outerHeight()\n              }\n            };\n            if(module.is.verticallyScrollableContext()) {\n              calculations.menu.offset.top += calculations.context.scrollTop;\n            }\n            onScreen = {\n              above : (calculations.context.scrollTop) <= calculations.menu.offset.top - calculations.context.offset.top - calculations.menu.height,\n              below : (calculations.context.scrollTop + calculations.context.height) >= calculations.menu.offset.top - calculations.context.offset.top + calculations.menu.height\n            };\n            if(onScreen.below) {\n              module.verbose('Dropdown can fit in context downward', onScreen);\n              canOpenDownward = true;\n            }\n            else if(!onScreen.below && !onScreen.above) {\n              module.verbose('Dropdown cannot fit in either direction, favoring downward', onScreen);\n              canOpenDownward = true;\n            }\n            else {\n              module.verbose('Dropdown cannot fit below, opening upward', onScreen);\n              canOpenDownward = false;\n            }\n            $currentMenu.removeClass(className.loading);\n            return canOpenDownward;\n          },\n          openRightward: function($subMenu) {\n            var\n              $currentMenu     = $subMenu || $menu,\n              canOpenRightward = true,\n              isOffscreenRight = false,\n              calculations\n            ;\n            $currentMenu\n              .addClass(className.loading)\n            ;\n            calculations = {\n              context: {\n                offset     : ($context.get(0) === window)\n                  ? { top: 0, left: 0}\n                  : $context.offset(),\n                scrollLeft : $context.scrollLeft(),\n                width      : $context.outerWidth()\n              },\n              menu: {\n                offset : $currentMenu.offset(),\n                width  : $currentMenu.outerWidth()\n              }\n            };\n            if(module.is.horizontallyScrollableContext()) {\n              calculations.menu.offset.left += calculations.context.scrollLeft;\n            }\n            isOffscreenRight = (calculations.menu.offset.left - calculations.context.offset.left + calculations.menu.width >= calculations.context.scrollLeft + calculations.context.width);\n            if(isOffscreenRight) {\n              module.verbose('Dropdown cannot fit in context rightward', isOffscreenRight);\n              canOpenRightward = false;\n            }\n            $currentMenu.removeClass(className.loading);\n            return canOpenRightward;\n          },\n          click: function() {\n            return (hasTouch || settings.on == 'click');\n          },\n          extendSelect: function() {\n            return settings.allowAdditions || settings.apiSettings;\n          },\n          show: function() {\n            return !module.is.disabled() && (module.has.items() || module.has.message());\n          },\n          useAPI: function() {\n            return $.fn.api !== undefined;\n          }\n        },\n\n        animate: {\n          show: function(callback, $subMenu) {\n            var\n              $currentMenu = $subMenu || $menu,\n              start = ($subMenu)\n                ? function() {}\n                : function() {\n                  module.hideSubMenus();\n                  module.hideOthers();\n                  module.set.active();\n                },\n              transition\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            module.verbose('Doing menu show animation', $currentMenu);\n            module.set.direction($subMenu);\n            transition = module.get.transition($subMenu);\n            if( module.is.selection() ) {\n              module.set.scrollPosition(module.get.selectedItem(), true);\n            }\n            if( module.is.hidden($currentMenu) || module.is.animating($currentMenu) ) {\n              if(transition == 'none') {\n                start();\n                $currentMenu.transition('show');\n                callback.call(element);\n              }\n              else if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $currentMenu\n                  .transition({\n                    animation  : transition + ' in',\n                    debug      : settings.debug,\n                    verbose    : settings.verbose,\n                    duration   : settings.duration,\n                    queue      : true,\n                    onStart    : start,\n                    onComplete : function() {\n                      callback.call(element);\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.noTransition, transition);\n              }\n            }\n          },\n          hide: function(callback, $subMenu) {\n            var\n              $currentMenu = $subMenu || $menu,\n              start = ($subMenu)\n                ? function() {}\n                : function() {\n                  if( module.can.click() ) {\n                    module.unbind.intent();\n                  }\n                  module.remove.active();\n                },\n              transition = module.get.transition($subMenu)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if( module.is.visible($currentMenu) || module.is.animating($currentMenu) ) {\n              module.verbose('Doing menu hide animation', $currentMenu);\n\n              if(transition == 'none') {\n                start();\n                $currentMenu.transition('hide');\n                callback.call(element);\n              }\n              else if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $currentMenu\n                  .transition({\n                    animation  : transition + ' out',\n                    duration   : settings.duration,\n                    debug      : settings.debug,\n                    verbose    : settings.verbose,\n                    queue      : false,\n                    onStart    : start,\n                    onComplete : function() {\n                      callback.call(element);\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.transition);\n              }\n            }\n          }\n        },\n\n        hideAndClear: function() {\n          module.remove.searchTerm();\n          if( module.has.maxSelections() ) {\n            return;\n          }\n          if(module.has.search()) {\n            module.hide(function() {\n              module.remove.filteredItem();\n            });\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        delay: {\n          show: function() {\n            module.verbose('Delaying show event to ensure user intent');\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.show, settings.delay.show);\n          },\n          hide: function() {\n            module.verbose('Delaying hide event to ensure user intent');\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.hide, settings.delay.hide);\n          }\n        },\n\n        escape: {\n          value: function(value) {\n            var\n              multipleValues = Array.isArray(value),\n              stringValue    = (typeof value === 'string'),\n              isUnparsable   = (!stringValue && !multipleValues),\n              hasQuotes      = (stringValue && value.search(regExp.quote) !== -1),\n              values         = []\n            ;\n            if(isUnparsable || !hasQuotes) {\n              return value;\n            }\n            module.debug('Encoding quote values for use in select', value);\n            if(multipleValues) {\n              $.each(value, function(index, value){\n                values.push(value.replace(regExp.quote, '&quot;'));\n              });\n              return values;\n            }\n            return value.replace(regExp.quote, '&quot;');\n          },\n          string: function(text) {\n            text =  String(text);\n            return text.replace(regExp.escape, '\\\\$&');\n          },\n          htmlEntities: function(string) {\n              var\n                  badChars     = /[&<>\"'`]/g,\n                  shouldEscape = /[&<>\"'`]/,\n                  escape       = {\n                      \"&\": \"&amp;\",\n                      \"<\": \"&lt;\",\n                      \">\": \"&gt;\",\n                      '\"': \"&quot;\",\n                      \"'\": \"&#x27;\",\n                      \"`\": \"&#x60;\"\n                  },\n                  escapedChar  = function(chr) {\n                      return escape[chr];\n                  }\n              ;\n              if(shouldEscape.test(string)) {\n                  return string.replace(badChars, escapedChar);\n              }\n              return string;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if(Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : $allModules\n  ;\n};\n\n$.fn.dropdown.settings = {\n\n  silent                 : false,\n  debug                  : false,\n  verbose                : false,\n  performance            : true,\n\n  on                     : 'click',    // what event should show menu action on item selection\n  action                 : 'activate', // action on item selection (nothing, activate, select, combo, hide, function(){})\n\n  values                 : false,      // specify values to use for dropdown\n\n  clearable              : false,      // whether the value of the dropdown can be cleared\n\n  apiSettings            : false,\n  selectOnKeydown        : true,       // Whether selection should occur automatically when keyboard shortcuts used\n  minCharacters          : 0,          // Minimum characters required to trigger API call\n\n  filterRemoteData       : false,      // Whether API results should be filtered after being returned for query term\n  saveRemoteData         : true,       // Whether remote name/value pairs should be stored in sessionStorage to allow remote data to be restored on page refresh\n\n  throttle               : 200,        // How long to wait after last user input to search remotely\n\n  context                : window,     // Context to use when determining if on screen\n  direction              : 'auto',     // Whether dropdown should always open in one direction\n  keepOnScreen           : true,       // Whether dropdown should check whether it is on screen before showing\n\n  match                  : 'both',     // what to match against with search selection (both, text, or label)\n  fullTextSearch         : false,      // search anywhere in value (set to 'exact' to require exact matches)\n  ignoreDiacritics       : false,      // match results also if they contain diacritics of the same base character (for example searching for \"a\" will also match \"á\" or \"â\" or \"à\", etc...)\n  hideDividers           : false,      // Whether to hide any divider elements (specified in selector.divider) that are sibling to any items when searched (set to true will hide all dividers, set to 'empty' will hide them when they are not followed by a visible item)\n\n  placeholder            : 'auto',     // whether to convert blank <select> values to placeholder text\n  preserveHTML           : true,       // preserve html when selecting value\n  sortSelect             : false,      // sort selection on init\n\n  forceSelection         : true,       // force a choice on blur with search selection\n\n  allowAdditions         : false,      // whether multiple select should allow user added values\n  ignoreCase             : false,       // whether to consider values not matching in case to be the same\n  hideAdditions          : true,       // whether or not to hide special message prompting a user they can enter a value\n\n  maxSelections          : false,      // When set to a number limits the number of selections to this count\n  useLabels              : true,       // whether multiple select should filter currently active selections from choices\n  delimiter              : ',',        // when multiselect uses normal <input> the values will be delimited with this character\n\n  showOnFocus            : true,       // show menu on focus\n  allowReselection       : false,      // whether current value should trigger callbacks when reselected\n  allowTab               : true,       // add tabindex to element\n  allowCategorySelection : false,      // allow elements with sub-menus to be selected\n\n  fireOnInit             : false,      // Whether callbacks should fire when initializing dropdown values\n\n  transition             : 'auto',     // auto transition will slide down or up based on direction\n  duration               : 200,        // duration of transition\n\n  glyphWidth             : 1.037,      // widest glyph width in em (W is 1.037 em) used to calculate multiselect input width\n\n  // label settings on multi-select\n  label: {\n    transition : 'scale',\n    duration   : 200,\n    variation  : false\n  },\n\n  // delay before event\n  delay : {\n    hide   : 300,\n    show   : 200,\n    search : 20,\n    touch  : 50\n  },\n\n  /* Callbacks */\n  onChange      : function(value, text, $selected){},\n  onAdd         : function(value, text, $selected){},\n  onRemove      : function(value, text, $selected){},\n\n  onLabelSelect : function($selectedLabels){},\n  onLabelCreate : function(value, text) { return $(this); },\n  onLabelRemove : function(value) { return true; },\n  onNoResults   : function(searchTerm) { return true; },\n  onShow        : function(){},\n  onHide        : function(){},\n\n  /* Component */\n  name           : 'Dropdown',\n  namespace      : 'dropdown',\n\n  message: {\n    addResult     : 'Add <b>{term}</b>',\n    count         : '{count} selected',\n    maxSelections : 'Max {maxCount} selections',\n    noResults     : 'No results found.',\n    serverError   : 'There was an error contacting the server'\n  },\n\n  error : {\n    action          : 'You called a dropdown action that was not defined',\n    alreadySetup    : 'Once a select has been initialized behaviors must be called on the created ui dropdown',\n    labels          : 'Allowing user additions currently requires the use of labels.',\n    missingMultiple : '<select> requires multiple property to be set to correctly preserve multiple values',\n    method          : 'The method you called is not defined.',\n    noAPI           : 'The API module is required to load resources remotely',\n    noStorage       : 'Saving remote data requires session storage',\n    noTransition    : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>',\n    noNormalize     : '\"ignoreDiacritics\" setting will be ignored. Browser does not support String().normalize(). You may consider including <https://cdn.jsdelivr.net/npm/unorm@1.4.1/lib/unorm.min.js> as a polyfill.'\n  },\n\n  regExp : {\n    escape   : /[-[\\]{}()*+?.,\\\\^$|#\\s:=@]/g,\n    quote    : /\"/g\n  },\n\n  metadata : {\n    defaultText     : 'defaultText',\n    defaultValue    : 'defaultValue',\n    placeholderText : 'placeholder',\n    text            : 'text',\n    value           : 'value'\n  },\n\n  // property names for remote query\n  fields: {\n    remoteValues : 'results',  // grouping for api results\n    values       : 'values',   // grouping for all dropdown values\n    disabled     : 'disabled', // whether value should be disabled\n    name         : 'name',     // displayed dropdown text\n    value        : 'value',    // actual dropdown value\n    text         : 'text',     // displayed text when selected\n    type         : 'type'      // type of dropdown element\n  },\n\n  keys : {\n    backspace  : 8,\n    delimiter  : 188, // comma\n    deleteKey  : 46,\n    enter      : 13,\n    escape     : 27,\n    pageUp     : 33,\n    pageDown   : 34,\n    leftArrow  : 37,\n    upArrow    : 38,\n    rightArrow : 39,\n    downArrow  : 40\n  },\n\n  selector : {\n    addition     : '.addition',\n    divider      : '.divider, .header',\n    dropdown     : '.ui.dropdown',\n    hidden       : '.hidden',\n    icon         : '> .dropdown.icon',\n    input        : '> input[type=\"hidden\"], > select',\n    item         : '.item',\n    label        : '> .label',\n    remove       : '> .label > .delete.icon',\n    siblingLabel : '.label',\n    menu         : '.menu',\n    message      : '.message',\n    menuIcon     : '.dropdown.icon',\n    search       : 'input.search, .menu > .search > input, .menu input.search',\n    sizer        : '> input.sizer',\n    text         : '> .text:not(.icon)',\n    unselectable : '.disabled, .filtered',\n    clearIcon    : '> .remove.icon'\n  },\n\n  className : {\n    active      : 'active',\n    addition    : 'addition',\n    animating   : 'animating',\n    disabled    : 'disabled',\n    empty       : 'empty',\n    dropdown    : 'ui dropdown',\n    filtered    : 'filtered',\n    hidden      : 'hidden transition',\n    item        : 'item',\n    label       : 'ui label',\n    loading     : 'loading',\n    menu        : 'menu',\n    message     : 'message',\n    multiple    : 'multiple',\n    placeholder : 'default',\n    sizer       : 'sizer',\n    search      : 'search',\n    selected    : 'selected',\n    selection   : 'selection',\n    upward      : 'upward',\n    leftward    : 'left',\n    visible     : 'visible',\n    clearable   : 'clearable',\n    noselection : 'noselection',\n    delete      : 'delete'\n  }\n\n};\n\n/* Templates */\n$.fn.dropdown.settings.templates = {\n  escape: function(string, preserveHTML) {\n    if (preserveHTML){\n      return string;\n    }\n    var\n        badChars     = /[&<>\"'`]/g,\n        shouldEscape = /[&<>\"'`]/,\n        escape       = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#x27;\",\n          \"`\": \"&#x60;\"\n        },\n        escapedChar  = function(chr) {\n          return escape[chr];\n        }\n    ;\n    if(shouldEscape.test(string)) {\n      return string.replace(badChars, escapedChar);\n    }\n    return string;\n  },\n  // generates dropdown from select values\n  dropdown: function(select, preserveHTML, className) {\n    var\n      placeholder = select.placeholder || false,\n      values      = select.values || [],\n      html        = '',\n      escape = $.fn.dropdown.settings.templates.escape\n    ;\n    html +=  '<i class=\"dropdown icon\"></i>';\n    if(placeholder) {\n      html += '<div class=\"default text\">' + escape(placeholder,preserveHTML) + '</div>';\n    }\n    else {\n      html += '<div class=\"text\"></div>';\n    }\n    html += '<div class=\"'+className.menu+'\">';\n    $.each(values, function(index, option) {\n      html += '<div class=\"'+(option.disabled ? className.disabled+' ':'')+className.item+'\" data-value=\"' + String(option.value).replace(/\"/g,\"\") + '\">' + escape(option.name,preserveHTML) + '</div>';\n    });\n    html += '</div>';\n    return html;\n  },\n\n  // generates just menu from select\n  menu: function(response, fields, preserveHTML, className) {\n    var\n      values = response[fields.values] || [],\n      html   = '',\n      escape = $.fn.dropdown.settings.templates.escape\n    ;\n    $.each(values, function(index, option) {\n      var\n        itemType = (option[fields.type])\n          ? option[fields.type]\n          : 'item'\n      ;\n\n      if( itemType === 'item' ) {\n        var\n          maybeText = (option[fields.text])\n            ? ' data-text=\"' + String(option[fields.text]).replace(/\"/g,\"\") + '\"'\n            : '',\n          maybeDisabled = (option[fields.disabled])\n            ? className.disabled+' '\n            : ''\n        ;\n        html += '<div class=\"'+ maybeDisabled + className.item+'\" data-value=\"' + String(option[fields.value]).replace(/\"/g,\"\") + '\"' + maybeText + '>';\n        html +=   escape(option[fields.name],preserveHTML);\n        html += '</div>';\n      } else if (itemType === 'header') {\n        html += '<div class=\"header\">';\n        html +=   escape(option[fields.name],preserveHTML);\n        html += '</div>';\n      }\n    });\n    return html;\n  },\n\n  // generates label for multiselect\n  label: function(value, text, preserveHTML, className) {\n    var\n        escape = $.fn.dropdown.settings.templates.escape;\n    return escape(text,preserveHTML) + '<i class=\"'+className.delete+' icon\"></i>';\n  },\n\n\n  // generates messages like \"No results\"\n  message: function(message) {\n    return message;\n  },\n\n  // generates user addition to selection menu\n  addition: function(choice) {\n    return choice;\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Fomantic-UI - Embed\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.isFunction = $.isFunction || function(obj) {\n  return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.embed = function(parameters) {\n\n  var\n    $allModules     = $(this),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.embed.settings, parameters)\n          : $.extend({}, $.fn.embed.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        sources         = settings.sources,\n        error           = settings.error,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        templates       = settings.templates,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $placeholder    = $module.find(selector.placeholder),\n        $icon           = $module.find(selector.icon),\n        $embed          = $module.find(selector.embed),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing embed');\n          module.determine.autoplay();\n          module.create();\n          module.bind.events();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance of embed');\n          module.reset();\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $placeholder = $module.find(selector.placeholder);\n          $icon        = $module.find(selector.icon);\n          $embed       = $module.find(selector.embed);\n        },\n\n        bind: {\n          events: function() {\n            if( module.has.placeholder() ) {\n              module.debug('Adding placeholder events');\n              $module\n                .on('click' + eventNamespace, selector.placeholder, module.createAndShow)\n                .on('click' + eventNamespace, selector.icon, module.createAndShow)\n              ;\n            }\n          }\n        },\n\n        create: function() {\n          var\n            placeholder = module.get.placeholder()\n          ;\n          if(placeholder) {\n            module.createPlaceholder();\n          }\n          else {\n            module.createAndShow();\n          }\n        },\n\n        createPlaceholder: function(placeholder) {\n          var\n            icon  = module.get.icon(),\n            url   = module.get.url(),\n            embed = module.generate.embed(url)\n          ;\n          placeholder = placeholder || module.get.placeholder();\n          $module.html( templates.placeholder(placeholder, icon) );\n          module.debug('Creating placeholder for embed', placeholder, icon);\n        },\n\n        createEmbed: function(url) {\n          module.refresh();\n          url = url || module.get.url();\n          $embed = $('<div/>')\n            .addClass(className.embed)\n            .html( module.generate.embed(url) )\n            .appendTo($module)\n          ;\n          settings.onCreate.call(element, url);\n          module.debug('Creating embed object', $embed);\n        },\n\n        changeEmbed: function(url) {\n          $embed\n            .html( module.generate.embed(url) )\n          ;\n        },\n\n        createAndShow: function() {\n          module.createEmbed();\n          module.show();\n        },\n\n        // sets new embed\n        change: function(source, id, url) {\n          module.debug('Changing video to ', source, id, url);\n          $module\n            .data(metadata.source, source)\n            .data(metadata.id, id)\n          ;\n          if(url) {\n            $module.data(metadata.url, url);\n          }\n          else {\n            $module.removeData(metadata.url);\n          }\n          if(module.has.embed()) {\n            module.changeEmbed();\n          }\n          else {\n            module.create();\n          }\n        },\n\n        // clears embed\n        reset: function() {\n          module.debug('Clearing embed and showing placeholder');\n          module.remove.data();\n          module.remove.active();\n          module.remove.embed();\n          module.showPlaceholder();\n          settings.onReset.call(element);\n        },\n\n        // shows current embed\n        show: function() {\n          module.debug('Showing embed');\n          module.set.active();\n          settings.onDisplay.call(element);\n        },\n\n        hide: function() {\n          module.debug('Hiding embed');\n          module.showPlaceholder();\n        },\n\n        showPlaceholder: function() {\n          module.debug('Showing placeholder image');\n          module.remove.active();\n          settings.onPlaceholderDisplay.call(element);\n        },\n\n        get: {\n          id: function() {\n            return settings.id || $module.data(metadata.id);\n          },\n          placeholder: function() {\n            return settings.placeholder || $module.data(metadata.placeholder);\n          },\n          icon: function() {\n            return (settings.icon)\n              ? settings.icon\n              : ($module.data(metadata.icon) !== undefined)\n                ? $module.data(metadata.icon)\n                : module.determine.icon()\n            ;\n          },\n          source: function(url) {\n            return (settings.source)\n              ? settings.source\n              : ($module.data(metadata.source) !== undefined)\n                ? $module.data(metadata.source)\n                : module.determine.source()\n            ;\n          },\n          type: function() {\n            var source = module.get.source();\n            return (sources[source] !== undefined)\n              ? sources[source].type\n              : false\n            ;\n          },\n          url: function() {\n            return (settings.url)\n              ? settings.url\n              : ($module.data(metadata.url) !== undefined)\n                ? $module.data(metadata.url)\n                : module.determine.url()\n            ;\n          }\n        },\n\n        determine: {\n          autoplay: function() {\n            if(module.should.autoplay()) {\n              settings.autoplay = true;\n            }\n          },\n          source: function(url) {\n            var\n              matchedSource = false\n            ;\n            url = url || module.get.url();\n            if(url) {\n              $.each(sources, function(name, source) {\n                if(url.search(source.domain) !== -1) {\n                  matchedSource = name;\n                  return false;\n                }\n              });\n            }\n            return matchedSource;\n          },\n          icon: function() {\n            var\n              source = module.get.source()\n            ;\n            return (sources[source] !== undefined)\n              ? sources[source].icon\n              : false\n            ;\n          },\n          url: function() {\n            var\n              id     = settings.id     || $module.data(metadata.id),\n              source = settings.source || $module.data(metadata.source),\n              url\n            ;\n            url = (sources[source] !== undefined)\n              ? sources[source].url.replace('{id}', id)\n              : false\n            ;\n            if(url) {\n              $module.data(metadata.url, url);\n            }\n            return url;\n          }\n        },\n\n\n        set: {\n          active: function() {\n            $module.addClass(className.active);\n          }\n        },\n\n        remove: {\n          data: function() {\n            $module\n              .removeData(metadata.id)\n              .removeData(metadata.icon)\n              .removeData(metadata.placeholder)\n              .removeData(metadata.source)\n              .removeData(metadata.url)\n            ;\n          },\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          embed: function() {\n            $embed.empty();\n          }\n        },\n\n        encode: {\n          parameters: function(parameters) {\n            var\n              urlString = [],\n              index\n            ;\n            for (index in parameters) {\n              urlString.push( encodeURIComponent(index) + '=' + encodeURIComponent( parameters[index] ) );\n            }\n            return urlString.join('&amp;');\n          }\n        },\n\n        generate: {\n          embed: function(url) {\n            module.debug('Generating embed html');\n            var\n              source = module.get.source(),\n              html,\n              parameters\n            ;\n            url = module.get.url(url);\n            if(url) {\n              parameters = module.generate.parameters(source);\n              html       = templates.iframe(url, parameters);\n            }\n            else {\n              module.error(error.noURL, $module);\n            }\n            return html;\n          },\n          parameters: function(source, extraParameters) {\n            var\n              parameters = (sources[source] && sources[source].parameters !== undefined)\n                ? sources[source].parameters(settings)\n                : {}\n            ;\n            extraParameters = extraParameters || settings.parameters;\n            if(extraParameters) {\n              parameters = $.extend({}, parameters, extraParameters);\n            }\n            parameters = settings.onEmbed(parameters);\n            return module.encode.parameters(parameters);\n          }\n        },\n\n        has: {\n          embed: function() {\n            return ($embed.length > 0);\n          },\n          placeholder: function() {\n            return settings.placeholder || $module.data(metadata.placeholder);\n          }\n        },\n\n        should: {\n          autoplay: function() {\n            return (settings.autoplay === 'auto')\n              ? (settings.placeholder || $module.data(metadata.placeholder) !== undefined)\n              : settings.autoplay\n            ;\n          }\n        },\n\n        is: {\n          video: function() {\n            return module.get.type() == 'video';\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if(Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.embed.settings = {\n\n  name        : 'Embed',\n  namespace   : 'embed',\n\n  silent      : false,\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  icon     : false,\n  source   : false,\n  url      : false,\n  id       : false,\n\n  // standard video settings\n  autoplay  : 'auto',\n  color     : '#444444',\n  hd        : true,\n  brandedUI : false,\n\n  // additional parameters to include with the embed\n  parameters: false,\n\n  onDisplay            : function() {},\n  onPlaceholderDisplay : function() {},\n  onReset              : function() {},\n  onCreate             : function(url) {},\n  onEmbed              : function(parameters) {\n    return parameters;\n  },\n\n  metadata    : {\n    id          : 'id',\n    icon        : 'icon',\n    placeholder : 'placeholder',\n    source      : 'source',\n    url         : 'url'\n  },\n\n  error : {\n    noURL  : 'No URL specified',\n    method : 'The method you called is not defined'\n  },\n\n  className : {\n    active : 'active',\n    embed  : 'embed'\n  },\n\n  selector : {\n    embed       : '.embed',\n    placeholder : '.placeholder',\n    icon        : '.icon'\n  },\n\n  sources: {\n    youtube: {\n      name   : 'youtube',\n      type   : 'video',\n      icon   : 'video play',\n      domain : 'youtube.com',\n      url    : '//www.youtube.com/embed/{id}',\n      parameters: function(settings) {\n        return {\n          autohide       : !settings.brandedUI,\n          autoplay       : settings.autoplay,\n          color          : settings.color || undefined,\n          hq             : settings.hd,\n          jsapi          : settings.api,\n          modestbranding : !settings.brandedUI\n        };\n      }\n    },\n    vimeo: {\n      name   : 'vimeo',\n      type   : 'video',\n      icon   : 'video play',\n      domain : 'vimeo.com',\n      url    : '//player.vimeo.com/video/{id}',\n      parameters: function(settings) {\n        return {\n          api      : settings.api,\n          autoplay : settings.autoplay,\n          byline   : settings.brandedUI,\n          color    : settings.color || undefined,\n          portrait : settings.brandedUI,\n          title    : settings.brandedUI\n        };\n      }\n    }\n  },\n\n  templates: {\n    iframe : function(url, parameters) {\n      var src = url;\n      if (parameters) {\n          src += '?' + parameters;\n      }\n      return ''\n        + '<iframe src=\"' + src + '\"'\n        + ' width=\"100%\" height=\"100%\"'\n        + ' webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>'\n      ;\n    },\n    placeholder : function(image, icon) {\n      var\n        html = ''\n      ;\n      if(icon) {\n        html += '<i class=\"' + icon + ' icon\"></i>';\n      }\n      if(image) {\n        html += '<img class=\"placeholder\" src=\"' + image + '\">';\n      }\n      return html;\n    }\n  },\n\n  // NOT YET IMPLEMENTED\n  api     : false,\n  onPause : function() {},\n  onPlay  : function() {},\n  onStop  : function() {}\n\n};\n\n\n\n})( jQuery, window, document );\n\n/*!\n * # Fomantic-UI - Modal\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n'use strict';\n\n$.isFunction = $.isFunction || function(obj) {\n  return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.modal = function(parameters) {\n  var\n    $allModules    = $(this),\n    $window        = $(window),\n    $document      = $(document),\n    $body          = $('body'),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings    = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.modal.settings, parameters)\n          : $.extend({}, $.fn.modal.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n        $close          = $module.find(selector.close),\n\n        $allModals,\n        $otherModals,\n        $focusedElement,\n        $dimmable,\n        $dimmer,\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        ignoreRepeatedEvents = false,\n\n        initialMouseDownInModal,\n        initialMouseDownInScrollbar,\n        initialBodyMargin = '',\n\n        elementEventNamespace,\n        id,\n        observer,\n        module\n      ;\n      module  = {\n\n        initialize: function() {\n          module.verbose('Initializing dimmer', $context);\n\n          module.create.id();\n          module.create.dimmer();\n\n          if ( settings.allowMultiple ) {\n            module.create.innerDimmer();\n          }\n          if (!settings.centered){\n            $module.addClass('top aligned');\n          }\n          module.refreshModals();\n\n          module.bind.events();\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of modal');\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        create: {\n          dimmer: function() {\n            var\n              defaultSettings = {\n                debug      : settings.debug,\n                dimmerName : 'modals'\n              },\n              dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings)\n            ;\n            if($.fn.dimmer === undefined) {\n              module.error(error.dimmer);\n              return;\n            }\n            module.debug('Creating dimmer');\n            $dimmable = $context.dimmer(dimmerSettings);\n            if(settings.detachable) {\n              module.verbose('Modal is detachable, moving content into dimmer');\n              $dimmable.dimmer('add content', $module);\n            }\n            else {\n              module.set.undetached();\n            }\n            $dimmer = $dimmable.dimmer('get dimmer');\n          },\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2, 8);\n            elementEventNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          },\n          innerDimmer: function() {\n            if ( $module.find(selector.dimmer).length == 0 ) {\n              $module.prepend('<div class=\"ui inverted dimmer\"></div>');\n            }\n          }\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous modal');\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n          $window.off(elementEventNamespace);\n          $dimmer.off(elementEventNamespace);\n          $close.off(eventNamespace);\n          $context.dimmer('destroy');\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, refreshing');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        refresh: function() {\n          module.remove.scrolling();\n          module.cacheSizes();\n          if(!module.can.useFlex()) {\n            module.set.modalOffset();\n          }\n          module.set.screenHeight();\n          module.set.type();\n        },\n\n        refreshModals: function() {\n          $otherModals = $module.siblings(selector.modal);\n          $allModals   = $otherModals.add($module);\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $toggle = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($toggle.length > 0) {\n            module.debug('Attaching modal events to element', selector, event);\n            $toggle\n              .off(eventNamespace)\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound, selector);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Attaching events');\n            $module\n              .on('click' + eventNamespace, selector.close, module.event.close)\n              .on('click' + eventNamespace, selector.approve, module.event.approve)\n              .on('click' + eventNamespace, selector.deny, module.event.deny)\n            ;\n            $window\n              .on('resize' + elementEventNamespace, module.event.resize)\n            ;\n          },\n          scrollLock: function() {\n            // touch events default to passive, due to changes in chrome to optimize mobile perf\n            $dimmable.get(0).addEventListener('touchmove', module.event.preventScroll, { passive: false });\n          }\n        },\n\n        unbind: {\n          scrollLock: function() {\n            $dimmable.get(0).removeEventListener('touchmove', module.event.preventScroll, { passive: false });\n          }\n        },\n\n        get: {\n          id: function() {\n            return (Math.random().toString(16) + '000000000').substr(2, 8);\n          }\n        },\n\n        event: {\n          approve: function() {\n            if(ignoreRepeatedEvents || settings.onApprove.call(element, $(this)) === false) {\n              module.verbose('Approve callback returned false cancelling hide');\n              return;\n            }\n            ignoreRepeatedEvents = true;\n            module.hide(function() {\n              ignoreRepeatedEvents = false;\n            });\n          },\n          preventScroll: function(event) {\n            if(event.target.className.indexOf('dimmer') !== -1) {\n              event.preventDefault();\n            }\n          },\n          deny: function() {\n            if(ignoreRepeatedEvents || settings.onDeny.call(element, $(this)) === false) {\n              module.verbose('Deny callback returned false cancelling hide');\n              return;\n            }\n            ignoreRepeatedEvents = true;\n            module.hide(function() {\n              ignoreRepeatedEvents = false;\n            });\n          },\n          close: function() {\n            module.hide();\n          },\n          mousedown: function(event) {\n            var\n              $target   = $(event.target)\n            ;\n            initialMouseDownInModal = ($target.closest(selector.modal).length > 0);\n            if(initialMouseDownInModal) {\n              module.verbose('Mouse down event registered inside the modal');\n            }\n            initialMouseDownInScrollbar = module.is.scrolling() && $(window).outerWidth() - settings.scrollbarWidth <= event.clientX;\n            if(initialMouseDownInScrollbar) {\n              module.verbose('Mouse down event registered inside the scrollbar');\n            }\n          },\n          mouseup: function(event) {\n            if(!settings.closable) {\n              module.verbose('Dimmer clicked but closable setting is disabled');\n              return;\n            }\n            if(initialMouseDownInModal) {\n              module.debug('Dimmer clicked but mouse down was initially registered inside the modal');\n              return;\n            }\n            if(initialMouseDownInScrollbar){\n              module.debug('Dimmer clicked but mouse down was initially registered inside the scrollbar');\n              return;\n            }\n            var\n              $target   = $(event.target),\n              isInModal = ($target.closest(selector.modal).length > 0),\n              isInDOM   = $.contains(document.documentElement, event.target)\n            ;\n            if(!isInModal && isInDOM && module.is.active() && $module.hasClass(className.front) ) {\n              module.debug('Dimmer clicked, hiding all modals');\n              if(settings.allowMultiple) {\n                if(!module.hideAll()) {\n                  return;\n                }\n              }\n              else if(!module.hide()){\n                  return;\n              }\n              module.remove.clickaway();\n            }\n          },\n          debounce: function(method, delay) {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(method, delay);\n          },\n          keyboard: function(event) {\n            var\n              keyCode   = event.which,\n              escapeKey = 27\n            ;\n            if(keyCode == escapeKey) {\n              if(settings.closable) {\n                module.debug('Escape key pressed hiding modal');\n                if ( $module.hasClass(className.front) ) {\n                  module.hide();\n                }\n              }\n              else {\n                module.debug('Escape key pressed, but closable is set to false');\n              }\n              event.preventDefault();\n            }\n          },\n          resize: function() {\n            if( $dimmable.dimmer('is active') && ( module.is.animating() || module.is.active() ) ) {\n              requestAnimationFrame(module.refresh);\n            }\n          }\n        },\n\n        toggle: function() {\n          if( module.is.active() || module.is.animating() ) {\n            module.hide();\n          }\n          else {\n            module.show();\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.refreshModals();\n          module.set.dimmerSettings();\n          module.set.dimmerStyles();\n\n          module.showModal(callback);\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.refreshModals();\n          return module.hideModal(callback);\n        },\n\n        showModal: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.animating() || !module.is.active() ) {\n            module.showDimmer();\n            module.cacheSizes();\n            if(module.can.useFlex()) {\n              module.remove.legacy();\n            }\n            else {\n              module.set.legacy();\n              module.set.modalOffset();\n              module.debug('Using non-flex legacy modal positioning.');\n            }\n            module.set.screenHeight();\n            module.set.type();\n            module.set.clickaway();\n\n            if( !settings.allowMultiple && module.others.active() ) {\n              module.hideOthers(module.showModal);\n            }\n            else {\n              ignoreRepeatedEvents = false;\n              if( settings.allowMultiple ) {\n                if ( module.others.active() ) {\n                  $otherModals.filter('.' + className.active).find(selector.dimmer).addClass('active');\n                }\n\n                if ( settings.detachable ) {\n                  $module.detach().appendTo($dimmer);\n                }\n              }\n              settings.onShow.call(element);\n              if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                module.debug('Showing modal with css animations');\n                $module\n                  .transition({\n                    debug       : settings.debug,\n                    animation   : settings.transition + ' in',\n                    queue       : settings.queue,\n                    duration    : settings.duration,\n                    useFailSafe : true,\n                    onComplete : function() {\n                      settings.onVisible.apply(element);\n                      if(settings.keyboardShortcuts) {\n                        module.add.keyboardShortcuts();\n                      }\n                      module.save.focus();\n                      module.set.active();\n                      if(settings.autofocus) {\n                        module.set.autofocus();\n                      }\n                      callback();\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.noTransition);\n              }\n            }\n          }\n          else {\n            module.debug('Modal is already visible');\n          }\n        },\n\n        hideModal: function(callback, keepDimmed, hideOthersToo) {\n          var\n            $previousModal = $otherModals.filter('.' + className.active).last()\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.debug('Hiding modal');\n          if(settings.onHide.call(element, $(this)) === false) {\n            module.verbose('Hide callback returned false cancelling hide');\n            ignoreRepeatedEvents = false;\n            return false;\n          }\n\n          if( module.is.animating() || module.is.active() ) {\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              module.remove.active();\n              $module\n                .transition({\n                  debug       : settings.debug,\n                  animation   : settings.transition + ' out',\n                  queue       : settings.queue,\n                  duration    : settings.duration,\n                  useFailSafe : true,\n                  onStart     : function() {\n                    if(!module.others.active() && !module.others.animating() && !keepDimmed) {\n                      module.hideDimmer();\n                    }\n                    if( settings.keyboardShortcuts && !module.others.active() ) {\n                      module.remove.keyboardShortcuts();\n                    }\n                  },\n                  onComplete : function() {\n                    module.unbind.scrollLock();\n                    if ( settings.allowMultiple ) {\n                      $previousModal.addClass(className.front);\n                      $module.removeClass(className.front);\n      \n                      if ( hideOthersToo ) {\n                        $allModals.find(selector.dimmer).removeClass('active');\n                      }\n                      else {\n                        $previousModal.find(selector.dimmer).removeClass('active');\n                      }\n                    }\n                    settings.onHidden.call(element);\n                    module.remove.dimmerStyles();\n                    module.restore.focus();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          }\n        },\n\n        showDimmer: function() {\n          if($dimmable.dimmer('is animating') || !$dimmable.dimmer('is active') ) {\n            module.save.bodyMargin();\n            module.debug('Showing dimmer');\n            $dimmable.dimmer('show');\n          }\n          else {\n            module.debug('Dimmer already visible');\n          }\n        },\n\n        hideDimmer: function() {\n          if( $dimmable.dimmer('is animating') || ($dimmable.dimmer('is active')) ) {\n            module.unbind.scrollLock();\n            $dimmable.dimmer('hide', function() {\n              module.restore.bodyMargin();\n              module.remove.clickaway();\n              module.remove.screenHeight();\n            });\n          }\n          else {\n            module.debug('Dimmer is not visible cannot hide');\n            return;\n          }\n        },\n\n        hideAll: function(callback) {\n          var\n            $visibleModals = $allModals.filter('.' + className.active + ', .' + className.animating)\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( $visibleModals.length > 0 ) {\n            module.debug('Hiding all visible modals');\n            var hideOk = true;\n//check in reverse order trying to hide most top displayed modal first\n            $($visibleModals.get().reverse()).each(function(index,element){\n                if(hideOk){\n                    hideOk = $(element).modal('hide modal', callback, false, true);\n                }\n            });\n            if(hideOk) {\n              module.hideDimmer();\n            }\n            return hideOk;\n          }\n        },\n\n        hideOthers: function(callback) {\n          var\n            $visibleModals = $otherModals.filter('.' + className.active + ', .' + className.animating)\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( $visibleModals.length > 0 ) {\n            module.debug('Hiding other modals', $otherModals);\n            $visibleModals\n              .modal('hide modal', callback, true)\n            ;\n          }\n        },\n\n        others: {\n          active: function() {\n            return ($otherModals.filter('.' + className.active).length > 0);\n          },\n          animating: function() {\n            return ($otherModals.filter('.' + className.animating).length > 0);\n          }\n        },\n\n\n        add: {\n          keyboardShortcuts: function() {\n            module.verbose('Adding keyboard shortcuts');\n            $document\n              .on('keyup' + eventNamespace, module.event.keyboard)\n            ;\n          }\n        },\n\n        save: {\n          focus: function() {\n            var\n              $activeElement = $(document.activeElement),\n              inCurrentModal = $activeElement.closest($module).length > 0\n            ;\n            if(!inCurrentModal) {\n              $focusedElement = $(document.activeElement).blur();\n            }\n          },\n          bodyMargin: function() {\n            initialBodyMargin = $body.css('margin-right');\n            var bodyMarginRightPixel = parseInt(initialBodyMargin.replace(/[^\\d.]/g, '')),\n                bodyScrollbarWidth = window.innerWidth - document.documentElement.clientWidth,\n                diffPos = bodyMarginRightPixel + bodyScrollbarWidth;\n            $body.css('margin-right', diffPos + 'px');\n            $body.find(selector.bodyFixed).css('padding-right', diffPos + 'px');\n          }\n        },\n\n        restore: {\n          focus: function() {\n            if($focusedElement && $focusedElement.length > 0 && settings.restoreFocus) {\n              $focusedElement.focus();\n            }\n          },\n          bodyMargin: function() {\n            $body.css('margin-right', initialBodyMargin);\n            $body.find(selector.bodyFixed).css('padding-right', initialBodyMargin);\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          legacy: function() {\n            $module.removeClass(className.legacy);\n          },\n          clickaway: function() {\n            $dimmer\n              .off('mousedown' + elementEventNamespace)\n            ;\n            $dimmer\n              .off('mouseup' + elementEventNamespace)\n            ;\n          },\n          dimmerStyles: function() {\n            $dimmer.removeClass(className.inverted);\n            $dimmable.removeClass(className.blurring);\n          },\n          bodyStyle: function() {\n            if($body.attr('style') === '') {\n              module.verbose('Removing style attribute');\n              $body.removeAttr('style');\n            }\n          },\n          screenHeight: function() {\n            module.debug('Removing page height');\n            $body\n              .css('height', '')\n            ;\n          },\n          keyboardShortcuts: function() {\n            module.verbose('Removing keyboard shortcuts');\n            $document\n              .off('keyup' + eventNamespace)\n            ;\n          },\n          scrolling: function() {\n            $dimmable.removeClass(className.scrolling);\n            $module.removeClass(className.scrolling);\n          }\n        },\n\n        cacheSizes: function() {\n          $module.addClass(className.loading);\n          var\n            scrollHeight = $module.prop('scrollHeight'),\n            modalWidth   = $module.outerWidth(),\n            modalHeight  = $module.outerHeight()\n          ;\n          if(module.cache === undefined || modalHeight !== 0) {\n            module.cache = {\n              pageHeight    : $(document).outerHeight(),\n              width         : modalWidth,\n              height        : modalHeight + settings.offset,\n              scrollHeight  : scrollHeight + settings.offset,\n              contextHeight : (settings.context == 'body')\n                ? $(window).height()\n                : $dimmable.height(),\n            };\n            module.cache.topOffset = -(module.cache.height / 2);\n          }\n          $module.removeClass(className.loading);\n          module.debug('Caching modal and container sizes', module.cache);\n        },\n\n        can: {\n          useFlex: function() {\n            return (settings.useFlex == 'auto')\n              ? settings.detachable && !module.is.ie()\n              : settings.useFlex\n            ;\n          },\n          fit: function() {\n            var\n              contextHeight  = module.cache.contextHeight,\n              verticalCenter = module.cache.contextHeight / 2,\n              topOffset      = module.cache.topOffset,\n              scrollHeight   = module.cache.scrollHeight,\n              height         = module.cache.height,\n              paddingHeight  = settings.padding,\n              startPosition  = (verticalCenter + topOffset)\n            ;\n            return (scrollHeight > height)\n              ? (startPosition + scrollHeight + paddingHeight < contextHeight)\n              : (height + (paddingHeight * 2) < contextHeight)\n            ;\n          }\n        },\n\n        is: {\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          ie: function() {\n            var\n              isIE11 = (!(window.ActiveXObject) && 'ActiveXObject' in window),\n              isIE   = ('ActiveXObject' in window)\n            ;\n            return (isIE11 || isIE);\n          },\n          animating: function() {\n            return $module.transition('is supported')\n              ? $module.transition('is animating')\n              : $module.is(':visible')\n            ;\n          },\n          scrolling: function() {\n            return $dimmable.hasClass(className.scrolling);\n          },\n          modernBrowser: function() {\n            // appName for IE11 reports 'Netscape' can no longer use\n            return !(window.ActiveXObject || 'ActiveXObject' in window);\n          }\n        },\n\n        set: {\n          autofocus: function() {\n            var\n              $inputs    = $module.find('[tabindex], :input').filter(':visible').filter(function() {\n                return $(this).closest('.disabled').length === 0;\n              }),\n              $autofocus = $inputs.filter('[autofocus]'),\n              $input     = ($autofocus.length > 0)\n                ? $autofocus.first()\n                : $inputs.first()\n            ;\n            if($input.length > 0) {\n              $input.focus();\n            }\n          },\n          clickaway: function() {\n            $dimmer\n              .on('mousedown' + elementEventNamespace, module.event.mousedown)\n            ;\n            $dimmer\n              .on('mouseup' + elementEventNamespace, module.event.mouseup)\n            ;\n          },\n          dimmerSettings: function() {\n            if($.fn.dimmer === undefined) {\n              module.error(error.dimmer);\n              return;\n            }\n            var\n              defaultSettings = {\n                debug      : settings.debug,\n                dimmerName : 'modals',\n                closable   : 'auto',\n                useFlex    : module.can.useFlex(),\n                duration   : {\n                  show     : settings.duration,\n                  hide     : settings.duration\n                }\n              },\n              dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings)\n            ;\n            if(settings.inverted) {\n              dimmerSettings.variation = (dimmerSettings.variation !== undefined)\n                ? dimmerSettings.variation + ' inverted'\n                : 'inverted'\n              ;\n            }\n            $context.dimmer('setting', dimmerSettings);\n          },\n          dimmerStyles: function() {\n            if(settings.inverted) {\n              $dimmer.addClass(className.inverted);\n            }\n            else {\n              $dimmer.removeClass(className.inverted);\n            }\n            if(settings.blurring) {\n              $dimmable.addClass(className.blurring);\n            }\n            else {\n              $dimmable.removeClass(className.blurring);\n            }\n          },\n          modalOffset: function() {\n            var\n              width = module.cache.width,\n              height = module.cache.height\n            ;\n            $module\n              .css({\n                marginTop: (!$module.hasClass('aligned') && module.can.fit())\n                  ? -(height / 2)\n                  : 0,\n                marginLeft: -(width / 2)\n              })\n            ;\n            module.verbose('Setting modal offset for legacy mode');\n          },\n          screenHeight: function() {\n            if( module.can.fit() ) {\n              $body.css('height', '');\n            }\n            else if(!$module.hasClass('bottom')) {\n              module.debug('Modal is taller than page content, resizing page height');\n              $body\n                .css('height', module.cache.height + (settings.padding * 2) )\n              ;\n            }\n          },\n          active: function() {\n            $module.addClass(className.active + ' ' + className.front);\n            $otherModals.filter('.' + className.active).removeClass(className.front);\n          },\n          scrolling: function() {\n            $dimmable.addClass(className.scrolling);\n            $module.addClass(className.scrolling);\n            module.unbind.scrollLock();\n          },\n          legacy: function() {\n            $module.addClass(className.legacy);\n          },\n          type: function() {\n            if(module.can.fit()) {\n              module.verbose('Modal fits on screen');\n              if(!module.others.active() && !module.others.animating()) {\n                module.remove.scrolling();\n                module.bind.scrollLock();\n              }\n            }\n            else if (!$module.hasClass('bottom')){\n              module.verbose('Modal cannot fit on screen setting to scrolling');\n              module.set.scrolling();\n            } else {\n                module.verbose('Bottom aligned modal not fitting on screen is unsupported for scrolling');\n            }\n          },\n          undetached: function() {\n            $dimmable.addClass(className.undetached);\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if(Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.modal.settings = {\n\n  name           : 'Modal',\n  namespace      : 'modal',\n\n  useFlex        : 'auto',\n  offset         : 0,\n\n  silent         : false,\n  debug          : false,\n  verbose        : false,\n  performance    : true,\n\n  observeChanges : false,\n\n  allowMultiple  : false,\n  detachable     : true,\n  closable       : true,\n  autofocus      : true,\n  restoreFocus   : true,\n\n  inverted       : false,\n  blurring       : false,\n\n  centered       : true,\n\n  dimmerSettings : {\n    closable : false,\n    useCSS   : true\n  },\n\n  // whether to use keyboard shortcuts\n  keyboardShortcuts: true,\n\n  context    : 'body',\n\n  queue      : false,\n  duration   : 500,\n  transition : 'scale',\n\n  // padding with edge of page\n  padding    : 50,\n  scrollbarWidth: 10,\n\n  // called before show animation\n  onShow     : function(){},\n\n  // called after show animation\n  onVisible  : function(){},\n\n  // called before hide animation\n  onHide     : function(){ return true; },\n\n  // called after hide animation\n  onHidden   : function(){},\n\n  // called after approve selector match\n  onApprove  : function(){ return true; },\n\n  // called after deny selector match\n  onDeny     : function(){ return true; },\n\n  selector    : {\n    close    : '> .close',\n    approve  : '.actions .positive, .actions .approve, .actions .ok',\n    deny     : '.actions .negative, .actions .deny, .actions .cancel',\n    modal    : '.ui.modal',\n    dimmer   : '> .ui.dimmer',\n    bodyFixed: '> .ui.fixed.menu, > .ui.right.toast-container, > .ui.right.sidebar'\n  },\n  error : {\n    dimmer    : 'UI Dimmer, a required component is not included in this page',\n    method    : 'The method you called is not defined.',\n    notFound  : 'The element you specified could not be found'\n  },\n  className : {\n    active     : 'active',\n    animating  : 'animating',\n    blurring   : 'blurring',\n    inverted   : 'inverted',\n    legacy     : 'legacy',\n    loading    : 'loading',\n    scrolling  : 'scrolling',\n    undetached : 'undetached',\n    front      : 'front'\n  }\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Fomantic-UI - Nag\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n'use strict';\n\n$.isFunction = $.isFunction || function(obj) {\n  return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.nag = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.nag.settings, parameters)\n          : $.extend({}, $.fn.nag.settings),\n\n        selector        = settings.selector,\n        error           = settings.error,\n        namespace       = settings.namespace,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n\n        $context        = (settings.context)\n          ? $(settings.context)\n          : $('body'),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        module\n      ;\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing element');\n\n          $module\n            .on('click' + eventNamespace, selector.close, module.dismiss)\n            .data(moduleNamespace, module)\n          ;\n\n          if(settings.detachable && $module.parent()[0] !== $context[0]) {\n            $module\n              .detach()\n              .prependTo($context)\n            ;\n          }\n\n          if(settings.displayTime > 0) {\n            setTimeout(module.hide, settings.displayTime);\n          }\n          module.show();\n        },\n\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        show: function() {\n          if( module.should.show() && !$module.is(':visible') ) {\n            module.debug('Showing nag', settings.animation.show);\n            if(settings.animation.show == 'fade') {\n              $module\n                .fadeIn(settings.duration, settings.easing)\n              ;\n            }\n            else {\n              $module\n                .slideDown(settings.duration, settings.easing)\n              ;\n            }\n          }\n        },\n\n        hide: function() {\n          module.debug('Showing nag', settings.animation.hide);\n          if(settings.animation.show == 'fade') {\n            $module\n              .fadeIn(settings.duration, settings.easing)\n            ;\n          }\n          else {\n            $module\n              .slideUp(settings.duration, settings.easing)\n            ;\n          }\n        },\n\n        onHide: function() {\n          module.debug('Removing nag', settings.animation.hide);\n          $module.remove();\n          if (settings.onHide) {\n            settings.onHide();\n          }\n        },\n\n        dismiss: function(event) {\n          if(settings.storageMethod) {\n            module.storage.set(settings.key, settings.value);\n          }\n          module.hide();\n          event.stopImmediatePropagation();\n          event.preventDefault();\n        },\n\n        should: {\n          show: function() {\n            if(settings.persist) {\n              module.debug('Persistent nag is set, can show nag');\n              return true;\n            }\n            if( module.storage.get(settings.key) != settings.value.toString() ) {\n              module.debug('Stored value is not set, can show nag', module.storage.get(settings.key));\n              return true;\n            }\n            module.debug('Stored value is set, cannot show nag', module.storage.get(settings.key));\n            return false;\n          }\n        },\n\n        get: {\n          storageOptions: function() {\n            var\n              options = {}\n            ;\n            if(settings.expires) {\n              options.expires = settings.expires;\n            }\n            if(settings.domain) {\n              options.domain = settings.domain;\n            }\n            if(settings.path) {\n              options.path = settings.path;\n            }\n            return options;\n          }\n        },\n\n        clear: function() {\n          module.storage.remove(settings.key);\n        },\n\n        storage: {\n          set: function(key, value) {\n            var\n              options = module.get.storageOptions()\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              window.localStorage.setItem(key, value);\n              module.debug('Value stored using local storage', key, value);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              window.sessionStorage.setItem(key, value);\n              module.debug('Value stored using session storage', key, value);\n            }\n            else if($.cookie !== undefined) {\n              $.cookie(key, value, options);\n              module.debug('Value stored using cookie', key, value, options);\n            }\n            else {\n              module.error(error.noCookieStorage);\n              return;\n            }\n          },\n          get: function(key, value) {\n            var\n              storedValue\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              storedValue = window.localStorage.getItem(key);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              storedValue = window.sessionStorage.getItem(key);\n            }\n            // get by cookie\n            else if($.cookie !== undefined) {\n              storedValue = $.cookie(key);\n            }\n            else {\n              module.error(error.noCookieStorage);\n            }\n            if(storedValue == 'undefined' || storedValue == 'null' || storedValue === undefined || storedValue === null) {\n              storedValue = undefined;\n            }\n            return storedValue;\n          },\n          remove: function(key) {\n            var\n              options = module.get.storageOptions()\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              window.localStorage.removeItem(key);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              window.sessionStorage.removeItem(key);\n            }\n            // store by cookie\n            else if($.cookie !== undefined) {\n              $.removeCookie(key, options);\n            }\n            else {\n              module.error(error.noStorage);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if(Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.nag.settings = {\n\n  name        : 'Nag',\n\n  silent      : false,\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  namespace   : 'Nag',\n\n  // allows cookie to be overridden\n  persist     : false,\n\n  // set to zero to require manually dismissal, otherwise hides on its own\n  displayTime : 0,\n\n  animation   : {\n    show : 'slide',\n    hide : 'slide'\n  },\n\n  context       : false,\n  detachable    : false,\n\n  expires       : 30,\n  domain        : false,\n  path          : '/',\n\n  // type of storage to use\n  storageMethod : 'cookie',\n\n  // value to store in dismissed localstorage/cookie\n  key           : 'nag',\n  value         : 'dismiss',\n\n  error: {\n    noCookieStorage : '$.cookie is not included. A storage solution is required.',\n    noStorage       : 'Neither $.cookie or store is defined. A storage solution is required for storing state',\n    method          : 'The method you called is not defined.'\n  },\n\n  className     : {\n    bottom : 'bottom',\n    fixed  : 'fixed'\n  },\n\n  selector      : {\n    close : '.close.icon'\n  },\n\n  speed         : 500,\n  easing        : 'easeOutQuad',\n\n  onHide: function() {}\n\n};\n\n// Adds easing\n$.extend( $.easing, {\n  easeOutQuad: function (x, t, b, c, d) {\n    return -c *(t/=d)*(t-2) + b;\n  }\n});\n\n})( jQuery, window, document );\n\n/*!\n * # Fomantic-UI - Popup\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n'use strict';\n\n$.isFunction = $.isFunction || function(obj) {\n  return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.popup = function(parameters) {\n  var\n    $allModules    = $(this),\n    $document      = $(document),\n    $window        = $(window),\n    $body          = $('body'),\n\n    moduleSelector = $allModules.selector || '',\n\n    clickEvent      = ('ontouchstart' in document.documentElement)\n        ? 'touchstart'\n        : 'click',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.popup.settings, parameters)\n          : $.extend({}, $.fn.popup.settings),\n\n        selector           = settings.selector,\n        className          = settings.className,\n        error              = settings.error,\n        metadata           = settings.metadata,\n        namespace          = settings.namespace,\n\n        eventNamespace     = '.' + settings.namespace,\n        moduleNamespace    = 'module-' + namespace,\n\n        $module            = $(this),\n        $context           = $(settings.context),\n        $scrollContext     = $(settings.scrollContext),\n        $boundary          = $(settings.boundary),\n        $target            = (settings.target)\n          ? $(settings.target)\n          : $module,\n\n        $popup,\n        $offsetParent,\n\n        searchDepth        = 0,\n        triedPositions     = false,\n        openedWithTouch    = false,\n\n        element            = this,\n        instance           = $module.data(moduleNamespace),\n\n        documentObserver,\n        elementNamespace,\n        id,\n        module\n      ;\n\n      module = {\n\n        // binds events\n        initialize: function() {\n          module.debug('Initializing', $module);\n          module.createID();\n          module.bind.events();\n          if(!module.exists() && settings.preserve) {\n            module.create();\n          }\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            documentObserver = new MutationObserver(module.event.documentChanged);\n            documentObserver.observe(document, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', documentObserver);\n          }\n        },\n\n        refresh: function() {\n          if(settings.popup) {\n            $popup = $(settings.popup).eq(0);\n          }\n          else {\n            if(settings.inline) {\n              $popup = $target.nextAll(selector.popup).eq(0);\n              settings.popup = $popup;\n            }\n          }\n          if(settings.popup) {\n            $popup.addClass(className.loading);\n            $offsetParent = module.get.offsetParent();\n            $popup.removeClass(className.loading);\n            if(settings.movePopup && module.has.popup() && module.get.offsetParent($popup)[0] !== $offsetParent[0]) {\n              module.debug('Moving popup to the same offset parent as target');\n              $popup\n                .detach()\n                .appendTo($offsetParent)\n              ;\n            }\n          }\n          else {\n            $offsetParent = (settings.inline)\n              ? module.get.offsetParent($target)\n              : module.has.popup()\n                ? module.get.offsetParent($popup)\n                : $body\n            ;\n          }\n          if( $offsetParent.is('html') && $offsetParent[0] !== $body[0] ) {\n            module.debug('Setting page as offset parent');\n            $offsetParent = $body;\n          }\n          if( module.get.variation() ) {\n            module.set.variation();\n          }\n        },\n\n        reposition: function() {\n          module.refresh();\n          module.set.position();\n        },\n\n        destroy: function() {\n          module.debug('Destroying previous module');\n          if(documentObserver) {\n            documentObserver.disconnect();\n          }\n          // remove element only if was created dynamically\n          if($popup && !settings.preserve) {\n            module.removePopup();\n          }\n          // clear all timeouts\n          clearTimeout(module.hideTimer);\n          clearTimeout(module.showTimer);\n          // remove events\n          module.unbind.close();\n          module.unbind.events();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        event: {\n          start:  function(event) {\n            var\n              delay = ($.isPlainObject(settings.delay))\n                ? settings.delay.show\n                : settings.delay\n            ;\n            clearTimeout(module.hideTimer);\n            if(!openedWithTouch || (openedWithTouch && settings.addTouchEvents) ) {\n              module.showTimer = setTimeout(module.show, delay);\n            }\n          },\n          end:  function() {\n            var\n              delay = ($.isPlainObject(settings.delay))\n                ? settings.delay.hide\n                : settings.delay\n            ;\n            clearTimeout(module.showTimer);\n            module.hideTimer = setTimeout(module.hide, delay);\n          },\n          touchstart: function(event) {\n            openedWithTouch = true;\n            if(settings.addTouchEvents) {\n              module.show();\n            }\n          },\n          resize: function() {\n            if( module.is.visible() ) {\n              module.set.position();\n            }\n          },\n          documentChanged: function(mutations) {\n            [].forEach.call(mutations, function(mutation) {\n              if(mutation.removedNodes) {\n                [].forEach.call(mutation.removedNodes, function(node) {\n                  if(node == element || $(node).find(element).length > 0) {\n                    module.debug('Element removed from DOM, tearing down events');\n                    module.destroy();\n                  }\n                });\n              }\n            });\n          },\n          hideGracefully: function(event) {\n            var\n              $target = $(event.target),\n              isInDOM = $.contains(document.documentElement, event.target),\n              inPopup = ($target.closest(selector.popup).length > 0)\n            ;\n            // don't close on clicks inside popup\n            if(event && !inPopup && isInDOM) {\n              module.debug('Click occurred outside popup hiding popup');\n              module.hide();\n            }\n            else {\n              module.debug('Click was inside popup, keeping popup open');\n            }\n          }\n        },\n\n        // generates popup html from metadata\n        create: function() {\n          var\n            html      = module.get.html(),\n            title     = module.get.title(),\n            content   = module.get.content()\n          ;\n\n          if(html || content || title) {\n            module.debug('Creating pop-up html');\n            if(!html) {\n              html = settings.templates.popup({\n                title   : title,\n                content : content\n              });\n            }\n            $popup = $('<div/>')\n              .addClass(className.popup)\n              .data(metadata.activator, $module)\n              .html(html)\n            ;\n            if(settings.inline) {\n              module.verbose('Inserting popup element inline', $popup);\n              $popup\n                .insertAfter($module)\n              ;\n            }\n            else {\n              module.verbose('Appending popup element to body', $popup);\n              $popup\n                .appendTo( $context )\n              ;\n            }\n            module.refresh();\n            module.set.variation();\n\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n            settings.onCreate.call($popup, element);\n          }\n          else if($target.next(selector.popup).length !== 0) {\n            module.verbose('Pre-existing popup found');\n            settings.inline = true;\n            settings.popup  = $target.next(selector.popup).data(metadata.activator, $module);\n            module.refresh();\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n          }\n          else if(settings.popup) {\n            $(settings.popup).data(metadata.activator, $module);\n            module.verbose('Used popup specified in settings');\n            module.refresh();\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n          }\n          else {\n            module.debug('No content specified skipping display', element);\n          }\n        },\n\n        createID: function() {\n          id = (Math.random().toString(16) + '000000000').substr(2, 8);\n          elementNamespace = '.' + id;\n          module.verbose('Creating unique id for element', id);\n        },\n\n        // determines popup state\n        toggle: function() {\n          module.debug('Toggling pop-up');\n          if( module.is.hidden() ) {\n            module.debug('Popup is hidden, showing pop-up');\n            module.unbind.close();\n            module.show();\n          }\n          else {\n            module.debug('Popup is visible, hiding pop-up');\n            module.hide();\n          }\n        },\n\n        show: function(callback) {\n          callback = callback || function(){};\n          module.debug('Showing pop-up', settings.transition);\n          if(module.is.hidden() && !( module.is.active() && module.is.dropdown()) ) {\n            if( !module.exists() ) {\n              module.create();\n            }\n            if(settings.onShow.call($popup, element) === false) {\n              module.debug('onShow callback returned false, cancelling popup animation');\n              return;\n            }\n            else if(!settings.preserve && !settings.popup) {\n              module.refresh();\n            }\n            if( $popup && module.set.position() ) {\n              module.save.conditions();\n              if(settings.exclusive) {\n                module.hideAll();\n              }\n              module.animate.show(callback);\n            }\n          }\n        },\n\n\n        hide: function(callback) {\n          callback = callback || function(){};\n          if( module.is.visible() || module.is.animating() ) {\n            if(settings.onHide.call($popup, element) === false) {\n              module.debug('onHide callback returned false, cancelling popup animation');\n              return;\n            }\n            module.remove.visible();\n            module.unbind.close();\n            module.restore.conditions();\n            module.animate.hide(callback);\n          }\n        },\n\n        hideAll: function() {\n          $(selector.popup)\n            .filter('.' + className.popupVisible)\n            .each(function() {\n              $(this)\n                .data(metadata.activator)\n                  .popup('hide')\n              ;\n            })\n          ;\n        },\n        exists: function() {\n          if(!$popup) {\n            return false;\n          }\n          if(settings.inline || settings.popup) {\n            return ( module.has.popup() );\n          }\n          else {\n            return ( $popup.closest($context).length >= 1 )\n              ? true\n              : false\n            ;\n          }\n        },\n\n        removePopup: function() {\n          if( module.has.popup() && !settings.popup) {\n            module.debug('Removing popup', $popup);\n            $popup.remove();\n            $popup = undefined;\n            settings.onRemove.call($popup, element);\n          }\n        },\n\n        save: {\n          conditions: function() {\n            module.cache = {\n              title: $module.attr('title')\n            };\n            if (module.cache.title) {\n              $module.removeAttr('title');\n            }\n            module.verbose('Saving original attributes', module.cache.title);\n          }\n        },\n        restore: {\n          conditions: function() {\n            if(module.cache && module.cache.title) {\n              $module.attr('title', module.cache.title);\n              module.verbose('Restoring original attributes', module.cache.title);\n            }\n            return true;\n          }\n        },\n        supports: {\n          svg: function() {\n            return (typeof SVGGraphicsElement !== 'undefined');\n          }\n        },\n        animate: {\n          show: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              module.set.visible();\n              $popup\n                .transition({\n                  animation  : settings.transition + ' in',\n                  queue      : false,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  onComplete : function() {\n                    module.bind.close();\n                    callback.call($popup, element);\n                    settings.onVisible.call($popup, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          },\n          hide: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            module.debug('Hiding pop-up');\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              $popup\n                .transition({\n                  animation  : settings.transition + ' out',\n                  queue      : false,\n                  duration   : settings.duration,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  onComplete : function() {\n                    module.reset();\n                    callback.call($popup, element);\n                    settings.onHidden.call($popup, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          }\n        },\n\n        change: {\n          content: function(html) {\n            $popup.html(html);\n          }\n        },\n\n        get: {\n          html: function() {\n            $module.removeData(metadata.html);\n            return $module.data(metadata.html) || settings.html;\n          },\n          title: function() {\n            $module.removeData(metadata.title);\n            return $module.data(metadata.title) || settings.title;\n          },\n          content: function() {\n            $module.removeData(metadata.content);\n            return $module.data(metadata.content) || settings.content || $module.attr('title');\n          },\n          variation: function() {\n            $module.removeData(metadata.variation);\n            return $module.data(metadata.variation) || settings.variation;\n          },\n          popup: function() {\n            return $popup;\n          },\n          popupOffset: function() {\n            return $popup.offset();\n          },\n          calculations: function() {\n            var\n              $popupOffsetParent = module.get.offsetParent($popup),\n              targetElement      = $target[0],\n              isWindow           = ($boundary[0] == window),\n              targetPosition     = (settings.inline || (settings.popup && settings.movePopup))\n                ? $target.position()\n                : $target.offset(),\n              screenPosition = (isWindow)\n                ? { top: 0, left: 0 }\n                : $boundary.offset(),\n              calculations   = {},\n              scroll = (isWindow)\n                ? { top: $window.scrollTop(), left: $window.scrollLeft() }\n                : { top: 0, left: 0},\n              screen\n            ;\n            calculations = {\n              // element which is launching popup\n              target : {\n                element : $target[0],\n                width   : $target.outerWidth(),\n                height  : $target.outerHeight(),\n                top     : targetPosition.top,\n                left    : targetPosition.left,\n                margin  : {}\n              },\n              // popup itself\n              popup : {\n                width  : $popup.outerWidth(),\n                height : $popup.outerHeight()\n              },\n              // offset container (or 3d context)\n              parent : {\n                width  : $offsetParent.outerWidth(),\n                height : $offsetParent.outerHeight()\n              },\n              // screen boundaries\n              screen : {\n                top  : screenPosition.top,\n                left : screenPosition.left,\n                scroll: {\n                  top  : scroll.top,\n                  left : scroll.left\n                },\n                width  : $boundary.width(),\n                height : $boundary.height()\n              }\n            };\n\n            // if popup offset context is not same as target, then adjust calculations\n            if($popupOffsetParent.get(0) !== $offsetParent.get(0)) {\n              var\n                popupOffset        = $popupOffsetParent.offset()\n              ;\n              calculations.target.top -= popupOffset.top;\n              calculations.target.left -= popupOffset.left;\n              calculations.parent.width = $popupOffsetParent.outerWidth();\n              calculations.parent.height = $popupOffsetParent.outerHeight();\n            }\n\n            // add in container calcs if fluid\n            if( settings.setFluidWidth && module.is.fluid() ) {\n              calculations.container = {\n                width: $popup.parent().outerWidth()\n              };\n              calculations.popup.width = calculations.container.width;\n            }\n\n            // add in margins if inline\n            calculations.target.margin.top = (settings.inline)\n              ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-top'), 10)\n              : 0\n            ;\n            calculations.target.margin.left = (settings.inline)\n              ? module.is.rtl()\n                ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-right'), 10)\n                : parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-left'), 10)\n              : 0\n            ;\n            // calculate screen boundaries\n            screen = calculations.screen;\n            calculations.boundary = {\n              top    : screen.top + screen.scroll.top,\n              bottom : screen.top + screen.scroll.top + screen.height,\n              left   : screen.left + screen.scroll.left,\n              right  : screen.left + screen.scroll.left + screen.width\n            };\n            return calculations;\n          },\n          id: function() {\n            return id;\n          },\n          startEvent: function() {\n            if(settings.on == 'hover') {\n              return 'mouseenter';\n            }\n            else if(settings.on == 'focus') {\n              return 'focus';\n            }\n            return false;\n          },\n          scrollEvent: function() {\n            return 'scroll';\n          },\n          endEvent: function() {\n            if(settings.on == 'hover') {\n              return 'mouseleave';\n            }\n            else if(settings.on == 'focus') {\n              return 'blur';\n            }\n            return false;\n          },\n          distanceFromBoundary: function(offset, calculations) {\n            var\n              distanceFromBoundary = {},\n              popup,\n              boundary\n            ;\n            calculations = calculations || module.get.calculations();\n\n            // shorthand\n            popup        = calculations.popup;\n            boundary     = calculations.boundary;\n\n            if(offset) {\n              distanceFromBoundary = {\n                top    : (offset.top - boundary.top),\n                left   : (offset.left - boundary.left),\n                right  : (boundary.right - (offset.left + popup.width) ),\n                bottom : (boundary.bottom - (offset.top + popup.height) )\n              };\n              module.verbose('Distance from boundaries determined', offset, distanceFromBoundary);\n            }\n            return distanceFromBoundary;\n          },\n          offsetParent: function($element) {\n            var\n              element = ($element !== undefined)\n                ? $element[0]\n                : $target[0],\n              parentNode = element.parentNode,\n              $node    = $(parentNode)\n            ;\n            if(parentNode) {\n              var\n                is2D     = ($node.css('transform') === 'none'),\n                isStatic = ($node.css('position') === 'static'),\n                isBody   = $node.is('body')\n              ;\n              while(parentNode && !isBody && isStatic && is2D) {\n                parentNode = parentNode.parentNode;\n                $node    = $(parentNode);\n                is2D     = ($node.css('transform') === 'none');\n                isStatic = ($node.css('position') === 'static');\n                isBody   = $node.is('body');\n              }\n            }\n            return ($node && $node.length > 0)\n              ? $node\n              : $()\n            ;\n          },\n          positions: function() {\n            return {\n              'top left'      : false,\n              'top center'    : false,\n              'top right'     : false,\n              'bottom left'   : false,\n              'bottom center' : false,\n              'bottom right'  : false,\n              'left center'   : false,\n              'right center'  : false\n            };\n          },\n          nextPosition: function(position) {\n            var\n              positions          = position.split(' '),\n              verticalPosition   = positions[0],\n              horizontalPosition = positions[1],\n              opposite = {\n                top    : 'bottom',\n                bottom : 'top',\n                left   : 'right',\n                right  : 'left'\n              },\n              adjacent = {\n                left   : 'center',\n                center : 'right',\n                right  : 'left'\n              },\n              backup = {\n                'top left'      : 'top center',\n                'top center'    : 'top right',\n                'top right'     : 'right center',\n                'right center'  : 'bottom right',\n                'bottom right'  : 'bottom center',\n                'bottom center' : 'bottom left',\n                'bottom left'   : 'left center',\n                'left center'   : 'top left'\n              },\n              adjacentsAvailable = (verticalPosition == 'top' || verticalPosition == 'bottom'),\n              oppositeTried = false,\n              adjacentTried = false,\n              nextPosition  = false\n            ;\n            if(!triedPositions) {\n              module.verbose('All available positions available');\n              triedPositions = module.get.positions();\n            }\n\n            module.debug('Recording last position tried', position);\n            triedPositions[position] = true;\n\n            if(settings.prefer === 'opposite') {\n              nextPosition  = [opposite[verticalPosition], horizontalPosition];\n              nextPosition  = nextPosition.join(' ');\n              oppositeTried = (triedPositions[nextPosition] === true);\n              module.debug('Trying opposite strategy', nextPosition);\n            }\n            if((settings.prefer === 'adjacent') && adjacentsAvailable ) {\n              nextPosition  = [verticalPosition, adjacent[horizontalPosition]];\n              nextPosition  = nextPosition.join(' ');\n              adjacentTried = (triedPositions[nextPosition] === true);\n              module.debug('Trying adjacent strategy', nextPosition);\n            }\n            if(adjacentTried || oppositeTried) {\n              module.debug('Using backup position', nextPosition);\n              nextPosition = backup[position];\n            }\n            return nextPosition;\n          }\n        },\n\n        set: {\n          position: function(position, calculations) {\n\n            // exit conditions\n            if($target.length === 0 || $popup.length === 0) {\n              module.error(error.notFound);\n              return;\n            }\n            var\n              offset,\n              distanceAway,\n              target,\n              popup,\n              parent,\n              positioning,\n              popupOffset,\n              distanceFromBoundary\n            ;\n\n            calculations = calculations || module.get.calculations();\n            position     = position     || $module.data(metadata.position) || settings.position;\n\n            offset       = $module.data(metadata.offset) || settings.offset;\n            distanceAway = settings.distanceAway;\n\n            // shorthand\n            target = calculations.target;\n            popup  = calculations.popup;\n            parent = calculations.parent;\n\n            if(module.should.centerArrow(calculations)) {\n              module.verbose('Adjusting offset to center arrow on small target element');\n              if(position == 'top left' || position == 'bottom left') {\n                offset += (target.width / 2);\n                offset -= settings.arrowPixelsFromEdge;\n              }\n              if(position == 'top right' || position == 'bottom right') {\n                offset -= (target.width / 2);\n                offset += settings.arrowPixelsFromEdge;\n              }\n            }\n\n            if(target.width === 0 && target.height === 0 && !module.is.svg(target.element)) {\n              module.debug('Popup target is hidden, no action taken');\n              return false;\n            }\n\n            if(settings.inline) {\n              module.debug('Adding margin to calculation', target.margin);\n              if(position == 'left center' || position == 'right center') {\n                offset       +=  target.margin.top;\n                distanceAway += -target.margin.left;\n              }\n              else if (position == 'top left' || position == 'top center' || position == 'top right') {\n                offset       += target.margin.left;\n                distanceAway -= target.margin.top;\n              }\n              else {\n                offset       += target.margin.left;\n                distanceAway += target.margin.top;\n              }\n            }\n\n            module.debug('Determining popup position from calculations', position, calculations);\n\n            if (module.is.rtl()) {\n              position = position.replace(/left|right/g, function (match) {\n                return (match == 'left')\n                  ? 'right'\n                  : 'left'\n                ;\n              });\n              module.debug('RTL: Popup position updated', position);\n            }\n\n            // if last attempt use specified last resort position\n            if(searchDepth == settings.maxSearchDepth && typeof settings.lastResort === 'string') {\n              position = settings.lastResort;\n            }\n\n            switch (position) {\n              case 'top left':\n                positioning = {\n                  top    : 'auto',\n                  bottom : parent.height - target.top + distanceAway,\n                  left   : target.left + offset,\n                  right  : 'auto'\n                };\n              break;\n              case 'top center':\n                positioning = {\n                  bottom : parent.height - target.top + distanceAway,\n                  left   : target.left + (target.width / 2) - (popup.width / 2) + offset,\n                  top    : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'top right':\n                positioning = {\n                  bottom :  parent.height - target.top + distanceAway,\n                  right  :  parent.width - target.left - target.width - offset,\n                  top    : 'auto',\n                  left   : 'auto'\n                };\n              break;\n              case 'left center':\n                positioning = {\n                  top    : target.top + (target.height / 2) - (popup.height / 2) + offset,\n                  right  : parent.width - target.left + distanceAway,\n                  left   : 'auto',\n                  bottom : 'auto'\n                };\n              break;\n              case 'right center':\n                positioning = {\n                  top    : target.top + (target.height / 2) - (popup.height / 2) + offset,\n                  left   : target.left + target.width + distanceAway,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom left':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  left   : target.left + offset,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom center':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  left   : target.left + (target.width / 2) - (popup.width / 2) + offset,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom right':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  right  : parent.width - target.left  - target.width - offset,\n                  left   : 'auto',\n                  bottom : 'auto'\n                };\n              break;\n            }\n            if(positioning === undefined) {\n              module.error(error.invalidPosition, position);\n            }\n\n            module.debug('Calculated popup positioning values', positioning);\n\n            // tentatively place on stage\n            $popup\n              .css(positioning)\n              .removeClass(className.position)\n              .addClass(position)\n              .addClass(className.loading)\n            ;\n\n            popupOffset = module.get.popupOffset();\n\n            // see if any boundaries are surpassed with this tentative position\n            distanceFromBoundary = module.get.distanceFromBoundary(popupOffset, calculations);\n\n            if( module.is.offstage(distanceFromBoundary, position) ) {\n              module.debug('Position is outside viewport', position);\n              if(searchDepth < settings.maxSearchDepth) {\n                searchDepth++;\n                position = module.get.nextPosition(position);\n                module.debug('Trying new position', position);\n                return ($popup)\n                  ? module.set.position(position, calculations)\n                  : false\n                ;\n              }\n              else {\n                if(settings.lastResort) {\n                  module.debug('No position found, showing with last position');\n                }\n                else {\n                  module.debug('Popup could not find a position to display', $popup);\n                  module.error(error.cannotPlace, element);\n                  module.remove.attempts();\n                  module.remove.loading();\n                  module.reset();\n                  settings.onUnplaceable.call($popup, element);\n                  return false;\n                }\n              }\n            }\n            module.debug('Position is on stage', position);\n            module.remove.attempts();\n            module.remove.loading();\n            if( settings.setFluidWidth && module.is.fluid() ) {\n              module.set.fluidWidth(calculations);\n            }\n            return true;\n          },\n\n          fluidWidth: function(calculations) {\n            calculations = calculations || module.get.calculations();\n            module.debug('Automatically setting element width to parent width', calculations.parent.width);\n            $popup.css('width', calculations.container.width);\n          },\n\n          variation: function(variation) {\n            variation = variation || module.get.variation();\n            if(variation && module.has.popup() ) {\n              module.verbose('Adding variation to popup', variation);\n              $popup.addClass(variation);\n            }\n          },\n\n          visible: function() {\n            $module.addClass(className.visible);\n          }\n        },\n\n        remove: {\n          loading: function() {\n            $popup.removeClass(className.loading);\n          },\n          variation: function(variation) {\n            variation = variation || module.get.variation();\n            if(variation) {\n              module.verbose('Removing variation', variation);\n              $popup.removeClass(variation);\n            }\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          attempts: function() {\n            module.verbose('Resetting all searched positions');\n            searchDepth    = 0;\n            triedPositions = false;\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.debug('Binding popup events to module');\n            if(settings.on == 'click') {\n              $module\n                .on(clickEvent + eventNamespace, module.toggle)\n              ;\n            }\n            if(settings.on == 'hover') {\n              $module\n                .on('touchstart' + eventNamespace, module.event.touchstart)\n              ;\n            }\n            if( module.get.startEvent() ) {\n              $module\n                .on(module.get.startEvent() + eventNamespace, module.event.start)\n                .on(module.get.endEvent() + eventNamespace, module.event.end)\n              ;\n            }\n            if(settings.target) {\n              module.debug('Target set to element', $target);\n            }\n            $window.on('resize' + elementNamespace, module.event.resize);\n          },\n          popup: function() {\n            module.verbose('Allowing hover events on popup to prevent closing');\n            if( $popup && module.has.popup() ) {\n              $popup\n                .on('mouseenter' + eventNamespace, module.event.start)\n                .on('mouseleave' + eventNamespace, module.event.end)\n              ;\n            }\n          },\n          close: function() {\n            if(settings.hideOnScroll === true || (settings.hideOnScroll == 'auto' && settings.on != 'click')) {\n              module.bind.closeOnScroll();\n            }\n            if(module.is.closable()) {\n              module.bind.clickaway();\n            }\n            else if(settings.on == 'hover' && openedWithTouch) {\n              module.bind.touchClose();\n            }\n          },\n          closeOnScroll: function() {\n            module.verbose('Binding scroll close event to document');\n            $scrollContext\n              .one(module.get.scrollEvent() + elementNamespace, module.event.hideGracefully)\n            ;\n          },\n          touchClose: function() {\n            module.verbose('Binding popup touchclose event to document');\n            $document\n              .on('touchstart' + elementNamespace, function(event) {\n                module.verbose('Touched away from popup');\n                module.event.hideGracefully.call(element, event);\n              })\n            ;\n          },\n          clickaway: function() {\n            module.verbose('Binding popup close event to document');\n            $document\n              .on(clickEvent + elementNamespace, function(event) {\n                module.verbose('Clicked away from popup');\n                module.event.hideGracefully.call(element, event);\n              })\n            ;\n          }\n        },\n\n        unbind: {\n          events: function() {\n            $window\n              .off(elementNamespace)\n            ;\n            $module\n              .off(eventNamespace)\n            ;\n          },\n          close: function() {\n            $document\n              .off(elementNamespace)\n            ;\n            $scrollContext\n              .off(elementNamespace)\n            ;\n          },\n        },\n\n        has: {\n          popup: function() {\n            return ($popup && $popup.length > 0);\n          }\n        },\n\n        should: {\n          centerArrow: function(calculations) {\n            return !module.is.basic() && calculations.target.width <= (settings.arrowPixelsFromEdge * 2);\n          },\n        },\n\n        is: {\n          closable: function() {\n            if(settings.closable == 'auto') {\n              if(settings.on == 'hover') {\n                return false;\n              }\n              return true;\n            }\n            return settings.closable;\n          },\n          offstage: function(distanceFromBoundary, position) {\n            var\n              offstage = []\n            ;\n            // return boundaries that have been surpassed\n            $.each(distanceFromBoundary, function(direction, distance) {\n              if(distance < -settings.jitter) {\n                module.debug('Position exceeds allowable distance from edge', direction, distance, position);\n                offstage.push(direction);\n              }\n            });\n            if(offstage.length > 0) {\n              return true;\n            }\n            else {\n              return false;\n            }\n          },\n          svg: function(element) {\n            return module.supports.svg() && (element instanceof SVGGraphicsElement);\n          },\n          basic: function() {\n            return $module.hasClass(className.basic);\n          },\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          animating: function() {\n            return ($popup !== undefined && $popup.hasClass(className.animating) );\n          },\n          fluid: function() {\n            return ($popup !== undefined && $popup.hasClass(className.fluid));\n          },\n          visible: function() {\n            return ($popup !== undefined && $popup.hasClass(className.popupVisible));\n          },\n          dropdown: function() {\n            return $module.hasClass(className.dropdown);\n          },\n          hidden: function() {\n            return !module.is.visible();\n          },\n          rtl: function () {\n            return $module.css('direction') == 'rtl';\n          }\n        },\n\n        reset: function() {\n          module.remove.visible();\n          if(settings.preserve) {\n            if($.fn.transition !== undefined) {\n              $popup\n                .transition('remove transition')\n              ;\n            }\n          }\n          else {\n            module.removePopup();\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if(Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.popup.settings = {\n\n  name           : 'Popup',\n\n  // module settings\n  silent         : false,\n  debug          : false,\n  verbose        : false,\n  performance    : true,\n  namespace      : 'popup',\n\n  // whether it should use dom mutation observers\n  observeChanges : true,\n\n  // callback only when element added to dom\n  onCreate       : function(){},\n\n  // callback before element removed from dom\n  onRemove       : function(){},\n\n  // callback before show animation\n  onShow         : function(){},\n\n  // callback after show animation\n  onVisible      : function(){},\n\n  // callback before hide animation\n  onHide         : function(){},\n\n  // callback when popup cannot be positioned in visible screen\n  onUnplaceable  : function(){},\n\n  // callback after hide animation\n  onHidden       : function(){},\n\n  // when to show popup\n  on             : 'hover',\n\n  // element to use to determine if popup is out of boundary\n  boundary       : window,\n\n  // whether to add touchstart events when using hover\n  addTouchEvents : true,\n\n  // default position relative to element\n  position       : 'top left',\n\n  // name of variation to use\n  variation      : '',\n\n  // whether popup should be moved to context\n  movePopup      : true,\n\n  // element which popup should be relative to\n  target         : false,\n\n  // jq selector or element that should be used as popup\n  popup          : false,\n\n  // popup should remain inline next to activator\n  inline         : false,\n\n  // popup should be removed from page on hide\n  preserve       : false,\n\n  // popup should not close when being hovered on\n  hoverable      : false,\n\n  // explicitly set content\n  content        : false,\n\n  // explicitly set html\n  html           : false,\n\n  // explicitly set title\n  title          : false,\n\n  // whether automatically close on clickaway when on click\n  closable       : true,\n\n  // automatically hide on scroll\n  hideOnScroll   : 'auto',\n\n  // hide other popups on show\n  exclusive      : false,\n\n  // context to attach popups\n  context        : 'body',\n\n  // context for binding scroll events\n  scrollContext  : window,\n\n  // position to prefer when calculating new position\n  prefer         : 'opposite',\n\n  // specify position to appear even if it doesn't fit\n  lastResort     : false,\n\n  // number of pixels from edge of popup to pointing arrow center (used from centering)\n  arrowPixelsFromEdge: 20,\n\n  // delay used to prevent accidental refiring of animations due to user error\n  delay : {\n    show : 50,\n    hide : 70\n  },\n\n  // whether fluid variation should assign width explicitly\n  setFluidWidth  : true,\n\n  // transition settings\n  duration       : 200,\n  transition     : 'scale',\n\n  // distance away from activating element in px\n  distanceAway   : 0,\n\n  // number of pixels an element is allowed to be \"offstage\" for a position to be chosen (allows for rounding)\n  jitter         : 2,\n\n  // offset on aligning axis from calculated position\n  offset         : 0,\n\n  // maximum times to look for a position before failing (9 positions total)\n  maxSearchDepth : 15,\n\n  error: {\n    invalidPosition : 'The position you specified is not a valid position',\n    cannotPlace     : 'Popup does not fit within the boundaries of the viewport',\n    method          : 'The method you called is not defined.',\n    noTransition    : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>',\n    notFound        : 'The target or popup you specified does not exist on the page'\n  },\n\n  metadata: {\n    activator : 'activator',\n    content   : 'content',\n    html      : 'html',\n    offset    : 'offset',\n    position  : 'position',\n    title     : 'title',\n    variation : 'variation'\n  },\n\n  className   : {\n    active       : 'active',\n    basic        : 'basic',\n    animating    : 'animating',\n    dropdown     : 'dropdown',\n    fluid        : 'fluid',\n    loading      : 'loading',\n    popup        : 'ui popup',\n    position     : 'top left center bottom right',\n    visible      : 'visible',\n    popupVisible : 'visible'\n  },\n\n  selector    : {\n    popup    : '.ui.popup'\n  },\n\n  templates: {\n    escape: function(string) {\n      var\n        badChars     = /[&<>\"'`]/g,\n        shouldEscape = /[&<>\"'`]/,\n        escape       = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#x27;\",\n          \"`\": \"&#x60;\"\n        },\n        escapedChar  = function(chr) {\n          return escape[chr];\n        }\n      ;\n      if(shouldEscape.test(string)) {\n        return string.replace(badChars, escapedChar);\n      }\n      return string;\n    },\n    popup: function(text) {\n      var\n        html   = '',\n        escape = $.fn.popup.settings.templates.escape\n      ;\n      if(typeof text !== undefined) {\n        if(typeof text.title !== undefined && text.title) {\n          text.title = escape(text.title);\n          html += '<div class=\"header\">' + text.title + '</div>';\n        }\n        if(typeof text.content !== undefined && text.content) {\n          text.content = escape(text.content);\n          html += '<div class=\"content\">' + text.content + '</div>';\n        }\n      }\n      return html;\n    }\n  }\n\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Fomantic-UI - Progress\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n'use strict';\n\n$.isFunction = $.isFunction || function(obj) {\n  return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.progress = function(parameters) {\n  var\n    $allModules    = $(this),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.progress.settings, parameters)\n          : $.extend({}, $.fn.progress.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $bars           = $(this).find(selector.bar),\n        $progresses     = $(this).find(selector.progress),\n        $label          = $(this).find(selector.label),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        animating = false,\n        transitionEnd,\n        module\n      ;\n      module = {\n        helper: {\n          sum: function (nums) {\n            return Array.isArray(nums) ? nums.reduce(function (left, right) {\n              return left + Number(right);\n            }, 0) : 0;\n          },\n          /**\n           * Derive precision for multiple progress with total and values.\n           *\n           * This helper dervices a precision that is sufficiently large to show minimum value of multiple progress.\n           *\n           * Example1\n           * - total: 1122\n           * - values: [325, 111, 74, 612]\n           * - min ratio: 74/1122 = 0.0659...\n           * - required precision:  100\n           *\n           * Example2\n           * - total: 10541\n           * - values: [3235, 1111, 74, 6121]\n           * - min ratio: 74/10541 = 0.0070...\n           * - required precision:   1000\n           *\n           * @param min A minimum value within multiple values\n           * @param total A total amount of multiple values\n           * @returns {number} A precison. Could be 1, 10, 100, ... 1e+10.\n           */\n          derivePrecision: function(min, total) {\n            var precisionPower = 0\n            var precision = 1;\n            var ratio = min / total;\n            while (precisionPower < 10) {\n              ratio = ratio * precision;\n              if (ratio > 1) {\n                break;\n              }\n              precision = Math.pow(10, precisionPower++);\n            }\n            return precision;\n          },\n          forceArray: function (element) {\n            return Array.isArray(element)\n              ? element\n              : !isNaN(element)\n                ? [element]\n                : typeof element == 'string'\n                  ? element.split(',')\n                  : []\n              ;\n          }\n        },\n\n        initialize: function() {\n          module.set.duration();\n          module.set.transitionEvent();\n          module.debug(element);\n\n          module.read.metadata();\n          module.read.settings();\n\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of progress', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n        destroy: function() {\n          module.verbose('Destroying previous progress for', $module);\n          clearInterval(instance.interval);\n          module.remove.state();\n          $module.removeData(moduleNamespace);\n          instance = undefined;\n        },\n\n        reset: function() {\n          module.remove.nextValue();\n          module.update.progress(0);\n        },\n\n        complete: function() {\n          if(module.percent === undefined || module.percent < 100) {\n            module.remove.progressPoll();\n            module.set.percent(100);\n          }\n        },\n\n        read: {\n          metadata: function() {\n            var\n              data = {\n                percent : module.helper.forceArray($module.data(metadata.percent)),\n                total   : $module.data(metadata.total),\n                value   : module.helper.forceArray($module.data(metadata.value))\n              }\n            ;\n            if(data.total) {\n              module.debug('Total value set from metadata', data.total);\n              module.set.total(data.total);\n            }\n            if(data.value.length > 0) {\n              module.debug('Current value set from metadata', data.value);\n              module.set.value(data.value);\n              module.set.progress(data.value);\n            }\n            if(data.percent.length > 0) {\n              module.debug('Current percent value set from metadata', data.percent);\n              module.set.percent(data.percent);\n            }\n          },\n          settings: function() {\n            if(settings.total !== false) {\n              module.debug('Current total set in settings', settings.total);\n              module.set.total(settings.total);\n            }\n            if(settings.value !== false) {\n              module.debug('Current value set in settings', settings.value);\n              module.set.value(settings.value);\n              module.set.progress(module.value);\n            }\n            if(settings.percent !== false) {\n              module.debug('Current percent set in settings', settings.percent);\n              module.set.percent(settings.percent);\n            }\n          }\n        },\n\n        bind: {\n          transitionEnd: function(callback) {\n            var\n              transitionEnd = module.get.transitionEnd()\n            ;\n            $bars\n              .one(transitionEnd + eventNamespace, function(event) {\n                clearTimeout(module.failSafeTimer);\n                callback.call(this, event);\n              })\n            ;\n            module.failSafeTimer = setTimeout(function() {\n              $bars.triggerHandler(transitionEnd);\n            }, settings.duration + settings.failSafeDelay);\n            module.verbose('Adding fail safe timer', module.timer);\n          }\n        },\n\n        increment: function(incrementValue) {\n          var\n            startValue,\n            newValue\n          ;\n          if( module.has.total() ) {\n            startValue     = module.get.value();\n            incrementValue = incrementValue || 1;\n          }\n          else {\n            startValue     = module.get.percent();\n            incrementValue = incrementValue || module.get.randomValue();\n          }\n          newValue = startValue + incrementValue;\n          module.debug('Incrementing percentage by', startValue, newValue, incrementValue);\n          newValue = module.get.normalizedValue(newValue);\n          module.set.progress(newValue);\n        },\n        decrement: function(decrementValue) {\n          var\n            total     = module.get.total(),\n            startValue,\n            newValue\n          ;\n          if(total) {\n            startValue     =  module.get.value();\n            decrementValue =  decrementValue || 1;\n            newValue       =  startValue - decrementValue;\n            module.debug('Decrementing value by', decrementValue, startValue);\n          }\n          else {\n            startValue     =  module.get.percent();\n            decrementValue =  decrementValue || module.get.randomValue();\n            newValue       =  startValue - decrementValue;\n            module.debug('Decrementing percentage by', decrementValue, startValue);\n          }\n          newValue = module.get.normalizedValue(newValue);\n          module.set.progress(newValue);\n        },\n\n        has: {\n          progressPoll: function() {\n            return module.progressPoll;\n          },\n          total: function() {\n            return (module.get.total() !== false);\n          }\n        },\n\n        get: {\n          text: function(templateText, index) {\n            var\n              index_  = index || 0,\n              value   = module.get.value(index_),\n              total   = module.total || 0,\n              percent = (animating)\n                ? module.get.displayPercent(index_)\n                : module.get.percent(index_),\n              left = (module.total > 0)\n                ? (total - value)\n                : (100 - percent)\n            ;\n            templateText = templateText || '';\n            templateText = templateText\n              .replace('{value}', value)\n              .replace('{total}', total)\n              .replace('{left}', left)\n              .replace('{percent}', percent)\n              .replace('{bar}', settings.text.bars[index_] || '')\n            ;\n            module.verbose('Adding variables to progress bar text', templateText);\n            return templateText;\n          },\n\n          normalizedValue: function(value) {\n            if(value < 0) {\n              module.debug('Value cannot decrement below 0');\n              return 0;\n            }\n            if(module.has.total()) {\n              if(value > module.total) {\n                module.debug('Value cannot increment above total', module.total);\n                return module.total;\n              }\n            }\n            else if(value > 100 ) {\n              module.debug('Value cannot increment above 100 percent');\n              return 100;\n            }\n            return value;\n          },\n\n          updateInterval: function() {\n            if(settings.updateInterval == 'auto') {\n              return settings.duration;\n            }\n            return settings.updateInterval;\n          },\n\n          randomValue: function() {\n            module.debug('Generating random increment percentage');\n            return Math.floor((Math.random() * settings.random.max) + settings.random.min);\n          },\n\n          numericValue: function(value) {\n            return (typeof value === 'string')\n              ? (value.replace(/[^\\d.]/g, '') !== '')\n                ? +(value.replace(/[^\\d.]/g, ''))\n                : false\n              : value\n            ;\n          },\n\n          transitionEnd: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          },\n\n          // gets current displayed percentage (if animating values this is the intermediary value)\n          displayPercent: function(index) {\n            var\n              $bar           = $($bars[index]),\n              barWidth       = $bar.width(),\n              totalWidth     = $module.width(),\n              minDisplay     = parseInt($bar.css('min-width'), 10),\n              displayPercent = (barWidth > minDisplay)\n                ? (barWidth / totalWidth * 100)\n                : module.percent\n            ;\n            return (settings.precision > 0)\n              ? Math.round(displayPercent * (10 * settings.precision)) / (10 * settings.precision)\n              : Math.round(displayPercent)\n              ;\n          },\n\n          percent: function(index) {\n            return module.percent && module.percent[index || 0] || 0;\n          },\n          value: function(index) {\n            return module.nextValue || module.value && module.value[index || 0] || 0;\n          },\n          total: function() {\n            return module.total || false;\n          }\n        },\n\n        create: {\n          progressPoll: function() {\n            module.progressPoll = setTimeout(function() {\n              module.update.toNextValue();\n              module.remove.progressPoll();\n            }, module.get.updateInterval());\n          },\n        },\n\n        is: {\n          complete: function() {\n            return module.is.success() || module.is.warning() || module.is.error();\n          },\n          success: function() {\n            return $module.hasClass(className.success);\n          },\n          warning: function() {\n            return $module.hasClass(className.warning);\n          },\n          error: function() {\n            return $module.hasClass(className.error);\n          },\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          visible: function() {\n            return $module.is(':visible');\n          }\n        },\n\n        remove: {\n          progressPoll: function() {\n            module.verbose('Removing progress poll timer');\n            if(module.progressPoll) {\n              clearTimeout(module.progressPoll);\n              delete module.progressPoll;\n            }\n          },\n          nextValue: function() {\n            module.verbose('Removing progress value stored for next update');\n            delete module.nextValue;\n          },\n          state: function() {\n            module.verbose('Removing stored state');\n            delete module.total;\n            delete module.percent;\n            delete module.value;\n          },\n          active: function() {\n            module.verbose('Removing active state');\n            $module.removeClass(className.active);\n          },\n          success: function() {\n            module.verbose('Removing success state');\n            $module.removeClass(className.success);\n          },\n          warning: function() {\n            module.verbose('Removing warning state');\n            $module.removeClass(className.warning);\n          },\n          error: function() {\n            module.verbose('Removing error state');\n            $module.removeClass(className.error);\n          }\n        },\n\n        set: {\n          barWidth: function(values) {\n            module.debug(\"set bar width with \", values);\n            values = module.helper.forceArray(values);\n            var firstNonZeroIndex = -1;\n            var lastNonZeroIndex = -1;\n            var valuesSum = module.helper.sum(values);\n            var barCounts = $bars.length;\n            var isMultiple = barCounts > 1;\n            var percents = values.map(function(value, index) {\n              var allZero = (index === barCounts - 1 && valuesSum === 0);\n              var $bar = $($bars[index]);\n              if (value === 0 && isMultiple && !allZero) {\n                $bar.css('display', 'none');\n              } else {\n                if (isMultiple && allZero) {\n                  $bar.css('background', 'transparent');\n                }\n                if (firstNonZeroIndex == -1) {\n                  firstNonZeroIndex = index;\n                }\n                lastNonZeroIndex = index;\n                $bar.css({\n                  display: 'block',\n                  width: value + '%'\n                });\n              }\n              return parseInt(value, 10);\n            });\n            values.forEach(function(_, index) {\n              var $bar = $($bars[index]);\n              $bar.css({\n                borderTopLeftRadius: index == firstNonZeroIndex ? '' : 0,\n                borderBottomLeftRadius: index == firstNonZeroIndex ? '' : 0,\n                borderTopRightRadius: index == lastNonZeroIndex ? '' : 0,\n                borderBottomRightRadius: index == lastNonZeroIndex ? '' : 0\n              });\n            });\n            $module\n              .attr('data-percent', percents)\n            ;\n          },\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            module.verbose('Setting progress bar transition duration', duration);\n            $bars\n              .css({\n                'transition-duration':  duration\n              })\n            ;\n          },\n          percent: function(percents) {\n            percents = module.helper.forceArray(percents).map(function(percent) {\n              return (typeof percent == 'string')\n                ? +(percent.replace('%', ''))\n                : percent\n                ;\n            });\n            var hasTotal = module.has.total();\n            var totalPecent = module.helper.sum(percents);\n            var isMultpleValues = percents.length > 1 && hasTotal;\n            var sumTotal = module.helper.sum(module.helper.forceArray(module.value));\n            if (isMultpleValues && sumTotal > module.total) {\n              // Sum values instead of pecents to avoid precision issues when summing floats\n              module.error(error.sumExceedsTotal, sumTotal, module.total);\n            } else if (!isMultpleValues && totalPecent > 100) {\n              // Sum before rouding since sum of rounded may have error though sum of actual is fine\n              module.error(error.tooHigh, totalPecent);\n            } else if (totalPecent < 0) {\n              module.error(error.tooLow, totalPecent);\n            } else {\n              var autoPrecision = settings.precision > 0\n                ? settings.precision\n                : isMultpleValues\n                  ? module.helper.derivePrecision(Math.min.apply(null, module.value), module.total)\n                  : undefined;\n\n              // round display percentage\n              percents = percents.map(function (percent) {\n                return (autoPrecision > 0)\n                  ? Math.round(percent * (10 * autoPrecision)) / (10 * autoPrecision)\n                  : Math.round(percent)\n                  ;\n              });\n              module.percent = percents;\n              if (!hasTotal) {\n                module.value = percents.map(function (percent) {\n                  return (autoPrecision > 0)\n                    ? Math.round((percent / 100) * module.total * (10 * autoPrecision)) / (10 * autoPrecision)\n                    : Math.round((percent / 100) * module.total * 10) / 10\n                    ;\n                });\n                if (settings.limitValues) {\n                  module.value = module.value.map(function (value) {\n                    return (value > 100)\n                      ? 100\n                      : (module.value < 0)\n                        ? 0\n                        : module.value;\n                  });\n                }\n              }\n              module.set.barWidth(percents);\n              module.set.labelInterval();\n              module.set.labels();\n            }\n            settings.onChange.call(element, percents, module.value, module.total);\n          },\n          labelInterval: function() {\n            var\n              animationCallback = function() {\n                module.verbose('Bar finished animating, removing continuous label updates');\n                clearInterval(module.interval);\n                animating = false;\n                module.set.labels();\n              }\n            ;\n            clearInterval(module.interval);\n            module.bind.transitionEnd(animationCallback);\n            animating = true;\n            module.interval = setInterval(function() {\n              var\n                isInDOM = $.contains(document.documentElement, element)\n              ;\n              if(!isInDOM) {\n                clearInterval(module.interval);\n                animating = false;\n              }\n              module.set.labels();\n            }, settings.framerate);\n          },\n          labels: function() {\n            module.verbose('Setting both bar progress and outer label text');\n            module.set.barLabel();\n            module.set.state();\n          },\n          label: function(text) {\n            text = text || '';\n            if(text) {\n              text = module.get.text(text);\n              module.verbose('Setting label to text', text);\n              $label.text(text);\n            }\n          },\n          state: function(percent) {\n            percent = (percent !== undefined)\n              ? percent\n              : module.helper.sum(module.percent)\n            ;\n            if(percent === 100) {\n              if(settings.autoSuccess && $bars.length === 1 && !(module.is.warning() || module.is.error() || module.is.success())) {\n                module.set.success();\n                module.debug('Automatically triggering success at 100%');\n              }\n              else {\n                module.verbose('Reached 100% removing active state');\n                module.remove.active();\n                module.remove.progressPoll();\n              }\n            }\n            else if(percent > 0) {\n              module.verbose('Adjusting active progress bar label', percent);\n              module.set.active();\n            }\n            else {\n              module.remove.active();\n              module.set.label(settings.text.active);\n            }\n          },\n          barLabel: function(text) {\n            $progresses.map(function(index, element){\n              var $progress = $(element);\n              if (text !== undefined) {\n                $progress.text( module.get.text(text, index) );\n              }\n              else if (settings.label == 'ratio' && module.total) {\n                module.verbose('Adding ratio to bar label');\n                $progress.text( module.get.text(settings.text.ratio, index) );\n              }\n              else if (settings.label == 'percent') {\n                module.verbose('Adding percentage to bar label');\n                $progress.text( module.get.text(settings.text.percent, index) );\n              }\n            });\n          },\n          active: function(text) {\n            text = text || settings.text.active;\n            module.debug('Setting active state');\n            if(settings.showActivity && !module.is.active() ) {\n              $module.addClass(className.active);\n            }\n            module.remove.warning();\n            module.remove.error();\n            module.remove.success();\n            text = settings.onLabelUpdate('active', text, module.value, module.total);\n            if(text) {\n              module.set.label(text);\n            }\n            module.bind.transitionEnd(function() {\n              settings.onActive.call(element, module.value, module.total);\n            });\n          },\n          success : function(text) {\n            text = text || settings.text.success || settings.text.active;\n            module.debug('Setting success state');\n            $module.addClass(className.success);\n            module.remove.active();\n            module.remove.warning();\n            module.remove.error();\n            module.complete();\n            if(settings.text.success) {\n              text = settings.onLabelUpdate('success', text, module.value, module.total);\n              module.set.label(text);\n            }\n            else {\n              text = settings.onLabelUpdate('active', text, module.value, module.total);\n              module.set.label(text);\n            }\n            module.bind.transitionEnd(function() {\n              settings.onSuccess.call(element, module.total);\n            });\n          },\n          warning : function(text) {\n            text = text || settings.text.warning;\n            module.debug('Setting warning state');\n            $module.addClass(className.warning);\n            module.remove.active();\n            module.remove.success();\n            module.remove.error();\n            module.complete();\n            text = settings.onLabelUpdate('warning', text, module.value, module.total);\n            if(text) {\n              module.set.label(text);\n            }\n            module.bind.transitionEnd(function() {\n              settings.onWarning.call(element, module.value, module.total);\n            });\n          },\n          error : function(text) {\n            text = text || settings.text.error;\n            module.debug('Setting error state');\n            $module.addClass(className.error);\n            module.remove.active();\n            module.remove.success();\n            module.remove.warning();\n            module.complete();\n            text = settings.onLabelUpdate('error', text, module.value, module.total);\n            if(text) {\n              module.set.label(text);\n            }\n            module.bind.transitionEnd(function() {\n              settings.onError.call(element, module.value, module.total);\n            });\n          },\n          transitionEvent: function() {\n            transitionEnd = module.get.transitionEnd();\n          },\n          total: function(totalValue) {\n            module.total = totalValue;\n          },\n          value: function(value) {\n            module.value = module.helper.forceArray(value);\n          },\n          progress: function(value) {\n            if(!module.has.progressPoll()) {\n              module.debug('First update in progress update interval, immediately updating', value);\n              module.update.progress(value);\n              module.create.progressPoll();\n            }\n            else {\n              module.debug('Updated within interval, setting next update to use new value', value);\n              module.set.nextValue(value);\n            }\n          },\n          nextValue: function(value) {\n            module.nextValue = value;\n          }\n        },\n\n        update: {\n          toNextValue: function() {\n            var\n              nextValue = module.nextValue\n            ;\n            if(nextValue) {\n              module.debug('Update interval complete using last updated value', nextValue);\n              module.update.progress(nextValue);\n              module.remove.nextValue();\n            }\n          },\n          progress: function(values) {\n            var hasTotal = module.has.total();\n            if (hasTotal) {\n              module.set.value(values);\n            }\n            var percentCompletes = module.helper.forceArray(values).map(function(value) {\n              var\n                percentComplete\n              ;\n              value = module.get.numericValue(value);\n              if (value === false) {\n                module.error(error.nonNumeric, value);\n              }\n              value = module.get.normalizedValue(value);\n              if (hasTotal) {\n                percentComplete = (value / module.total) * 100;\n                module.debug('Calculating percent complete from total', percentComplete);\n              }\n              else {\n                percentComplete = value;\n                module.debug('Setting value to exact percentage value', percentComplete);\n              }\n              return percentComplete;\n            });\n            module.set.percent( percentCompletes );\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if(Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.progress.settings = {\n\n  name         : 'Progress',\n  namespace    : 'progress',\n\n  silent       : false,\n  debug        : false,\n  verbose      : false,\n  performance  : true,\n\n  random       : {\n    min : 2,\n    max : 5\n  },\n\n  duration       : 300,\n\n  updateInterval : 'auto',\n\n  autoSuccess    : true,\n  showActivity   : true,\n  limitValues    : true,\n\n  label          : 'percent',\n  precision      : 0,\n  framerate      : (1000 / 30), /// 30 fps\n\n  percent        : false,\n  total          : false,\n  value          : false,\n\n  // delay in ms for fail safe animation callback\n  failSafeDelay : 100,\n\n  onLabelUpdate : function(state, text, value, total){\n    return text;\n  },\n  onChange      : function(percent, value, total){},\n  onSuccess     : function(total){},\n  onActive      : function(value, total){},\n  onError       : function(value, total){},\n  onWarning     : function(value, total){},\n\n  error    : {\n    method          : 'The method you called is not defined.',\n    nonNumeric      : 'Progress value is non numeric',\n    tooHigh         : 'Value specified is above 100%',\n    tooLow          : 'Value specified is below 0%',\n    sumExceedsTotal : 'Sum of multple values exceed total',\n  },\n\n  regExp: {\n    variable: /\\{\\$*[A-z0-9]+\\}/g\n  },\n\n  metadata: {\n    percent : 'percent',\n    total   : 'total',\n    value   : 'value'\n  },\n\n  selector : {\n    bar      : '> .bar',\n    label    : '> .label',\n    progress : '.bar > .progress'\n  },\n\n  text : {\n    active  : false,\n    error   : false,\n    success : false,\n    warning : false,\n    percent : '{percent}%',\n    ratio   : '{value} of {total}',\n    bars    : ['']\n  },\n\n  className : {\n    active  : 'active',\n    error   : 'error',\n    success : 'success',\n    warning : 'warning'\n  }\n\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Fomantic-UI - Slider\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.slider = function(parameters) {\n\n  var\n    $allModules    = $(this),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    alphabet       = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'],\n\n    SINGLE_STEP     = 1,\n    BIG_STEP        = 2,\n    NO_STEP         = 0,\n    SINGLE_BACKSTEP = -1,\n    BIG_BACKSTEP    = -2,\n\n    // Used to manage document bound events.\n    // Use this so that we can distinguish between which document events are bound to which range.\n    currentRange    = 0,\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.slider.settings, parameters)\n          : $.extend({}, $.fn.slider.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        error           = settings.error,\n        keys            = settings.keys,\n        interpretLabel  = settings.interpretLabel,\n\n        isHover         = false,\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $currThumb,\n        $thumb,\n        $secondThumb,\n        $track,\n        $trackFill,\n        $labels,\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        documentEventID,\n\n        value,\n        position,\n        secondPos,\n        offset,\n        precision,\n        isTouch,\n\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing slider', settings);\n\n          currentRange += 1;\n          documentEventID = currentRange;\n\n          isTouch = module.setup.testOutTouch();\n          module.setup.layout();\n          module.setup.labels();\n\n          if(!module.is.disabled()) {\n            module.bind.events();\n          }\n\n          module.read.metadata();\n          module.read.settings();\n\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of slider', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous slider for', $module);\n          clearInterval(instance.interval);\n          module.unbind.events();\n          module.unbind.slidingEvents();\n          $module.removeData(moduleNamespace);\n          instance = undefined;\n        },\n\n        setup: {\n          layout: function() {\n            if( $module.attr('tabindex') === undefined) {\n              $module.attr('tabindex', 0);\n            }\n            if($module.find('.inner').length == 0) {\n              $module.append(\"<div class='inner'>\"\n                             + \"<div class='track'></div>\"\n                             + \"<div class='track-fill'></div>\"\n                             + \"<div class='thumb'></div>\"\n                             + \"</div>\");\n            }\n            precision = module.get.precision();\n            $thumb = $module.find('.thumb:not(.second)');\n            $currThumb = $thumb;\n            if(module.is.range()) {\n              if($module.find('.thumb.second').length == 0) {\n                $module.find('.inner').append(\"<div class='thumb second'></div>\");\n              }\n              $secondThumb = $module.find('.thumb.second');\n            }\n            $track = $module.find('.track');\n            $trackFill = $module.find('.track-fill');\n            offset = $thumb.width() / 2;\n          },\n          labels: function() {\n            if(module.is.labeled()) {\n              $labels = $module.find('.labels:not(.auto)');\n              if($labels.length != 0) {\n                module.setup.customLabel();\n              } else {\n                module.setup.autoLabel();\n              }\n\n              if (settings.showLabelTicks) {\n                $module.addClass(className.ticked)\n              }\n            }\n          },\n          testOutTouch: function() {\n            try {\n             document.createEvent('TouchEvent');\n             return true;\n            } catch (e) {\n             return false;\n            }\n          },\n          customLabel: function() {\n            var\n              $children   = $labels.find('.label'),\n              numChildren = $children.length,\n              min         = module.get.min(),\n              max         = module.get.max(),\n              ratio\n            ;\n            $children.each(function(index) {\n              var\n                $child = $(this),\n                attrValue = $child.attr('data-value')\n              ;\n              if(attrValue) {\n                attrValue = attrValue > max ? max : attrValue < min ? min : attrValue;\n                ratio = (attrValue - min) / (max - min);\n              } else {\n                ratio = (index + 1) / (numChildren + 1);\n              }\n              module.update.labelPosition(ratio, $(this));\n            });\n          },\n          autoLabel: function() {\n            if(module.get.step() != 0) {\n              $labels = $module.find('.labels');\n              if($labels.length != 0) {\n                $labels.empty();\n              }\n              else {\n                $labels = $module.append('<ul class=\"auto labels\"></ul>').find('.labels');\n              }\n              for(var i = 0, len = module.get.numLabels(); i <= len; i++) {\n                var\n                  labelText = module.get.label(i),\n                  $label = (labelText !== \"\") ? $('<li class=\"label\">' + labelText + '</li>') : null,\n                  ratio  = i / len\n                ;\n                if($label) {\n                  module.update.labelPosition(ratio, $label);\n                  $labels.append($label);\n                }\n              }\n            }\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.bind.globalKeyboardEvents();\n            module.bind.keyboardEvents();\n            module.bind.mouseEvents();\n            if(module.is.touch()) {\n              module.bind.touchEvents();\n            }\n          },\n          keyboardEvents: function() {\n            module.verbose('Binding keyboard events');\n            $module.on('keydown' + eventNamespace, module.event.keydown);\n          },\n          globalKeyboardEvents: function() {\n            $(document).on('keydown' + eventNamespace + documentEventID, module.event.activateFocus);\n          },\n          mouseEvents: function() {\n            module.verbose('Binding mouse events');\n            $module.find('.track, .thumb, .inner').on('mousedown' + eventNamespace, function(event) {\n              event.stopImmediatePropagation();\n              event.preventDefault();\n              module.event.down(event);\n            });\n            $module.on('mousedown' + eventNamespace, module.event.down);\n            $module.on('mouseenter' + eventNamespace, function(event) {\n              isHover = true;\n            });\n            $module.on('mouseleave' + eventNamespace, function(event) {\n              isHover = false;\n            });\n          },\n          touchEvents: function() {\n            module.verbose('Binding touch events');\n            $module.find('.track, .thumb, .inner').on('touchstart' + eventNamespace, function(event) {\n              event.stopImmediatePropagation();\n              event.preventDefault();\n              module.event.down(event);\n            });\n            $module.on('touchstart' + eventNamespace, module.event.down);\n          },\n          slidingEvents: function() {\n            // these don't need the identifier because we only ever want one of them to be registered with document\n            module.verbose('Binding page wide events while handle is being draged');\n            if(module.is.touch()) {\n              $(document).on('touchmove' + eventNamespace, module.event.move);\n              $(document).on('touchend' + eventNamespace, module.event.up);\n            }\n            else {\n              $(document).on('mousemove' + eventNamespace, module.event.move);\n              $(document).on('mouseup' + eventNamespace, module.event.up);\n            }\n          }\n        },\n\n        unbind: {\n          events: function() {\n            $module.find('.track, .thumb, .inner').off('mousedown' + eventNamespace);\n            $module.find('.track, .thumb, .inner').off('touchstart' + eventNamespace);\n            $module.off('mousedown' + eventNamespace);\n            $module.off('mouseenter' + eventNamespace);\n            $module.off('mouseleave' + eventNamespace);\n            $module.off('touchstart' + eventNamespace);\n            $module.off('keydown' + eventNamespace);\n            $module.off('focusout' + eventNamespace);\n            $(document).off('keydown' + eventNamespace + documentEventID, module.event.activateFocus);\n          },\n          slidingEvents: function() {\n            if(module.is.touch()) {\n              $(document).off('touchmove' + eventNamespace);\n              $(document).off('touchend' + eventNamespace);\n            } else {\n              $(document).off('mousemove' + eventNamespace);\n              $(document).off('mouseup' + eventNamespace);\n            }\n          },\n        },\n\n        event: {\n          down: function(event, originalEvent) {\n            event.preventDefault();\n            if(module.is.range()) {\n              var\n                eventPos = module.determine.eventPos(event, originalEvent),\n                newPos = module.determine.pos(eventPos)\n              ;\n              $currThumb = module.determine.closestThumb(newPos);\n            }\n            if(!module.is.disabled()) {\n              module.bind.slidingEvents();\n            }\n          },\n          move: function(event, originalEvent) {\n            event.preventDefault();\n            var value = module.determine.valueFromEvent(event, originalEvent);\n            if(module.get.step() == 0 || module.is.smooth()) {\n              var\n                thumbVal = module.thumbVal,\n                secondThumbVal = module.secondThumbVal,\n                thumbSmoothVal = module.determine.smoothValueFromEvent(event, originalEvent)\n              ;\n              if(!$currThumb.hasClass('second')) {\n                thumbVal = value;\n              } else {\n                secondThumbVal = value;\n              }\n              value = Math.abs(thumbVal - (secondThumbVal || 0));\n              module.update.position(thumbSmoothVal);\n              settings.onMove.call(element, value, thumbVal, secondThumbVal);\n            } else {\n              module.update.value(value, function(value, thumbVal, secondThumbVal) {\n                settings.onMove.call(element, value, thumbVal, secondThumbVal);\n              });\n            }\n          },\n          up: function(event, originalEvent) {\n            event.preventDefault();\n            var value = module.determine.valueFromEvent(event, originalEvent);\n            module.set.value(value);\n            module.unbind.slidingEvents();\n          },\n          keydown: function(event, first) {\n            if(module.is.focused()) {\n              $(document).trigger(event);\n            }\n            if(first || module.is.focused()) {\n              var step = module.determine.keyMovement(event);\n              if(step != NO_STEP) {\n                event.preventDefault();\n                switch(step) {\n                  case SINGLE_STEP:\n                    module.takeStep();\n                    break;\n                  case BIG_STEP:\n                    module.takeStep(module.get.multiplier());\n                    break;\n                  case SINGLE_BACKSTEP:\n                    module.backStep();\n                    break;\n                  case BIG_BACKSTEP:\n                    module.backStep(module.get.multiplier());\n                    break;\n                }\n              }\n            }\n          },\n          activateFocus: function(event) {\n            if(!module.is.focused() && module.is.hover() && module.determine.keyMovement(event) != NO_STEP) {\n              event.preventDefault();\n              module.event.keydown(event, true);\n              $module.focus();\n            }\n          },\n        },\n\n        resync: function() {\n          module.verbose('Resyncing thumb position based on value');\n          if(module.is.range()) {\n            module.update.position(module.secondThumbVal, $secondThumb);\n          }\n          module.update.position(module.thumbVal, $thumb);\n          module.setup.labels();\n        },\n        takeStep: function(multiplier) {\n          var\n            multiplier = multiplier != undefined ? multiplier : 1,\n            step = module.get.step(),\n            currValue = module.get.currentThumbValue()\n          ;\n          module.verbose('Taking a step');\n          if(step > 0) {\n            module.set.value(currValue + step * multiplier);\n          } else if (step == 0){\n            var\n              precision = module.get.precision(),\n              newValue = currValue + (multiplier/precision)\n            ;\n            module.set.value(Math.round(newValue * precision) / precision);\n          }\n        },\n\n        backStep: function(multiplier) {\n          var\n            multiplier = multiplier != undefined ? multiplier : 1,\n            step = module.get.step(),\n            currValue = module.get.currentThumbValue()\n          ;\n          module.verbose('Going back a step');\n          if(step > 0) {\n            module.set.value(currValue - step * multiplier);\n          } else if (step == 0) {\n            var\n              precision = module.get.precision(),\n              newValue = currValue - (multiplier/precision)\n            ;\n            module.set.value(Math.round(newValue * precision) / precision);\n          }\n        },\n\n        is: {\n          range: function() {\n            return $module.hasClass(settings.className.range);\n          },\n          hover: function() {\n            return isHover;\n          },\n          focused: function() {\n            return $module.is(':focus');\n          },\n          disabled: function() {\n            return $module.hasClass(settings.className.disabled);\n          },\n          labeled: function() {\n            return $module.hasClass(settings.className.labeled);\n          },\n          reversed: function() {\n            return $module.hasClass(settings.className.reversed);\n          },\n          vertical: function() {\n            return $module.hasClass(settings.className.vertical);\n          },\n          smooth: function() {\n            return settings.smooth || $module.hasClass(settings.className.smooth);\n          },\n          touch: function() {\n            return isTouch;\n          }\n        },\n\n        get: {\n          trackOffset: function() {\n            if (module.is.vertical()) {\n              return $track.offset().top;\n            } else {\n              return $track.offset().left;\n            }\n          },\n          trackLength: function() {\n            if (module.is.vertical()) {\n              return $track.height();\n            } else {\n              return $track.width();\n            }\n          },\n          trackLeft: function() {\n            if (module.is.vertical()) {\n              return $track.position().top;\n            } else {\n              return $track.position().left;\n            }\n          },\n          trackStartPos: function() {\n            return module.is.reversed() ? module.get.trackLeft() + module.get.trackLength() : module.get.trackLeft();\n          },\n          trackEndPos: function() {\n            return module.is.reversed() ? module.get.trackLeft() : module.get.trackLeft() + module.get.trackLength();\n          },\n          trackStartMargin: function () {\n            var margin;\n            if (module.is.vertical()) {\n              margin = module.is.reversed() ? $module.css('padding-bottom') : $module.css('padding-top');\n            } else {\n              margin = module.is.reversed() ? $module.css('padding-right') : $module.css('padding-left');\n            }\n            return margin || '0px';\n          },\n          trackEndMargin: function () {\n            var margin;\n            if (module.is.vertical()) {\n              margin = module.is.reversed() ? $module.css('padding-top') : $module.css('padding-bottom');\n            } else {\n              margin = module.is.reversed() ? $module.css('padding-left') : $module.css('padding-right');\n            }\n            return margin || '0px';\n          },\n          precision: function() {\n            var\n              decimalPlaces,\n              step = module.get.step()\n            ;\n            if(step != 0) {\n              var split = String(step).split('.');\n              if(split.length == 2) {\n                decimalPlaces = split[1].length;\n              } else {\n                decimalPlaces = 0;\n              }\n            } else {\n              decimalPlaces = settings.decimalPlaces;\n            }\n            var precision = Math.pow(10, decimalPlaces);\n            module.debug('Precision determined', precision);\n            return precision;\n          },\n          min: function() {\n            return settings.min;\n          },\n          max: function() {\n            var step = module.get.step(),\n                min = module.get.min(),\n                quotient = step === 0 ? 0 : Math.floor((settings.max - min) / step),\n                remainder = step === 0 ? 0 : (settings.max - min) % step;\n            return remainder === 0 ? settings.max : min + quotient * step;\n          },\n          step: function() {\n            return settings.step;\n          },\n          numLabels: function() {\n            var value = Math.round((module.get.max() - module.get.min()) / module.get.step());\n            module.debug('Determined that there should be ' + value + ' labels');\n            return value;\n          },\n          labelType: function() {\n            return settings.labelType;\n          },\n          label: function(value) {\n            if(interpretLabel) {\n              return interpretLabel(value);\n            }\n\n            switch (settings.labelType) {\n              case settings.labelTypes.number:\n                return Math.round(((value * module.get.step()) + module.get.min()) * precision ) / precision;\n              case settings.labelTypes.letter:\n                return alphabet[(value) % 26];\n              default:\n                return value;\n            }\n          },\n          value: function() {\n            return value;\n          },\n          currentThumbValue: function() {\n            return $currThumb.hasClass('second') ? module.secondThumbVal : module.thumbVal;\n          },\n          thumbValue: function(which) {\n            switch(which) {\n              case 'second':\n                if(module.is.range()) {\n                  return module.secondThumbVal;\n                }\n                else {\n                  module.error(error.notrange);\n                  break;\n                }\n              case 'first':\n              default:\n                return module.thumbVal;\n            }\n          },\n          multiplier: function() {\n            return settings.pageMultiplier;\n          },\n          thumbPosition: function(which) {\n            switch(which) {\n              case 'second':\n                if(module.is.range()) {\n                  return secondPos;\n                }\n                else {\n                  module.error(error.notrange);\n                  break;\n                }\n              case 'first':\n              default:\n                return position;\n            }\n          }\n        },\n\n        determine: {\n          pos: function(pagePos) {\n            return module.is.reversed()\n              ?\n              module.get.trackStartPos() - pagePos + module.get.trackOffset()\n              :\n              pagePos - module.get.trackOffset() - module.get.trackStartPos()\n            ;\n          },\n          closestThumb: function(eventPos) {\n            var\n              thumbPos = parseFloat(module.determine.thumbPos($thumb)),\n              thumbDelta = Math.abs(eventPos - thumbPos),\n              secondThumbPos = parseFloat(module.determine.thumbPos($secondThumb)),\n              secondThumbDelta = Math.abs(eventPos - secondThumbPos)\n            ;\n            return thumbDelta <= secondThumbDelta ? $thumb : $secondThumb;\n          },\n          closestThumbPos: function(eventPos) {\n            var\n              thumbPos = parseFloat(module.determine.thumbPos($thumb)),\n              thumbDelta = Math.abs(eventPos - thumbPos),\n              secondThumbPos = parseFloat(module.determine.thumbPos($secondThumb)),\n              secondThumbDelta = Math.abs(eventPos - secondThumbPos)\n            ;\n            return thumbDelta <= secondThumbDelta ? thumbPos : secondThumbPos;\n          },\n          thumbPos: function($element) {\n            var pos =\n              module.is.vertical()\n              ?\n              module.is.reversed() ? $element.css('bottom') : $element.css('top')\n              :\n              module.is.reversed() ? $element.css('right') : $element.css('left')\n            ;\n            return pos;\n          },\n          positionFromValue: function(value) {\n            var\n              min = module.get.min(),\n              max = module.get.max(),\n              value = value > max ? max : value < min ? min : value,\n              trackLength = module.get.trackLength(),\n              ratio = (value - min) / (max - min),\n              position = Math.round(ratio * trackLength)\n            ;\n            module.verbose('Determined position: ' + position + ' from value: ' + value);\n            return position;\n          },\n          positionFromRatio: function(ratio) {\n            var\n              trackLength = module.get.trackLength(),\n              step = module.get.step(),\n              position = Math.round(ratio * trackLength),\n              adjustedPos = (step == 0) ? position : Math.round(position / step) * step\n            ;\n            return adjustedPos;\n          },\n          valueFromEvent: function(event, originalEvent) {\n            var\n              eventPos = module.determine.eventPos(event, originalEvent),\n              newPos = module.determine.pos(eventPos),\n              value\n            ;\n            if(eventPos < module.get.trackOffset()) {\n              value = module.is.reversed() ? module.get.max() : module.get.min();\n            } else if(eventPos > module.get.trackOffset() + module.get.trackLength()) {\n              value = module.is.reversed() ? module.get.min() : module.get.max();\n            } else {\n              value = module.determine.value(newPos);\n            }\n            return value;\n          },\n          smoothValueFromEvent: function(event, originalEvent) {\n            var\n              min = module.get.min(),\n              max = module.get.max(),\n              trackLength = module.get.trackLength(),\n              eventPos = module.determine.eventPos(event, originalEvent),\n              newPos = eventPos - module.get.trackOffset(),\n              ratio,\n              value\n            ;\n            newPos = newPos < 0 ? 0 : newPos > trackLength ? trackLength : newPos;\n            ratio = newPos / trackLength;\n            if (module.is.reversed()) {\n              ratio = 1 - ratio;\n            }\n            value = ratio * (max - min) + min;\n            return value;\n          },\n          eventPos: function(event, originalEvent) {\n            if(module.is.touch()) {\n              var\n                touchY = event.changedTouches[0].pageY || event.touches[0].pageY,\n                touchX = event.changedTouches[0].pageX || event.touches[0].pageX\n              ;\n              return module.is.vertical() ? touchY : touchX;\n            }\n            var\n              clickY = event.pageY || originalEvent.pageY,\n              clickX = event.pageX || originalEvent.pageX\n            ;\n            return module.is.vertical() ? clickY : clickX;\n          },\n          value: function(position) {\n            var\n              startPos = module.is.reversed() ? module.get.trackEndPos() : module.get.trackStartPos(),\n              endPos = module.is.reversed() ? module.get.trackStartPos() : module.get.trackEndPos(),\n              ratio = (position - startPos) / (endPos - startPos),\n              range = module.get.max() - module.get.min(),\n              step = module.get.step(),\n              value = (ratio * range),\n              difference = (step == 0) ? value : Math.round(value / step) * step\n            ;\n            module.verbose('Determined value based upon position: ' + position + ' as: ' + value);\n            if(value != difference) {\n              module.verbose('Rounding value to closest step: ' + difference);\n            }\n            // Use precision to avoid ugly Javascript floating point rounding issues\n            // (like 35 * .01 = 0.35000000000000003)\n            difference = Math.round(difference * precision) / precision;\n            module.verbose('Cutting off additional decimal places');\n            return difference + module.get.min();\n          },\n          keyMovement: function(event) {\n            var\n              key = event.which,\n              downArrow =\n                module.is.vertical()\n                ?\n                module.is.reversed() ? keys.downArrow : keys.upArrow\n                :\n                keys.downArrow\n              ,\n              upArrow =\n                module.is.vertical()\n                ?\n                module.is.reversed() ? keys.upArrow : keys.downArrow\n                :\n                keys.upArrow\n              ,\n              leftArrow =\n                !module.is.vertical()\n                ?\n                module.is.reversed() ? keys.rightArrow : keys.leftArrow\n                :\n                keys.leftArrow\n              ,\n              rightArrow =\n                !module.is.vertical()\n                ?\n                module.is.reversed() ? keys.leftArrow : keys.rightArrow\n                :\n                keys.rightArrow\n            ;\n            if(key == downArrow || key == leftArrow) {\n              return SINGLE_BACKSTEP;\n            } else if(key == upArrow || key == rightArrow) {\n              return SINGLE_STEP;\n            } else if (key == keys.pageDown) {\n              return BIG_BACKSTEP;\n            } else if (key == keys.pageUp) {\n              return BIG_STEP;\n            } else {\n              return NO_STEP;\n            }\n          }\n        },\n\n        handleNewValuePosition: function(val) {\n          var\n            min = module.get.min(),\n            max = module.get.max(),\n            newPos\n          ;\n          if (val <= min) {\n            val = min;\n          } else if (val >= max) {\n            val = max;\n          }\n          newPos = module.determine.positionFromValue(val);\n          return newPos;\n        },\n\n        set: {\n          value: function(newValue) {\n            module.update.value(newValue, function(value, thumbVal, secondThumbVal) {\n              settings.onChange.call(element, value, thumbVal, secondThumbVal);\n              settings.onMove.call(element, value, thumbVal, secondThumbVal);\n            });\n          },\n          rangeValue: function(first, second) {\n            if(module.is.range()) {\n              var\n                min = module.get.min(),\n                max = module.get.max()\n              ;\n              if (first <= min) {\n                first = min;\n              } else if(first >= max){\n                first = max;\n              }\n              if (second <= min) {\n                second = min;\n              } else if(second >= max){\n                second = max;\n              }\n              module.thumbVal = first;\n              module.secondThumbVal = second;\n              value = Math.abs(module.thumbVal - module.secondThumbVal);\n              module.update.position(module.thumbVal, $thumb);\n              module.update.position(module.secondThumbVal, $secondThumb);\n              settings.onChange.call(element, value, module.thumbVal, module.secondThumbVal);\n              settings.onMove.call(element, value, module.thumbVal, module.secondThumbVal);\n            } else {\n              module.error(error.notrange);\n            }\n          },\n          position: function(position, which) {\n            var thumbVal = module.determine.value(position);\n            switch (which) {\n              case 'second':\n                module.secondThumbVal = thumbVal;\n                module.update.position(thumbVal, $secondThumb);\n                break;\n              default:\n                module.thumbVal = thumbVal;\n                module.update.position(thumbVal, $thumb);\n            }\n            value = Math.abs(module.thumbVal - (module.secondThumbVal || 0));\n            module.set.value(value);\n          }\n        },\n\n        update: {\n          value: function(newValue, callback) {\n            var\n              min = module.get.min(),\n              max = module.get.max()\n            ;\n            if (newValue <= min) {\n              newValue = min;\n            } else if(newValue >= max){\n              newValue = max;\n            }\n            if(!module.is.range()) {\n              value = newValue;\n              module.thumbVal = value;\n            } else {\n              if(!$currThumb.hasClass('second')) {\n                module.thumbVal = newValue;\n              } else {\n                module.secondThumbVal = newValue;\n              }\n              value = Math.abs(module.thumbVal - module.secondThumbVal);\n            }\n            module.update.position(newValue);\n            module.debug('Setting slider value to ' + value);\n            if(typeof callback === 'function') {\n              callback(value, module.thumbVal, module.secondThumbVal);\n            }\n          },\n          position: function(newValue, $element) {\n            var\n              newPos = module.handleNewValuePosition(newValue),\n              $targetThumb = $element != undefined ? $element : $currThumb,\n              thumbVal = module.thumbVal || module.get.min(),\n              secondThumbVal = module.secondThumbVal || module.get.min()\n            ;\n            if(module.is.range()) {\n              if(!$targetThumb.hasClass('second')) {\n                position = newPos;\n                thumbVal = newValue;\n              } else {\n                secondPos = newPos;\n                secondThumbVal = newValue;\n              }\n            } else {\n              position = newPos;\n              thumbVal = newValue;\n            }\n            var\n              trackPosValue,\n              thumbPosValue,\n              min = module.get.min(),\n              max = module.get.max(),\n              thumbPosPercent = 100 * (newValue - min) / (max - min),\n              trackStartPosPercent = 100 * (Math.min(thumbVal, secondThumbVal) - min) / (max - min),\n              trackEndPosPercent = 100 * (1 - (Math.max(thumbVal, secondThumbVal) - min) / (max - min))\n            ;\n            if (module.is.vertical()) {\n              if (module.is.reversed()) {\n                thumbPosValue = {bottom: 'calc(' + thumbPosPercent + '% - ' + offset + 'px)', top: 'auto'};\n                trackPosValue = {bottom: trackStartPosPercent + '%', top: trackEndPosPercent + '%'};\n              }\n              else {\n                thumbPosValue = {top: 'calc(' + thumbPosPercent + '% - ' + offset + 'px)', bottom: 'auto'};\n                trackPosValue = {top: trackStartPosPercent + '%', bottom: trackEndPosPercent + '%'};\n              }\n            } else {\n              if (module.is.reversed()) {\n                thumbPosValue = {right: 'calc(' + thumbPosPercent + '% - ' + offset + 'px)', left: 'auto'};\n                trackPosValue = {right: trackStartPosPercent + '%', left: trackEndPosPercent + '%'};\n              }\n              else {\n                thumbPosValue = {left: 'calc(' + thumbPosPercent + '% - ' + offset + 'px)', right: 'auto'};\n                trackPosValue = {left: trackStartPosPercent + '%', right: trackEndPosPercent + '%'};\n              }\n            }\n            $targetThumb.css(thumbPosValue);\n            $trackFill.css(trackPosValue);\n            module.debug('Setting slider position to ' + newPos);\n          },\n          labelPosition: function (ratio, $label) {\n            var\n              startMargin = module.get.trackStartMargin(),\n              endMargin   = module.get.trackEndMargin(),\n              posDir =\n                module.is.vertical()\n                ?\n                module.is.reversed() ? 'bottom' : 'top'\n                :\n                  module.is.reversed() ? 'right' : 'left',\n              startMarginMod = module.is.reversed() && !module.is.vertical() ? ' - ' : ' + '\n            ;\n            var position = '(100% - ' + startMargin + ' - ' + endMargin + ') * ' + ratio;\n            $label.css(posDir, 'calc(' + position + startMarginMod + startMargin + ')');\n          }\n        },\n\n        goto: {\n          max: function() {\n            module.set.value(module.get.max());\n          },\n          min: function() {\n            module.set.value(module.get.min());\n          },\n        },\n\n        read: {\n          metadata: function() {\n            var\n              data = {\n                thumbVal        : $module.data(metadata.thumbVal),\n                secondThumbVal  : $module.data(metadata.secondThumbVal)\n              }\n            ;\n            if(data.thumbVal) {\n              if(module.is.range() && data.secondThumbVal) {\n                module.debug('Current value set from metadata', data.thumbVal, data.secondThumbVal);\n                module.set.rangeValue(data.thumbVal, data.secondThumbVal);\n              } else {\n                module.debug('Current value set from metadata', data.thumbVal);\n                module.set.value(data.thumbVal);\n              }\n            }\n          },\n          settings: function() {\n            if(settings.start !== false) {\n              if(module.is.range()) {\n                module.debug('Start position set from settings', settings.start, settings.end);\n                module.set.rangeValue(settings.start, settings.end);\n              } else {\n                module.debug('Start position set from settings', settings.start);\n                module.set.value(settings.start);\n              }\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n\n};\n\n$.fn.slider.settings = {\n\n  silent       : false,\n  debug        : false,\n  verbose      : false,\n  performance  : true,\n\n  name         : 'Slider',\n  namespace    : 'slider',\n\n  error    : {\n    method    : 'The method you called is not defined.',\n    notrange : 'This slider is not a range slider'\n  },\n\n  metadata: {\n    thumbVal        : 'thumbVal',\n    secondThumbVal  : 'secondThumbVal'\n  },\n\n  min            : 0,\n  max            : 20,\n  step           : 1,\n  start          : 0,\n  end            : 20,\n  labelType      : 'number',\n  showLabelTicks : false,\n  smooth         : false,\n\n  //the decimal place to round to if step is undefined\n  decimalPlaces  : 2,\n\n  // page up/down multiplier. How many more times the steps to take on page up/down press\n  pageMultiplier : 2,\n\n  selector: {\n\n  },\n\n  className     : {\n    reversed : 'reversed',\n    disabled : 'disabled',\n    labeled  : 'labeled',\n    ticked   : 'ticked',\n    vertical : 'vertical',\n    range    : 'range',\n    smooth   : 'smooth'\n  },\n\n  keys : {\n    pageUp     : 33,\n    pageDown   : 34,\n    leftArrow  : 37,\n    upArrow    : 38,\n    rightArrow : 39,\n    downArrow  : 40\n  },\n\n  labelTypes    : {\n    number  : 'number',\n    letter  : 'letter'\n  },\n\n  onChange : function(value, thumbVal, secondThumbVal){},\n  onMove   : function(value, thumbVal, secondThumbVal){},\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Fomantic-UI - Rating\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n'use strict';\n\n$.isFunction = $.isFunction || function(obj) {\n  return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.rating = function(parameters) {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.rating.settings, parameters)\n          : $.extend({}, $.fn.rating.settings),\n\n        namespace       = settings.namespace,\n        className       = settings.className,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        element         = this,\n        instance        = $(this).data(moduleNamespace),\n\n        $module         = $(this),\n        $icon           = $module.find(selector.icon),\n\n        initialLoad,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing rating module', settings);\n\n          if($icon.length === 0) {\n            module.setup.layout();\n          }\n\n          if(settings.interactive && !module.is.disabled()) {\n            module.enable();\n          }\n          else {\n            module.disable();\n          }\n          module.set.initialLoad();\n          module.set.rating( module.get.initialRating() );\n          module.remove.initialLoad();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Instantiating module', settings);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance', instance);\n          module.remove.events();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          $icon   = $module.find(selector.icon);\n        },\n\n        setup: {\n          layout: function() {\n            var\n              maxRating = module.get.maxRating(),\n              icon      = module.get.icon(),\n              html      = $.fn.rating.settings.templates.icon(maxRating, icon)\n            ;\n            module.debug('Generating icon html dynamically');\n            $module\n              .html(html)\n            ;\n            module.refresh();\n          }\n        },\n\n        event: {\n          mouseenter: function() {\n            var\n              $activeIcon = $(this)\n            ;\n            $activeIcon\n              .nextAll()\n                .removeClass(className.selected)\n            ;\n            $module\n              .addClass(className.selected)\n            ;\n            $activeIcon\n              .addClass(className.selected)\n                .prevAll()\n                .addClass(className.selected)\n            ;\n          },\n          mouseleave: function() {\n            $module\n              .removeClass(className.selected)\n            ;\n            $icon\n              .removeClass(className.selected)\n            ;\n          },\n          click: function() {\n            var\n              $activeIcon   = $(this),\n              currentRating = module.get.rating(),\n              rating        = $icon.index($activeIcon) + 1,\n              canClear      = (settings.clearable == 'auto')\n               ? ($icon.length === 1)\n               : settings.clearable\n            ;\n            if(canClear && currentRating == rating) {\n              module.clearRating();\n            }\n            else {\n              module.set.rating( rating );\n            }\n          }\n        },\n\n        clearRating: function() {\n          module.debug('Clearing current rating');\n          module.set.rating(0);\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding events');\n            $module\n              .on('mouseenter' + eventNamespace, selector.icon, module.event.mouseenter)\n              .on('mouseleave' + eventNamespace, selector.icon, module.event.mouseleave)\n              .on('click'      + eventNamespace, selector.icon, module.event.click)\n            ;\n          }\n        },\n\n        remove: {\n          events: function() {\n            module.verbose('Removing events');\n            $module\n              .off(eventNamespace)\n            ;\n          },\n          initialLoad: function() {\n            initialLoad = false;\n          }\n        },\n\n        enable: function() {\n          module.debug('Setting rating to interactive mode');\n          module.bind.events();\n          $module\n            .removeClass(className.disabled)\n          ;\n        },\n\n        disable: function() {\n          module.debug('Setting rating to read-only mode');\n          module.remove.events();\n          $module\n            .addClass(className.disabled)\n          ;\n        },\n\n        is: {\n          initialLoad: function() {\n            return initialLoad;\n          },\n          disabled: function() {\n            return $module.hasClass(className.disabled);\n          }\n        },\n\n        get: {\n          icon: function(){\n            var icon = $module.data(metadata.icon);\n            if (icon) {\n              $module.removeData(metadata.icon);\n            }\n            return icon || settings.icon;\n          },\n          initialRating: function() {\n            if($module.data(metadata.rating) !== undefined) {\n              $module.removeData(metadata.rating);\n              return $module.data(metadata.rating);\n            }\n            return settings.initialRating;\n          },\n          maxRating: function() {\n            if($module.data(metadata.maxRating) !== undefined) {\n              $module.removeData(metadata.maxRating);\n              return $module.data(metadata.maxRating);\n            }\n            return settings.maxRating;\n          },\n          rating: function() {\n            var\n              currentRating = $icon.filter('.' + className.active).length\n            ;\n            module.verbose('Current rating retrieved', currentRating);\n            return currentRating;\n          }\n        },\n\n        set: {\n          rating: function(rating) {\n            var\n              ratingIndex = (rating - 1 >= 0)\n                ? (rating - 1)\n                : 0,\n              $activeIcon = $icon.eq(ratingIndex)\n            ;\n            $module\n              .removeClass(className.selected)\n            ;\n            $icon\n              .removeClass(className.selected)\n              .removeClass(className.active)\n            ;\n            if(rating > 0) {\n              module.verbose('Setting current rating to', rating);\n              $activeIcon\n                .prevAll()\n                .addBack()\n                  .addClass(className.active)\n              ;\n            }\n            if(!module.is.initialLoad()) {\n              settings.onRate.call(element, rating);\n            }\n          },\n          initialLoad: function() {\n            initialLoad = true;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if(Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.rating.settings = {\n\n  name          : 'Rating',\n  namespace     : 'rating',\n\n  icon          : 'star',\n\n  silent        : false,\n  debug         : false,\n  verbose       : false,\n  performance   : true,\n\n  initialRating : 0,\n  interactive   : true,\n  maxRating     : 4,\n  clearable     : 'auto',\n\n  fireOnInit    : false,\n\n  onRate        : function(rating){},\n\n  error         : {\n    method    : 'The method you called is not defined',\n    noMaximum : 'No maximum rating specified. Cannot generate HTML automatically'\n  },\n\n\n  metadata: {\n    rating    : 'rating',\n    maxRating : 'maxRating',\n    icon      : 'icon'\n  },\n\n  className : {\n    active   : 'active',\n    disabled : 'disabled',\n    selected : 'selected',\n    loading  : 'loading'\n  },\n\n  selector  : {\n    icon : '.icon'\n  },\n\n  templates: {\n    icon: function(maxRating, iconClass) {\n      var\n        icon = 1,\n        html = ''\n      ;\n      while(icon <= maxRating) {\n        html += '<i class=\"'+iconClass+' icon\"></i>';\n        icon++;\n      }\n      return html;\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Fomantic-UI - Search\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n'use strict';\n\n$.isFunction = $.isFunction || function(obj) {\n  return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.search = function(parameters) {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $(this)\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.search.settings, parameters)\n          : $.extend({}, $.fn.search.settings),\n\n        className        = settings.className,\n        metadata         = settings.metadata,\n        regExp           = settings.regExp,\n        fields           = settings.fields,\n        selector         = settings.selector,\n        error            = settings.error,\n        namespace        = settings.namespace,\n\n        eventNamespace   = '.' + namespace,\n        moduleNamespace  = namespace + '-module',\n\n        $module          = $(this),\n        $prompt          = $module.find(selector.prompt),\n        $searchButton    = $module.find(selector.searchButton),\n        $results         = $module.find(selector.results),\n        $result          = $module.find(selector.result),\n        $category        = $module.find(selector.category),\n\n        element          = this,\n        instance         = $module.data(moduleNamespace),\n\n        disabledBubbled  = false,\n        resultsDismissed = false,\n\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module');\n          module.get.settings();\n          module.determine.searchFields();\n          module.bind.events();\n          module.set.type();\n          module.create.results();\n          module.instantiate();\n        },\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.debug('Refreshing selector cache');\n          $prompt         = $module.find(selector.prompt);\n          $searchButton   = $module.find(selector.searchButton);\n          $category       = $module.find(selector.category);\n          $results        = $module.find(selector.results);\n          $result         = $module.find(selector.result);\n        },\n\n        refreshResults: function() {\n          $results = $module.find(selector.results);\n          $result  = $module.find(selector.result);\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding events to search');\n            if(settings.automatic) {\n              $module\n                .on(module.get.inputEvent() + eventNamespace, selector.prompt, module.event.input)\n              ;\n              $prompt\n                .attr('autocomplete', 'off')\n              ;\n            }\n            $module\n              // prompt\n              .on('focus'     + eventNamespace, selector.prompt, module.event.focus)\n              .on('blur'      + eventNamespace, selector.prompt, module.event.blur)\n              .on('keydown'   + eventNamespace, selector.prompt, module.handleKeyboard)\n              // search button\n              .on('click'     + eventNamespace, selector.searchButton, module.query)\n              // results\n              .on('mousedown' + eventNamespace, selector.results, module.event.result.mousedown)\n              .on('mouseup'   + eventNamespace, selector.results, module.event.result.mouseup)\n              .on('click'     + eventNamespace, selector.result,  module.event.result.click)\n            ;\n          }\n        },\n\n        determine: {\n          searchFields: function() {\n            // this makes sure $.extend does not add specified search fields to default fields\n            // this is the only setting which should not extend defaults\n            if(parameters && parameters.searchFields !== undefined) {\n              settings.searchFields = parameters.searchFields;\n            }\n          }\n        },\n\n        event: {\n          input: function() {\n            if(settings.searchDelay) {\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                if(module.is.focused()) {\n                  module.query();\n                }\n              }, settings.searchDelay);\n            }\n            else {\n              module.query();\n            }\n          },\n          focus: function() {\n            module.set.focus();\n            if(settings.searchOnFocus && module.has.minimumCharacters() ) {\n              module.query(function() {\n                if(module.can.show() ) {\n                  module.showResults();\n                }\n              });\n            }\n          },\n          blur: function(event) {\n            var\n              pageLostFocus = (document.activeElement === this),\n              callback      = function() {\n                module.cancel.query();\n                module.remove.focus();\n                module.timer = setTimeout(module.hideResults, settings.hideDelay);\n              }\n            ;\n            if(pageLostFocus) {\n              return;\n            }\n            resultsDismissed = false;\n            if(module.resultsClicked) {\n              module.debug('Determining if user action caused search to close');\n              $module\n                .one('click.close' + eventNamespace, selector.results, function(event) {\n                  if(module.is.inMessage(event) || disabledBubbled) {\n                    $prompt.focus();\n                    return;\n                  }\n                  disabledBubbled = false;\n                  if( !module.is.animating() && !module.is.hidden()) {\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.debug('Input blurred without user action, closing results');\n              callback();\n            }\n          },\n          result: {\n            mousedown: function() {\n              module.resultsClicked = true;\n            },\n            mouseup: function() {\n              module.resultsClicked = false;\n            },\n            click: function(event) {\n              module.debug('Search result selected');\n              var\n                $result = $(this),\n                $title  = $result.find(selector.title).eq(0),\n                $link   = $result.is('a[href]')\n                  ? $result\n                  : $result.find('a[href]').eq(0),\n                href    = $link.attr('href')   || false,\n                target  = $link.attr('target') || false,\n                // title is used for result lookup\n                value   = ($title.length > 0)\n                  ? $title.text()\n                  : false,\n                results = module.get.results(),\n                result  = $result.data(metadata.result) || module.get.result(value, results)\n              ;\n              if(value) {\n                module.set.value(value);\n              }\n              if( $.isFunction(settings.onSelect) ) {\n                if(settings.onSelect.call(element, result, results) === false) {\n                  module.debug('Custom onSelect callback cancelled default select action');\n                  disabledBubbled = true;\n                  return;\n                }\n              }\n              module.hideResults();\n              if(href) {\n                module.verbose('Opening search link found in result', $link);\n                if(target == '_blank' || event.ctrlKey) {\n                  window.open(href);\n                }\n                else {\n                  window.location.href = (href);\n                }\n              }\n            }\n          }\n        },\n        handleKeyboard: function(event) {\n          var\n            // force selector refresh\n            $result         = $module.find(selector.result),\n            $category       = $module.find(selector.category),\n            $activeResult   = $result.filter('.' + className.active),\n            currentIndex    = $result.index( $activeResult ),\n            resultSize      = $result.length,\n            hasActiveResult = $activeResult.length > 0,\n\n            keyCode         = event.which,\n            keys            = {\n              backspace : 8,\n              enter     : 13,\n              escape    : 27,\n              upArrow   : 38,\n              downArrow : 40\n            },\n            newIndex\n          ;\n          // search shortcuts\n          if(keyCode == keys.escape) {\n            module.verbose('Escape key pressed, blurring search field');\n            module.hideResults();\n            resultsDismissed = true;\n          }\n          if( module.is.visible() ) {\n            if(keyCode == keys.enter) {\n              module.verbose('Enter key pressed, selecting active result');\n              if( $result.filter('.' + className.active).length > 0 ) {\n                module.event.result.click.call($result.filter('.' + className.active), event);\n                event.preventDefault();\n                return false;\n              }\n            }\n            else if(keyCode == keys.upArrow && hasActiveResult) {\n              module.verbose('Up key pressed, changing active result');\n              newIndex = (currentIndex - 1 < 0)\n                ? currentIndex\n                : currentIndex - 1\n              ;\n              $category\n                .removeClass(className.active)\n              ;\n              $result\n                .removeClass(className.active)\n                .eq(newIndex)\n                  .addClass(className.active)\n                  .closest($category)\n                    .addClass(className.active)\n              ;\n              event.preventDefault();\n            }\n            else if(keyCode == keys.downArrow) {\n              module.verbose('Down key pressed, changing active result');\n              newIndex = (currentIndex + 1 >= resultSize)\n                ? currentIndex\n                : currentIndex + 1\n              ;\n              $category\n                .removeClass(className.active)\n              ;\n              $result\n                .removeClass(className.active)\n                .eq(newIndex)\n                  .addClass(className.active)\n                  .closest($category)\n                    .addClass(className.active)\n              ;\n              event.preventDefault();\n            }\n          }\n          else {\n            // query shortcuts\n            if(keyCode == keys.enter) {\n              module.verbose('Enter key pressed, executing query');\n              module.query();\n              module.set.buttonPressed();\n              $prompt.one('keyup', module.remove.buttonFocus);\n            }\n          }\n        },\n\n        setup: {\n          api: function(searchTerm, callback) {\n            var\n              apiSettings = {\n                debug             : settings.debug,\n                on                : false,\n                cache             : settings.cache,\n                action            : 'search',\n                urlData           : {\n                  query : searchTerm\n                },\n                onSuccess         : function(response) {\n                  module.parse.response.call(element, response, searchTerm);\n                  callback();\n                },\n                onFailure         : function() {\n                  module.displayMessage(error.serverError);\n                  callback();\n                },\n                onAbort : function(response) {\n                },\n                onError           : module.error\n              }\n            ;\n            $.extend(true, apiSettings, settings.apiSettings);\n            module.verbose('Setting up API request', apiSettings);\n            $module.api(apiSettings);\n          }\n        },\n\n        can: {\n          useAPI: function() {\n            return $.fn.api !== undefined;\n          },\n          show: function() {\n            return module.is.focused() && !module.is.visible() && !module.is.empty();\n          },\n          transition: function() {\n            return settings.transition && $.fn.transition !== undefined && $module.transition('is supported');\n          }\n        },\n\n        is: {\n          animating: function() {\n            return $results.hasClass(className.animating);\n          },\n          hidden: function() {\n            return $results.hasClass(className.hidden);\n          },\n          inMessage: function(event) {\n            if(!event.target) {\n              return;\n            }\n            var\n              $target = $(event.target),\n              isInDOM = $.contains(document.documentElement, event.target)\n            ;\n            return (isInDOM && $target.closest(selector.message).length > 0);\n          },\n          empty: function() {\n            return ($results.html() === '');\n          },\n          visible: function() {\n            return ($results.filter(':visible').length > 0);\n          },\n          focused: function() {\n            return ($prompt.filter(':focus').length > 0);\n          }\n        },\n\n        get: {\n          settings: function() {\n            if($.isPlainObject(parameters) && parameters.searchFullText) {\n              settings.fullTextSearch = parameters.searchFullText;\n              module.error(settings.error.oldSearchSyntax, element);\n            }\n            if (settings.ignoreDiacritics && !String.prototype.normalize) {\n              settings.ignoreDiacritics = false;\n              module.error(error.noNormalize, element);\n            }\n          },\n          inputEvent: function() {\n            var\n              prompt = $prompt[0],\n              inputEvent   = (prompt !== undefined && prompt.oninput !== undefined)\n                ? 'input'\n                : (prompt !== undefined && prompt.onpropertychange !== undefined)\n                  ? 'propertychange'\n                  : 'keyup'\n            ;\n            return inputEvent;\n          },\n          value: function() {\n            return $prompt.val();\n          },\n          results: function() {\n            var\n              results = $module.data(metadata.results)\n            ;\n            return results;\n          },\n          result: function(value, results) {\n            var\n              lookupFields = ['title', 'id'],\n              result       = false\n            ;\n            value = (value !== undefined)\n              ? value\n              : module.get.value()\n            ;\n            results = (results !== undefined)\n              ? results\n              : module.get.results()\n            ;\n            if(settings.type === 'category') {\n              module.debug('Finding result that matches', value);\n              $.each(results, function(index, category) {\n                if(Array.isArray(category.results)) {\n                  result = module.search.object(value, category.results, lookupFields)[0];\n                  // don't continue searching if a result is found\n                  if(result) {\n                    return false;\n                  }\n                }\n              });\n            }\n            else {\n              module.debug('Finding result in results object', value);\n              result = module.search.object(value, results, lookupFields)[0];\n            }\n            return result || false;\n          },\n        },\n\n        select: {\n          firstResult: function() {\n            module.verbose('Selecting first result');\n            $result.first().addClass(className.active);\n          }\n        },\n\n        set: {\n          focus: function() {\n            $module.addClass(className.focus);\n          },\n          loading: function() {\n            $module.addClass(className.loading);\n          },\n          value: function(value) {\n            module.verbose('Setting search input value', value);\n            $prompt\n              .val(value)\n            ;\n          },\n          type: function(type) {\n            type = type || settings.type;\n            if(settings.type == 'category') {\n              $module.addClass(settings.type);\n            }\n          },\n          buttonPressed: function() {\n            $searchButton.addClass(className.pressed);\n          }\n        },\n\n        remove: {\n          loading: function() {\n            $module.removeClass(className.loading);\n          },\n          focus: function() {\n            $module.removeClass(className.focus);\n          },\n          buttonPressed: function() {\n            $searchButton.removeClass(className.pressed);\n          },\n          diacritics: function(text) {\n            return settings.ignoreDiacritics ?  text.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '') : text;\n          }\n        },\n\n        query: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          var\n            searchTerm = module.get.value(),\n            cache = module.read.cache(searchTerm)\n          ;\n          callback = callback || function() {};\n          if( module.has.minimumCharacters() )  {\n            if(cache) {\n              module.debug('Reading result from cache', searchTerm);\n              module.save.results(cache.results);\n              module.addResults(cache.html);\n              module.inject.id(cache.results);\n              callback();\n            }\n            else {\n              module.debug('Querying for', searchTerm);\n              if($.isPlainObject(settings.source) || Array.isArray(settings.source)) {\n                module.search.local(searchTerm);\n                callback();\n              }\n              else if( module.can.useAPI() ) {\n                module.search.remote(searchTerm, callback);\n              }\n              else {\n                module.error(error.source);\n                callback();\n              }\n            }\n            settings.onSearchQuery.call(element, searchTerm);\n          }\n          else {\n            module.hideResults();\n          }\n        },\n\n        search: {\n          local: function(searchTerm) {\n            var\n              results = module.search.object(searchTerm, settings.source),\n              searchHTML\n            ;\n            module.set.loading();\n            module.save.results(results);\n            module.debug('Returned full local search results', results);\n            if(settings.maxResults > 0) {\n              module.debug('Using specified max results', results);\n              results = results.slice(0, settings.maxResults);\n            }\n            if(settings.type == 'category') {\n              results = module.create.categoryResults(results);\n            }\n            searchHTML = module.generateResults({\n              results: results\n            });\n            module.remove.loading();\n            module.addResults(searchHTML);\n            module.inject.id(results);\n            module.write.cache(searchTerm, {\n              html    : searchHTML,\n              results : results\n            });\n          },\n          remote: function(searchTerm, callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if($module.api('is loading')) {\n              $module.api('abort');\n            }\n            module.setup.api(searchTerm, callback);\n            $module\n              .api('query')\n            ;\n          },\n          object: function(searchTerm, source, searchFields) {\n            searchTerm = module.remove.diacritics(String(searchTerm));\n            var\n              results      = [],\n              exactResults = [],\n              fuzzyResults = [],\n              searchExp    = searchTerm.replace(regExp.escape, '\\\\$&'),\n              matchRegExp  = new RegExp(regExp.beginsWith + searchExp, 'i'),\n\n              // avoid duplicates when pushing results\n              addResult = function(array, result) {\n                var\n                  notResult      = ($.inArray(result, results) == -1),\n                  notFuzzyResult = ($.inArray(result, fuzzyResults) == -1),\n                  notExactResults = ($.inArray(result, exactResults) == -1)\n                ;\n                if(notResult && notFuzzyResult && notExactResults) {\n                  array.push(result);\n                }\n              }\n            ;\n            source = source || settings.source;\n            searchFields = (searchFields !== undefined)\n              ? searchFields\n              : settings.searchFields\n            ;\n\n            // search fields should be array to loop correctly\n            if(!Array.isArray(searchFields)) {\n              searchFields = [searchFields];\n            }\n\n            // exit conditions if no source\n            if(source === undefined || source === false) {\n              module.error(error.source);\n              return [];\n            }\n            // iterate through search fields looking for matches\n            $.each(searchFields, function(index, field) {\n              $.each(source, function(label, content) {\n                var\n                  fieldExists = (typeof content[field] == 'string')\n                ;\n                if(fieldExists) {\n                  var text = module.remove.diacritics(content[field]);\n                  if( text.search(matchRegExp) !== -1) {\n                    // content starts with value (first in results)\n                    addResult(results, content);\n                  }\n                  else if(settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, text) ) {\n                    // content fuzzy matches (last in results)\n                    addResult(exactResults, content);\n                  }\n                  else if(settings.fullTextSearch == true && module.fuzzySearch(searchTerm, text) ) {\n                    // content fuzzy matches (last in results)\n                    addResult(fuzzyResults, content);\n                  }\n                }\n              });\n            });\n            $.merge(exactResults, fuzzyResults);\n            $.merge(results, exactResults);\n            return results;\n          }\n        },\n        exactSearch: function (query, term) {\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          return term.indexOf(query) > -1;\n        },\n        fuzzySearch: function(query, term) {\n          var\n            termLength  = term.length,\n            queryLength = query.length\n          ;\n          if(typeof query !== 'string') {\n            return false;\n          }\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(queryLength > termLength) {\n            return false;\n          }\n          if(queryLength === termLength) {\n            return (query === term);\n          }\n          search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\n            var\n              queryCharacter = query.charCodeAt(characterIndex)\n            ;\n            while(nextCharacterIndex < termLength) {\n              if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\n                continue search;\n              }\n            }\n            return false;\n          }\n          return true;\n        },\n\n        parse: {\n          response: function(response, searchTerm) {\n            if(Array.isArray(response)){\n                var o={};\n                o[fields.results]=response;\n                response = o;\n            }\n            var\n              searchHTML = module.generateResults(response)\n            ;\n            module.verbose('Parsing server response', response);\n            if(response !== undefined) {\n              if(searchTerm !== undefined && response[fields.results] !== undefined) {\n                module.addResults(searchHTML);\n                module.inject.id(response[fields.results]);\n                module.write.cache(searchTerm, {\n                  html    : searchHTML,\n                  results : response[fields.results]\n                });\n                module.save.results(response[fields.results]);\n              }\n            }\n          }\n        },\n\n        cancel: {\n          query: function() {\n            if( module.can.useAPI() ) {\n              $module.api('abort');\n            }\n          }\n        },\n\n        has: {\n          minimumCharacters: function() {\n            var\n              searchTerm    = module.get.value(),\n              numCharacters = searchTerm.length\n            ;\n            return (numCharacters >= settings.minCharacters);\n          },\n          results: function() {\n            if($results.length === 0) {\n              return false;\n            }\n            var\n              html = $results.html()\n            ;\n            return html != '';\n          }\n        },\n\n        clear: {\n          cache: function(value) {\n            var\n              cache = $module.data(metadata.cache)\n            ;\n            if(!value) {\n              module.debug('Clearing cache', value);\n              $module.removeData(metadata.cache);\n            }\n            else if(value && cache && cache[value]) {\n              module.debug('Removing value from cache', value);\n              delete cache[value];\n              $module.data(metadata.cache, cache);\n            }\n          }\n        },\n\n        read: {\n          cache: function(name) {\n            var\n              cache = $module.data(metadata.cache)\n            ;\n            if(settings.cache) {\n              module.verbose('Checking cache for generated html for query', name);\n              return (typeof cache == 'object') && (cache[name] !== undefined)\n                ? cache[name]\n                : false\n              ;\n            }\n            return false;\n          }\n        },\n\n        create: {\n          categoryResults: function(results) {\n            var\n              categoryResults = {}\n            ;\n            $.each(results, function(index, result) {\n              if(!result.category) {\n                return;\n              }\n              if(categoryResults[result.category] === undefined) {\n                module.verbose('Creating new category of results', result.category);\n                categoryResults[result.category] = {\n                  name    : result.category,\n                  results : [result]\n                };\n              }\n              else {\n                categoryResults[result.category].results.push(result);\n              }\n            });\n            return categoryResults;\n          },\n          id: function(resultIndex, categoryIndex) {\n            var\n              resultID      = (resultIndex + 1), // not zero indexed\n              letterID,\n              id\n            ;\n            if(categoryIndex !== undefined) {\n              // start char code for \"A\"\n              letterID = String.fromCharCode(97 + categoryIndex);\n              id          = letterID + resultID;\n              module.verbose('Creating category result id', id);\n            }\n            else {\n              id = resultID;\n              module.verbose('Creating result id', id);\n            }\n            return id;\n          },\n          results: function() {\n            if($results.length === 0) {\n              $results = $('<div />')\n                .addClass(className.results)\n                .appendTo($module)\n              ;\n            }\n          }\n        },\n\n        inject: {\n          result: function(result, resultIndex, categoryIndex) {\n            module.verbose('Injecting result into results');\n            var\n              $selectedResult = (categoryIndex !== undefined)\n                ? $results\n                    .children().eq(categoryIndex)\n                      .children(selector.results)\n                        .first()\n                        .children(selector.result)\n                          .eq(resultIndex)\n                : $results\n                    .children(selector.result).eq(resultIndex)\n            ;\n            module.verbose('Injecting results metadata', $selectedResult);\n            $selectedResult\n              .data(metadata.result, result)\n            ;\n          },\n          id: function(results) {\n            module.debug('Injecting unique ids into results');\n            var\n              // since results may be object, we must use counters\n              categoryIndex = 0,\n              resultIndex   = 0\n            ;\n            if(settings.type === 'category') {\n              // iterate through each category result\n              $.each(results, function(index, category) {\n                if(category.results.length > 0){\n                  resultIndex = 0;\n                  $.each(category.results, function(index, result) {\n                    if(result.id === undefined) {\n                      result.id = module.create.id(resultIndex, categoryIndex);\n                    }\n                    module.inject.result(result, resultIndex, categoryIndex);\n                    resultIndex++;\n                  });\n                  categoryIndex++;\n                }\n              });\n            }\n            else {\n              // top level\n              $.each(results, function(index, result) {\n                if(result.id === undefined) {\n                  result.id = module.create.id(resultIndex);\n                }\n                module.inject.result(result, resultIndex);\n                resultIndex++;\n              });\n            }\n            return results;\n          }\n        },\n\n        save: {\n          results: function(results) {\n            module.verbose('Saving current search results to metadata', results);\n            $module.data(metadata.results, results);\n          }\n        },\n\n        write: {\n          cache: function(name, value) {\n            var\n              cache = ($module.data(metadata.cache) !== undefined)\n                ? $module.data(metadata.cache)\n                : {}\n            ;\n            if(settings.cache) {\n              module.verbose('Writing generated html to cache', name, value);\n              cache[name] = value;\n              $module\n                .data(metadata.cache, cache)\n              ;\n            }\n          }\n        },\n\n        addResults: function(html) {\n          if( $.isFunction(settings.onResultsAdd) ) {\n            if( settings.onResultsAdd.call($results, html) === false ) {\n              module.debug('onResultsAdd callback cancelled default action');\n              return false;\n            }\n          }\n          if(html) {\n            $results\n              .html(html)\n            ;\n            module.refreshResults();\n            if(settings.selectFirstResult) {\n              module.select.firstResult();\n            }\n            module.showResults();\n          }\n          else {\n            module.hideResults(function() {\n              $results.empty();\n            });\n          }\n        },\n\n        showResults: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(resultsDismissed) {\n            return;\n          }\n          if(!module.is.visible() && module.has.results()) {\n            if( module.can.transition() ) {\n              module.debug('Showing results with css animations');\n              $results\n                .transition({\n                  animation  : settings.transition + ' in',\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  onComplete : function() {\n                    callback();\n                  },\n                  queue      : true\n                })\n              ;\n            }\n            else {\n              module.debug('Showing results with javascript');\n              $results\n                .stop()\n                .fadeIn(settings.duration, settings.easing)\n              ;\n            }\n            settings.onResultsOpen.call($results);\n          }\n        },\n        hideResults: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.visible() ) {\n            if( module.can.transition() ) {\n              module.debug('Hiding results with css animations');\n              $results\n                .transition({\n                  animation  : settings.transition + ' out',\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  onComplete : function() {\n                    callback();\n                  },\n                  queue      : true\n                })\n              ;\n            }\n            else {\n              module.debug('Hiding results with javascript');\n              $results\n                .stop()\n                .fadeOut(settings.duration, settings.easing)\n              ;\n            }\n            settings.onResultsClose.call($results);\n          }\n        },\n\n        generateResults: function(response) {\n          module.debug('Generating html from response', response);\n          var\n            template       = settings.templates[settings.type],\n            isProperObject = ($.isPlainObject(response[fields.results]) && !$.isEmptyObject(response[fields.results])),\n            isProperArray  = (Array.isArray(response[fields.results]) && response[fields.results].length > 0),\n            html           = ''\n          ;\n          if(isProperObject || isProperArray ) {\n            if(settings.maxResults > 0) {\n              if(isProperObject) {\n                if(settings.type == 'standard') {\n                  module.error(error.maxResults);\n                }\n              }\n              else {\n                response[fields.results] = response[fields.results].slice(0, settings.maxResults);\n              }\n            }\n            if($.isFunction(template)) {\n              html = template(response, fields, settings.preserveHTML);\n            }\n            else {\n              module.error(error.noTemplate, false);\n            }\n          }\n          else if(settings.showNoResults) {\n            html = module.displayMessage(error.noResults, 'empty', error.noResultsHeader);\n          }\n          settings.onResults.call(element, response);\n          return html;\n        },\n\n        displayMessage: function(text, type, header) {\n          type = type || 'standard';\n          module.debug('Displaying message', text, type, header);\n          module.addResults( settings.templates.message(text, type, header) );\n          return settings.templates.message(text, type, header);\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if(Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.search.settings = {\n\n  name              : 'Search',\n  namespace         : 'search',\n\n  silent            : false,\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  // template to use (specified in settings.templates)\n  type              : 'standard',\n\n  // minimum characters required to search\n  minCharacters     : 1,\n\n  // whether to select first result after searching automatically\n  selectFirstResult : false,\n\n  // API config\n  apiSettings       : false,\n\n  // object to search\n  source            : false,\n\n  // Whether search should query current term on focus\n  searchOnFocus     : true,\n\n  // fields to search\n  searchFields   : [\n    'title',\n    'description'\n  ],\n\n  // field to display in standard results template\n  displayField   : '',\n\n  // search anywhere in value (set to 'exact' to require exact matches\n  fullTextSearch : 'exact',\n\n  // match results also if they contain diacritics of the same base character (for example searching for \"a\" will also match \"á\" or \"â\" or \"à\", etc...)\n  ignoreDiacritics : false,\n\n  // whether to add events to prompt automatically\n  automatic      : true,\n\n  // delay before hiding menu after blur\n  hideDelay      : 0,\n\n  // delay before searching\n  searchDelay    : 200,\n\n  // maximum results returned from search\n  maxResults     : 7,\n\n  // whether to store lookups in local cache\n  cache          : true,\n\n  // whether no results errors should be shown\n  showNoResults  : true,\n\n  // preserve possible html of resultset values\n  preserveHTML   : true,\n\n  // transition settings\n  transition     : 'scale',\n  duration       : 200,\n  easing         : 'easeOutExpo',\n\n  // callbacks\n  onSelect       : false,\n  onResultsAdd   : false,\n\n  onSearchQuery  : function(query){},\n  onResults      : function(response){},\n\n  onResultsOpen  : function(){},\n  onResultsClose : function(){},\n\n  className: {\n    animating : 'animating',\n    active    : 'active',\n    empty     : 'empty',\n    focus     : 'focus',\n    hidden    : 'hidden',\n    loading   : 'loading',\n    results   : 'results',\n    pressed   : 'down'\n  },\n\n  error : {\n    source          : 'Cannot search. No source used, and Semantic API module was not included',\n    noResultsHeader : 'No Results',\n    noResults       : 'Your search returned no results',\n    logging         : 'Error in debug logging, exiting.',\n    noEndpoint      : 'No search endpoint was specified',\n    noTemplate      : 'A valid template name was not specified.',\n    oldSearchSyntax : 'searchFullText setting has been renamed fullTextSearch for consistency, please adjust your settings.',\n    serverError     : 'There was an issue querying the server.',\n    maxResults      : 'Results must be an array to use maxResults setting',\n    method          : 'The method you called is not defined.',\n    noNormalize     : '\"ignoreDiacritics\" setting will be ignored. Browser does not support String().normalize(). You may consider including <https://cdn.jsdelivr.net/npm/unorm@1.4.1/lib/unorm.min.js> as a polyfill.'\n  },\n\n  metadata: {\n    cache   : 'cache',\n    results : 'results',\n    result  : 'result'\n  },\n\n  regExp: {\n    escape     : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\n    beginsWith : '(?:\\s|^)'\n  },\n\n  // maps api response attributes to internal representation\n  fields: {\n    categories      : 'results',     // array of categories (category view)\n    categoryName    : 'name',        // name of category (category view)\n    categoryResults : 'results',     // array of results (category view)\n    description     : 'description', // result description\n    image           : 'image',       // result image\n    price           : 'price',       // result price\n    results         : 'results',     // array of results (standard)\n    title           : 'title',       // result title\n    url             : 'url',         // result url\n    action          : 'action',      // \"view more\" object name\n    actionText      : 'text',        // \"view more\" text\n    actionURL       : 'url'          // \"view more\" url\n  },\n\n  selector : {\n    prompt       : '.prompt',\n    searchButton : '.search.button',\n    results      : '.results',\n    message      : '.results > .message',\n    category     : '.category',\n    result       : '.result',\n    title        : '.title, .name'\n  },\n\n  templates: {\n    escape: function(string, preserveHTML) {\n      if (preserveHTML){\n        return string;\n      }\n      var\n        badChars     = /[&<>\"'`]/g,\n        shouldEscape = /[&<>\"'`]/,\n        escape       = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#x27;\",\n          \"`\": \"&#x60;\"\n        },\n        escapedChar  = function(chr) {\n          return escape[chr];\n        }\n      ;\n      if(shouldEscape.test(string)) {\n        return string.replace(badChars, escapedChar);\n      }\n      return string;\n    },\n    message: function(message, type, header) {\n      var\n        html = ''\n      ;\n      if(message !== undefined && type !== undefined) {\n        html +=  ''\n          + '<div class=\"message ' + type + '\">'\n        ;\n        if(header) {\n          html += ''\n          + '<div class=\"header\">' + header + '</div>'\n          ;\n        }\n        html += ' <div class=\"description\">' + message + '</div>';\n        html += '</div>';\n      }\n      return html;\n    },\n    category: function(response, fields, preserveHTML) {\n      var\n        html = '',\n        escape = $.fn.search.settings.templates.escape\n      ;\n      if(response[fields.categoryResults] !== undefined) {\n\n        // each category\n        $.each(response[fields.categoryResults], function(index, category) {\n          if(category[fields.results] !== undefined && category.results.length > 0) {\n\n            html  += '<div class=\"category\">';\n\n            if(category[fields.categoryName] !== undefined) {\n              html += '<div class=\"name\">' + escape(category[fields.categoryName], preserveHTML) + '</div>';\n            }\n\n            // each item inside category\n            html += '<div class=\"results\">';\n            $.each(category.results, function(index, result) {\n              if(result[fields.url]) {\n                html  += '<a class=\"result\" href=\"' + result[fields.url].replace(/\"/g,\"\") + '\">';\n              }\n              else {\n                html  += '<a class=\"result\">';\n              }\n              if(result[fields.image] !== undefined) {\n                html += ''\n                  + '<div class=\"image\">'\n                  + ' <img src=\"' + result[fields.image].replace(/\"/g,\"\") + '\">'\n                  + '</div>'\n                ;\n              }\n              html += '<div class=\"content\">';\n              if(result[fields.price] !== undefined) {\n                html += '<div class=\"price\">' + escape(result[fields.price], preserveHTML) + '</div>';\n              }\n              if(result[fields.title] !== undefined) {\n                html += '<div class=\"title\">' + escape(result[fields.title], preserveHTML) + '</div>';\n              }\n              if(result[fields.description] !== undefined) {\n                html += '<div class=\"description\">' + escape(result[fields.description], preserveHTML) + '</div>';\n              }\n              html  += ''\n                + '</div>'\n              ;\n              html += '</a>';\n            });\n            html += '</div>';\n            html  += ''\n              + '</div>'\n            ;\n          }\n        });\n        if(response[fields.action]) {\n          if(fields.actionURL === false) {\n            html += ''\n            + '<div class=\"action\">'\n            +   escape(response[fields.action][fields.actionText], preserveHTML)\n            + '</div>';\n          } else {\n            html += ''\n            + '<a href=\"' + response[fields.action][fields.actionURL].replace(/\"/g,\"\") + '\" class=\"action\">'\n            +   escape(response[fields.action][fields.actionText], preserveHTML)\n            + '</a>';\n          }\n        }\n        return html;\n      }\n      return false;\n    },\n    standard: function(response, fields, preserveHTML) {\n      var\n        html = '',\n        escape = $.fn.search.settings.templates.escape\n      ;\n      if(response[fields.results] !== undefined) {\n\n        // each result\n        $.each(response[fields.results], function(index, result) {\n          if(result[fields.url]) {\n            html  += '<a class=\"result\" href=\"' + result[fields.url].replace(/\"/g,\"\") + '\">';\n          }\n          else {\n            html  += '<a class=\"result\">';\n          }\n          if(result[fields.image] !== undefined) {\n            html += ''\n              + '<div class=\"image\">'\n              + ' <img src=\"' + result[fields.image].replace(/\"/g,\"\") + '\">'\n              + '</div>'\n            ;\n          }\n          html += '<div class=\"content\">';\n          if(result[fields.price] !== undefined) {\n            html += '<div class=\"price\">' + escape(result[fields.price], preserveHTML) + '</div>';\n          }\n          if(result[fields.title] !== undefined) {\n            html += '<div class=\"title\">' + escape(result[fields.title], preserveHTML) + '</div>';\n          }\n          if(result[fields.description] !== undefined) {\n            html += '<div class=\"description\">' + escape(result[fields.description], preserveHTML) + '</div>';\n          }\n          html  += ''\n            + '</div>'\n          ;\n          html += '</a>';\n        });\n        if(response[fields.action]) {\n          if(fields.actionURL === false) {\n            html += ''\n            + '<div class=\"action\">'\n            +   escape(response[fields.action][fields.actionText], preserveHTML)\n            + '</div>';\n          } else {\n            html += ''\n            + '<a href=\"' + response[fields.action][fields.actionURL].replace(/\"/g,\"\") + '\" class=\"action\">'\n            +   escape(response[fields.action][fields.actionText], preserveHTML)\n            + '</a>';\n          }\n        }\n        return html;\n      }\n      return false;\n    }\n  }\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Fomantic-UI - Shape\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n'use strict';\n\n$.isFunction = $.isFunction || function(obj) {\n  return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.shape = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        moduleSelector = $allModules.selector || '',\n        settings       = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.shape.settings, parameters)\n          : $.extend({}, $.fn.shape.settings),\n\n        // internal aliases\n        namespace     = settings.namespace,\n        selector      = settings.selector,\n        error         = settings.error,\n        className     = settings.className,\n\n        // define namespaces for modules\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        // selector cache\n        $module       = $(this),\n        $sides        = $module.find('>' + selector.sides),\n        $side         = $sides.find('>' + selector.side),\n\n        // private variables\n        nextIndex = false,\n        $activeSide,\n        $nextSide,\n\n        // standard module\n        element       = this,\n        instance      = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module for', element);\n          module.set.defaultSide();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache for', element);\n          $module = $(element);\n          $sides  = $(this).find(selector.sides);\n          $side   = $(this).find(selector.side);\n        },\n\n        repaint: function() {\n          module.verbose('Forcing repaint event');\n          var\n            shape          = $sides[0] || document.createElement('div'),\n            fakeAssignment = shape.offsetWidth\n          ;\n        },\n\n        animate: function(propertyObject, callback) {\n          module.verbose('Animating box with properties', propertyObject);\n          callback = callback || function(event) {\n            module.verbose('Executing animation callback');\n            if(event !== undefined) {\n              event.stopPropagation();\n            }\n            module.reset();\n            module.set.active();\n          };\n          settings.beforeChange.call($nextSide[0]);\n          if(module.get.transitionEvent()) {\n            module.verbose('Starting CSS animation');\n            $module\n              .addClass(className.animating)\n            ;\n            $sides\n              .css(propertyObject)\n              .one(module.get.transitionEvent(), callback)\n            ;\n            module.set.duration(settings.duration);\n            requestAnimationFrame(function() {\n              $module\n                .addClass(className.animating)\n              ;\n              $activeSide\n                .addClass(className.hidden)\n              ;\n            });\n          }\n          else {\n            callback();\n          }\n        },\n\n        queue: function(method) {\n          module.debug('Queueing animation of', method);\n          $sides\n            .one(module.get.transitionEvent(), function() {\n              module.debug('Executing queued animation');\n              setTimeout(function(){\n                $module.shape(method);\n              }, 0);\n            })\n          ;\n        },\n\n        reset: function() {\n          module.verbose('Animating states reset');\n          $module\n            .removeClass(className.animating)\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n          // removeAttr style does not consistently work in safari\n          $sides\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n          $side\n            .attr('style', '')\n            .removeAttr('style')\n            .removeClass(className.hidden)\n          ;\n          $nextSide\n            .removeClass(className.animating)\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n        },\n\n        is: {\n          complete: function() {\n            return ($side.filter('.' + className.active)[0] == $nextSide[0]);\n          },\n          animating: function() {\n            return $module.hasClass(className.animating);\n          },\n          hidden: function() {\n            return $module.closest(':hidden').length > 0;\n          }\n        },\n\n        set: {\n\n          defaultSide: function() {\n            $activeSide = $side.filter('.' + settings.className.active);\n            $nextSide   = ( $activeSide.next(selector.side).length > 0 )\n              ? $activeSide.next(selector.side)\n              : $side.first()\n            ;\n            nextIndex = false;\n            module.verbose('Active side set to', $activeSide);\n            module.verbose('Next side set to', $nextSide);\n          },\n\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            module.verbose('Setting animation duration', duration);\n            if(settings.duration || settings.duration === 0) {\n              $sides.add($side)\n                .css({\n                  '-webkit-transition-duration': duration,\n                  '-moz-transition-duration': duration,\n                  '-ms-transition-duration': duration,\n                  '-o-transition-duration': duration,\n                  'transition-duration': duration\n                })\n              ;\n            }\n          },\n\n          currentStageSize: function() {\n            var\n              $activeSide = $side.filter('.' + settings.className.active),\n              width       = $activeSide.outerWidth(true),\n              height      = $activeSide.outerHeight(true)\n            ;\n            $module\n              .css({\n                width: width,\n                height: height\n              })\n            ;\n          },\n\n          stageSize: function() {\n            var\n              $clone      = $module.clone().addClass(className.loading),\n              $side       = $clone.find('>' + selector.sides + '>' + selector.side),\n              $activeSide = $side.filter('.' + settings.className.active),\n              $nextSide   = (nextIndex)\n                ? $side.eq(nextIndex)\n                : ( $activeSide.next(selector.side).length > 0 )\n                  ? $activeSide.next(selector.side)\n                  : $side.first(),\n              newWidth    = (settings.width === 'next')\n                ? $nextSide.outerWidth(true)\n                : (settings.width === 'initial')\n                  ? $module.width()\n                  : settings.width,\n              newHeight    = (settings.height === 'next')\n                ? $nextSide.outerHeight(true)\n                : (settings.height === 'initial')\n                  ? $module.height()\n                  : settings.height\n            ;\n            $activeSide.removeClass(className.active);\n            $nextSide.addClass(className.active);\n            $clone.insertAfter($module);\n            $clone.remove();\n            if(settings.width !== 'auto') {\n              $module.css('width', newWidth + settings.jitter);\n              module.verbose('Specifying width during animation', newWidth);\n            }\n            if(settings.height !== 'auto') {\n              $module.css('height', newHeight + settings.jitter);\n              module.verbose('Specifying height during animation', newHeight);\n            }\n          },\n\n          nextSide: function(selector) {\n            nextIndex = selector;\n            $nextSide = $side.filter(selector);\n            nextIndex = $side.index($nextSide);\n            if($nextSide.length === 0) {\n              module.set.defaultSide();\n              module.error(error.side);\n            }\n            module.verbose('Next side manually set to', $nextSide);\n          },\n\n          active: function() {\n            module.verbose('Setting new side to active', $nextSide);\n            $side\n              .removeClass(className.active)\n            ;\n            $nextSide\n              .addClass(className.active)\n            ;\n            settings.onChange.call($nextSide[0]);\n            module.set.defaultSide();\n          }\n        },\n\n        flip: {\n          to: function(type,stage){\n            if(module.is.hidden()) {\n              module.debug('Module not visible', $nextSide);\n              return;\n            }\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            var\n              transform = module.get.transform[type]()\n            ;\n            if( !module.is.animating()) {\n              module.debug('Flipping '+type, $nextSide);\n              module.set.stageSize();\n              module.stage[stage]();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip '+type);\n            }\n          },\n\n          up: function() {\n            module.flip.to('up','above');\n          },\n\n          down: function() {\n            module.flip.to('down','below');\n          },\n\n          left: function() {\n            module.flip.to('left','left');\n          },\n\n          right: function() {\n            module.flip.to('right','right');\n          },\n\n          over: function() {\n            module.flip.to('over','behind');\n          },\n\n          back: function() {\n            module.flip.to('back','behind');\n          }\n\n        },\n\n        get: {\n\n          transform: {\n            up: function() {\n              var\n                    translateZ = $activeSide.outerHeight(true) / 2,\n                translateY = $nextSide.outerHeight(true) - translateZ\n              ;\n              return {\n                transform: 'translateY(' + translateY + 'px) translateZ(-'+ translateZ + 'px) rotateX(-90deg)'\n              };\n            },\n\n            down: function() {\n              var\n                translate = {\n                  z: $activeSide.outerHeight(true) / 2\n                }\n              ;\n              return {\n                transform: 'translateY(-' + translate.z + 'px) translateZ(-'+ translate.z + 'px) rotateX(90deg)'\n              };\n            },\n\n            left: function() {\n              var\n                  translateZ = $activeSide.outerWidth(true) / 2,\n                  translateX = $nextSide.outerWidth(true) - translateZ\n              ;\n              return {\n                transform: 'translateX(' + translateX + 'px) translateZ(-' + translateZ + 'px) rotateY(90deg)'\n              };\n            },\n\n            right: function() {\n              var\n                translate = {\n                  z : $activeSide.outerWidth(true) / 2\n                }\n              ;\n              return {\n                transform: 'translateX(-' + translate.z + 'px) translateZ(-' + translate.z + 'px) rotateY(-90deg)'\n              };\n            },\n\n            over: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) rotateY(180deg)'\n              };\n            },\n\n            back: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) rotateY(-180deg)'\n              };\n            }\n          },\n\n          transitionEvent: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          },\n\n          nextSide: function() {\n            return ( $activeSide.next(selector.side).length > 0 )\n              ? $activeSide.next(selector.side)\n              : $side.first()\n            ;\n          }\n\n        },\n\n        stage: {\n\n          above: function() {\n            var\n              box = {\n                origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                depth  : {\n                  active : ($nextSide.outerHeight(true) / 2),\n                  next   : ($activeSide.outerHeight(true) / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as above', $nextSide, box);\n            $activeSide\n              .css({\n                'transform' : 'rotateX(0deg)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'top'       : box.origin + 'px',\n                'transform' : 'rotateX(90deg) translateZ(' + box.depth.next + 'px) translateY(-' + box.depth.active + 'px)'\n              })\n            ;\n          },\n\n          below: function() {\n            var\n              box = {\n                origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                depth  : {\n                  active : ($nextSide.outerHeight(true) / 2),\n                  next   : ($activeSide.outerHeight(true) / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as below', $nextSide, box);\n            $activeSide\n              .css({\n                'transform' : 'rotateX(0deg)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'top'       : box.origin + 'px',\n                'transform' : 'rotateX(-90deg) translateZ(' + box.depth.next + 'px) translateY(' + box.depth.active + 'px)'\n              })\n            ;\n          },\n\n          left: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as left', $nextSide, box);\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(-90deg) translateZ(' + box.depth.next + 'px) translateX(-' + box.depth.active + 'px)'\n              })\n            ;\n          },\n\n          right: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as right', $nextSide, box);\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(90deg) translateZ(' + box.depth.next + 'px) translateX(' + box.depth.active + 'px)'\n              })\n            ;\n          },\n\n          behind: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as behind', $nextSide, box);\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(-180deg)'\n              })\n            ;\n          }\n        },\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if(Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        var $inputs = $module.find('input');\n        if( $inputs.length > 0) {\n          $inputs.blur();\n          setTimeout(function(){\n            module.invoke(query);\n          }, 150);\n        } else {\n          module.invoke(query);\n        }\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.shape.settings = {\n\n  // module info\n  name : 'Shape',\n\n  // hide all debug content\n  silent     : false,\n\n  // debug content outputted to console\n  debug      : false,\n\n  // verbose debug output\n  verbose    : false,\n\n  // fudge factor in pixels when swapping from 2d to 3d (can be useful to correct rounding errors)\n  jitter     : 0,\n\n  // performance data output\n  performance: true,\n\n  // event namespace\n  namespace  : 'shape',\n\n  // width during animation, can be set to 'auto', initial', 'next' or pixel amount\n  width: 'initial',\n\n  // height during animation, can be set to 'auto', 'initial', 'next' or pixel amount\n  height: 'initial',\n\n  // callback occurs on side change\n  beforeChange : function() {},\n  onChange     : function() {},\n\n  // allow animation to same side\n  allowRepeats: false,\n\n  // animation duration\n  duration   : false,\n\n  // possible errors\n  error: {\n    side   : 'You tried to switch to a side that does not exist.',\n    method : 'The method you called is not defined'\n  },\n\n  // classnames used\n  className   : {\n    animating : 'animating',\n    hidden    : 'hidden',\n    loading   : 'loading',\n    active    : 'active'\n  },\n\n  // selectors used\n  selector    : {\n    sides : '.sides',\n    side  : '.side'\n  }\n\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Fomantic-UI - Sidebar\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n'use strict';\n\n$.isFunction = $.isFunction || function(obj) {\n  return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.sidebar = function(parameters) {\n  var\n    $allModules     = $(this),\n    $window         = $(window),\n    $document       = $(document),\n    $html           = $('html'),\n    $head           = $('head'),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.sidebar.settings, parameters)\n          : $.extend({}, $.fn.sidebar.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        regExp          = settings.regExp,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n\n        $sidebars       = $module.children(selector.sidebar),\n        $fixed          = $context.children(selector.fixed),\n        $pusher         = $context.children(selector.pusher),\n        $style,\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        elementNamespace,\n        id,\n        currentScroll,\n        transitionEvent,\n\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n          module.debug('Initializing sidebar', parameters);\n\n          module.create.id();\n\n          transitionEvent = module.get.transitionEvent();\n\n          // avoids locking rendering if initialized in onReady\n          if(settings.delaySetup) {\n            requestAnimationFrame(module.setup.layout);\n          }\n          else {\n            module.setup.layout();\n          }\n\n          requestAnimationFrame(function() {\n            module.setup.cache();\n          });\n\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        create: {\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2,8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          }\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', $module);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n          if(module.is.ios()) {\n            module.remove.ios();\n          }\n          // bound by uuid\n          $context.off(elementNamespace);\n          $window.off(elementNamespace);\n          $document.off(elementNamespace);\n        },\n\n        event: {\n          clickaway: function(event) {\n            if(settings.closable){\n              var\n                clickedInPusher = ($pusher.find(event.target).length > 0 || $pusher.is(event.target)),\n                clickedContext  = ($context.is(event.target))\n              ;\n              if(clickedInPusher) {\n                module.verbose('User clicked on dimmed page');\n                module.hide();\n              }\n              if(clickedContext) {\n                module.verbose('User clicked on dimmable context (scaled out page)');\n                module.hide();\n              }\n            }\n          },\n          touch: function(event) {\n            //event.stopPropagation();\n          },\n          containScroll: function(event) {\n            if(element.scrollTop <= 0)  {\n              element.scrollTop = 1;\n            }\n            if((element.scrollTop + element.offsetHeight) >= element.scrollHeight) {\n              element.scrollTop = element.scrollHeight - element.offsetHeight - 1;\n            }\n          },\n          scroll: function(event) {\n            if( $(event.target).closest(selector.sidebar).length === 0 ) {\n              event.preventDefault();\n            }\n          }\n        },\n\n        bind: {\n          clickaway: function() {\n            module.verbose('Adding clickaway events to context', $context);\n            $context\n              .on('click'    + elementNamespace, module.event.clickaway)\n              .on('touchend' + elementNamespace, module.event.clickaway)\n            ;\n          },\n          scrollLock: function() {\n            if(settings.scrollLock) {\n              module.debug('Disabling page scroll');\n              $window\n                .on('DOMMouseScroll' + elementNamespace, module.event.scroll)\n              ;\n            }\n            module.verbose('Adding events to contain sidebar scroll');\n            $document\n              .on('touchmove' + elementNamespace, module.event.touch)\n            ;\n            $module\n              .on('scroll' + eventNamespace, module.event.containScroll)\n            ;\n          }\n        },\n        unbind: {\n          clickaway: function() {\n            module.verbose('Removing clickaway events from context', $context);\n            $context.off(elementNamespace);\n          },\n          scrollLock: function() {\n            module.verbose('Removing scroll lock from page');\n            $document.off(elementNamespace);\n            $window.off(elementNamespace);\n            $module.off('scroll' + eventNamespace);\n          }\n        },\n\n        add: {\n          inlineCSS: function() {\n            var\n              width     = module.cache.width  || $module.outerWidth(),\n              height    = module.cache.height || $module.outerHeight(),\n              isRTL     = module.is.rtl(),\n              direction = module.get.direction(),\n              distance  = {\n                left   : width,\n                right  : -width,\n                top    : height,\n                bottom : -height\n              },\n              style\n            ;\n\n            if(isRTL){\n              module.verbose('RTL detected, flipping widths');\n              distance.left = -width;\n              distance.right = width;\n            }\n\n            style  = '<style>';\n\n            if(direction === 'left' || direction === 'right') {\n              module.debug('Adding CSS rules for animation distance', width);\n              style  += ''\n                + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'\n                + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'\n                + '   -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                + '           transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                + ' }'\n              ;\n            }\n            else if(direction === 'top' || direction == 'bottom') {\n              style  += ''\n                + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'\n                + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'\n                + '   -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                + '           transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                + ' }'\n              ;\n            }\n\n            /* IE is only browser not to create context with transforms */\n            /* https://www.w3.org/Bugs/Public/show_bug.cgi?id=16328 */\n            if( module.is.ie() ) {\n              if(direction === 'left' || direction === 'right') {\n                module.debug('Adding CSS rules for animation distance', width);\n                style  += ''\n                  + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'\n                  + '   -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                  + '           transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                  + ' }'\n                ;\n              }\n              else if(direction === 'top' || direction == 'bottom') {\n                style  += ''\n                  + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'\n                  + '   -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                  + '           transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                  + ' }'\n                ;\n              }\n              /* opposite sides visible forces content overlay */\n              style += ''\n                + ' body.pushable > .ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .pusher:after,'\n                + ' body.pushable > .ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .pusher:after {'\n                + '   -webkit-transform: translate3d(0, 0, 0);'\n                + '           transform: translate3d(0, 0, 0);'\n                + ' }'\n              ;\n            }\n            style += '</style>';\n            $style = $(style)\n              .appendTo($head)\n            ;\n            module.debug('Adding sizing css to head', $style);\n          }\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $context  = $(settings.context);\n          $sidebars = $context.children(selector.sidebar);\n          $pusher   = $context.children(selector.pusher);\n          $fixed    = $context.children(selector.fixed);\n          module.clear.cache();\n        },\n\n        refreshSidebars: function() {\n          module.verbose('Refreshing other sidebars');\n          $sidebars = $context.children(selector.sidebar);\n        },\n\n        repaint: function() {\n          module.verbose('Forcing repaint event');\n          element.style.display = 'none';\n          var ignored = element.offsetHeight;\n          element.scrollTop = element.scrollTop;\n          element.style.display = '';\n        },\n\n        setup: {\n          cache: function() {\n            module.cache = {\n              width  : $module.outerWidth(),\n              height : $module.outerHeight(),\n              rtl    : ($module.css('direction') == 'rtl')\n            };\n          },\n          layout: function() {\n            if( $context.children(selector.pusher).length === 0 ) {\n              module.debug('Adding wrapper element for sidebar');\n              module.error(error.pusher);\n              $pusher = $('<div class=\"pusher\" />');\n              $context\n                .children()\n                  .not(selector.omitted)\n                  .not($sidebars)\n                  .wrapAll($pusher)\n              ;\n              module.refresh();\n            }\n            if($module.nextAll(selector.pusher).length === 0 || $module.nextAll(selector.pusher)[0] !== $pusher[0]) {\n              module.debug('Moved sidebar to correct parent element');\n              module.error(error.movedSidebar, element);\n              $module.detach().prependTo($context);\n              module.refresh();\n            }\n            module.clear.cache();\n            module.set.pushable();\n            module.set.direction();\n          }\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $toggle = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($toggle.length > 0) {\n            module.debug('Attaching sidebar events to element', selector, event);\n            $toggle\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound, selector);\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(module.is.hidden()) {\n            module.refreshSidebars();\n            if(settings.overlay)  {\n              module.error(error.overlay);\n              settings.transition = 'overlay';\n            }\n            module.refresh();\n            if(module.othersActive()) {\n              module.debug('Other sidebars currently visible');\n              if(settings.exclusive) {\n                // if not overlay queue animation after hide\n                if(settings.transition != 'overlay') {\n                  module.hideOthers(module.show);\n                  return;\n                }\n                else {\n                  module.hideOthers();\n                }\n              }\n              else {\n                settings.transition = 'overlay';\n              }\n            }\n            module.pushPage(function() {\n              callback.call(element);\n              settings.onShow.call(element);\n            });\n            settings.onChange.call(element);\n            settings.onVisible.call(element);\n          }\n          else {\n            module.debug('Sidebar is already visible');\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(module.is.visible() || module.is.animating()) {\n            module.debug('Hiding sidebar', callback);\n            module.refreshSidebars();\n            module.pullPage(function() {\n              callback.call(element);\n              settings.onHidden.call(element);\n            });\n            settings.onChange.call(element);\n            settings.onHide.call(element);\n          }\n        },\n\n        othersAnimating: function() {\n          return ($sidebars.not($module).filter('.' + className.animating).length > 0);\n        },\n        othersVisible: function() {\n          return ($sidebars.not($module).filter('.' + className.visible).length > 0);\n        },\n        othersActive: function() {\n          return(module.othersVisible() || module.othersAnimating());\n        },\n\n        hideOthers: function(callback) {\n          var\n            $otherSidebars = $sidebars.not($module).filter('.' + className.visible),\n            sidebarCount   = $otherSidebars.length,\n            callbackCount  = 0\n          ;\n          callback = callback || function(){};\n          $otherSidebars\n            .sidebar('hide', function() {\n              callbackCount++;\n              if(callbackCount == sidebarCount) {\n                callback();\n              }\n            })\n          ;\n        },\n\n        toggle: function() {\n          module.verbose('Determining toggled direction');\n          if(module.is.hidden()) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        pushPage: function(callback) {\n          var\n            transition = module.get.transition(),\n            $transition = (transition === 'overlay' || module.othersActive())\n              ? $module\n              : $pusher,\n            animate,\n            dim,\n            transitionEnd\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(settings.transition == 'scale down') {\n            module.scrollToTop();\n          }\n          module.set.transition(transition);\n          module.repaint();\n          animate = function() {\n            module.bind.clickaway();\n            module.add.inlineCSS();\n            module.set.animating();\n            module.set.visible();\n          };\n          dim = function() {\n            module.set.dimmed();\n          };\n          transitionEnd = function(event) {\n            if( event.target == $transition[0] ) {\n              $transition.off(transitionEvent + elementNamespace, transitionEnd);\n              module.remove.animating();\n              module.bind.scrollLock();\n              callback.call(element);\n            }\n          };\n          $transition.off(transitionEvent + elementNamespace);\n          $transition.on(transitionEvent + elementNamespace, transitionEnd);\n          requestAnimationFrame(animate);\n          if(settings.dimPage && !module.othersVisible()) {\n            requestAnimationFrame(dim);\n          }\n        },\n\n        pullPage: function(callback) {\n          var\n            transition = module.get.transition(),\n            $transition = (transition == 'overlay' || module.othersActive())\n              ? $module\n              : $pusher,\n            animate,\n            transitionEnd\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.verbose('Removing context push state', module.get.direction());\n\n          module.unbind.clickaway();\n          module.unbind.scrollLock();\n\n          animate = function() {\n            module.set.transition(transition);\n            module.set.animating();\n            module.remove.visible();\n            if(settings.dimPage && !module.othersVisible()) {\n              $pusher.removeClass(className.dimmed);\n            }\n          };\n          transitionEnd = function(event) {\n            if( event.target == $transition[0] ) {\n              $transition.off(transitionEvent + elementNamespace, transitionEnd);\n              module.remove.animating();\n              module.remove.transition();\n              module.remove.inlineCSS();\n              if(transition == 'scale down' || (settings.returnScroll && module.is.mobile()) ) {\n                module.scrollBack();\n              }\n              callback.call(element);\n            }\n          };\n          $transition.off(transitionEvent + elementNamespace);\n          $transition.on(transitionEvent + elementNamespace, transitionEnd);\n          requestAnimationFrame(animate);\n        },\n\n        scrollToTop: function() {\n          module.verbose('Scrolling to top of page to avoid animation issues');\n          currentScroll = $(window).scrollTop();\n          $module.scrollTop(0);\n          window.scrollTo(0, 0);\n        },\n\n        scrollBack: function() {\n          module.verbose('Scrolling back to original page position');\n          window.scrollTo(0, currentScroll);\n        },\n\n        clear: {\n          cache: function() {\n            module.verbose('Clearing cached dimensions');\n            module.cache = {};\n          }\n        },\n\n        set: {\n\n          // ios only (scroll on html not document). This prevent auto-resize canvas/scroll in ios\n          // (This is no longer necessary in latest iOS)\n          ios: function() {\n            $html.addClass(className.ios);\n          },\n\n          // container\n          pushed: function() {\n            $context.addClass(className.pushed);\n          },\n          pushable: function() {\n            $context.addClass(className.pushable);\n          },\n\n          // pusher\n          dimmed: function() {\n            $pusher.addClass(className.dimmed);\n          },\n\n          // sidebar\n          active: function() {\n            $module.addClass(className.active);\n          },\n          animating: function() {\n            $module.addClass(className.animating);\n          },\n          transition: function(transition) {\n            transition = transition || module.get.transition();\n            $module.addClass(transition);\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            $module.addClass(className[direction]);\n          },\n          visible: function() {\n            $module.addClass(className.visible);\n          },\n          overlay: function() {\n            $module.addClass(className.overlay);\n          }\n        },\n        remove: {\n\n          inlineCSS: function() {\n            module.debug('Removing inline css styles', $style);\n            if($style && $style.length > 0) {\n              $style.remove();\n            }\n          },\n\n          // ios scroll on html not document\n          ios: function() {\n            $html.removeClass(className.ios);\n          },\n\n          // context\n          pushed: function() {\n            $context.removeClass(className.pushed);\n          },\n          pushable: function() {\n            $context.removeClass(className.pushable);\n          },\n\n          // sidebar\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          animating: function() {\n            $module.removeClass(className.animating);\n          },\n          transition: function(transition) {\n            transition = transition || module.get.transition();\n            $module.removeClass(transition);\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            $module.removeClass(className[direction]);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          overlay: function() {\n            $module.removeClass(className.overlay);\n          }\n        },\n\n        get: {\n          direction: function() {\n            if($module.hasClass(className.top)) {\n              return className.top;\n            }\n            else if($module.hasClass(className.right)) {\n              return className.right;\n            }\n            else if($module.hasClass(className.bottom)) {\n              return className.bottom;\n            }\n            return className.left;\n          },\n          transition: function() {\n            var\n              direction = module.get.direction(),\n              transition\n            ;\n            transition = ( module.is.mobile() )\n              ? (settings.mobileTransition == 'auto')\n                ? settings.defaultTransition.mobile[direction]\n                : settings.mobileTransition\n              : (settings.transition == 'auto')\n                ? settings.defaultTransition.computer[direction]\n                : settings.transition\n            ;\n            module.verbose('Determined transition', transition);\n            return transition;\n          },\n          transitionEvent: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          }\n        },\n\n        is: {\n\n          ie: function() {\n            var\n              isIE11 = (!(window.ActiveXObject) && 'ActiveXObject' in window),\n              isIE   = ('ActiveXObject' in window)\n            ;\n            return (isIE11 || isIE);\n          },\n\n          ios: function() {\n            var\n              userAgent      = navigator.userAgent,\n              isIOS          = userAgent.match(regExp.ios),\n              isMobileChrome = userAgent.match(regExp.mobileChrome)\n            ;\n            if(isIOS && !isMobileChrome) {\n              module.verbose('Browser was found to be iOS', userAgent);\n              return true;\n            }\n            else {\n              return false;\n            }\n          },\n          mobile: function() {\n            var\n              userAgent    = navigator.userAgent,\n              isMobile     = userAgent.match(regExp.mobile)\n            ;\n            if(isMobile) {\n              module.verbose('Browser was found to be mobile', userAgent);\n              return true;\n            }\n            else {\n              module.verbose('Browser is not mobile, using regular transition', userAgent);\n              return false;\n            }\n          },\n          hidden: function() {\n            return !module.is.visible();\n          },\n          visible: function() {\n            return $module.hasClass(className.visible);\n          },\n          // alias\n          open: function() {\n            return module.is.visible();\n          },\n          closed: function() {\n            return module.is.hidden();\n          },\n          vertical: function() {\n            return $module.hasClass(className.top);\n          },\n          animating: function() {\n            return $context.hasClass(className.animating);\n          },\n          rtl: function () {\n            if(module.cache.rtl === undefined) {\n              module.cache.rtl = ($module.css('direction') == 'rtl');\n            }\n            return module.cache.rtl;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if(Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      }\n    ;\n\n    if(methodInvoked) {\n      if(instance === undefined) {\n        module.initialize();\n      }\n      module.invoke(query);\n    }\n    else {\n      if(instance !== undefined) {\n        module.invoke('destroy');\n      }\n      module.initialize();\n    }\n  });\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.sidebar.settings = {\n\n  name              : 'Sidebar',\n  namespace         : 'sidebar',\n\n  silent            : false,\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  transition        : 'auto',\n  mobileTransition  : 'auto',\n\n  defaultTransition : {\n    computer: {\n      left   : 'uncover',\n      right  : 'uncover',\n      top    : 'overlay',\n      bottom : 'overlay'\n    },\n    mobile: {\n      left   : 'uncover',\n      right  : 'uncover',\n      top    : 'overlay',\n      bottom : 'overlay'\n    }\n  },\n\n  context           : 'body',\n  exclusive         : false,\n  closable          : true,\n  dimPage           : true,\n  scrollLock        : false,\n  returnScroll      : false,\n  delaySetup        : false,\n\n  duration          : 500,\n\n  onChange          : function(){},\n  onShow            : function(){},\n  onHide            : function(){},\n\n  onHidden          : function(){},\n  onVisible         : function(){},\n\n  className         : {\n    active    : 'active',\n    animating : 'animating',\n    dimmed    : 'dimmed',\n    ios       : 'ios',\n    pushable  : 'pushable',\n    pushed    : 'pushed',\n    right     : 'right',\n    top       : 'top',\n    left      : 'left',\n    bottom    : 'bottom',\n    visible   : 'visible'\n  },\n\n  selector: {\n    fixed   : '.fixed',\n    omitted : 'script, link, style, .ui.modal, .ui.dimmer, .ui.nag, .ui.fixed',\n    pusher  : '.pusher',\n    sidebar : '.ui.sidebar'\n  },\n\n  regExp: {\n    ios          : /(iPad|iPhone|iPod)/g,\n    mobileChrome : /(CriOS)/g,\n    mobile       : /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/g\n  },\n\n  error   : {\n    method       : 'The method you called is not defined.',\n    pusher       : 'Had to add pusher element. For optimal performance make sure body content is inside a pusher element',\n    movedSidebar : 'Had to move sidebar. For optimal performance make sure sidebar and pusher are direct children of your body tag',\n    overlay      : 'The overlay setting is no longer supported, use animation: overlay',\n    notFound     : 'There were no elements that matched the specified selector'\n  }\n\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Fomantic-UI - Sticky\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n'use strict';\n\n$.isFunction = $.isFunction || function(obj) {\n  return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.sticky = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings              = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.sticky.settings, parameters)\n          : $.extend({}, $.fn.sticky.settings),\n\n        className             = settings.className,\n        namespace             = settings.namespace,\n        error                 = settings.error,\n\n        eventNamespace        = '.' + namespace,\n        moduleNamespace       = 'module-' + namespace,\n\n        $module               = $(this),\n        $window               = $(window),\n        $scroll               = $(settings.scrollContext),\n        $container,\n        $context,\n\n        instance              = $module.data(moduleNamespace),\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); },\n\n        element         = this,\n\n        documentObserver,\n        observer,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n\n          module.determineContainer();\n          module.determineContext();\n          module.verbose('Initializing sticky', settings, $container);\n\n          module.save.positions();\n          module.checkErrors();\n          module.bind.events();\n\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance');\n          module.reset();\n          if(documentObserver) {\n            documentObserver.disconnect();\n          }\n          if(observer) {\n            observer.disconnect();\n          }\n          $window\n            .off('load' + eventNamespace, module.event.load)\n            .off('resize' + eventNamespace, module.event.resize)\n          ;\n          $scroll\n            .off('scrollchange' + eventNamespace, module.event.scrollchange)\n          ;\n          $module.removeData(moduleNamespace);\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            documentObserver = new MutationObserver(module.event.documentChanged);\n            observer         = new MutationObserver(module.event.changed);\n            documentObserver.observe(document, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe($context[0], {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        determineContainer: function() {\n          if(settings.container) {\n            $container = $(settings.container);\n          }\n          else {\n            $container = $module.offsetParent();\n          }\n        },\n\n        determineContext: function() {\n          if(settings.context) {\n            $context = $(settings.context);\n          }\n          else {\n            $context = $container;\n          }\n          if($context.length === 0) {\n            module.error(error.invalidContext, settings.context, $module);\n            return;\n          }\n        },\n\n        checkErrors: function() {\n          if( module.is.hidden() ) {\n            module.error(error.visible, $module);\n          }\n          if(module.cache.element.height > module.cache.context.height) {\n            module.reset();\n            module.error(error.elementSize, $module);\n            return;\n          }\n        },\n\n        bind: {\n          events: function() {\n            $window\n              .on('load' + eventNamespace, module.event.load)\n              .on('resize' + eventNamespace, module.event.resize)\n            ;\n            // pub/sub pattern\n            $scroll\n              .off('scroll' + eventNamespace)\n              .on('scroll' + eventNamespace, module.event.scroll)\n              .on('scrollchange' + eventNamespace, module.event.scrollchange)\n            ;\n          }\n        },\n\n        event: {\n          changed: function(mutations) {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(function() {\n              module.verbose('DOM tree modified, updating sticky menu', mutations);\n              module.refresh();\n            }, 100);\n          },\n          documentChanged: function(mutations) {\n            [].forEach.call(mutations, function(mutation) {\n              if(mutation.removedNodes) {\n                [].forEach.call(mutation.removedNodes, function(node) {\n                  if(node == element || $(node).find(element).length > 0) {\n                    module.debug('Element removed from DOM, tearing down events');\n                    module.destroy();\n                  }\n                });\n              }\n            });\n          },\n          load: function() {\n            module.verbose('Page contents finished loading');\n            requestAnimationFrame(module.refresh);\n          },\n          resize: function() {\n            module.verbose('Window resized');\n            requestAnimationFrame(module.refresh);\n          },\n          scroll: function() {\n            requestAnimationFrame(function() {\n              $scroll.triggerHandler('scrollchange' + eventNamespace, $scroll.scrollTop() );\n            });\n          },\n          scrollchange: function(event, scrollPosition) {\n            module.stick(scrollPosition);\n            settings.onScroll.call(element);\n          }\n        },\n\n        refresh: function(hardRefresh) {\n          module.reset();\n          if(!settings.context) {\n            module.determineContext();\n          }\n          if(hardRefresh) {\n            module.determineContainer();\n          }\n          module.save.positions();\n          module.stick();\n          settings.onReposition.call(element);\n        },\n\n        supports: {\n          sticky: function() {\n            var\n              $element = $('<div/>')\n            ;\n            $element.addClass(className.supported);\n            return($element.css('position').match('sticky'));\n          }\n        },\n\n        save: {\n          lastScroll: function(scroll) {\n            module.lastScroll = scroll;\n          },\n          elementScroll: function(scroll) {\n            module.elementScroll = scroll;\n          },\n          positions: function() {\n            var\n              scrollContext = {\n                height : $scroll.height()\n              },\n              element = {\n                margin: {\n                  top    : parseInt($module.css('margin-top'), 10),\n                  bottom : parseInt($module.css('margin-bottom'), 10),\n                },\n                offset : $module.offset(),\n                width  : $module.outerWidth(),\n                height : $module.outerHeight()\n              },\n              context = {\n                offset : $context.offset(),\n                height : $context.outerHeight()\n              }\n            ;\n            if( !module.is.standardScroll() ) {\n              module.debug('Non-standard scroll. Removing scroll offset from element offset');\n\n              scrollContext.top  = $scroll.scrollTop();\n              scrollContext.left = $scroll.scrollLeft();\n\n              element.offset.top  += scrollContext.top;\n              context.offset.top  += scrollContext.top;\n              element.offset.left += scrollContext.left;\n              context.offset.left += scrollContext.left;\n            }\n            module.cache = {\n              fits          : ( (element.height + settings.offset) <= scrollContext.height),\n              sameHeight    : (element.height == context.height),\n              scrollContext : {\n                height : scrollContext.height\n              },\n              element: {\n                margin : element.margin,\n                top    : element.offset.top - element.margin.top,\n                left   : element.offset.left,\n                width  : element.width,\n                height : element.height,\n                bottom : element.offset.top + element.height\n              },\n              context: {\n                top           : context.offset.top,\n                height        : context.height,\n                bottom        : context.offset.top + context.height\n              }\n            };\n            module.set.containerSize();\n\n            module.stick();\n            module.debug('Caching element positions', module.cache);\n          }\n        },\n\n        get: {\n          direction: function(scroll) {\n            var\n              direction = 'down'\n            ;\n            scroll = scroll || $scroll.scrollTop();\n            if(module.lastScroll !== undefined) {\n              if(module.lastScroll < scroll) {\n                direction = 'down';\n              }\n              else if(module.lastScroll > scroll) {\n                direction = 'up';\n              }\n            }\n            return direction;\n          },\n          scrollChange: function(scroll) {\n            scroll = scroll || $scroll.scrollTop();\n            return (module.lastScroll)\n              ? (scroll - module.lastScroll)\n              : 0\n            ;\n          },\n          currentElementScroll: function() {\n            if(module.elementScroll) {\n              return module.elementScroll;\n            }\n            return ( module.is.top() )\n              ? Math.abs(parseInt($module.css('top'), 10))    || 0\n              : Math.abs(parseInt($module.css('bottom'), 10)) || 0\n            ;\n          },\n\n          elementScroll: function(scroll) {\n            scroll = scroll || $scroll.scrollTop();\n            var\n              element        = module.cache.element,\n              scrollContext  = module.cache.scrollContext,\n              delta          = module.get.scrollChange(scroll),\n              maxScroll      = (element.height - scrollContext.height + settings.offset),\n              elementScroll  = module.get.currentElementScroll(),\n              possibleScroll = (elementScroll + delta)\n            ;\n            if(module.cache.fits || possibleScroll < 0) {\n              elementScroll = 0;\n            }\n            else if(possibleScroll > maxScroll ) {\n              elementScroll = maxScroll;\n            }\n            else {\n              elementScroll = possibleScroll;\n            }\n            return elementScroll;\n          }\n        },\n\n        remove: {\n          lastScroll: function() {\n            delete module.lastScroll;\n          },\n          elementScroll: function(scroll) {\n            delete module.elementScroll;\n          },\n          minimumSize: function() {\n            $container\n              .css('min-height', '')\n            ;\n          },\n          offset: function() {\n            $module.css('margin-top', '');\n          }\n        },\n\n        set: {\n          offset: function() {\n            module.verbose('Setting offset on element', settings.offset);\n            $module\n              .css('margin-top', settings.offset)\n            ;\n          },\n          containerSize: function() {\n            var\n              tagName = $container.get(0).tagName\n            ;\n            if(tagName === 'HTML' || tagName == 'body') {\n              // this can trigger for too many reasons\n              //module.error(error.container, tagName, $module);\n              module.determineContainer();\n            }\n            else {\n              if( Math.abs($container.outerHeight() - module.cache.context.height) > settings.jitter) {\n                module.debug('Context has padding, specifying exact height for container', module.cache.context.height);\n                $container.css({\n                  height: module.cache.context.height\n                });\n              }\n            }\n          },\n          minimumSize: function() {\n            var\n              element   = module.cache.element\n            ;\n            $container\n              .css('min-height', element.height)\n            ;\n          },\n          scroll: function(scroll) {\n            module.debug('Setting scroll on element', scroll);\n            if(module.elementScroll == scroll) {\n              return;\n            }\n            if( module.is.top() ) {\n              $module\n                .css('bottom', '')\n                .css('top', -scroll)\n              ;\n            }\n            if( module.is.bottom() ) {\n              $module\n                .css('top', '')\n                .css('bottom', scroll)\n              ;\n            }\n          },\n          size: function() {\n            if(module.cache.element.height !== 0 && module.cache.element.width !== 0) {\n              element.style.setProperty('width',  module.cache.element.width  + 'px', 'important');\n              element.style.setProperty('height', module.cache.element.height + 'px', 'important');\n            }\n          }\n        },\n\n        is: {\n          standardScroll: function() {\n            return ($scroll[0] == window);\n          },\n          top: function() {\n            return $module.hasClass(className.top);\n          },\n          bottom: function() {\n            return $module.hasClass(className.bottom);\n          },\n          initialPosition: function() {\n            return (!module.is.fixed() && !module.is.bound());\n          },\n          hidden: function() {\n            return (!$module.is(':visible'));\n          },\n          bound: function() {\n            return $module.hasClass(className.bound);\n          },\n          fixed: function() {\n            return $module.hasClass(className.fixed);\n          }\n        },\n\n        stick: function(scroll) {\n          var\n            cachedPosition = scroll || $scroll.scrollTop(),\n            cache          = module.cache,\n            fits           = cache.fits,\n            sameHeight     = cache.sameHeight,\n            element        = cache.element,\n            scrollContext  = cache.scrollContext,\n            context        = cache.context,\n            offset         = (module.is.bottom() && settings.pushing)\n              ? settings.bottomOffset\n              : settings.offset,\n            scroll         = {\n              top    : cachedPosition + offset,\n              bottom : cachedPosition + offset + scrollContext.height\n            },\n            elementScroll  = (fits)\n              ? 0\n              : module.get.elementScroll(scroll.top),\n\n            // shorthand\n            doesntFit      = !fits,\n            elementVisible = (element.height !== 0)\n          ;\n          if(elementVisible && !sameHeight) {\n\n            if( module.is.initialPosition() ) {\n              if(scroll.top >= context.bottom) {\n                module.debug('Initial element position is bottom of container');\n                module.bindBottom();\n              }\n              else if(scroll.top > element.top) {\n                if( (element.height + scroll.top - elementScroll) >= context.bottom ) {\n                  module.debug('Initial element position is bottom of container');\n                  module.bindBottom();\n                }\n                else {\n                  module.debug('Initial element position is fixed');\n                  module.fixTop();\n                }\n              }\n\n            }\n            else if( module.is.fixed() ) {\n\n              // currently fixed top\n              if( module.is.top() ) {\n                if( scroll.top <= element.top ) {\n                  module.debug('Fixed element reached top of container');\n                  module.setInitialPosition();\n                }\n                else if( (element.height + scroll.top - elementScroll) >= context.bottom ) {\n                  module.debug('Fixed element reached bottom of container');\n                  module.bindBottom();\n                }\n                // scroll element if larger than screen\n                else if(doesntFit) {\n                  module.set.scroll(elementScroll);\n                  module.save.lastScroll(scroll.top);\n                  module.save.elementScroll(elementScroll);\n                }\n              }\n\n              // currently fixed bottom\n              else if(module.is.bottom() ) {\n\n                // top edge\n                if( (scroll.bottom - element.height) <= element.top) {\n                  module.debug('Bottom fixed rail has reached top of container');\n                  module.setInitialPosition();\n                }\n                // bottom edge\n                else if(scroll.bottom >= context.bottom) {\n                  module.debug('Bottom fixed rail has reached bottom of container');\n                  module.bindBottom();\n                }\n                // scroll element if larger than screen\n                else if(doesntFit) {\n                  module.set.scroll(elementScroll);\n                  module.save.lastScroll(scroll.top);\n                  module.save.elementScroll(elementScroll);\n                }\n\n              }\n            }\n            else if( module.is.bottom() ) {\n              if( scroll.top <= element.top ) {\n                module.debug('Jumped from bottom fixed to top fixed, most likely used home/end button');\n                module.setInitialPosition();\n              }\n              else {\n                if(settings.pushing) {\n                  if(module.is.bound() && scroll.bottom <= context.bottom ) {\n                    module.debug('Fixing bottom attached element to bottom of browser.');\n                    module.fixBottom();\n                  }\n                }\n                else {\n                  if(module.is.bound() && (scroll.top <= context.bottom - element.height) ) {\n                    module.debug('Fixing bottom attached element to top of browser.');\n                    module.fixTop();\n                  }\n                }\n              }\n            }\n          }\n        },\n\n        bindTop: function() {\n          module.debug('Binding element to top of parent container');\n          module.remove.offset();\n          $module\n            .css({\n              left         : '',\n              top          : '',\n              marginBottom : ''\n            })\n            .removeClass(className.fixed)\n            .removeClass(className.bottom)\n            .addClass(className.bound)\n            .addClass(className.top)\n          ;\n          settings.onTop.call(element);\n          settings.onUnstick.call(element);\n        },\n        bindBottom: function() {\n          module.debug('Binding element to bottom of parent container');\n          module.remove.offset();\n          $module\n            .css({\n              left         : '',\n              top          : ''\n            })\n            .removeClass(className.fixed)\n            .removeClass(className.top)\n            .addClass(className.bound)\n            .addClass(className.bottom)\n          ;\n          settings.onBottom.call(element);\n          settings.onUnstick.call(element);\n        },\n\n        setInitialPosition: function() {\n          module.debug('Returning to initial position');\n          module.unfix();\n          module.unbind();\n        },\n\n\n        fixTop: function() {\n          module.debug('Fixing element to top of page');\n          if(settings.setSize) {\n            module.set.size();\n          }\n          module.set.minimumSize();\n          module.set.offset();\n          $module\n            .css({\n              left         : module.cache.element.left,\n              bottom       : '',\n              marginBottom : ''\n            })\n            .removeClass(className.bound)\n            .removeClass(className.bottom)\n            .addClass(className.fixed)\n            .addClass(className.top)\n          ;\n          settings.onStick.call(element);\n        },\n\n        fixBottom: function() {\n          module.debug('Sticking element to bottom of page');\n          if(settings.setSize) {\n            module.set.size();\n          }\n          module.set.minimumSize();\n          module.set.offset();\n          $module\n            .css({\n              left         : module.cache.element.left,\n              bottom       : '',\n              marginBottom : ''\n            })\n            .removeClass(className.bound)\n            .removeClass(className.top)\n            .addClass(className.fixed)\n            .addClass(className.bottom)\n          ;\n          settings.onStick.call(element);\n        },\n\n        unbind: function() {\n          if( module.is.bound() ) {\n            module.debug('Removing container bound position on element');\n            module.remove.offset();\n            $module\n              .removeClass(className.bound)\n              .removeClass(className.top)\n              .removeClass(className.bottom)\n            ;\n          }\n        },\n\n        unfix: function() {\n          if( module.is.fixed() ) {\n            module.debug('Removing fixed position on element');\n            module.remove.minimumSize();\n            module.remove.offset();\n            $module\n              .removeClass(className.fixed)\n              .removeClass(className.top)\n              .removeClass(className.bottom)\n            ;\n            settings.onUnstick.call(element);\n          }\n        },\n\n        reset: function() {\n          module.debug('Resetting elements position');\n          module.unbind();\n          module.unfix();\n          module.resetCSS();\n          module.remove.offset();\n          module.remove.lastScroll();\n        },\n\n        resetCSS: function() {\n          $module\n            .css({\n              width  : '',\n              height : ''\n            })\n          ;\n          $container\n            .css({\n              height: ''\n            })\n          ;\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 0);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if(Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.sticky.settings = {\n\n  name           : 'Sticky',\n  namespace      : 'sticky',\n\n  silent         : false,\n  debug          : false,\n  verbose        : true,\n  performance    : true,\n\n  // whether to stick in the opposite direction on scroll up\n  pushing        : false,\n\n  context        : false,\n  container      : false,\n\n  // Context to watch scroll events\n  scrollContext  : window,\n\n  // Offset to adjust scroll\n  offset         : 0,\n\n  // Offset to adjust scroll when attached to bottom of screen\n  bottomOffset   : 0,\n\n  // will only set container height if difference between context and container is larger than this number\n  jitter         : 5,\n\n  // set width of sticky element when it is fixed to page (used to make sure 100% width is maintained if no fixed size set)\n  setSize        : true,\n\n  // Whether to automatically observe changes with Mutation Observers\n  observeChanges : false,\n\n  // Called when position is recalculated\n  onReposition   : function(){},\n\n  // Called on each scroll\n  onScroll       : function(){},\n\n  // Called when element is stuck to viewport\n  onStick        : function(){},\n\n  // Called when element is unstuck from viewport\n  onUnstick      : function(){},\n\n  // Called when element reaches top of context\n  onTop          : function(){},\n\n  // Called when element reaches bottom of context\n  onBottom       : function(){},\n\n  error         : {\n    container      : 'Sticky element must be inside a relative container',\n    visible        : 'Element is hidden, you must call refresh after element becomes visible. Use silent setting to surpress this warning in production.',\n    method         : 'The method you called is not defined.',\n    invalidContext : 'Context specified does not exist',\n    elementSize    : 'Sticky element is larger than its container, cannot create sticky.'\n  },\n\n  className : {\n    bound     : 'bound',\n    fixed     : 'fixed',\n    supported : 'native',\n    top       : 'top',\n    bottom    : 'bottom'\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Fomantic-UI - Tab\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n'use strict';\n\n$.isWindow = $.isWindow || function(obj) {\n  return obj != null && obj === obj.window;\n};\n$.isFunction = $.isFunction || function(obj) {\n  return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.tab = function(parameters) {\n\n  var\n    // use window context if none specified\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n\n    moduleSelector  = $allModules.selector || '',\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    initializedHistory = false,\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.tab.settings, parameters)\n          : $.extend({}, $.fn.tab.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n        regExp          = settings.regExp,\n\n        eventNamespace  = '.' + settings.namespace,\n        moduleNamespace = 'module-' + settings.namespace,\n\n        $module         = $(this),\n        $context,\n        $tabs,\n\n        cache           = {},\n        firstLoad       = true,\n        recursionDepth  = 0,\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        activeTabPath,\n        parameterArray,\n        module,\n\n        historyEvent\n\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing tab menu item', $module);\n          module.fix.callbacks();\n          module.determineTabs();\n\n          module.debug('Determining tabs', settings.context, $tabs);\n          // set up automatic routing\n          if(settings.auto) {\n            module.set.auto();\n          }\n          module.bind.events();\n\n          if(settings.history && !initializedHistory) {\n            module.initializeHistory();\n            initializedHistory = true;\n          }\n\n          module.instantiate();\n        },\n\n        instantiate: function () {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.debug('Destroying tabs', $module);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            // if using $.tab don't add events\n            if( !$.isWindow( element ) ) {\n              module.debug('Attaching tab activation events to element', $module);\n              $module\n                .on('click' + eventNamespace, module.event.click)\n              ;\n            }\n          }\n        },\n\n        determineTabs: function() {\n          var\n            $reference\n          ;\n\n          // determine tab context\n          if(settings.context === 'parent') {\n            if($module.closest(selector.ui).length > 0) {\n              $reference = $module.closest(selector.ui);\n              module.verbose('Using closest UI element as parent', $reference);\n            }\n            else {\n              $reference = $module;\n            }\n            $context = $reference.parent();\n            module.verbose('Determined parent element for creating context', $context);\n          }\n          else if(settings.context) {\n            $context = $(settings.context);\n            module.verbose('Using selector for tab context', settings.context, $context);\n          }\n          else {\n            $context = $('body');\n          }\n          // find tabs\n          if(settings.childrenOnly) {\n            $tabs = $context.children(selector.tabs);\n            module.debug('Searching tab context children for tabs', $context, $tabs);\n          }\n          else {\n            $tabs = $context.find(selector.tabs);\n            module.debug('Searching tab context for tabs', $context, $tabs);\n          }\n        },\n\n        fix: {\n          callbacks: function() {\n            if( $.isPlainObject(parameters) && (parameters.onTabLoad || parameters.onTabInit) ) {\n              if(parameters.onTabLoad) {\n                parameters.onLoad = parameters.onTabLoad;\n                delete parameters.onTabLoad;\n                module.error(error.legacyLoad, parameters.onLoad);\n              }\n              if(parameters.onTabInit) {\n                parameters.onFirstLoad = parameters.onTabInit;\n                delete parameters.onTabInit;\n                module.error(error.legacyInit, parameters.onFirstLoad);\n              }\n              settings = $.extend(true, {}, $.fn.tab.settings, parameters);\n            }\n          }\n        },\n\n        initializeHistory: function() {\n          module.debug('Initializing page state');\n          if( $.address === undefined ) {\n            module.error(error.state);\n            return false;\n          }\n          else {\n            if(settings.historyType == 'state') {\n              module.debug('Using HTML5 to manage state');\n              if(settings.path !== false) {\n                $.address\n                  .history(true)\n                  .state(settings.path)\n                ;\n              }\n              else {\n                module.error(error.path);\n                return false;\n              }\n            }\n            $.address\n              .bind('change', module.event.history.change)\n            ;\n          }\n        },\n\n        event: {\n          click: function(event) {\n            var\n              tabPath = $(this).data(metadata.tab)\n            ;\n            if(tabPath !== undefined) {\n              if(settings.history) {\n                module.verbose('Updating page state', event);\n                $.address.value(tabPath);\n              }\n              else {\n                module.verbose('Changing tab', event);\n                module.changeTab(tabPath);\n              }\n              event.preventDefault();\n            }\n            else {\n              module.debug('No tab specified');\n            }\n          },\n          history: {\n            change: function(event) {\n              var\n                tabPath   = event.pathNames.join('/') || module.get.initialPath(),\n                pageTitle = settings.templates.determineTitle(tabPath) || false\n              ;\n              module.performance.display();\n              module.debug('History change event', tabPath, event);\n              historyEvent = event;\n              if(tabPath !== undefined) {\n                module.changeTab(tabPath);\n              }\n              if(pageTitle) {\n                $.address.title(pageTitle);\n              }\n            }\n          }\n        },\n\n        refresh: function() {\n          if(activeTabPath) {\n            module.debug('Refreshing tab', activeTabPath);\n            module.changeTab(activeTabPath);\n          }\n        },\n\n        cache: {\n\n          read: function(cacheKey) {\n            return (cacheKey !== undefined)\n              ? cache[cacheKey]\n              : false\n            ;\n          },\n          add: function(cacheKey, content) {\n            cacheKey = cacheKey || activeTabPath;\n            module.debug('Adding cached content for', cacheKey);\n            cache[cacheKey] = content;\n          },\n          remove: function(cacheKey) {\n            cacheKey = cacheKey || activeTabPath;\n            module.debug('Removing cached content for', cacheKey);\n            delete cache[cacheKey];\n          }\n        },\n\n        escape: {\n          string: function(text) {\n            text =  String(text);\n            return text.replace(regExp.escape, '\\\\$&');\n          }\n        },\n\n        set: {\n          auto: function() {\n            var\n              url = (typeof settings.path == 'string')\n                ? settings.path.replace(/\\/$/, '') + '/{$tab}'\n                : '/{$tab}'\n            ;\n            module.verbose('Setting up automatic tab retrieval from server', url);\n            if($.isPlainObject(settings.apiSettings)) {\n              settings.apiSettings.url = url;\n            }\n            else {\n              settings.apiSettings = {\n                url: url\n              };\n            }\n          },\n          loading: function(tabPath) {\n            var\n              $tab      = module.get.tabElement(tabPath),\n              isLoading = $tab.hasClass(className.loading)\n            ;\n            if(!isLoading) {\n              module.verbose('Setting loading state for', $tab);\n              $tab\n                .addClass(className.loading)\n                .siblings($tabs)\n                  .removeClass(className.active + ' ' + className.loading)\n              ;\n              if($tab.length > 0) {\n                settings.onRequest.call($tab[0], tabPath);\n              }\n            }\n          },\n          state: function(state) {\n            $.address.value(state);\n          }\n        },\n\n        changeTab: function(tabPath) {\n          var\n            pushStateAvailable = (window.history && window.history.pushState),\n            shouldIgnoreLoad   = (pushStateAvailable && settings.ignoreFirstLoad && firstLoad),\n            remoteContent      = (settings.auto || $.isPlainObject(settings.apiSettings) ),\n            // only add default path if not remote content\n            pathArray = (remoteContent && !shouldIgnoreLoad)\n              ? module.utilities.pathToArray(tabPath)\n              : module.get.defaultPathArray(tabPath)\n          ;\n          tabPath = module.utilities.arrayToPath(pathArray);\n          $.each(pathArray, function(index, tab) {\n            var\n              currentPathArray   = pathArray.slice(0, index + 1),\n              currentPath        = module.utilities.arrayToPath(currentPathArray),\n\n              isTab              = module.is.tab(currentPath),\n              isLastIndex        = (index + 1 == pathArray.length),\n\n              $tab               = module.get.tabElement(currentPath),\n              $anchor,\n              nextPathArray,\n              nextPath,\n              isLastTab\n            ;\n            module.verbose('Looking for tab', tab);\n            if(isTab) {\n              module.verbose('Tab was found', tab);\n              // scope up\n              activeTabPath  = currentPath;\n              parameterArray = module.utilities.filterArray(pathArray, currentPathArray);\n\n              if(isLastIndex) {\n                isLastTab = true;\n              }\n              else {\n                nextPathArray = pathArray.slice(0, index + 2);\n                nextPath      = module.utilities.arrayToPath(nextPathArray);\n                isLastTab     = ( !module.is.tab(nextPath) );\n                if(isLastTab) {\n                  module.verbose('Tab parameters found', nextPathArray);\n                }\n              }\n              if(isLastTab && remoteContent) {\n                if(!shouldIgnoreLoad) {\n                  module.activate.navigation(currentPath);\n                  module.fetch.content(currentPath, tabPath);\n                }\n                else {\n                  module.debug('Ignoring remote content on first tab load', currentPath);\n                  firstLoad = false;\n                  module.cache.add(tabPath, $tab.html());\n                  module.activate.all(currentPath);\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                  settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                return false;\n              }\n              else {\n                module.debug('Opened local tab', currentPath);\n                module.activate.all(currentPath);\n                if( !module.cache.read(currentPath) ) {\n                  module.cache.add(currentPath, true);\n                  module.debug('First time tab loaded calling tab init');\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n              }\n\n            }\n            else if(tabPath.search('/') == -1 && tabPath !== '') {\n              // look for in page anchor\n              tabPath = module.escape.string(tabPath);\n              $anchor     = $('#' + tabPath + ', a[name=\"' + tabPath + '\"]');\n              currentPath = $anchor.closest('[data-tab]').data(metadata.tab);\n              $tab        = module.get.tabElement(currentPath);\n              // if anchor exists use parent tab\n              if($anchor && $anchor.length > 0 && currentPath) {\n                module.debug('Anchor link used, opening parent tab', $tab, $anchor);\n                if( !$tab.hasClass(className.active) ) {\n                  setTimeout(function() {\n                    module.scrollTo($anchor);\n                  }, 0);\n                }\n                module.activate.all(currentPath);\n                if( !module.cache.read(currentPath) ) {\n                  module.cache.add(currentPath, true);\n                  module.debug('First time tab loaded calling tab init');\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                return false;\n              }\n            }\n            else {\n              module.error(error.missingTab, $module, $context, currentPath);\n              return false;\n            }\n          });\n        },\n\n        scrollTo: function($element) {\n          var\n            scrollOffset = ($element && $element.length > 0)\n              ? $element.offset().top\n              : false\n          ;\n          if(scrollOffset !== false) {\n            module.debug('Forcing scroll to an in-page link in a hidden tab', scrollOffset, $element);\n            $(document).scrollTop(scrollOffset);\n          }\n        },\n\n        update: {\n          content: function(tabPath, html, evaluateScripts) {\n            var\n              $tab = module.get.tabElement(tabPath),\n              tab  = $tab[0]\n            ;\n            evaluateScripts = (evaluateScripts !== undefined)\n              ? evaluateScripts\n              : settings.evaluateScripts\n            ;\n            if(typeof settings.cacheType == 'string' && settings.cacheType.toLowerCase() == 'dom' && typeof html !== 'string') {\n              $tab\n                .empty()\n                .append($(html).clone(true))\n              ;\n            }\n            else {\n              if(evaluateScripts) {\n                module.debug('Updating HTML and evaluating inline scripts', tabPath, html);\n                $tab.html(html);\n              }\n              else {\n                module.debug('Updating HTML', tabPath, html);\n                tab.innerHTML = html;\n              }\n            }\n          }\n        },\n\n        fetch: {\n\n          content: function(tabPath, fullTabPath) {\n            var\n              $tab        = module.get.tabElement(tabPath),\n              apiSettings = {\n                dataType         : 'html',\n                encodeParameters : false,\n                on               : 'now',\n                cache            : settings.alwaysRefresh,\n                headers          : {\n                  'X-Remote': true\n                },\n                onSuccess : function(response) {\n                  if(settings.cacheType == 'response') {\n                    module.cache.add(fullTabPath, response);\n                  }\n                  module.update.content(tabPath, response);\n                  if(tabPath == activeTabPath) {\n                    module.debug('Content loaded', tabPath);\n                    module.activate.tab(tabPath);\n                  }\n                  else {\n                    module.debug('Content loaded in background', tabPath);\n                  }\n                  settings.onFirstLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n                  settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n\n                  if(settings.loadOnce) {\n                    module.cache.add(fullTabPath, true);\n                  }\n                  else if(typeof settings.cacheType == 'string' && settings.cacheType.toLowerCase() == 'dom' && $tab.children().length > 0) {\n                    setTimeout(function() {\n                      var\n                        $clone = $tab.children().clone(true)\n                      ;\n                      $clone = $clone.not('script');\n                      module.cache.add(fullTabPath, $clone);\n                    }, 0);\n                  }\n                  else {\n                    module.cache.add(fullTabPath, $tab.html());\n                  }\n                },\n                urlData: {\n                  tab: fullTabPath\n                }\n              },\n              request         = $tab.api('get request') || false,\n              existingRequest = ( request && request.state() === 'pending' ),\n              requestSettings,\n              cachedContent\n            ;\n\n            fullTabPath   = fullTabPath || tabPath;\n            cachedContent = module.cache.read(fullTabPath);\n\n\n            if(settings.cache && cachedContent) {\n              module.activate.tab(tabPath);\n              module.debug('Adding cached content', fullTabPath);\n              if(!settings.loadOnce) {\n                if(settings.evaluateScripts == 'once') {\n                  module.update.content(tabPath, cachedContent, false);\n                }\n                else {\n                  module.update.content(tabPath, cachedContent);\n                }\n              }\n              settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n            }\n            else if(existingRequest) {\n              module.set.loading(tabPath);\n              module.debug('Content is already loading', fullTabPath);\n            }\n            else if($.api !== undefined) {\n              requestSettings = $.extend(true, {}, settings.apiSettings, apiSettings);\n              module.debug('Retrieving remote content', fullTabPath, requestSettings);\n              module.set.loading(tabPath);\n              $tab.api(requestSettings);\n            }\n            else {\n              module.error(error.api);\n            }\n          }\n        },\n\n        activate: {\n          all: function(tabPath) {\n            module.activate.tab(tabPath);\n            module.activate.navigation(tabPath);\n          },\n          tab: function(tabPath) {\n            var\n              $tab          = module.get.tabElement(tabPath),\n              $deactiveTabs = (settings.deactivate == 'siblings')\n                ? $tab.siblings($tabs)\n                : $tabs.not($tab),\n              isActive      = $tab.hasClass(className.active)\n            ;\n            module.verbose('Showing tab content for', $tab);\n            if(!isActive) {\n              $tab\n                .addClass(className.active)\n              ;\n              $deactiveTabs\n                .removeClass(className.active + ' ' + className.loading)\n              ;\n              if($tab.length > 0) {\n                settings.onVisible.call($tab[0], tabPath);\n              }\n            }\n          },\n          navigation: function(tabPath) {\n            var\n              $navigation         = module.get.navElement(tabPath),\n              $deactiveNavigation = (settings.deactivate == 'siblings')\n                ? $navigation.siblings($allModules)\n                : $allModules.not($navigation),\n              isActive    = $navigation.hasClass(className.active)\n            ;\n            module.verbose('Activating tab navigation for', $navigation, tabPath);\n            if(!isActive) {\n              $navigation\n                .addClass(className.active)\n              ;\n              $deactiveNavigation\n                .removeClass(className.active + ' ' + className.loading)\n              ;\n            }\n          }\n        },\n\n        deactivate: {\n          all: function() {\n            module.deactivate.navigation();\n            module.deactivate.tabs();\n          },\n          navigation: function() {\n            $allModules\n              .removeClass(className.active)\n            ;\n          },\n          tabs: function() {\n            $tabs\n              .removeClass(className.active + ' ' + className.loading)\n            ;\n          }\n        },\n\n        is: {\n          tab: function(tabName) {\n            return (tabName !== undefined)\n              ? ( module.get.tabElement(tabName).length > 0 )\n              : false\n            ;\n          }\n        },\n\n        get: {\n          initialPath: function() {\n            return $allModules.eq(0).data(metadata.tab) || $tabs.eq(0).data(metadata.tab);\n          },\n          path: function() {\n            return $.address.value();\n          },\n          // adds default tabs to tab path\n          defaultPathArray: function(tabPath) {\n            return module.utilities.pathToArray( module.get.defaultPath(tabPath) );\n          },\n          defaultPath: function(tabPath) {\n            var\n              $defaultNav = $allModules.filter('[data-' + metadata.tab + '^=\"' + module.escape.string(tabPath) + '/\"]').eq(0),\n              defaultTab  = $defaultNav.data(metadata.tab) || false\n            ;\n            if( defaultTab ) {\n              module.debug('Found default tab', defaultTab);\n              if(recursionDepth < settings.maxDepth) {\n                recursionDepth++;\n                return module.get.defaultPath(defaultTab);\n              }\n              module.error(error.recursion);\n            }\n            else {\n              module.debug('No default tabs found for', tabPath, $tabs);\n            }\n            recursionDepth = 0;\n            return tabPath;\n          },\n          navElement: function(tabPath) {\n            tabPath = tabPath || activeTabPath;\n            return $allModules.filter('[data-' + metadata.tab + '=\"' + module.escape.string(tabPath) + '\"]');\n          },\n          tabElement: function(tabPath) {\n            var\n              $fullPathTab,\n              $simplePathTab,\n              tabPathArray,\n              lastTab\n            ;\n            tabPath        = tabPath || activeTabPath;\n            tabPathArray   = module.utilities.pathToArray(tabPath);\n            lastTab        = module.utilities.last(tabPathArray);\n            $fullPathTab   = $tabs.filter('[data-' + metadata.tab + '=\"' + module.escape.string(tabPath) + '\"]');\n            $simplePathTab = $tabs.filter('[data-' + metadata.tab + '=\"' + module.escape.string(lastTab) + '\"]');\n            return ($fullPathTab.length > 0)\n              ? $fullPathTab\n              : $simplePathTab\n            ;\n          },\n          tab: function() {\n            return activeTabPath;\n          }\n        },\n\n        utilities: {\n          filterArray: function(keepArray, removeArray) {\n            return $.grep(keepArray, function(keepValue) {\n              return ( $.inArray(keepValue, removeArray) == -1);\n            });\n          },\n          last: function(array) {\n            return Array.isArray(array)\n              ? array[ array.length - 1]\n              : false\n            ;\n          },\n          pathToArray: function(pathName) {\n            if(pathName === undefined) {\n              pathName = activeTabPath;\n            }\n            return typeof pathName == 'string'\n              ? pathName.split('/')\n              : [pathName]\n            ;\n          },\n          arrayToPath: function(pathArray) {\n            return Array.isArray(pathArray)\n              ? pathArray.join('/')\n              : false\n            ;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if(Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n\n};\n\n// shortcut for tabbed content with no defined navigation\n$.tab = function() {\n  $(window).tab.apply(this, arguments);\n};\n\n$.fn.tab.settings = {\n\n  name            : 'Tab',\n  namespace       : 'tab',\n\n  silent          : false,\n  debug           : false,\n  verbose         : false,\n  performance     : true,\n\n  auto            : false,      // uses pjax style endpoints fetching content from same url with remote-content headers\n  history         : false,      // use browser history\n  historyType     : 'hash',     // #/ or html5 state\n  path            : false,      // base path of url\n\n  context         : false,      // specify a context that tabs must appear inside\n  childrenOnly    : false,      // use only tabs that are children of context\n  maxDepth        : 25,         // max depth a tab can be nested\n\n  deactivate      : 'siblings', // whether tabs should deactivate sibling menu elements or all elements initialized together\n\n  alwaysRefresh   : false,      // load tab content new every tab click\n  cache           : true,       // cache the content requests to pull locally\n  loadOnce        : false,      // Whether tab data should only be loaded once when using remote content\n  cacheType       : 'response', // Whether to cache exact response, or to html cache contents after scripts execute\n  ignoreFirstLoad : false,      // don't load remote content on first load\n\n  apiSettings     : false,      // settings for api call\n  evaluateScripts : 'once',     // whether inline scripts should be parsed (true/false/once). Once will not re-evaluate on cached content\n\n  onFirstLoad : function(tabPath, parameterArray, historyEvent) {}, // called first time loaded\n  onLoad      : function(tabPath, parameterArray, historyEvent) {}, // called on every load\n  onVisible   : function(tabPath, parameterArray, historyEvent) {}, // called every time tab visible\n  onRequest   : function(tabPath, parameterArray, historyEvent) {}, // called ever time a tab beings loading remote content\n\n  templates : {\n    determineTitle: function(tabArray) {} // returns page title for path\n  },\n\n  error: {\n    api        : 'You attempted to load content without API module',\n    method     : 'The method you called is not defined',\n    missingTab : 'Activated tab cannot be found. Tabs are case-sensitive.',\n    noContent  : 'The tab you specified is missing a content url.',\n    path       : 'History enabled, but no path was specified',\n    recursion  : 'Max recursive depth reached',\n    legacyInit : 'onTabInit has been renamed to onFirstLoad in 2.0, please adjust your code.',\n    legacyLoad : 'onTabLoad has been renamed to onLoad in 2.0. Please adjust your code',\n    state      : 'History requires Asual\\'s Address library <https://github.com/asual/jquery-address>'\n  },\n\n  regExp : {\n    escape   : /[-[\\]{}()*+?.,\\\\^$|#\\s:=@]/g\n  },\n\n  metadata : {\n    tab    : 'tab',\n    loaded : 'loaded',\n    promise: 'promise'\n  },\n\n  className   : {\n    loading : 'loading',\n    active  : 'active'\n  },\n\n  selector    : {\n    tabs : '.ui.tab',\n    ui   : '.ui'\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Fomantic-UI - Toast\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n'use strict';\n\n$.isFunction = $.isFunction || function(obj) {\n  return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.toast = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.toast.settings, parameters)\n          : $.extend({}, $.fn.toast.settings),\n\n        className       = settings.className,\n        selector        = settings.selector,\n        error           = settings.error,\n        namespace       = settings.namespace,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n        $toastBox       = $('<div/>',{'class':settings.className.box}),\n        $toast          = $('<div/>'),\n        $progress       = $('<div/>',{'class':settings.className.progress+' '+settings.class}),\n        $progressBar    = $('<div/>',{'class':'bar'}),\n\n        $close          = $('<i/>',{'class':'close icon'}),\n        $context        = (settings.context)\n          ? $(settings.context)\n          : $('body'),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        module\n      ;\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing element');\n          if(typeof settings.showProgress !== 'string' || ['top','bottom'].indexOf(settings.showProgress) === -1 ) {\n            settings.showProgress = false;\n          }\n          if (!module.has.container()) {\n            module.create.container();\n          }\n\n          module.create.toast();\n\n          module.bind.events();\n          \n          if(settings.displayTime > 0) {\n            module.closeTimer = setTimeout(module.close, settings.displayTime+(!!settings.showProgress ? 300 : 0));\n          }\n          module.show();\n        },\n\n        destroy: function() {\n          module.debug('Removing toast', $toast);\n          $toast.remove();\n          $toast = undefined;\n          settings.onRemove.call($toast, element);\n        },\n\n        show: function(callback) {\n          callback = callback || function(){};\n          module.debug('Showing toast');\n          if(settings.onShow.call($toast, element) === false) {\n            module.debug('onShow callback returned false, cancelling toast animation');\n            return;\n          }\n          module.animate.show(callback);\n        },\n\n        close: function(callback) {\n          if(module.closeTimer) {\n              clearTimeout(module.closeTimer);\n          }\n          callback = callback || function(){};\n          module.remove.visible();\n          module.unbind.events();\n          module.animate.close(callback);\n\n        },\n\n        create: {\n          container: function() {\n            module.verbose('Creating container');\n            $context.append('<div class=\"ui ' + settings.position + ' ' + className.container + '\"></div>');\n          },\n          toast: function() {\n            var $content = $('<div/>').addClass(className.content);\n            module.verbose('Creating toast');\n            if(settings.closeIcon) {\n                $toast.append($close);\n                $toast.css('cursor','default');\n            }\n\n            var iconClass = typeof settings.showIcon === 'string' ? settings.showIcon : settings.showIcon && settings.icons[settings.class] ? settings.icons[settings.class] : '';\n            if (iconClass != '') {\n               var $icon = $('<i/>').addClass(iconClass + ' ' + className.icon);\n\n              $toast\n                .addClass(className.icon)\n                .append($icon)\n              ;\n            }\n\n            if (settings.title !== '') {\n              var \n                $title = $('<div/>')\n                  .addClass(className.title)\n                  .text(settings.title)\n                ;\n\n              $content.append($title);\n            }\n\n            $content.append($('<div/>').html(settings.message));\n\n            $toast\n              .addClass(settings.class + ' ' + className.toast)\n              .append($content)\n            ;\n            $toast.css('opacity', settings.opacity);\n            if(settings.compact || $toast.hasClass('compact')) {\n                $toastBox.addClass('compact');\n            }\n            if($toast.hasClass('toast') && !$toast.hasClass('inverted')){\n              $progress.addClass('inverted');\n            } else {\n              $progress.removeClass('inverted');\n            }\n            $toast = $toastBox.append($toast);\n            if(!!settings.showProgress && settings.displayTime > 0){\n              $progress\n                .addClass(settings.showProgress)\n                .append($progressBar);\n              if ($progress.hasClass('top')) {\n                  $toast.prepend($progress);\n              } else {\n                  $toast.append($progress);\n              }\n              $progressBar.css('transition','width '+(settings.displayTime/1000)+'s linear');\n              $progressBar.width(settings.progressUp?'0%':'100%');\n              setTimeout(function() {\n                  if(typeof $progress !== 'undefined'){\n                    $progressBar.width(settings.progressUp?'100%':'0%');\n                }\n              },300);\n            }\n            if (settings.newestOnTop) {\n              $toast.prependTo(module.get.container());\n            }\n            else {\n              $toast.appendTo(module.get.container());\n            }\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.debug('Binding events to toast');\n            (settings.closeIcon ? $close : $toast)\n              .on('click' + eventNamespace, module.event.click)\n            ;\n          }\n        },\n\n        unbind: {\n          events: function() {\n            module.debug('Unbinding events to toast');\n            (settings.closeIcon ? $close : $toast)\n              .off('click' + eventNamespace)\n            ;\n          }\n        },\n\n        animate: {\n          show: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              module.set.visible();\n              $toast\n                .transition({\n                  animation  : settings.transition.showMethod + ' in',\n                  queue      : false,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.transition.showDuration,\n                  onComplete : function() {\n                    callback.call($toast, element);\n                    settings.onVisible.call($toast, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          },\n          close: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            module.debug('Closing toast');\n            if(settings.onHide.call($toast, element) === false) {\n              module.debug('onHide callback returned false, cancelling toast animation');\n              return;\n            }\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              $toast\n                .transition({\n                  animation  : settings.transition.hideMethod + ' out',\n                  queue      : false,\n                  duration   : settings.transition.hideDuration,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n\n                  onBeforeHide: function(callback){\n                      callback = $.isFunction(callback)?callback : function(){};\n                      if(settings.transition.closeEasing !== ''){\n                          $toast.css('opacity',0);\n                          $toast.wrap('<div/>').parent().slideUp(500,settings.transition.closeEasing,function(){\n                              $toast.parent().remove();\n                              callback.call($toast);\n                          });\n                      } else {\n                        callback.call($toast);\n                      }\n                  },\n                  onComplete : function() {\n                    module.destroy();\n                    callback.call($toast, element);\n                    settings.onHidden.call($toast, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          }\n        },\n\n        has: {\n          container: function() {\n            module.verbose('Determining if there is already a container');\n            return ($context.find(module.helpers.toClass(settings.position) + selector.container).length > 0);\n          }\n        },\n\n        get: {\n          container: function() {\n            return ($context.find(module.helpers.toClass(settings.position) + selector.container)[0]);\n          }\n        },\n\n        set: {\n          visible: function() {\n            $toast.addClass(className.visible);\n          }\n        },\n\n        remove: {\n          visible: function() {\n            $toast.removeClass(className.visible);\n          }\n        },\n\n        event: {\n          click: function() {\n            settings.onClick.call($toast, element);\n            module.close();\n          }\n        },\n\n        helpers: {\n          toClass: function(selector) {\n            var\n              classes = selector.split(' '),\n              result = ''\n            ;\n\n            classes.forEach(function (element) {\n              result += '.' + element;\n            });\n\n            return result;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if(Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.toast.settings = {\n\n  name           : 'Toast',\n  namespace      : 'toast',\n\n  silent         : false,\n  debug          : false,\n  verbose        : false,\n  performance    : true,\n\n  context        : 'body',\n\n  position       : 'top right',\n  class          : 'info',\n\n  title          : '',\n  message        : '',\n  displayTime    : 3000, // set to zero to require manually dismissal, otherwise hides on its own\n  showIcon       : true,\n  newestOnTop    : false,\n  showProgress   : false,\n  progressUp     : true, //if false, the bar will start at 100% and decrease to 0%\n  opacity        : 1,\n  compact        : true,\n  closeIcon      : false,\n\n  // transition settings\n  transition     : {\n    showMethod   : 'scale',\n    showDuration : 500,\n    hideMethod   : 'scale',\n    hideDuration : 500,\n    closeEasing  : 'easeOutBounce'  //Set to empty string to stack the closed toast area immediately (old behaviour)\n  },\n\n  error: {\n    method       : 'The method you called is not defined.',\n    noTransition : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>'\n  },\n\n  className      : {\n    container    : 'toast-container',\n    box          : 'toast-box',\n    progress     : 'ui attached active progress',\n    toast        : 'ui toast',\n    icon         : 'icon',\n    visible      : 'visible',\n    content      : 'content',\n    title        : 'header'\n  },\n\n  icons          : {\n    info         : 'info',\n    success      : 'checkmark',\n    warning      : 'warning',\n    error        : 'times'\n  },\n\n  selector       : {\n    container    : '.toast-container',\n    box          : '.toast-box',\n    toast        : '.ui.toast'\n  },\n\n  // callbacks\n  onShow         : function(){},\n  onVisible      : function(){},\n  onClick        : function(){},\n  onHide         : function(){},\n  onHidden       : function(){},\n  onRemove       : function(){},\n};\n\n$.extend( $.easing, {\n    easeOutBounce: function (x, t, b, c, d) {\n        if ((t/=d) < (1/2.75)) {\n            return c*(7.5625*t*t) + b;\n        } else if (t < (2/2.75)) {\n            return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;\n        } else if (t < (2.5/2.75)) {\n            return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;\n        } else {\n            return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;\n        }\n    }\n});\n\n\n})( jQuery, window, document );\n\n/*!\n * # Fomantic-UI - Transition\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n'use strict';\n\n$.isFunction = $.isFunction || function(obj) {\n  return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.transition = function() {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    moduleArguments = arguments,\n    query           = moduleArguments[0],\n    queryArguments  = [].slice.call(arguments, 1),\n    methodInvoked   = (typeof query === 'string'),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function(index) {\n      var\n        $module  = $(this),\n        element  = this,\n\n        // set at run time\n        settings,\n        instance,\n\n        error,\n        className,\n        metadata,\n        animationEnd,\n\n        moduleNamespace,\n        eventNamespace,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n\n          // get full settings\n          settings        = module.get.settings.apply(element, moduleArguments);\n\n          // shorthand\n          className       = settings.className;\n          error           = settings.error;\n          metadata        = settings.metadata;\n\n          // define namespace\n          eventNamespace  = '.' + settings.namespace;\n          moduleNamespace = 'module-' + settings.namespace;\n          instance        = $module.data(moduleNamespace) || module;\n\n          // get vendor specific events\n          animationEnd    = module.get.animationEndEvent();\n\n          if(methodInvoked) {\n            methodInvoked = module.invoke(query);\n          }\n\n          // method not invoked, lets run an animation\n          if(methodInvoked === false) {\n            module.verbose('Converted arguments into settings object', settings);\n            if(settings.interval) {\n              module.delay(settings.animate);\n            }\n            else  {\n              module.animate();\n            }\n            module.instantiate();\n          }\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing display type on next animation');\n          delete module.displayType;\n        },\n\n        forceRepaint: function() {\n          module.verbose('Forcing element repaint');\n          var\n            $parentElement = $module.parent(),\n            $nextElement = $module.next()\n          ;\n          if($nextElement.length === 0) {\n            $module.detach().appendTo($parentElement);\n          }\n          else {\n            $module.detach().insertBefore($nextElement);\n          }\n        },\n\n        repaint: function() {\n          module.verbose('Repainting element');\n          var\n            fakeAssignment = element.offsetWidth\n          ;\n        },\n\n        delay: function(interval) {\n          var\n            direction = module.get.animationDirection(),\n            shouldReverse,\n            delay\n          ;\n          if(!direction) {\n            direction = module.can.transition()\n              ? module.get.direction()\n              : 'static'\n            ;\n          }\n          interval = (interval !== undefined)\n            ? interval\n            : settings.interval\n          ;\n          shouldReverse = (settings.reverse == 'auto' && direction == className.outward);\n          delay = (shouldReverse || settings.reverse == true)\n            ? ($allModules.length - index) * settings.interval\n            : index * settings.interval\n          ;\n          module.debug('Delaying animation by', delay);\n          setTimeout(module.animate, delay);\n        },\n\n        animate: function(overrideSettings) {\n          settings = overrideSettings || settings;\n          if(!module.is.supported()) {\n            module.error(error.support);\n            return false;\n          }\n          module.debug('Preparing animation', settings.animation);\n          if(module.is.animating()) {\n            if(settings.queue) {\n              if(!settings.allowRepeats && module.has.direction() && module.is.occurring() && module.queuing !== true) {\n                module.debug('Animation is currently occurring, preventing queueing same animation', settings.animation);\n              }\n              else {\n                module.queue(settings.animation);\n              }\n              return false;\n            }\n            else if(!settings.allowRepeats && module.is.occurring()) {\n              module.debug('Animation is already occurring, will not execute repeated animation', settings.animation);\n              return false;\n            }\n            else {\n              module.debug('New animation started, completing previous early', settings.animation);\n              instance.complete();\n            }\n          }\n          if( module.can.animate() ) {\n            module.set.animating(settings.animation);\n          }\n          else {\n            module.error(error.noAnimation, settings.animation, element);\n          }\n        },\n\n        reset: function() {\n          module.debug('Resetting animation to beginning conditions');\n          module.remove.animationCallbacks();\n          module.restore.conditions();\n          module.remove.animating();\n        },\n\n        queue: function(animation) {\n          module.debug('Queueing animation of', animation);\n          module.queuing = true;\n          $module\n            .one(animationEnd + '.queue' + eventNamespace, function() {\n              module.queuing = false;\n              module.repaint();\n              module.animate.apply(this, settings);\n            })\n          ;\n        },\n\n        complete: function (event) {\n          if(event && event.target === element) {\n              event.stopPropagation();\n          }\n          module.debug('Animation complete', settings.animation);\n          module.remove.completeCallback();\n          module.remove.failSafe();\n          if(!module.is.looping()) {\n            if( module.is.outward() ) {\n              module.verbose('Animation is outward, hiding element');\n              module.restore.conditions();\n              module.hide();\n            }\n            else if( module.is.inward() ) {\n              module.verbose('Animation is outward, showing element');\n              module.restore.conditions();\n              module.show();\n            }\n            else {\n              module.verbose('Static animation completed');\n              module.restore.conditions();\n              settings.onComplete.call(element);\n            }\n          }\n        },\n\n        force: {\n          visible: function() {\n            var\n              style          = $module.attr('style'),\n              userStyle      = module.get.userStyle(style),\n              displayType    = module.get.displayType(),\n              overrideStyle  = userStyle + 'display: ' + displayType + ' !important;',\n              inlineDisplay  = $module[0].style.display,\n              mustStayHidden = !displayType || (inlineDisplay === 'none' && settings.skipInlineHidden) || $module[0].tagName.match(/(script|link|style)/i)\n            ;\n            if (mustStayHidden){\n              module.remove.transition();\n              return false;\n            }\n            module.verbose('Overriding default display to show element', displayType);\n            $module\n              .attr('style', overrideStyle)\n            ;\n            return true;\n          },\n          hidden: function() {\n            var\n              style          = $module.attr('style'),\n              currentDisplay = $module.css('display'),\n              emptyStyle     = (style === undefined || style === '')\n            ;\n            if(currentDisplay !== 'none' && !module.is.hidden()) {\n              module.verbose('Overriding default display to hide element');\n              $module\n                .css('display', 'none')\n              ;\n            }\n            else if(emptyStyle) {\n              $module\n                .removeAttr('style')\n              ;\n            }\n          }\n        },\n\n        has: {\n          direction: function(animation) {\n            var\n              hasDirection = false\n            ;\n            animation = animation || settings.animation;\n            if(typeof animation === 'string') {\n              animation = animation.split(' ');\n              $.each(animation, function(index, word){\n                if(word === className.inward || word === className.outward) {\n                  hasDirection = true;\n                }\n              });\n            }\n            return hasDirection;\n          },\n          inlineDisplay: function() {\n            var\n              style = $module.attr('style') || ''\n            ;\n            return Array.isArray(style.match(/display.*?;/, ''));\n          }\n        },\n\n        set: {\n          animating: function(animation) {\n            // remove previous callbacks\n            module.remove.completeCallback();\n\n            // determine exact animation\n            animation = animation || settings.animation;\n            var animationClass = module.get.animationClass(animation);\n\n              // save animation class in cache to restore class names\n            module.save.animation(animationClass);\n\n            if(module.force.visible()) {\n              module.remove.hidden();\n              module.remove.direction();\n\n              module.start.animation(animationClass);\n            }\n          },\n          duration: function(animationName, duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            if(duration || duration === 0) {\n              module.verbose('Setting animation duration', duration);\n              $module\n                .css({\n                  'animation-duration':  duration\n                })\n              ;\n            }\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            if(direction == className.inward) {\n              module.set.inward();\n            }\n            else {\n              module.set.outward();\n            }\n          },\n          looping: function() {\n            module.debug('Transition set to loop');\n            $module\n              .addClass(className.looping)\n            ;\n          },\n          hidden: function() {\n            $module\n              .addClass(className.transition)\n              .addClass(className.hidden)\n            ;\n          },\n          inward: function() {\n            module.debug('Setting direction to inward');\n            $module\n              .removeClass(className.outward)\n              .addClass(className.inward)\n            ;\n          },\n          outward: function() {\n            module.debug('Setting direction to outward');\n            $module\n              .removeClass(className.inward)\n              .addClass(className.outward)\n            ;\n          },\n          visible: function() {\n            $module\n              .addClass(className.transition)\n              .addClass(className.visible)\n            ;\n          }\n        },\n\n        start: {\n          animation: function(animationClass) {\n            animationClass = animationClass || module.get.animationClass();\n            module.debug('Starting tween', animationClass);\n            $module\n              .addClass(animationClass)\n              .one(animationEnd + '.complete' + eventNamespace, module.complete)\n            ;\n            if(settings.useFailSafe) {\n              module.add.failSafe();\n            }\n            module.set.duration(settings.duration);\n            settings.onStart.call(element);\n          }\n        },\n\n        save: {\n          animation: function(animation) {\n            if(!module.cache) {\n              module.cache = {};\n            }\n            module.cache.animation = animation;\n          },\n          displayType: function(displayType) {\n            if(displayType !== 'none') {\n              $module.data(metadata.displayType, displayType);\n            }\n          },\n          transitionExists: function(animation, exists) {\n            $.fn.transition.exists[animation] = exists;\n            module.verbose('Saving existence of transition', animation, exists);\n          }\n        },\n\n        restore: {\n          conditions: function() {\n            var\n              animation = module.get.currentAnimation()\n            ;\n            if(animation) {\n              $module\n                .removeClass(animation)\n              ;\n              module.verbose('Removing animation class', module.cache);\n            }\n            module.remove.duration();\n          }\n        },\n\n        add: {\n          failSafe: function() {\n            var\n              duration = module.get.duration()\n            ;\n            module.timer = setTimeout(function() {\n              $module.triggerHandler(animationEnd);\n            }, duration + settings.failSafeDelay);\n            module.verbose('Adding fail safe timer', module.timer);\n          }\n        },\n\n        remove: {\n          animating: function() {\n            $module.removeClass(className.animating);\n          },\n          animationCallbacks: function() {\n            module.remove.queueCallback();\n            module.remove.completeCallback();\n          },\n          queueCallback: function() {\n            $module.off('.queue' + eventNamespace);\n          },\n          completeCallback: function() {\n            $module.off('.complete' + eventNamespace);\n          },\n          display: function() {\n            $module.css('display', '');\n          },\n          direction: function() {\n            $module\n              .removeClass(className.inward)\n              .removeClass(className.outward)\n            ;\n          },\n          duration: function() {\n            $module\n              .css('animation-duration', '')\n            ;\n          },\n          failSafe: function() {\n            module.verbose('Removing fail safe timer', module.timer);\n            if(module.timer) {\n              clearTimeout(module.timer);\n            }\n          },\n          hidden: function() {\n            $module.removeClass(className.hidden);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          looping: function() {\n            module.debug('Transitions are no longer looping');\n            if( module.is.looping() ) {\n              module.reset();\n              $module\n                .removeClass(className.looping)\n              ;\n            }\n          },\n          transition: function() {\n            $module\n              .removeClass(className.transition)\n              .removeClass(className.visible)\n              .removeClass(className.hidden)\n            ;\n          }\n        },\n        get: {\n          settings: function(animation, duration, onComplete) {\n            // single settings object\n            if(typeof animation == 'object') {\n              return $.extend(true, {}, $.fn.transition.settings, animation);\n            }\n            // all arguments provided\n            else if(typeof onComplete == 'function') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation  : animation,\n                onComplete : onComplete,\n                duration   : duration\n              });\n            }\n            // only duration provided\n            else if(typeof duration == 'string' || typeof duration == 'number') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation : animation,\n                duration  : duration\n              });\n            }\n            // duration is actually settings object\n            else if(typeof duration == 'object') {\n              return $.extend({}, $.fn.transition.settings, duration, {\n                animation : animation\n              });\n            }\n            // duration is actually callback\n            else if(typeof duration == 'function') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation  : animation,\n                onComplete : duration\n              });\n            }\n            // only animation provided\n            else {\n              return $.extend({}, $.fn.transition.settings, {\n                animation : animation\n              });\n            }\n          },\n          animationClass: function(animation) {\n            var\n              animationClass = animation || settings.animation,\n              directionClass = (module.can.transition() && !module.has.direction())\n                ? module.get.direction() + ' '\n                : ''\n            ;\n            return className.animating + ' '\n              + className.transition + ' '\n              + directionClass\n              + animationClass\n            ;\n          },\n          currentAnimation: function() {\n            return (module.cache && module.cache.animation !== undefined)\n              ? module.cache.animation\n              : false\n            ;\n          },\n          currentDirection: function() {\n            return module.is.inward()\n              ? className.inward\n              : className.outward\n            ;\n          },\n          direction: function() {\n            return module.is.hidden() || !module.is.visible()\n              ? className.inward\n              : className.outward\n            ;\n          },\n          animationDirection: function(animation) {\n            var\n              direction\n            ;\n            animation = animation || settings.animation;\n            if(typeof animation === 'string') {\n              animation = animation.split(' ');\n              // search animation name for out/in class\n              $.each(animation, function(index, word){\n                if(word === className.inward) {\n                  direction = className.inward;\n                }\n                else if(word === className.outward) {\n                  direction = className.outward;\n                }\n              });\n            }\n            // return found direction\n            if(direction) {\n              return direction;\n            }\n            return false;\n          },\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            if(duration === false) {\n              duration = $module.css('animation-duration') || 0;\n            }\n            return (typeof duration === 'string')\n              ? (duration.indexOf('ms') > -1)\n                ? parseFloat(duration)\n                : parseFloat(duration) * 1000\n              : duration\n            ;\n          },\n          displayType: function(shouldDetermine) {\n            shouldDetermine = (shouldDetermine !== undefined)\n              ? shouldDetermine\n              : true\n            ;\n            if(settings.displayType) {\n              return settings.displayType;\n            }\n            if(shouldDetermine && $module.data(metadata.displayType) === undefined) {\n              var currentDisplay = $module.css('display');\n              if(currentDisplay === '' || currentDisplay === 'none'){\n              // create fake element to determine display state\n                module.can.transition(true);\n              } else {\n                module.save.displayType(currentDisplay);\n              }\n            }\n            return $module.data(metadata.displayType);\n          },\n          userStyle: function(style) {\n            style = style || $module.attr('style') || '';\n            return style.replace(/display.*?;/, '');\n          },\n          transitionExists: function(animation) {\n            return $.fn.transition.exists[animation];\n          },\n          animationStartEvent: function() {\n            var\n              element     = document.createElement('div'),\n              animations  = {\n                'animation'       :'animationstart',\n                'OAnimation'      :'oAnimationStart',\n                'MozAnimation'    :'mozAnimationStart',\n                'WebkitAnimation' :'webkitAnimationStart'\n              },\n              animation\n            ;\n            for(animation in animations){\n              if( element.style[animation] !== undefined ){\n                return animations[animation];\n              }\n            }\n            return false;\n          },\n          animationEndEvent: function() {\n            var\n              element     = document.createElement('div'),\n              animations  = {\n                'animation'       :'animationend',\n                'OAnimation'      :'oAnimationEnd',\n                'MozAnimation'    :'mozAnimationEnd',\n                'WebkitAnimation' :'webkitAnimationEnd'\n              },\n              animation\n            ;\n            for(animation in animations){\n              if( element.style[animation] !== undefined ){\n                return animations[animation];\n              }\n            }\n            return false;\n          }\n\n        },\n\n        can: {\n          transition: function(forced) {\n            var\n              animation         = settings.animation,\n              transitionExists  = module.get.transitionExists(animation),\n              displayType       = module.get.displayType(false),\n              elementClass,\n              tagName,\n              $clone,\n              currentAnimation,\n              inAnimation,\n              directionExists\n            ;\n            if( transitionExists === undefined || forced) {\n              module.verbose('Determining whether animation exists');\n              elementClass = $module.attr('class');\n              tagName      = $module.prop('tagName');\n\n              $clone = $('<' + tagName + ' />').addClass( elementClass ).insertAfter($module);\n              currentAnimation = $clone\n                .addClass(animation)\n                .removeClass(className.inward)\n                .removeClass(className.outward)\n                .addClass(className.animating)\n                .addClass(className.transition)\n                .css('animationName')\n              ;\n              inAnimation = $clone\n                .addClass(className.inward)\n                .css('animationName')\n              ;\n              if(!displayType) {\n                displayType = $clone\n                  .attr('class', elementClass)\n                  .removeAttr('style')\n                  .removeClass(className.hidden)\n                  .removeClass(className.visible)\n                  .show()\n                  .css('display')\n                ;\n                module.verbose('Determining final display state', displayType);\n                module.save.displayType(displayType);\n              }\n\n              $clone.remove();\n              if(currentAnimation != inAnimation) {\n                module.debug('Direction exists for animation', animation);\n                directionExists = true;\n              }\n              else if(currentAnimation == 'none' || !currentAnimation) {\n                module.debug('No animation defined in css', animation);\n                return;\n              }\n              else {\n                module.debug('Static animation found', animation, displayType);\n                directionExists = false;\n              }\n              module.save.transitionExists(animation, directionExists);\n            }\n            return (transitionExists !== undefined)\n              ? transitionExists\n              : directionExists\n            ;\n          },\n          animate: function() {\n            // can transition does not return a value if animation does not exist\n            return (module.can.transition() !== undefined);\n          }\n        },\n\n        is: {\n          animating: function() {\n            return $module.hasClass(className.animating);\n          },\n          inward: function() {\n            return $module.hasClass(className.inward);\n          },\n          outward: function() {\n            return $module.hasClass(className.outward);\n          },\n          looping: function() {\n            return $module.hasClass(className.looping);\n          },\n          occurring: function(animation) {\n            animation = animation || settings.animation;\n            animation = '.' + animation.replace(' ', '.');\n            return ( $module.filter(animation).length > 0 );\n          },\n          visible: function() {\n            return $module.is(':visible');\n          },\n          hidden: function() {\n            return $module.css('visibility') === 'hidden';\n          },\n          supported: function() {\n            return(animationEnd !== false);\n          }\n        },\n\n        hide: function() {\n          module.verbose('Hiding element');\n          if( module.is.animating() ) {\n            module.reset();\n          }\n          element.blur(); // IE will trigger focus change if element is not blurred before hiding\n          module.remove.display();\n          module.remove.visible();\n          if($.isFunction(settings.onBeforeHide)){\n            settings.onBeforeHide.call(element,function(){\n                module.hideNow();\n            });\n          } else {\n              module.hideNow();\n          }\n\n        },\n\n        hideNow: function() {\n            module.set.hidden();\n            module.force.hidden();\n            settings.onHide.call(element);\n            settings.onComplete.call(element);\n            // module.repaint();\n        },\n\n        show: function(display) {\n          module.verbose('Showing element', display);\n          if(module.force.visible()) {\n            module.remove.hidden();\n            module.set.visible();\n            settings.onShow.call(element);\n            settings.onComplete.call(element);\n            // module.repaint();\n          }\n        },\n\n        toggle: function() {\n          if( module.is.visible() ) {\n            module.hide();\n          }\n          else {\n            module.show();\n          }\n        },\n\n        stop: function() {\n          module.debug('Stopping current animation');\n          $module.triggerHandler(animationEnd);\n        },\n\n        stopAll: function() {\n          module.debug('Stopping all animation');\n          module.remove.queueCallback();\n          $module.triggerHandler(animationEnd);\n        },\n\n        clear: {\n          queue: function() {\n            module.debug('Clearing animation queue');\n            module.remove.queueCallback();\n          }\n        },\n\n        enable: function() {\n          module.verbose('Starting animation');\n          $module.removeClass(className.disabled);\n        },\n\n        disable: function() {\n          module.debug('Stopping animation');\n          $module.addClass(className.disabled);\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        // modified for transition to return invoke success\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n\n          if(Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return (found !== undefined)\n            ? found\n            : false\n          ;\n        }\n      };\n      module.initialize();\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n// Records if CSS transition is available\n$.fn.transition.exists = {};\n\n$.fn.transition.settings = {\n\n  // module info\n  name          : 'Transition',\n\n  // hide all output from this component regardless of other settings\n  silent        : false,\n\n  // debug content outputted to console\n  debug         : false,\n\n  // verbose debug output\n  verbose       : false,\n\n  // performance data output\n  performance   : true,\n\n  // event namespace\n  namespace     : 'transition',\n\n  // delay between animations in group\n  interval      : 0,\n\n  // whether group animations should be reversed\n  reverse       : 'auto',\n\n  // animation callback event\n  onStart       : function() {},\n  onComplete    : function() {},\n  onShow        : function() {},\n  onHide        : function() {},\n\n  // whether timeout should be used to ensure callback fires in cases animationend does not\n  useFailSafe   : true,\n\n  // delay in ms for fail safe\n  failSafeDelay : 100,\n\n  // whether EXACT animation can occur twice in a row\n  allowRepeats  : false,\n\n  // Override final display type on visible\n  displayType   : false,\n\n  // animation duration\n  animation     : 'fade',\n  duration      : false,\n\n  // new animations will occur after previous ones\n  queue         : true,\n\n// whether initially inline hidden objects should be skipped for transition\n  skipInlineHidden: false,\n\n  metadata : {\n    displayType: 'display'\n  },\n\n  className   : {\n    animating  : 'animating',\n    disabled   : 'disabled',\n    hidden     : 'hidden',\n    inward     : 'in',\n    loading    : 'loading',\n    looping    : 'looping',\n    outward    : 'out',\n    transition : 'transition',\n    visible    : 'visible'\n  },\n\n  // possible errors\n  error: {\n    noAnimation : 'Element is no longer attached to DOM. Unable to animate.  Use silent setting to surpress this warning in production.',\n    repeated    : 'That animation is already occurring, cancelling repeated animation',\n    method      : 'The method you called is not defined',\n    support     : 'This browser does not support CSS animations'\n  }\n\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Fomantic-UI - API\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n'use strict';\n\n$.isWindow = $.isWindow || function(obj) {\n  return obj != null && obj === obj.window;\n};\n\n  window = (typeof window != 'undefined' && window.Math == Math)\n    ? window\n    : (typeof self != 'undefined' && self.Math == Math)\n      ? self\n      : Function('return this')()\n;\n\n$.api = $.fn.api = function(parameters) {\n\n  var\n    // use window context if none specified\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n    moduleSelector = $allModules.selector || '',\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.api.settings, parameters)\n          : $.extend({}, $.fn.api.settings),\n\n        // internal aliases\n        namespace       = settings.namespace,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n        className       = settings.className,\n\n        // define namespaces for modules\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        // element that creates request\n        $module         = $(this),\n        $form           = $module.closest(selector.form),\n\n        // context used for state\n        $context        = (settings.stateContext)\n          ? $(settings.stateContext)\n          : $module,\n\n        // request details\n        ajaxSettings,\n        requestSettings,\n        url,\n        data,\n        requestStartTime,\n\n        // standard module\n        element         = this,\n        context         = $context[0],\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          if(!methodInvoked) {\n            module.bind.events();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            var\n              triggerEvent = module.get.event()\n            ;\n            if( triggerEvent ) {\n              module.verbose('Attaching API events to element', triggerEvent);\n              $module\n                .on(triggerEvent + eventNamespace, module.event.trigger)\n              ;\n            }\n            else if(settings.on == 'now') {\n              module.debug('Querying API endpoint immediately');\n              module.query();\n            }\n          }\n        },\n\n        decode: {\n          json: function(response) {\n            if(response !== undefined && typeof response == 'string') {\n              try {\n               response = JSON.parse(response);\n              }\n              catch(e) {\n                // isnt json string\n              }\n            }\n            return response;\n          }\n        },\n\n        read: {\n          cachedResponse: function(url) {\n            var\n              response\n            ;\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            response = sessionStorage.getItem(url);\n            module.debug('Using cached response', url, response);\n            response = module.decode.json(response);\n            return response;\n          }\n        },\n        write: {\n          cachedResponse: function(url, response) {\n            if(response && response === '') {\n              module.debug('Response empty, not caching', response);\n              return;\n            }\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            if( $.isPlainObject(response) ) {\n              response = JSON.stringify(response);\n            }\n            sessionStorage.setItem(url, response);\n            module.verbose('Storing cached response for url', url, response);\n          }\n        },\n\n        query: function() {\n\n          if(module.is.disabled()) {\n            module.debug('Element is disabled API request aborted');\n            return;\n          }\n\n          if(module.is.loading()) {\n            if(settings.interruptRequests) {\n              module.debug('Interrupting previous request');\n              module.abort();\n            }\n            else {\n              module.debug('Cancelling request, previous request is still pending');\n              return;\n            }\n          }\n\n          // pass element metadata to url (value, text)\n          if(settings.defaultData) {\n            $.extend(true, settings.urlData, module.get.defaultData());\n          }\n\n          // Add form content\n          if(settings.serializeForm) {\n            settings.data = module.add.formData(settings.data);\n          }\n\n          // call beforesend and get any settings changes\n          requestSettings = module.get.settings();\n\n          // check if before send cancelled request\n          if(requestSettings === false) {\n            module.cancelled = true;\n            module.error(error.beforeSend);\n            return;\n          }\n          else {\n            module.cancelled = false;\n          }\n\n          // get url\n          url = module.get.templatedURL();\n\n          if(!url && !module.is.mocked()) {\n            module.error(error.missingURL);\n            return;\n          }\n\n          // replace variables\n          url = module.add.urlData( url );\n          // missing url parameters\n          if( !url && !module.is.mocked()) {\n            return;\n          }\n\n          requestSettings.url = settings.base + url;\n\n          // look for jQuery ajax parameters in settings\n          ajaxSettings = $.extend(true, {}, settings, {\n            type       : settings.method || settings.type,\n            data       : data,\n            url        : settings.base + url,\n            beforeSend : settings.beforeXHR,\n            success    : function() {},\n            failure    : function() {},\n            complete   : function() {}\n          });\n\n          module.debug('Querying URL', ajaxSettings.url);\n          module.verbose('Using AJAX settings', ajaxSettings);\n          if(settings.cache === 'local' && module.read.cachedResponse(url)) {\n            module.debug('Response returned from local cache');\n            module.request = module.create.request();\n            module.request.resolveWith(context, [ module.read.cachedResponse(url) ]);\n            return;\n          }\n\n          if( !settings.throttle ) {\n            module.debug('Sending request', data, ajaxSettings.method);\n            module.send.request();\n          }\n          else {\n            if(!settings.throttleFirstRequest && !module.timer) {\n              module.debug('Sending request', data, ajaxSettings.method);\n              module.send.request();\n              module.timer = setTimeout(function(){}, settings.throttle);\n            }\n            else {\n              module.debug('Throttling request', settings.throttle);\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                if(module.timer) {\n                  delete module.timer;\n                }\n                module.debug('Sending throttled request', data, ajaxSettings.method);\n                module.send.request();\n              }, settings.throttle);\n            }\n          }\n\n        },\n\n        should: {\n          removeError: function() {\n            return ( settings.hideError === true || (settings.hideError === 'auto' && !module.is.form()) );\n          }\n        },\n\n        is: {\n          disabled: function() {\n            return ($module.filter(selector.disabled).length > 0);\n          },\n          expectingJSON: function() {\n            return settings.dataType === 'json' || settings.dataType === 'jsonp';\n          },\n          form: function() {\n            return $module.is('form') || $context.is('form');\n          },\n          mocked: function() {\n            return (settings.mockResponse || settings.mockResponseAsync || settings.response || settings.responseAsync);\n          },\n          input: function() {\n            return $module.is('input');\n          },\n          loading: function() {\n            return (module.request)\n              ? (module.request.state() == 'pending')\n              : false\n            ;\n          },\n          abortedRequest: function(xhr) {\n            if(xhr && xhr.readyState !== undefined && xhr.readyState === 0) {\n              module.verbose('XHR request determined to be aborted');\n              return true;\n            }\n            else {\n              module.verbose('XHR request was not aborted');\n              return false;\n            }\n          },\n          validResponse: function(response) {\n            if( (!module.is.expectingJSON()) || !$.isFunction(settings.successTest) ) {\n              module.verbose('Response is not JSON, skipping validation', settings.successTest, response);\n              return true;\n            }\n            module.debug('Checking JSON returned success', settings.successTest, response);\n            if( settings.successTest(response) ) {\n              module.debug('Response passed success test', response);\n              return true;\n            }\n            else {\n              module.debug('Response failed success test', response);\n              return false;\n            }\n          }\n        },\n\n        was: {\n          cancelled: function() {\n            return (module.cancelled || false);\n          },\n          succesful: function() {\n            module.verbose('This behavior will be deleted due to typo. Use \"was successful\" instead.');\n            return module.was.successful();\n          },\n          successful: function() {\n            return (module.request && module.request.state() == 'resolved');\n          },\n          failure: function() {\n            return (module.request && module.request.state() == 'rejected');\n          },\n          complete: function() {\n            return (module.request && (module.request.state() == 'resolved' || module.request.state() == 'rejected') );\n          }\n        },\n\n        add: {\n          urlData: function(url, urlData) {\n            var\n              requiredVariables,\n              optionalVariables\n            ;\n            if(url) {\n              requiredVariables = url.match(settings.regExp.required);\n              optionalVariables = url.match(settings.regExp.optional);\n              urlData           = urlData || settings.urlData;\n              if(requiredVariables) {\n                module.debug('Looking for required URL variables', requiredVariables);\n                $.each(requiredVariables, function(index, templatedString) {\n                  var\n                    // allow legacy {$var} style\n                    variable = (templatedString.indexOf('$') !== -1)\n                      ? templatedString.substr(2, templatedString.length - 3)\n                      : templatedString.substr(1, templatedString.length - 2),\n                    value   = ($.isPlainObject(urlData) && urlData[variable] !== undefined)\n                      ? urlData[variable]\n                      : ($module.data(variable) !== undefined)\n                        ? $module.data(variable)\n                        : ($context.data(variable) !== undefined)\n                          ? $context.data(variable)\n                          : urlData[variable]\n                  ;\n                  // remove value\n                  if(value === undefined) {\n                    module.error(error.requiredParameter, variable, url);\n                    url = false;\n                    return false;\n                  }\n                  else {\n                    module.verbose('Found required variable', variable, value);\n                    value = (settings.encodeParameters)\n                      ? module.get.urlEncodedValue(value)\n                      : value\n                    ;\n                    url = url.replace(templatedString, value);\n                  }\n                });\n              }\n              if(optionalVariables) {\n                module.debug('Looking for optional URL variables', requiredVariables);\n                $.each(optionalVariables, function(index, templatedString) {\n                  var\n                    // allow legacy {/$var} style\n                    variable = (templatedString.indexOf('$') !== -1)\n                      ? templatedString.substr(3, templatedString.length - 4)\n                      : templatedString.substr(2, templatedString.length - 3),\n                    value   = ($.isPlainObject(urlData) && urlData[variable] !== undefined)\n                      ? urlData[variable]\n                      : ($module.data(variable) !== undefined)\n                        ? $module.data(variable)\n                        : ($context.data(variable) !== undefined)\n                          ? $context.data(variable)\n                          : urlData[variable]\n                  ;\n                  // optional replacement\n                  if(value !== undefined) {\n                    module.verbose('Optional variable Found', variable, value);\n                    url = url.replace(templatedString, value);\n                  }\n                  else {\n                    module.verbose('Optional variable not found', variable);\n                    // remove preceding slash if set\n                    if(url.indexOf('/' + templatedString) !== -1) {\n                      url = url.replace('/' + templatedString, '');\n                    }\n                    else {\n                      url = url.replace(templatedString, '');\n                    }\n                  }\n                });\n              }\n            }\n            return url;\n          },\n          formData: function(data) {\n            var\n              canSerialize = ($.fn.serializeObject !== undefined),\n              formData     = (canSerialize)\n                ? $form.serializeObject()\n                : $form.serialize(),\n              hasOtherData\n            ;\n            data         = data || settings.data;\n            hasOtherData = $.isPlainObject(data);\n\n            if(hasOtherData) {\n              if(canSerialize) {\n                module.debug('Extending existing data with form data', data, formData);\n                data = $.extend(true, {}, data, formData);\n              }\n              else {\n                module.error(error.missingSerialize);\n                module.debug('Cant extend data. Replacing data with form data', data, formData);\n                data = formData;\n              }\n            }\n            else {\n              module.debug('Adding form data', formData);\n              data = formData;\n            }\n            return data;\n          }\n        },\n\n        send: {\n          request: function() {\n            module.set.loading();\n            module.request = module.create.request();\n            if( module.is.mocked() ) {\n              module.mockedXHR = module.create.mockedXHR();\n            }\n            else {\n              module.xhr = module.create.xhr();\n            }\n            settings.onRequest.call(context, module.request, module.xhr);\n          }\n        },\n\n        event: {\n          trigger: function(event) {\n            module.query();\n            if(event.type == 'submit' || event.type == 'click') {\n              event.preventDefault();\n            }\n          },\n          xhr: {\n            always: function() {\n              // nothing special\n            },\n            done: function(response, textStatus, xhr) {\n              var\n                context            = this,\n                elapsedTime        = (new Date().getTime() - requestStartTime),\n                timeLeft           = (settings.loadingDuration - elapsedTime),\n                translatedResponse = ( $.isFunction(settings.onResponse) )\n                  ? module.is.expectingJSON() && !settings.rawResponse\n                    ? settings.onResponse.call(context, $.extend(true, {}, response))\n                    : settings.onResponse.call(context, response)\n                  : false\n              ;\n              timeLeft = (timeLeft > 0)\n                ? timeLeft\n                : 0\n              ;\n              if(translatedResponse) {\n                module.debug('Modified API response in onResponse callback', settings.onResponse, translatedResponse, response);\n                response = translatedResponse;\n              }\n              if(timeLeft > 0) {\n                module.debug('Response completed early delaying state change by', timeLeft);\n              }\n              setTimeout(function() {\n                if( module.is.validResponse(response) ) {\n                  module.request.resolveWith(context, [response, xhr]);\n                }\n                else {\n                  module.request.rejectWith(context, [xhr, 'invalid']);\n                }\n              }, timeLeft);\n            },\n            fail: function(xhr, status, httpMessage) {\n              var\n                context     = this,\n                elapsedTime = (new Date().getTime() - requestStartTime),\n                timeLeft    = (settings.loadingDuration - elapsedTime)\n              ;\n              timeLeft = (timeLeft > 0)\n                ? timeLeft\n                : 0\n              ;\n              if(timeLeft > 0) {\n                module.debug('Response completed early delaying state change by', timeLeft);\n              }\n              setTimeout(function() {\n                if( module.is.abortedRequest(xhr) ) {\n                  module.request.rejectWith(context, [xhr, 'aborted', httpMessage]);\n                }\n                else {\n                  module.request.rejectWith(context, [xhr, 'error', status, httpMessage]);\n                }\n              }, timeLeft);\n            }\n          },\n          request: {\n            done: function(response, xhr) {\n              module.debug('Successful API Response', response);\n              if(settings.cache === 'local' && url) {\n                module.write.cachedResponse(url, response);\n                module.debug('Saving server response locally', module.cache);\n              }\n              settings.onSuccess.call(context, response, $module, xhr);\n            },\n            complete: function(firstParameter, secondParameter) {\n              var\n                xhr,\n                response\n              ;\n              // have to guess callback parameters based on request success\n              if( module.was.successful() ) {\n                response = firstParameter;\n                xhr      = secondParameter;\n              }\n              else {\n                xhr      = firstParameter;\n                response = module.get.responseFromXHR(xhr);\n              }\n              module.remove.loading();\n              settings.onComplete.call(context, response, $module, xhr);\n            },\n            fail: function(xhr, status, httpMessage) {\n              var\n                // pull response from xhr if available\n                response     = module.get.responseFromXHR(xhr),\n                errorMessage = module.get.errorFromRequest(response, status, httpMessage)\n              ;\n              if(status == 'aborted') {\n                module.debug('XHR Aborted (Most likely caused by page navigation or CORS Policy)', status, httpMessage);\n                settings.onAbort.call(context, status, $module, xhr);\n                return true;\n              }\n              else if(status == 'invalid') {\n                module.debug('JSON did not pass success test. A server-side error has most likely occurred', response);\n              }\n              else if(status == 'error') {\n                if(xhr !== undefined) {\n                  module.debug('XHR produced a server error', status, httpMessage);\n                  // make sure we have an error to display to console\n                  if( (xhr.status < 200 || xhr.status >= 300) && httpMessage !== undefined && httpMessage !== '') {\n                    module.error(error.statusMessage + httpMessage, ajaxSettings.url);\n                  }\n                  settings.onError.call(context, errorMessage, $module, xhr);\n                }\n              }\n\n              if(settings.errorDuration && status !== 'aborted') {\n                module.debug('Adding error state');\n                module.set.error();\n                if( module.should.removeError() ) {\n                  setTimeout(module.remove.error, settings.errorDuration);\n                }\n              }\n              module.debug('API Request failed', errorMessage, xhr);\n              settings.onFailure.call(context, response, $module, xhr);\n            }\n          }\n        },\n\n        create: {\n\n          request: function() {\n            // api request promise\n            return $.Deferred()\n              .always(module.event.request.complete)\n              .done(module.event.request.done)\n              .fail(module.event.request.fail)\n            ;\n          },\n\n          mockedXHR: function () {\n            var\n              // xhr does not simulate these properties of xhr but must return them\n              textStatus     = false,\n              status         = false,\n              httpMessage    = false,\n              responder      = settings.mockResponse      || settings.response,\n              asyncResponder = settings.mockResponseAsync || settings.responseAsync,\n              asyncCallback,\n              response,\n              mockedXHR\n            ;\n\n            mockedXHR = $.Deferred()\n              .always(module.event.xhr.complete)\n              .done(module.event.xhr.done)\n              .fail(module.event.xhr.fail)\n            ;\n\n            if(responder) {\n              if( $.isFunction(responder) ) {\n                module.debug('Using specified synchronous callback', responder);\n                response = responder.call(context, requestSettings);\n              }\n              else {\n                module.debug('Using settings specified response', responder);\n                response = responder;\n              }\n              // simulating response\n              mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);\n            }\n            else if( $.isFunction(asyncResponder) ) {\n              asyncCallback = function(response) {\n                module.debug('Async callback returned response', response);\n\n                if(response) {\n                  mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);\n                }\n                else {\n                  mockedXHR.rejectWith(context, [{ responseText: response }, status, httpMessage]);\n                }\n              };\n              module.debug('Using specified async response callback', asyncResponder);\n              asyncResponder.call(context, requestSettings, asyncCallback);\n            }\n            return mockedXHR;\n          },\n\n          xhr: function() {\n            var\n              xhr\n            ;\n            // ajax request promise\n            xhr = $.ajax(ajaxSettings)\n              .always(module.event.xhr.always)\n              .done(module.event.xhr.done)\n              .fail(module.event.xhr.fail)\n            ;\n            module.verbose('Created server request', xhr, ajaxSettings);\n            return xhr;\n          }\n        },\n\n        set: {\n          error: function() {\n            module.verbose('Adding error state to element', $context);\n            $context.addClass(className.error);\n          },\n          loading: function() {\n            module.verbose('Adding loading state to element', $context);\n            $context.addClass(className.loading);\n            requestStartTime = new Date().getTime();\n          }\n        },\n\n        remove: {\n          error: function() {\n            module.verbose('Removing error state from element', $context);\n            $context.removeClass(className.error);\n          },\n          loading: function() {\n            module.verbose('Removing loading state from element', $context);\n            $context.removeClass(className.loading);\n          }\n        },\n\n        get: {\n          responseFromXHR: function(xhr) {\n            return $.isPlainObject(xhr)\n              ? (module.is.expectingJSON())\n                ? module.decode.json(xhr.responseText)\n                : xhr.responseText\n              : false\n            ;\n          },\n          errorFromRequest: function(response, status, httpMessage) {\n            return ($.isPlainObject(response) && response.error !== undefined)\n              ? response.error // use json error message\n              : (settings.error[status] !== undefined) // use server error message\n                ? settings.error[status]\n                : httpMessage\n            ;\n          },\n          request: function() {\n            return module.request || false;\n          },\n          xhr: function() {\n            return module.xhr || false;\n          },\n          settings: function() {\n            var\n              runSettings\n            ;\n            runSettings = settings.beforeSend.call(context, settings);\n            if(runSettings) {\n              if(runSettings.success !== undefined) {\n                module.debug('Legacy success callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.success);\n                runSettings.onSuccess = runSettings.success;\n              }\n              if(runSettings.failure !== undefined) {\n                module.debug('Legacy failure callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.failure);\n                runSettings.onFailure = runSettings.failure;\n              }\n              if(runSettings.complete !== undefined) {\n                module.debug('Legacy complete callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.complete);\n                runSettings.onComplete = runSettings.complete;\n              }\n            }\n            if(runSettings === undefined) {\n              module.error(error.noReturnedValue);\n            }\n            if(runSettings === false) {\n              return runSettings;\n            }\n            return (runSettings !== undefined)\n              ? $.extend(true, {}, runSettings)\n              : $.extend(true, {}, settings)\n            ;\n          },\n          urlEncodedValue: function(value) {\n            var\n              decodedValue   = window.decodeURIComponent(value),\n              encodedValue   = window.encodeURIComponent(value),\n              alreadyEncoded = (decodedValue !== value)\n            ;\n            if(alreadyEncoded) {\n              module.debug('URL value is already encoded, avoiding double encoding', value);\n              return value;\n            }\n            module.verbose('Encoding value using encodeURIComponent', value, encodedValue);\n            return encodedValue;\n          },\n          defaultData: function() {\n            var\n              data = {}\n            ;\n            if( !$.isWindow(element) ) {\n              if( module.is.input() ) {\n                data.value = $module.val();\n              }\n              else if( module.is.form() ) {\n\n              }\n              else {\n                data.text = $module.text();\n              }\n            }\n            return data;\n          },\n          event: function() {\n            if( $.isWindow(element) || settings.on == 'now' ) {\n              module.debug('API called without element, no events attached');\n              return false;\n            }\n            else if(settings.on == 'auto') {\n              if( $module.is('input') ) {\n                return (element.oninput !== undefined)\n                  ? 'input'\n                  : (element.onpropertychange !== undefined)\n                    ? 'propertychange'\n                    : 'keyup'\n                ;\n              }\n              else if( $module.is('form') ) {\n                return 'submit';\n              }\n              else {\n                return 'click';\n              }\n            }\n            else {\n              return settings.on;\n            }\n          },\n          templatedURL: function(action) {\n            action = action || $module.data(metadata.action) || settings.action || false;\n            url    = $module.data(metadata.url) || settings.url || false;\n            if(url) {\n              module.debug('Using specified url', url);\n              return url;\n            }\n            if(action) {\n              module.debug('Looking up url for action', action, settings.api);\n              if(settings.api[action] === undefined && !module.is.mocked()) {\n                module.error(error.missingAction, settings.action, settings.api);\n                return;\n              }\n              url = settings.api[action];\n            }\n            else if( module.is.form() ) {\n              url = $module.attr('action') || $context.attr('action') || false;\n              module.debug('No url or action specified, defaulting to form action', url);\n            }\n            return url;\n          }\n        },\n\n        abort: function() {\n          var\n            xhr = module.get.xhr()\n          ;\n          if( xhr && xhr.state() !== 'resolved') {\n            module.debug('Cancelling API request');\n            xhr.abort();\n          }\n        },\n\n        // reset state\n        reset: function() {\n          module.remove.error();\n          module.remove.loading();\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                //'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if(Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.api.settings = {\n\n  name              : 'API',\n  namespace         : 'api',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  // object containing all templates endpoints\n  api               : {},\n\n  // whether to cache responses\n  cache             : true,\n\n  // whether new requests should abort previous requests\n  interruptRequests : true,\n\n  // event binding\n  on                : 'auto',\n\n  // context for applying state classes\n  stateContext      : false,\n\n  // duration for loading state\n  loadingDuration   : 0,\n\n  // whether to hide errors after a period of time\n  hideError         : 'auto',\n\n  // duration for error state\n  errorDuration     : 2000,\n\n  // whether parameters should be encoded with encodeURIComponent\n  encodeParameters  : true,\n\n  // API action to use\n  action            : false,\n\n  // templated URL to use\n  url               : false,\n\n  // base URL to apply to all endpoints\n  base              : '',\n\n  // data that will\n  urlData           : {},\n\n  // whether to add default data to url data\n  defaultData          : true,\n\n  // whether to serialize closest form\n  serializeForm        : false,\n\n  // how long to wait before request should occur\n  throttle             : 0,\n\n  // whether to throttle first request or only repeated\n  throttleFirstRequest : true,\n\n  // standard ajax settings\n  method            : 'get',\n  data              : {},\n  dataType          : 'json',\n\n  // mock response\n  mockResponse      : false,\n  mockResponseAsync : false,\n\n  // aliases for mock\n  response          : false,\n  responseAsync     : false,\n\n// whether onResponse should work with response value without force converting into an object\n  rawResponse       : false,\n\n  // callbacks before request\n  beforeSend  : function(settings) { return settings; },\n  beforeXHR   : function(xhr) {},\n  onRequest   : function(promise, xhr) {},\n\n  // after request\n  onResponse  : false, // function(response) { },\n\n  // response was successful, if JSON passed validation\n  onSuccess   : function(response, $module) {},\n\n  // request finished without aborting\n  onComplete  : function(response, $module) {},\n\n  // failed JSON success test\n  onFailure   : function(response, $module) {},\n\n  // server error\n  onError     : function(errorMessage, $module) {},\n\n  // request aborted\n  onAbort     : function(errorMessage, $module) {},\n\n  successTest : false,\n\n  // errors\n  error : {\n    beforeSend        : 'The before send function has aborted the request',\n    error             : 'There was an error with your request',\n    exitConditions    : 'API Request Aborted. Exit conditions met',\n    JSONParse         : 'JSON could not be parsed during error handling',\n    legacyParameters  : 'You are using legacy API success callback names',\n    method            : 'The method you called is not defined',\n    missingAction     : 'API action used but no url was defined',\n    missingSerialize  : 'jquery-serialize-object is required to add form data to an existing data object',\n    missingURL        : 'No URL specified for api event',\n    noReturnedValue   : 'The beforeSend callback must return a settings object, beforeSend ignored.',\n    noStorage         : 'Caching responses locally requires session storage',\n    parseError        : 'There was an error parsing your request',\n    requiredParameter : 'Missing a required URL parameter: ',\n    statusMessage     : 'Server gave an error: ',\n    timeout           : 'Your request timed out'\n  },\n\n  regExp  : {\n    required : /\\{\\$*[A-z0-9]+\\}/g,\n    optional : /\\{\\/\\$*[A-z0-9]+\\}/g,\n  },\n\n  className: {\n    loading : 'loading',\n    error   : 'error'\n  },\n\n  selector: {\n    disabled : '.disabled',\n    form      : 'form'\n  },\n\n  metadata: {\n    action  : 'action',\n    url     : 'url'\n  }\n};\n\n\n\n})( jQuery, window, document );\n\n/*!\n * # Fomantic-UI - State\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.isFunction = $.isFunction || function(obj) {\n  return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.state = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.state.settings, parameters)\n          : $.extend({}, $.fn.state.settings),\n\n        error           = settings.error,\n        metadata        = settings.metadata,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        states          = settings.states,\n        text            = settings.text,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        module\n      ;\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module');\n\n          // allow module to guess desired state based on element\n          if(settings.automatic) {\n            module.add.defaults();\n          }\n\n          // bind events with delegated events\n          if(settings.context && moduleSelector !== '') {\n            $(settings.context)\n              .on(moduleSelector, 'mouseenter' + eventNamespace, module.change.text)\n              .on(moduleSelector, 'mouseleave' + eventNamespace, module.reset.text)\n              .on(moduleSelector, 'click'      + eventNamespace, module.toggle.state)\n            ;\n          }\n          else {\n            $module\n              .on('mouseenter' + eventNamespace, module.change.text)\n              .on('mouseleave' + eventNamespace, module.reset.text)\n              .on('click'      + eventNamespace, module.toggle.state)\n            ;\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', instance);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $module = $(element);\n        },\n\n        add: {\n          defaults: function() {\n            var\n              userStates = parameters && $.isPlainObject(parameters.states)\n                ? parameters.states\n                : {}\n            ;\n            $.each(settings.defaults, function(type, typeStates) {\n              if( module.is[type] !== undefined && module.is[type]() ) {\n                module.verbose('Adding default states', type, element);\n                $.extend(settings.states, typeStates, userStates);\n              }\n            });\n          }\n        },\n\n        is: {\n\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          loading: function() {\n            return $module.hasClass(className.loading);\n          },\n          inactive: function() {\n            return !( $module.hasClass(className.active) );\n          },\n          state: function(state) {\n            if(className[state] === undefined) {\n              return false;\n            }\n            return $module.hasClass( className[state] );\n          },\n\n          enabled: function() {\n            return !( $module.is(settings.filter.active) );\n          },\n          disabled: function() {\n            return ( $module.is(settings.filter.active) );\n          },\n          textEnabled: function() {\n            return !( $module.is(settings.filter.text) );\n          },\n\n          // definitions for automatic type detection\n          button: function() {\n            return $module.is('.button:not(a, .submit)');\n          },\n          input: function() {\n            return $module.is('input');\n          },\n          progress: function() {\n            return $module.is('.ui.progress');\n          }\n        },\n\n        allow: function(state) {\n          module.debug('Now allowing state', state);\n          states[state] = true;\n        },\n        disallow: function(state) {\n          module.debug('No longer allowing', state);\n          states[state] = false;\n        },\n\n        allows: function(state) {\n          return states[state] || false;\n        },\n\n        enable: function() {\n          $module.removeClass(className.disabled);\n        },\n\n        disable: function() {\n          $module.addClass(className.disabled);\n        },\n\n        setState: function(state) {\n          if(module.allows(state)) {\n            $module.addClass( className[state] );\n          }\n        },\n\n        removeState: function(state) {\n          if(module.allows(state)) {\n            $module.removeClass( className[state] );\n          }\n        },\n\n        toggle: {\n          state: function() {\n            var\n              apiRequest,\n              requestCancelled\n            ;\n            if( module.allows('active') && module.is.enabled() ) {\n              module.refresh();\n              if($.fn.api !== undefined) {\n                apiRequest       = $module.api('get request');\n                requestCancelled = $module.api('was cancelled');\n                if( requestCancelled ) {\n                  module.debug('API Request cancelled by beforesend');\n                  settings.activateTest   = function(){ return false; };\n                  settings.deactivateTest = function(){ return false; };\n                }\n                else if(apiRequest) {\n                  module.listenTo(apiRequest);\n                  return;\n                }\n              }\n              module.change.state();\n            }\n          }\n        },\n\n        listenTo: function(apiRequest) {\n          module.debug('API request detected, waiting for state signal', apiRequest);\n          if(apiRequest) {\n            if(text.loading) {\n              module.update.text(text.loading);\n            }\n            $.when(apiRequest)\n              .then(function() {\n                if(apiRequest.state() == 'resolved') {\n                  module.debug('API request succeeded');\n                  settings.activateTest   = function(){ return true; };\n                  settings.deactivateTest = function(){ return true; };\n                }\n                else {\n                  module.debug('API request failed');\n                  settings.activateTest   = function(){ return false; };\n                  settings.deactivateTest = function(){ return false; };\n                }\n                module.change.state();\n              })\n            ;\n          }\n        },\n\n        // checks whether active/inactive state can be given\n        change: {\n\n          state: function() {\n            module.debug('Determining state change direction');\n            // inactive to active change\n            if( module.is.inactive() ) {\n              module.activate();\n            }\n            else {\n              module.deactivate();\n            }\n            if(settings.sync) {\n              module.sync();\n            }\n            settings.onChange.call(element);\n          },\n\n          text: function() {\n            if( module.is.textEnabled() ) {\n              if(module.is.disabled() ) {\n                module.verbose('Changing text to disabled text', text.hover);\n                module.update.text(text.disabled);\n              }\n              else if( module.is.active() ) {\n                if(text.hover) {\n                  module.verbose('Changing text to hover text', text.hover);\n                  module.update.text(text.hover);\n                }\n                else if(text.deactivate) {\n                  module.verbose('Changing text to deactivating text', text.deactivate);\n                  module.update.text(text.deactivate);\n                }\n              }\n              else {\n                if(text.hover) {\n                  module.verbose('Changing text to hover text', text.hover);\n                  module.update.text(text.hover);\n                }\n                else if(text.activate){\n                  module.verbose('Changing text to activating text', text.activate);\n                  module.update.text(text.activate);\n                }\n              }\n            }\n          }\n\n        },\n\n        activate: function() {\n          if( settings.activateTest.call(element) ) {\n            module.debug('Setting state to active');\n            $module\n              .addClass(className.active)\n            ;\n            module.update.text(text.active);\n            settings.onActivate.call(element);\n          }\n        },\n\n        deactivate: function() {\n          if( settings.deactivateTest.call(element) ) {\n            module.debug('Setting state to inactive');\n            $module\n              .removeClass(className.active)\n            ;\n            module.update.text(text.inactive);\n            settings.onDeactivate.call(element);\n          }\n        },\n\n        sync: function() {\n          module.verbose('Syncing other buttons to current state');\n          if( module.is.active() ) {\n            $allModules\n              .not($module)\n                .state('activate');\n          }\n          else {\n            $allModules\n              .not($module)\n                .state('deactivate')\n            ;\n          }\n        },\n\n        get: {\n          text: function() {\n            return (settings.selector.text)\n              ? $module.find(settings.selector.text).text()\n              : $module.html()\n            ;\n          },\n          textFor: function(state) {\n            return text[state] || false;\n          }\n        },\n\n        flash: {\n          text: function(text, duration, callback) {\n            var\n              previousText = module.get.text()\n            ;\n            module.debug('Flashing text message', text, duration);\n            text     = text     || settings.text.flash;\n            duration = duration || settings.flashDuration;\n            callback = callback || function() {};\n            module.update.text(text);\n            setTimeout(function(){\n              module.update.text(previousText);\n              callback.call(element);\n            }, duration);\n          }\n        },\n\n        reset: {\n          // on mouseout sets text to previous value\n          text: function() {\n            var\n              activeText   = text.active   || $module.data(metadata.storedText),\n              inactiveText = text.inactive || $module.data(metadata.storedText)\n            ;\n            if( module.is.textEnabled() ) {\n              if( module.is.active() && activeText) {\n                module.verbose('Resetting active text', activeText);\n                module.update.text(activeText);\n              }\n              else if(inactiveText) {\n                module.verbose('Resetting inactive text', activeText);\n                module.update.text(inactiveText);\n              }\n            }\n          }\n        },\n\n        update: {\n          text: function(text) {\n            var\n              currentText = module.get.text()\n            ;\n            if(text && text !== currentText) {\n              module.debug('Updating text', text);\n              if(settings.selector.text) {\n                $module\n                  .data(metadata.storedText, text)\n                  .find(settings.selector.text)\n                    .text(text)\n                ;\n              }\n              else {\n                $module\n                  .data(metadata.storedText, text)\n                  .html(text)\n                ;\n              }\n            }\n            else {\n              module.debug('Text is already set, ignoring update', text);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if(Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.state.settings = {\n\n  // module info\n  name           : 'State',\n\n  // debug output\n  debug          : false,\n\n  // verbose debug output\n  verbose        : false,\n\n  // namespace for events\n  namespace      : 'state',\n\n  // debug data includes performance\n  performance    : true,\n\n  // callback occurs on state change\n  onActivate     : function() {},\n  onDeactivate   : function() {},\n  onChange       : function() {},\n\n  // state test functions\n  activateTest   : function() { return true; },\n  deactivateTest : function() { return true; },\n\n  // whether to automatically map default states\n  automatic      : true,\n\n  // activate / deactivate changes all elements instantiated at same time\n  sync           : false,\n\n  // default flash text duration, used for temporarily changing text of an element\n  flashDuration  : 1000,\n\n  // selector filter\n  filter     : {\n    text   : '.loading, .disabled',\n    active : '.disabled'\n  },\n\n  context    : false,\n\n  // error\n  error: {\n    beforeSend : 'The before send function has cancelled state change',\n    method     : 'The method you called is not defined.'\n  },\n\n  // metadata\n  metadata: {\n    promise    : 'promise',\n    storedText : 'stored-text'\n  },\n\n  // change class on state\n  className: {\n    active   : 'active',\n    disabled : 'disabled',\n    error    : 'error',\n    loading  : 'loading',\n    success  : 'success',\n    warning  : 'warning'\n  },\n\n  selector: {\n    // selector for text node\n    text: false\n  },\n\n  defaults : {\n    input: {\n      disabled : true,\n      loading  : true,\n      active   : true\n    },\n    button: {\n      disabled : true,\n      loading  : true,\n      active   : true,\n    },\n    progress: {\n      active   : true,\n      success  : true,\n      warning  : true,\n      error    : true\n    }\n  },\n\n  states     : {\n    active   : true,\n    disabled : true,\n    error    : true,\n    loading  : true,\n    success  : true,\n    warning  : true\n  },\n\n  text     : {\n    disabled   : false,\n    flash      : false,\n    hover      : false,\n    active     : false,\n    inactive   : false,\n    activate   : false,\n    deactivate : false\n  }\n\n};\n\n\n\n})( jQuery, window, document );\n\n/*!\n * # Fomantic-UI - Visibility\n * http://github.com/fomantic/Fomantic-UI/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n'use strict';\n\n$.isFunction = $.isFunction || function(obj) {\n  return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n};\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.visibility = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue,\n\n    moduleCount    = $allModules.length,\n    loadedCount    = 0\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.visibility.settings, parameters)\n          : $.extend({}, $.fn.visibility.settings),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        error           = settings.error,\n        metadata        = settings.metadata,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $window         = $(window),\n\n        $module         = $(this),\n        $context        = $(settings.context),\n\n        $placeholder,\n\n        instance        = $module.data(moduleNamespace),\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); },\n\n        element         = this,\n        disabled        = false,\n\n        contextObserver,\n        observer,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing', settings);\n\n          module.setup.cache();\n\n          if( module.should.trackChanges() ) {\n\n            if(settings.type == 'image') {\n              module.setup.image();\n            }\n            if(settings.type == 'fixed') {\n              module.setup.fixed();\n            }\n\n            if(settings.observeChanges) {\n              module.observeChanges();\n            }\n            module.bind.events();\n          }\n\n          module.save.position();\n          if( !module.is.visible() ) {\n            module.error(error.visible, $module);\n          }\n\n          if(settings.initialCheck) {\n            module.checkVisibility();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.debug('Storing instance', module);\n          $module\n            .data(moduleNamespace, module)\n          ;\n          instance = module;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module');\n          if(observer) {\n            observer.disconnect();\n          }\n          if(contextObserver) {\n            contextObserver.disconnect();\n          }\n          $window\n            .off('load'   + eventNamespace, module.event.load)\n            .off('resize' + eventNamespace, module.event.resize)\n          ;\n          $context\n            .off('scroll'       + eventNamespace, module.event.scroll)\n            .off('scrollchange' + eventNamespace, module.event.scrollchange)\n          ;\n          if(settings.type == 'fixed') {\n            module.resetFixed();\n            module.remove.placeholder();\n          }\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            contextObserver = new MutationObserver(module.event.contextChanged);\n            observer        = new MutationObserver(module.event.changed);\n            contextObserver.observe(document, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding visibility events to scroll and resize');\n            if(settings.refreshOnLoad) {\n              $window\n                .on('load'   + eventNamespace, module.event.load)\n              ;\n            }\n            $window\n              .on('resize' + eventNamespace, module.event.resize)\n            ;\n            // pub/sub pattern\n            $context\n              .off('scroll'      + eventNamespace)\n              .on('scroll'       + eventNamespace, module.event.scroll)\n              .on('scrollchange' + eventNamespace, module.event.scrollchange)\n            ;\n          }\n        },\n\n        event: {\n          changed: function(mutations) {\n            module.verbose('DOM tree modified, updating visibility calculations');\n            module.timer = setTimeout(function() {\n              module.verbose('DOM tree modified, updating sticky menu');\n              module.refresh();\n            }, 100);\n          },\n          contextChanged: function(mutations) {\n            [].forEach.call(mutations, function(mutation) {\n              if(mutation.removedNodes) {\n                [].forEach.call(mutation.removedNodes, function(node) {\n                  if(node == element || $(node).find(element).length > 0) {\n                    module.debug('Element removed from DOM, tearing down events');\n                    module.destroy();\n                  }\n                });\n              }\n            });\n          },\n          resize: function() {\n            module.debug('Window resized');\n            if(settings.refreshOnResize) {\n              requestAnimationFrame(module.refresh);\n            }\n          },\n          load: function() {\n            module.debug('Page finished loading');\n            requestAnimationFrame(module.refresh);\n          },\n          // publishes scrollchange event on one scroll\n          scroll: function() {\n            if(settings.throttle) {\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);\n              }, settings.throttle);\n            }\n            else {\n              requestAnimationFrame(function() {\n                $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);\n              });\n            }\n          },\n          // subscribes to scrollchange\n          scrollchange: function(event, scrollPosition) {\n            module.checkVisibility(scrollPosition);\n          },\n        },\n\n        precache: function(images, callback) {\n          if (!(images instanceof Array)) {\n            images = [images];\n          }\n          var\n            imagesLength  = images.length,\n            loadedCounter = 0,\n            cache         = [],\n            cacheImage    = document.createElement('img'),\n            handleLoad    = function() {\n              loadedCounter++;\n              if (loadedCounter >= images.length) {\n                if ($.isFunction(callback)) {\n                  callback();\n                }\n              }\n            }\n          ;\n          while (imagesLength--) {\n            cacheImage         = document.createElement('img');\n            cacheImage.onload  = handleLoad;\n            cacheImage.onerror = handleLoad;\n            cacheImage.src     = images[imagesLength];\n            cache.push(cacheImage);\n          }\n        },\n\n        enableCallbacks: function() {\n          module.debug('Allowing callbacks to occur');\n          disabled = false;\n        },\n\n        disableCallbacks: function() {\n          module.debug('Disabling all callbacks temporarily');\n          disabled = true;\n        },\n\n        should: {\n          trackChanges: function() {\n            if(methodInvoked) {\n              module.debug('One time query, no need to bind events');\n              return false;\n            }\n            module.debug('Callbacks being attached');\n            return true;\n          }\n        },\n\n        setup: {\n          cache: function() {\n            module.cache = {\n              occurred : {},\n              screen   : {},\n              element  : {},\n            };\n          },\n          image: function() {\n            var\n              src = $module.data(metadata.src)\n            ;\n            if(src) {\n              module.verbose('Lazy loading image', src);\n              settings.once           = true;\n              settings.observeChanges = false;\n\n              // show when top visible\n              settings.onOnScreen = function() {\n                module.debug('Image on screen', element);\n                module.precache(src, function() {\n                  module.set.image(src, function() {\n                    loadedCount++;\n                    if(loadedCount == moduleCount) {\n                      settings.onAllLoaded.call(this);\n                    }\n                    settings.onLoad.call(this);\n                  });\n                });\n              };\n            }\n          },\n          fixed: function() {\n            module.debug('Setting up fixed');\n            settings.once           = false;\n            settings.observeChanges = false;\n            settings.initialCheck   = true;\n            settings.refreshOnLoad  = true;\n            if(!parameters.transition) {\n              settings.transition = false;\n            }\n            module.create.placeholder();\n            module.debug('Added placeholder', $placeholder);\n            settings.onTopPassed = function() {\n              module.debug('Element passed, adding fixed position', $module);\n              module.show.placeholder();\n              module.set.fixed();\n              if(settings.transition) {\n                if($.fn.transition !== undefined) {\n                  $module.transition(settings.transition, settings.duration);\n                }\n              }\n            };\n            settings.onTopPassedReverse = function() {\n              module.debug('Element returned to position, removing fixed', $module);\n              module.hide.placeholder();\n              module.remove.fixed();\n            };\n          }\n        },\n\n        create: {\n          placeholder: function() {\n            module.verbose('Creating fixed position placeholder');\n            $placeholder = $module\n              .clone(false)\n              .css('display', 'none')\n              .addClass(className.placeholder)\n              .insertAfter($module)\n            ;\n          }\n        },\n\n        show: {\n          placeholder: function() {\n            module.verbose('Showing placeholder');\n            $placeholder\n              .css('display', 'block')\n              .css('visibility', 'hidden')\n            ;\n          }\n        },\n        hide: {\n          placeholder: function() {\n            module.verbose('Hiding placeholder');\n            $placeholder\n              .css('display', 'none')\n              .css('visibility', '')\n            ;\n          }\n        },\n\n        set: {\n          fixed: function() {\n            module.verbose('Setting element to fixed position');\n            $module\n              .addClass(className.fixed)\n              .css({\n                position : 'fixed',\n                top      : settings.offset + 'px',\n                left     : 'auto',\n                zIndex   : settings.zIndex\n              })\n            ;\n            settings.onFixed.call(element);\n          },\n          image: function(src, callback) {\n            $module\n              .attr('src', src)\n            ;\n            if(settings.transition) {\n              if( $.fn.transition !== undefined) {\n                if($module.hasClass(className.visible)) {\n                  module.debug('Transition already occurred on this image, skipping animation');\n                  return;\n                }\n                $module.transition(settings.transition, settings.duration, callback);\n              }\n              else {\n                $module.fadeIn(settings.duration, callback);\n              }\n            }\n            else {\n              $module.show();\n            }\n          }\n        },\n\n        is: {\n          onScreen: function() {\n            var\n              calculations   = module.get.elementCalculations()\n            ;\n            return calculations.onScreen;\n          },\n          offScreen: function() {\n            var\n              calculations   = module.get.elementCalculations()\n            ;\n            return calculations.offScreen;\n          },\n          visible: function() {\n            if(module.cache && module.cache.element) {\n              return !(module.cache.element.width === 0 && module.cache.element.offset.top === 0);\n            }\n            return false;\n          },\n          verticallyScrollableContext: function() {\n            var\n              overflowY = ($context.get(0) !== window)\n                ? $context.css('overflow-y')\n                : false\n            ;\n            return (overflowY == 'auto' || overflowY == 'scroll');\n          },\n          horizontallyScrollableContext: function() {\n            var\n              overflowX = ($context.get(0) !== window)\n                ? $context.css('overflow-x')\n                : false\n            ;\n            return (overflowX == 'auto' || overflowX == 'scroll');\n          }\n        },\n\n        refresh: function() {\n          module.debug('Refreshing constants (width/height)');\n          if(settings.type == 'fixed') {\n            module.resetFixed();\n          }\n          module.reset();\n          module.save.position();\n          if(settings.checkOnRefresh) {\n            module.checkVisibility();\n          }\n          settings.onRefresh.call(element);\n        },\n\n        resetFixed: function () {\n          module.remove.fixed();\n          module.remove.occurred();\n        },\n\n        reset: function() {\n          module.verbose('Resetting all cached values');\n          if( $.isPlainObject(module.cache) ) {\n            module.cache.screen = {};\n            module.cache.element = {};\n          }\n        },\n\n        checkVisibility: function(scroll) {\n          module.verbose('Checking visibility of element', module.cache.element);\n\n          if( !disabled && module.is.visible() ) {\n\n            // save scroll position\n            module.save.scroll(scroll);\n\n            // update calculations derived from scroll\n            module.save.calculations();\n\n            // percentage\n            module.passed();\n\n            // reverse (must be first)\n            module.passingReverse();\n            module.topVisibleReverse();\n            module.bottomVisibleReverse();\n            module.topPassedReverse();\n            module.bottomPassedReverse();\n\n            // one time\n            module.onScreen();\n            module.offScreen();\n            module.passing();\n            module.topVisible();\n            module.bottomVisible();\n            module.topPassed();\n            module.bottomPassed();\n\n            // on update callback\n            if(settings.onUpdate) {\n              settings.onUpdate.call(element, module.get.elementCalculations());\n            }\n          }\n        },\n\n        passed: function(amount, newCallback) {\n          var\n            calculations   = module.get.elementCalculations()\n          ;\n          // assign callback\n          if(amount && newCallback) {\n            settings.onPassed[amount] = newCallback;\n          }\n          else if(amount !== undefined) {\n            return (module.get.pixelsPassed(amount) > calculations.pixelsPassed);\n          }\n          else if(calculations.passing) {\n            $.each(settings.onPassed, function(amount, callback) {\n              if(calculations.bottomVisible || calculations.pixelsPassed > module.get.pixelsPassed(amount)) {\n                module.execute(callback, amount);\n              }\n              else if(!settings.once) {\n                module.remove.occurred(callback);\n              }\n            });\n          }\n        },\n\n        onScreen: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onOnScreen,\n            callbackName = 'onScreen'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for onScreen', newCallback);\n            settings.onOnScreen = newCallback;\n          }\n          if(calculations.onScreen) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.onOnScreen;\n          }\n        },\n\n        offScreen: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onOffScreen,\n            callbackName = 'offScreen'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for offScreen', newCallback);\n            settings.onOffScreen = newCallback;\n          }\n          if(calculations.offScreen) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.onOffScreen;\n          }\n        },\n\n        passing: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onPassing,\n            callbackName = 'passing'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for passing', newCallback);\n            settings.onPassing = newCallback;\n          }\n          if(calculations.passing) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.passing;\n          }\n        },\n\n\n        topVisible: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopVisible,\n            callbackName = 'topVisible'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top visible', newCallback);\n            settings.onTopVisible = newCallback;\n          }\n          if(calculations.topVisible) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.topVisible;\n          }\n        },\n\n        bottomVisible: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomVisible,\n            callbackName = 'bottomVisible'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom visible', newCallback);\n            settings.onBottomVisible = newCallback;\n          }\n          if(calculations.bottomVisible) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.bottomVisible;\n          }\n        },\n\n        topPassed: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopPassed,\n            callbackName = 'topPassed'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top passed', newCallback);\n            settings.onTopPassed = newCallback;\n          }\n          if(calculations.topPassed) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.topPassed;\n          }\n        },\n\n        bottomPassed: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomPassed,\n            callbackName = 'bottomPassed'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom passed', newCallback);\n            settings.onBottomPassed = newCallback;\n          }\n          if(calculations.bottomPassed) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.bottomPassed;\n          }\n        },\n\n        passingReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onPassingReverse,\n            callbackName = 'passingReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for passing reverse', newCallback);\n            settings.onPassingReverse = newCallback;\n          }\n          if(!calculations.passing) {\n            if(module.get.occurred('passing')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return !calculations.passing;\n          }\n        },\n\n\n        topVisibleReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopVisibleReverse,\n            callbackName = 'topVisibleReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top visible reverse', newCallback);\n            settings.onTopVisibleReverse = newCallback;\n          }\n          if(!calculations.topVisible) {\n            if(module.get.occurred('topVisible')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.topVisible;\n          }\n        },\n\n        bottomVisibleReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomVisibleReverse,\n            callbackName = 'bottomVisibleReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom visible reverse', newCallback);\n            settings.onBottomVisibleReverse = newCallback;\n          }\n          if(!calculations.bottomVisible) {\n            if(module.get.occurred('bottomVisible')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.bottomVisible;\n          }\n        },\n\n        topPassedReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopPassedReverse,\n            callbackName = 'topPassedReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top passed reverse', newCallback);\n            settings.onTopPassedReverse = newCallback;\n          }\n          if(!calculations.topPassed) {\n            if(module.get.occurred('topPassed')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.onTopPassed;\n          }\n        },\n\n        bottomPassedReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomPassedReverse,\n            callbackName = 'bottomPassedReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom passed reverse', newCallback);\n            settings.onBottomPassedReverse = newCallback;\n          }\n          if(!calculations.bottomPassed) {\n            if(module.get.occurred('bottomPassed')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.bottomPassed;\n          }\n        },\n\n        execute: function(callback, callbackName) {\n          var\n            calculations = module.get.elementCalculations(),\n            screen       = module.get.screenCalculations()\n          ;\n          callback = callback || false;\n          if(callback) {\n            if(settings.continuous) {\n              module.debug('Callback being called continuously', callbackName, calculations);\n              callback.call(element, calculations, screen);\n            }\n            else if(!module.get.occurred(callbackName)) {\n              module.debug('Conditions met', callbackName, calculations);\n              callback.call(element, calculations, screen);\n            }\n          }\n          module.save.occurred(callbackName);\n        },\n\n        remove: {\n          fixed: function() {\n            module.debug('Removing fixed position');\n            $module\n              .removeClass(className.fixed)\n              .css({\n                position : '',\n                top      : '',\n                left     : '',\n                zIndex   : ''\n              })\n            ;\n            settings.onUnfixed.call(element);\n          },\n          placeholder: function() {\n            module.debug('Removing placeholder content');\n            if($placeholder) {\n              $placeholder.remove();\n            }\n          },\n          occurred: function(callback) {\n            if(callback) {\n              var\n                occurred = module.cache.occurred\n              ;\n              if(occurred[callback] !== undefined && occurred[callback] === true) {\n                module.debug('Callback can now be called again', callback);\n                module.cache.occurred[callback] = false;\n              }\n            }\n            else {\n              module.cache.occurred = {};\n            }\n          }\n        },\n\n        save: {\n          calculations: function() {\n            module.verbose('Saving all calculations necessary to determine positioning');\n            module.save.direction();\n            module.save.screenCalculations();\n            module.save.elementCalculations();\n          },\n          occurred: function(callback) {\n            if(callback) {\n              if(module.cache.occurred[callback] === undefined || (module.cache.occurred[callback] !== true)) {\n                module.verbose('Saving callback occurred', callback);\n                module.cache.occurred[callback] = true;\n              }\n            }\n          },\n          scroll: function(scrollPosition) {\n            scrollPosition      = scrollPosition + settings.offset || $context.scrollTop() + settings.offset;\n            module.cache.scroll = scrollPosition;\n          },\n          direction: function() {\n            var\n              scroll     = module.get.scroll(),\n              lastScroll = module.get.lastScroll(),\n              direction\n            ;\n            if(scroll > lastScroll && lastScroll) {\n              direction = 'down';\n            }\n            else if(scroll < lastScroll && lastScroll) {\n              direction = 'up';\n            }\n            else {\n              direction = 'static';\n            }\n            module.cache.direction = direction;\n            return module.cache.direction;\n          },\n          elementPosition: function() {\n            var\n              element = module.cache.element,\n              screen  = module.get.screenSize()\n            ;\n            module.verbose('Saving element position');\n            // (quicker than $.extend)\n            element.fits          = (element.height < screen.height);\n            element.offset        = $module.offset();\n            element.width         = $module.outerWidth();\n            element.height        = $module.outerHeight();\n            // compensate for scroll in context\n            if(module.is.verticallyScrollableContext()) {\n              element.offset.top += $context.scrollTop() - $context.offset().top;\n            }\n            if(module.is.horizontallyScrollableContext()) {\n              element.offset.left += $context.scrollLeft - $context.offset().left;\n            }\n            // store\n            module.cache.element = element;\n            return element;\n          },\n          elementCalculations: function() {\n            var\n              screen     = module.get.screenCalculations(),\n              element    = module.get.elementPosition()\n            ;\n            // offset\n            if(settings.includeMargin) {\n              element.margin        = {};\n              element.margin.top    = parseInt($module.css('margin-top'), 10);\n              element.margin.bottom = parseInt($module.css('margin-bottom'), 10);\n              element.top    = element.offset.top - element.margin.top;\n              element.bottom = element.offset.top + element.height + element.margin.bottom;\n            }\n            else {\n              element.top    = element.offset.top;\n              element.bottom = element.offset.top + element.height;\n            }\n\n            // visibility\n            element.topPassed        = (screen.top >= element.top);\n            element.bottomPassed     = (screen.top >= element.bottom);\n            element.topVisible       = (screen.bottom >= element.top) && !element.topPassed;\n            element.bottomVisible    = (screen.bottom >= element.bottom) && !element.bottomPassed;\n            element.pixelsPassed     = 0;\n            element.percentagePassed = 0;\n\n            // meta calculations\n            element.onScreen  = ((element.topVisible || element.passing) && !element.bottomPassed);\n            element.passing   = (element.topPassed && !element.bottomPassed);\n            element.offScreen = (!element.onScreen);\n\n            // passing calculations\n            if(element.passing) {\n              element.pixelsPassed     = (screen.top - element.top);\n              element.percentagePassed = (screen.top - element.top) / element.height;\n            }\n            module.cache.element = element;\n            module.verbose('Updated element calculations', element);\n            return element;\n          },\n          screenCalculations: function() {\n            var\n              scroll = module.get.scroll()\n            ;\n            module.save.direction();\n            module.cache.screen.top    = scroll;\n            module.cache.screen.bottom = scroll + module.cache.screen.height;\n            return module.cache.screen;\n          },\n          screenSize: function() {\n            module.verbose('Saving window position');\n            module.cache.screen = {\n              height: $context.height()\n            };\n          },\n          position: function() {\n            module.save.screenSize();\n            module.save.elementPosition();\n          }\n        },\n\n        get: {\n          pixelsPassed: function(amount) {\n            var\n              element = module.get.elementCalculations()\n            ;\n            if(amount.search('%') > -1) {\n              return ( element.height * (parseInt(amount, 10) / 100) );\n            }\n            return parseInt(amount, 10);\n          },\n          occurred: function(callback) {\n            return (module.cache.occurred !== undefined)\n              ? module.cache.occurred[callback] || false\n              : false\n            ;\n          },\n          direction: function() {\n            if(module.cache.direction === undefined) {\n              module.save.direction();\n            }\n            return module.cache.direction;\n          },\n          elementPosition: function() {\n            if(module.cache.element === undefined) {\n              module.save.elementPosition();\n            }\n            return module.cache.element;\n          },\n          elementCalculations: function() {\n            if(module.cache.element === undefined) {\n              module.save.elementCalculations();\n            }\n            return module.cache.element;\n          },\n          screenCalculations: function() {\n            if(module.cache.screen === undefined) {\n              module.save.screenCalculations();\n            }\n            return module.cache.screen;\n          },\n          screenSize: function() {\n            if(module.cache.screen === undefined) {\n              module.save.screenSize();\n            }\n            return module.cache.screen;\n          },\n          scroll: function() {\n            if(module.cache.scroll === undefined) {\n              module.save.scroll();\n            }\n            return module.cache.scroll;\n          },\n          lastScroll: function() {\n            if(module.cache.screen === undefined) {\n              module.debug('First scroll event, no last scroll could be found');\n              return false;\n            }\n            return module.cache.screen.top;\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if(Array.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        instance.save.scroll();\n        instance.save.calculations();\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.visibility.settings = {\n\n  name                   : 'Visibility',\n  namespace              : 'visibility',\n\n  debug                  : false,\n  verbose                : false,\n  performance            : true,\n\n  // whether to use mutation observers to follow changes\n  observeChanges         : true,\n\n  // check position immediately on init\n  initialCheck           : true,\n\n  // whether to refresh calculations after all page images load\n  refreshOnLoad          : true,\n\n  // whether to refresh calculations after page resize event\n  refreshOnResize        : true,\n\n  // should call callbacks on refresh event (resize, etc)\n  checkOnRefresh         : true,\n\n  // callback should only occur one time\n  once                   : true,\n\n  // callback should fire continuously whe evaluates to true\n  continuous             : false,\n\n  // offset to use with scroll top\n  offset                 : 0,\n\n  // whether to include margin in elements position\n  includeMargin          : false,\n\n  // scroll context for visibility checks\n  context                : window,\n\n  // visibility check delay in ms (defaults to animationFrame)\n  throttle               : false,\n\n  // special visibility type (image, fixed)\n  type                   : false,\n\n  // z-index to use with visibility 'fixed'\n  zIndex                 : '10',\n\n  // image only animation settings\n  transition             : 'fade in',\n  duration               : 1000,\n\n  // array of callbacks for percentage\n  onPassed               : {},\n\n  // standard callbacks\n  onOnScreen             : false,\n  onOffScreen            : false,\n  onPassing              : false,\n  onTopVisible           : false,\n  onBottomVisible        : false,\n  onTopPassed            : false,\n  onBottomPassed         : false,\n\n  // reverse callbacks\n  onPassingReverse       : false,\n  onTopVisibleReverse    : false,\n  onBottomVisibleReverse : false,\n  onTopPassedReverse     : false,\n  onBottomPassedReverse  : false,\n\n  // special callbacks for image\n  onLoad                 : function() {},\n  onAllLoaded            : function() {},\n\n  // special callbacks for fixed position\n  onFixed                : function() {},\n  onUnfixed              : function() {},\n\n  // utility callbacks\n  onUpdate               : false, // disabled by default for performance\n  onRefresh              : function(){},\n\n  metadata : {\n    src: 'src'\n  },\n\n  className: {\n    fixed       : 'fixed',\n    placeholder : 'constraint',\n    visible     : 'visible'\n  },\n\n  error : {\n    method  : 'The method you called is not defined.',\n    visible : 'Element is hidden, you must call refresh after element becomes visible'\n  }\n\n};\n\n})( jQuery, window, document );\n","var map = {\n\t\"./af\": 183,\n\t\"./af.js\": 183,\n\t\"./ar\": 184,\n\t\"./ar-dz\": 185,\n\t\"./ar-dz.js\": 185,\n\t\"./ar-kw\": 186,\n\t\"./ar-kw.js\": 186,\n\t\"./ar-ly\": 187,\n\t\"./ar-ly.js\": 187,\n\t\"./ar-ma\": 188,\n\t\"./ar-ma.js\": 188,\n\t\"./ar-sa\": 189,\n\t\"./ar-sa.js\": 189,\n\t\"./ar-tn\": 190,\n\t\"./ar-tn.js\": 190,\n\t\"./ar.js\": 184,\n\t\"./az\": 191,\n\t\"./az.js\": 191,\n\t\"./be\": 192,\n\t\"./be.js\": 192,\n\t\"./bg\": 193,\n\t\"./bg.js\": 193,\n\t\"./bm\": 194,\n\t\"./bm.js\": 194,\n\t\"./bn\": 195,\n\t\"./bn.js\": 195,\n\t\"./bo\": 196,\n\t\"./bo.js\": 196,\n\t\"./br\": 197,\n\t\"./br.js\": 197,\n\t\"./bs\": 198,\n\t\"./bs.js\": 198,\n\t\"./ca\": 199,\n\t\"./ca.js\": 199,\n\t\"./cs\": 200,\n\t\"./cs.js\": 200,\n\t\"./cv\": 201,\n\t\"./cv.js\": 201,\n\t\"./cy\": 202,\n\t\"./cy.js\": 202,\n\t\"./da\": 203,\n\t\"./da.js\": 203,\n\t\"./de\": 204,\n\t\"./de-at\": 205,\n\t\"./de-at.js\": 205,\n\t\"./de-ch\": 206,\n\t\"./de-ch.js\": 206,\n\t\"./de.js\": 204,\n\t\"./dv\": 207,\n\t\"./dv.js\": 207,\n\t\"./el\": 208,\n\t\"./el.js\": 208,\n\t\"./en-SG\": 209,\n\t\"./en-SG.js\": 209,\n\t\"./en-au\": 210,\n\t\"./en-au.js\": 210,\n\t\"./en-ca\": 211,\n\t\"./en-ca.js\": 211,\n\t\"./en-gb\": 212,\n\t\"./en-gb.js\": 212,\n\t\"./en-ie\": 213,\n\t\"./en-ie.js\": 213,\n\t\"./en-il\": 214,\n\t\"./en-il.js\": 214,\n\t\"./en-nz\": 215,\n\t\"./en-nz.js\": 215,\n\t\"./eo\": 216,\n\t\"./eo.js\": 216,\n\t\"./es\": 217,\n\t\"./es-do\": 218,\n\t\"./es-do.js\": 218,\n\t\"./es-us\": 219,\n\t\"./es-us.js\": 219,\n\t\"./es.js\": 217,\n\t\"./et\": 220,\n\t\"./et.js\": 220,\n\t\"./eu\": 221,\n\t\"./eu.js\": 221,\n\t\"./fa\": 222,\n\t\"./fa.js\": 222,\n\t\"./fi\": 223,\n\t\"./fi.js\": 223,\n\t\"./fo\": 224,\n\t\"./fo.js\": 224,\n\t\"./fr\": 225,\n\t\"./fr-ca\": 226,\n\t\"./fr-ca.js\": 226,\n\t\"./fr-ch\": 227,\n\t\"./fr-ch.js\": 227,\n\t\"./fr.js\": 225,\n\t\"./fy\": 228,\n\t\"./fy.js\": 228,\n\t\"./ga\": 229,\n\t\"./ga.js\": 229,\n\t\"./gd\": 230,\n\t\"./gd.js\": 230,\n\t\"./gl\": 231,\n\t\"./gl.js\": 231,\n\t\"./gom-latn\": 232,\n\t\"./gom-latn.js\": 232,\n\t\"./gu\": 233,\n\t\"./gu.js\": 233,\n\t\"./he\": 234,\n\t\"./he.js\": 234,\n\t\"./hi\": 235,\n\t\"./hi.js\": 235,\n\t\"./hr\": 236,\n\t\"./hr.js\": 236,\n\t\"./hu\": 237,\n\t\"./hu.js\": 237,\n\t\"./hy-am\": 238,\n\t\"./hy-am.js\": 238,\n\t\"./id\": 239,\n\t\"./id.js\": 239,\n\t\"./is\": 240,\n\t\"./is.js\": 240,\n\t\"./it\": 241,\n\t\"./it-ch\": 242,\n\t\"./it-ch.js\": 242,\n\t\"./it.js\": 241,\n\t\"./ja\": 243,\n\t\"./ja.js\": 243,\n\t\"./jv\": 244,\n\t\"./jv.js\": 244,\n\t\"./ka\": 245,\n\t\"./ka.js\": 245,\n\t\"./kk\": 246,\n\t\"./kk.js\": 246,\n\t\"./km\": 247,\n\t\"./km.js\": 247,\n\t\"./kn\": 248,\n\t\"./kn.js\": 248,\n\t\"./ko\": 249,\n\t\"./ko.js\": 249,\n\t\"./ku\": 250,\n\t\"./ku.js\": 250,\n\t\"./ky\": 251,\n\t\"./ky.js\": 251,\n\t\"./lb\": 252,\n\t\"./lb.js\": 252,\n\t\"./lo\": 253,\n\t\"./lo.js\": 253,\n\t\"./lt\": 254,\n\t\"./lt.js\": 254,\n\t\"./lv\": 255,\n\t\"./lv.js\": 255,\n\t\"./me\": 256,\n\t\"./me.js\": 256,\n\t\"./mi\": 257,\n\t\"./mi.js\": 257,\n\t\"./mk\": 258,\n\t\"./mk.js\": 258,\n\t\"./ml\": 259,\n\t\"./ml.js\": 259,\n\t\"./mn\": 260,\n\t\"./mn.js\": 260,\n\t\"./mr\": 261,\n\t\"./mr.js\": 261,\n\t\"./ms\": 262,\n\t\"./ms-my\": 263,\n\t\"./ms-my.js\": 263,\n\t\"./ms.js\": 262,\n\t\"./mt\": 264,\n\t\"./mt.js\": 264,\n\t\"./my\": 265,\n\t\"./my.js\": 265,\n\t\"./nb\": 266,\n\t\"./nb.js\": 266,\n\t\"./ne\": 267,\n\t\"./ne.js\": 267,\n\t\"./nl\": 268,\n\t\"./nl-be\": 269,\n\t\"./nl-be.js\": 269,\n\t\"./nl.js\": 268,\n\t\"./nn\": 270,\n\t\"./nn.js\": 270,\n\t\"./pa-in\": 271,\n\t\"./pa-in.js\": 271,\n\t\"./pl\": 272,\n\t\"./pl.js\": 272,\n\t\"./pt\": 273,\n\t\"./pt-br\": 274,\n\t\"./pt-br.js\": 274,\n\t\"./pt.js\": 273,\n\t\"./ro\": 275,\n\t\"./ro.js\": 275,\n\t\"./ru\": 276,\n\t\"./ru.js\": 276,\n\t\"./sd\": 277,\n\t\"./sd.js\": 277,\n\t\"./se\": 278,\n\t\"./se.js\": 278,\n\t\"./si\": 279,\n\t\"./si.js\": 279,\n\t\"./sk\": 280,\n\t\"./sk.js\": 280,\n\t\"./sl\": 281,\n\t\"./sl.js\": 281,\n\t\"./sq\": 282,\n\t\"./sq.js\": 282,\n\t\"./sr\": 283,\n\t\"./sr-cyrl\": 284,\n\t\"./sr-cyrl.js\": 284,\n\t\"./sr.js\": 283,\n\t\"./ss\": 285,\n\t\"./ss.js\": 285,\n\t\"./sv\": 286,\n\t\"./sv.js\": 286,\n\t\"./sw\": 287,\n\t\"./sw.js\": 287,\n\t\"./ta\": 288,\n\t\"./ta.js\": 288,\n\t\"./te\": 289,\n\t\"./te.js\": 289,\n\t\"./tet\": 290,\n\t\"./tet.js\": 290,\n\t\"./tg\": 291,\n\t\"./tg.js\": 291,\n\t\"./th\": 292,\n\t\"./th.js\": 292,\n\t\"./tl-ph\": 293,\n\t\"./tl-ph.js\": 293,\n\t\"./tlh\": 294,\n\t\"./tlh.js\": 294,\n\t\"./tr\": 295,\n\t\"./tr.js\": 295,\n\t\"./tzl\": 296,\n\t\"./tzl.js\": 296,\n\t\"./tzm\": 297,\n\t\"./tzm-latn\": 298,\n\t\"./tzm-latn.js\": 298,\n\t\"./tzm.js\": 297,\n\t\"./ug-cn\": 299,\n\t\"./ug-cn.js\": 299,\n\t\"./uk\": 300,\n\t\"./uk.js\": 300,\n\t\"./ur\": 301,\n\t\"./ur.js\": 301,\n\t\"./uz\": 302,\n\t\"./uz-latn\": 303,\n\t\"./uz-latn.js\": 303,\n\t\"./uz.js\": 302,\n\t\"./vi\": 304,\n\t\"./vi.js\": 304,\n\t\"./x-pseudo\": 305,\n\t\"./x-pseudo.js\": 305,\n\t\"./yo\": 306,\n\t\"./yo.js\": 306,\n\t\"./zh-cn\": 307,\n\t\"./zh-cn.js\": 307,\n\t\"./zh-hk\": 308,\n\t\"./zh-hk.js\": 308,\n\t\"./zh-tw\": 309,\n\t\"./zh-tw.js\": 309\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 382;","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction placeHoldersCount (b64) {\n  var len = b64.length\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // the number of equal signs (place holders)\n  // if there are two placeholders, than the two characters before it\n  // represent one byte\n  // if there is only one, then the three characters before it represent 2 bytes\n  // this is just a cheap hack to not do indexOf twice\n  return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n}\n\nfunction byteLength (b64) {\n  // base64 is 4/3 + up to two characters of the original data\n  return (b64.length * 3 / 4) - placeHoldersCount(b64)\n}\n\nfunction toByteArray (b64) {\n  var i, l, tmp, placeHolders, arr\n  var len = b64.length\n  placeHolders = placeHoldersCount(b64)\n\n  arr = new Arr((len * 3 / 4) - placeHolders)\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  l = placeHolders > 0 ? len - 4 : len\n\n  var L = 0\n\n  for (i = 0; i < l; i += 4) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n    arr[L++] = (tmp >> 16) & 0xFF\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  if (placeHolders === 2) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[L++] = tmp & 0xFF\n  } else if (placeHolders === 1) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp = ((uint8[i] << 16) & 0xFF0000) + ((uint8[i + 1] << 8) & 0xFF00) + (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var output = ''\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    output += lookup[tmp >> 2]\n    output += lookup[(tmp << 4) & 0x3F]\n    output += '=='\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n    output += lookup[tmp >> 10]\n    output += lookup[(tmp >> 4) & 0x3F]\n    output += lookup[(tmp << 2) & 0x3F]\n    output += '='\n  }\n\n  parts.push(output)\n\n  return parts.join('')\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Analytics_1 = require(\"./Analytics\");\nexports.AnalyticsClass = Analytics_1.default;\nvar core_1 = require(\"@aws-amplify/core\");\nvar logger = new core_1.ConsoleLogger('Analytics');\nvar endpointUpdated = false;\nvar authConfigured = false;\nvar analyticsConfigured = false;\nvar _instance = null;\nif (!_instance) {\n    logger.debug('Create Analytics Instance');\n    _instance = new Analytics_1.default();\n}\nvar Analytics = _instance;\ncore_1.default.register(Analytics);\nexports.default = Analytics;\n__export(require(\"./Providers\"));\nvar listener = function (capsule) {\n    var channel = capsule.channel, payload = capsule.payload, source = capsule.source;\n    logger.debug('on hub capsule ' + channel, payload);\n    switch (channel) {\n        case 'auth':\n            authEvent(payload);\n            break;\n        case 'storage':\n            storageEvent(payload);\n            break;\n        case 'analytics':\n            analyticsEvent(payload);\n            break;\n        default:\n            break;\n    }\n};\nvar storageEvent = function (payload) {\n    var _a = payload.data, attrs = _a.attrs, metrics = _a.metrics;\n    if (!attrs)\n        return;\n    if (analyticsConfigured) {\n        Analytics.record({\n            name: 'Storage',\n            attributes: attrs,\n            metrics: metrics\n        }).catch(function (e) {\n            logger.debug('Failed to send the storage event automatically', e);\n        });\n    }\n};\nvar authEvent = function (payload) {\n    var event = payload.event;\n    if (!event) {\n        return;\n    }\n    switch (event) {\n        case 'signIn':\n            if (authConfigured && analyticsConfigured) {\n                Analytics.record({\n                    name: '_userauth.sign_in'\n                }).catch(function (e) {\n                    logger.debug('Failed to send the sign in event automatically', e);\n                });\n            }\n            break;\n        case 'signUp':\n            if (authConfigured && analyticsConfigured) {\n                Analytics.record({\n                    name: '_userauth.sign_up'\n                }).catch(function (e) {\n                    logger.debug('Failed to send the sign up event automatically', e);\n                });\n            }\n            break;\n        case 'signOut':\n            break;\n        case 'signIn_failure':\n            if (authConfigured && analyticsConfigured) {\n                Analytics.record({\n                    name: '_userauth.auth_fail'\n                }).catch(function (e) {\n                    logger.debug('Failed to send the sign in failure event automatically', e);\n                });\n            }\n            break;\n        case 'configured':\n            authConfigured = true;\n            if (authConfigured && analyticsConfigured) {\n                sendEvents();\n            }\n            break;\n    }\n};\nvar analyticsEvent = function (payload) {\n    var event = payload.event;\n    if (!event)\n        return;\n    switch (event) {\n        case 'pinpointProvider_configured':\n            analyticsConfigured = true;\n            if (authConfigured && analyticsConfigured) {\n                sendEvents();\n            }\n            break;\n    }\n};\nvar sendEvents = function () {\n    var config = Analytics.configure();\n    if (!endpointUpdated && config['autoSessionRecord']) {\n        Analytics.updateEndpoint({ immediate: true }).catch(function (e) {\n            logger.debug('Failed to update the endpoint', e);\n        });\n        endpointUpdated = true;\n    }\n    Analytics.autoTrack('session', {\n        enable: config['autoSessionRecord']\n    });\n};\ncore_1.Hub.listen('auth', listener);\ncore_1.Hub.listen('storage', listener);\ncore_1.Hub.listen('analytics', listener);\n//# sourceMappingURL=index.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@aws-amplify/core\");\nvar AWSPinpointProvider_1 = require(\"./Providers/AWSPinpointProvider\");\nvar trackers_1 = require(\"./trackers\");\nvar logger = new core_1.ConsoleLogger('AnalyticsClass');\nvar AMPLIFY_SYMBOL = ((typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') ?\n    Symbol.for('amplify_default') : '@@amplify_default');\nvar dispatchAnalyticsEvent = function (event, data, message) {\n    core_1.Hub.dispatch('analytics', { event: event, data: data, message: message }, 'Analytics', AMPLIFY_SYMBOL);\n};\nvar trackers = {\n    'pageView': trackers_1.PageViewTracker,\n    'event': trackers_1.EventTracker,\n    'session': trackers_1.SessionTracker\n};\n/**\n* Provide mobile analytics client functions\n*/\nvar AnalyticsClass = /** @class */ (function () {\n    /**\n     * Initialize Analtyics\n     * @param config - Configuration of the Analytics\n     */\n    function AnalyticsClass() {\n        this._config = {};\n        this._pluggables = [];\n        this._disabled = false;\n        this._trackers = {};\n        this.record = this.record.bind(this);\n    }\n    AnalyticsClass.prototype.getModuleName = function () {\n        return 'Analytics';\n    };\n    /**\n     * configure Analytics\n     * @param {Object} config - Configuration of the Analytics\n     */\n    AnalyticsClass.prototype.configure = function (config) {\n        var _this = this;\n        if (!config)\n            return this._config;\n        logger.debug('configure Analytics', config);\n        var amplifyConfig = core_1.Parser.parseMobilehubConfig(config);\n        this._config = Object.assign({}, this._config, amplifyConfig.Analytics, config);\n        if (this._config['disabled']) {\n            this._disabled = true;\n        }\n        this._pluggables.forEach(function (pluggable) {\n            // for backward compatibility\n            var providerConfig = pluggable.getProviderName() === 'AWSPinpoint' && !_this._config['AWSPinpoint'] ?\n                _this._config : _this._config[pluggable.getProviderName()];\n            pluggable.configure(__assign({ disabled: _this._config['disabled'] }, providerConfig));\n        });\n        if (this._pluggables.length === 0) {\n            this.addPluggable(new AWSPinpointProvider_1.default());\n        }\n        // turn on the autoSessionRecord if not specified\n        if (this._config['autoSessionRecord'] === undefined) {\n            this._config['autoSessionRecord'] = true;\n        }\n        dispatchAnalyticsEvent('configured', null, \"The Analytics category has been configured successfully\");\n        logger.debug('current configuration', this._config);\n        return this._config;\n    };\n    /**\n     * add plugin into Analytics category\n     * @param {Object} pluggable - an instance of the plugin\n     */\n    AnalyticsClass.prototype.addPluggable = function (pluggable) {\n        if (pluggable && pluggable.getCategory() === 'Analytics') {\n            this._pluggables.push(pluggable);\n            // for backward compatibility\n            var providerConfig = pluggable.getProviderName() === 'AWSPinpoint' && !this._config['AWSPinpoint'] ?\n                this._config : this._config[pluggable.getProviderName()];\n            var config = __assign({ disabled: this._config['disabled'] }, providerConfig);\n            pluggable.configure(config);\n            return config;\n        }\n    };\n    /**\n     * Get the plugin object\n     * @param providerName - the name of the plugin\n     */\n    AnalyticsClass.prototype.getPluggable = function (providerName) {\n        for (var i = 0; i < this._pluggables.length; i += 1) {\n            var pluggable = this._pluggables[i];\n            if (pluggable.getProviderName() === providerName) {\n                return pluggable;\n            }\n        }\n        logger.debug('No plugin found with providerName', providerName);\n        return null;\n    };\n    /**\n     * Remove the plugin object\n     * @param providerName - the name of the plugin\n     */\n    AnalyticsClass.prototype.removePluggable = function (providerName) {\n        var idx = 0;\n        while (idx < this._pluggables.length) {\n            if (this._pluggables[idx].getProviderName() === providerName) {\n                break;\n            }\n            idx += 1;\n        }\n        if (idx === this._pluggables.length) {\n            logger.debug('No plugin found with providerName', providerName);\n            return;\n        }\n        else {\n            this._pluggables.splice(idx, idx + 1);\n            return;\n        }\n    };\n    /**\n     * stop sending events\n     */\n    AnalyticsClass.prototype.disable = function () {\n        this._disabled = true;\n    };\n    /**\n     * start sending events\n     */\n    AnalyticsClass.prototype.enable = function () {\n        this._disabled = false;\n    };\n    /**\n     * Record Session start\n     * @return - A promise which resolves if buffer doesn't overflow\n     */\n    AnalyticsClass.prototype.startSession = function (provider) {\n        return __awaiter(this, void 0, void 0, function () {\n            var params;\n            return __generator(this, function (_a) {\n                params = { event: { name: '_session.start' }, provider: provider };\n                return [2 /*return*/, this._sendEvent(params)];\n            });\n        });\n    };\n    /**\n     * Record Session stop\n     * @return - A promise which resolves if buffer doesn't overflow\n     */\n    AnalyticsClass.prototype.stopSession = function (provider) {\n        return __awaiter(this, void 0, void 0, function () {\n            var params;\n            return __generator(this, function (_a) {\n                params = { event: { name: '_session.stop' }, provider: provider };\n                return [2 /*return*/, this._sendEvent(params)];\n            });\n        });\n    };\n    /**\n     * Record one analytic event and send it to Pinpoint\n     * @param {String} name - The name of the event\n     * @param {Object} [attributs] - Attributes of the event\n     * @param {Object} [metrics] - Event metrics\n     * @return - A promise which resolves if buffer doesn't overflow\n     */\n    AnalyticsClass.prototype.record = function (event, provider, metrics) {\n        return __awaiter(this, void 0, void 0, function () {\n            var errMsg, params;\n            return __generator(this, function (_a) {\n                if (!this.isAnalyticsConfigured()) {\n                    errMsg = 'Analytics has not been configured';\n                    logger.debug(errMsg);\n                    return [2 /*return*/, Promise.reject(new Error(errMsg))];\n                }\n                params = null;\n                // this is just for compatibility, going to be deprecated\n                if (typeof event === 'string') {\n                    params = {\n                        'event': {\n                            name: event,\n                            attributes: provider,\n                            metrics: metrics\n                        },\n                        provider: 'AWSPinpoint'\n                    };\n                }\n                else {\n                    params = { event: event, provider: provider };\n                }\n                return [2 /*return*/, this._sendEvent(params)];\n            });\n        });\n    };\n    AnalyticsClass.prototype.updateEndpoint = function (attrs, provider) {\n        return __awaiter(this, void 0, void 0, function () {\n            var event;\n            return __generator(this, function (_a) {\n                event = Object.assign({ name: '_update_endpoint' }, attrs);\n                return [2 /*return*/, this.record(event, provider)];\n            });\n        });\n    };\n    AnalyticsClass.prototype._sendEvent = function (params) {\n        var _this = this;\n        if (!this.isAnalyticsConfigured()) {\n            var errMsg = 'Analytics has not been configured';\n            logger.debug(errMsg);\n            return Promise.reject(new Error(errMsg));\n        }\n        if (this._disabled) {\n            logger.debug('Analytics has been disabled');\n            return Promise.resolve();\n        }\n        var provider = params.provider ? params.provider : 'AWSPinpoint';\n        return new Promise(function (resolve, reject) {\n            _this._pluggables.forEach(function (pluggable) {\n                if (pluggable.getProviderName() === provider) {\n                    pluggable.record(params, { resolve: resolve, reject: reject });\n                }\n            });\n        });\n    };\n    AnalyticsClass.prototype.autoTrack = function (trackerType, opts) {\n        if (!trackers[trackerType]) {\n            logger.debug('invalid tracker type');\n            return;\n        }\n        // to sync up two different configuration ways of auto session tracking\n        if (trackerType === 'session') {\n            this._config['autoSessionRecord'] = opts['enable'];\n        }\n        var tracker = this._trackers[trackerType];\n        if (!tracker) {\n            this._trackers[trackerType] = new (trackers[trackerType])(this.record, opts);\n        }\n        else {\n            tracker.configure(opts);\n        }\n    };\n    AnalyticsClass.prototype.isAnalyticsConfigured = function () {\n        return this._config && Object.entries(this._config).length > 0;\n    };\n    return AnalyticsClass;\n}());\nexports.default = AnalyticsClass;\n//# sourceMappingURL=Analytics.js.map","require('./lib/browser_loader');\n\nvar AWS = require('./lib/core');\nif (typeof window !== 'undefined') window.AWS = AWS;\nif (typeof module !== 'undefined') module.exports = AWS;\nif (typeof self !== 'undefined') self.AWS = AWS;","var util = require('../util');\n\nfunction QueryParamSerializer() {\n}\n\nQueryParamSerializer.prototype.serialize = function(params, shape, fn) {\n  serializeStructure('', params, shape, fn);\n};\n\nfunction ucfirst(shape) {\n  if (shape.isQueryName || shape.api.protocol !== 'ec2') {\n    return shape.name;\n  } else {\n    return shape.name[0].toUpperCase() + shape.name.substr(1);\n  }\n}\n\nfunction serializeStructure(prefix, struct, rules, fn) {\n  util.each(rules.members, function(name, member) {\n    var value = struct[name];\n    if (value === null || value === undefined) return;\n\n    var memberName = ucfirst(member);\n    memberName = prefix ? prefix + '.' + memberName : memberName;\n    serializeMember(memberName, value, member, fn);\n  });\n}\n\nfunction serializeMap(name, map, rules, fn) {\n  var i = 1;\n  util.each(map, function (key, value) {\n    var prefix = rules.flattened ? '.' : '.entry.';\n    var position = prefix + (i++) + '.';\n    var keyName = position + (rules.key.name || 'key');\n    var valueName = position + (rules.value.name || 'value');\n    serializeMember(name + keyName, key, rules.key, fn);\n    serializeMember(name + valueName, value, rules.value, fn);\n  });\n}\n\nfunction serializeList(name, list, rules, fn) {\n  var memberRules = rules.member || {};\n\n  if (list.length === 0) {\n    fn.call(this, name, null);\n    return;\n  }\n\n  util.arrayEach(list, function (v, n) {\n    var suffix = '.' + (n + 1);\n    if (rules.api.protocol === 'ec2') {\n      // Do nothing for EC2\n      suffix = suffix + ''; // make linter happy\n    } else if (rules.flattened) {\n      if (memberRules.name) {\n        var parts = name.split('.');\n        parts.pop();\n        parts.push(ucfirst(memberRules));\n        name = parts.join('.');\n      }\n    } else {\n      suffix = '.' + (memberRules.name ? memberRules.name : 'member') + suffix;\n    }\n    serializeMember(name + suffix, v, memberRules, fn);\n  });\n}\n\nfunction serializeMember(name, value, rules, fn) {\n  if (value === null || value === undefined) return;\n  if (rules.type === 'structure') {\n    serializeStructure(name, value, rules, fn);\n  } else if (rules.type === 'list') {\n    serializeList(name, value, rules, fn);\n  } else if (rules.type === 'map') {\n    serializeMap(name, value, rules, fn);\n  } else {\n    fn(name, rules.toWireFormat(value).toString());\n  }\n}\n\n/**\n * @api private\n */\nmodule.exports = QueryParamSerializer;\n","/* eslint guard-for-in:0 */\nvar AWS;\n\n/**\n * A set of utility methods for use with the AWS SDK.\n *\n * @!attribute abort\n *   Return this value from an iterator function {each} or {arrayEach}\n *   to break out of the iteration.\n *   @example Breaking out of an iterator function\n *     AWS.util.each({a: 1, b: 2, c: 3}, function(key, value) {\n *       if (key == 'b') return AWS.util.abort;\n *     });\n *   @see each\n *   @see arrayEach\n * @api private\n */\nvar util = {\n  environment: 'nodejs',\n  engine: function engine() {\n    if (util.isBrowser() && typeof navigator !== 'undefined') {\n      return navigator.userAgent;\n    } else {\n      var engine = process.platform + '/' + process.version;\n      if (process.env.AWS_EXECUTION_ENV) {\n        engine += ' exec-env/' + process.env.AWS_EXECUTION_ENV;\n      }\n      return engine;\n    }\n  },\n\n  userAgent: function userAgent() {\n    var name = util.environment;\n    var agent = 'aws-sdk-' + name + '/' + require('./core').VERSION;\n    if (name === 'nodejs') agent += ' ' + util.engine();\n    return agent;\n  },\n\n  uriEscape: function uriEscape(string) {\n    var output = encodeURIComponent(string);\n    output = output.replace(/[^A-Za-z0-9_.~\\-%]+/g, escape);\n\n    // AWS percent-encodes some extra non-standard characters in a URI\n    output = output.replace(/[*]/g, function(ch) {\n      return '%' + ch.charCodeAt(0).toString(16).toUpperCase();\n    });\n\n    return output;\n  },\n\n  uriEscapePath: function uriEscapePath(string) {\n    var parts = [];\n    util.arrayEach(string.split('/'), function (part) {\n      parts.push(util.uriEscape(part));\n    });\n    return parts.join('/');\n  },\n\n  urlParse: function urlParse(url) {\n    return util.url.parse(url);\n  },\n\n  urlFormat: function urlFormat(url) {\n    return util.url.format(url);\n  },\n\n  queryStringParse: function queryStringParse(qs) {\n    return util.querystring.parse(qs);\n  },\n\n  queryParamsToString: function queryParamsToString(params) {\n    var items = [];\n    var escape = util.uriEscape;\n    var sortedKeys = Object.keys(params).sort();\n\n    util.arrayEach(sortedKeys, function(name) {\n      var value = params[name];\n      var ename = escape(name);\n      var result = ename + '=';\n      if (Array.isArray(value)) {\n        var vals = [];\n        util.arrayEach(value, function(item) { vals.push(escape(item)); });\n        result = ename + '=' + vals.sort().join('&' + ename + '=');\n      } else if (value !== undefined && value !== null) {\n        result = ename + '=' + escape(value);\n      }\n      items.push(result);\n    });\n\n    return items.join('&');\n  },\n\n  readFileSync: function readFileSync(path) {\n    if (util.isBrowser()) return null;\n    return require('fs').readFileSync(path, 'utf-8');\n  },\n\n  base64: {\n    encode: function encode64(string) {\n      if (typeof string === 'number') {\n        throw util.error(new Error('Cannot base64 encode number ' + string));\n      }\n      if (string === null || typeof string === 'undefined') {\n        return string;\n      }\n      var buf = util.buffer.toBuffer(string);\n      return buf.toString('base64');\n    },\n\n    decode: function decode64(string) {\n      if (typeof string === 'number') {\n        throw util.error(new Error('Cannot base64 decode number ' + string));\n      }\n      if (string === null || typeof string === 'undefined') {\n        return string;\n      }\n      return util.buffer.toBuffer(string, 'base64');\n    }\n\n  },\n\n  buffer: {\n    /**\n     * Buffer constructor for Node buffer and buffer pollyfill\n     */\n    toBuffer: function(data, encoding) {\n      return (typeof util.Buffer.from === 'function' && util.Buffer.from !== Uint8Array.from) ?\n        util.Buffer.from(data, encoding) : new util.Buffer(data, encoding);\n    },\n\n    alloc: function(size, fill, encoding) {\n      if (typeof size !== 'number') {\n        throw new Error('size passed to alloc must be a number.');\n      }\n      if (typeof util.Buffer.alloc === 'function') {\n        return util.Buffer.alloc(size, fill, encoding);\n      } else {\n        var buf = new util.Buffer(size);\n        if (fill !== undefined && typeof buf.fill === 'function') {\n          buf.fill(fill, undefined, undefined, encoding);\n        }\n        return buf;\n      }\n    },\n\n    toStream: function toStream(buffer) {\n      if (!util.Buffer.isBuffer(buffer)) buffer =  util.buffer.toBuffer(buffer);\n\n      var readable = new (util.stream.Readable)();\n      var pos = 0;\n      readable._read = function(size) {\n        if (pos >= buffer.length) return readable.push(null);\n\n        var end = pos + size;\n        if (end > buffer.length) end = buffer.length;\n        readable.push(buffer.slice(pos, end));\n        pos = end;\n      };\n\n      return readable;\n    },\n\n    /**\n     * Concatenates a list of Buffer objects.\n     */\n    concat: function(buffers) {\n      var length = 0,\n          offset = 0,\n          buffer = null, i;\n\n      for (i = 0; i < buffers.length; i++) {\n        length += buffers[i].length;\n      }\n\n      buffer = util.buffer.alloc(length);\n\n      for (i = 0; i < buffers.length; i++) {\n        buffers[i].copy(buffer, offset);\n        offset += buffers[i].length;\n      }\n\n      return buffer;\n    }\n  },\n\n  string: {\n    byteLength: function byteLength(string) {\n      if (string === null || string === undefined) return 0;\n      if (typeof string === 'string') string = util.buffer.toBuffer(string);\n\n      if (typeof string.byteLength === 'number') {\n        return string.byteLength;\n      } else if (typeof string.length === 'number') {\n        return string.length;\n      } else if (typeof string.size === 'number') {\n        return string.size;\n      } else if (typeof string.path === 'string') {\n        return require('fs').lstatSync(string.path).size;\n      } else {\n        throw util.error(new Error('Cannot determine length of ' + string),\n          { object: string });\n      }\n    },\n\n    upperFirst: function upperFirst(string) {\n      return string[0].toUpperCase() + string.substr(1);\n    },\n\n    lowerFirst: function lowerFirst(string) {\n      return string[0].toLowerCase() + string.substr(1);\n    }\n  },\n\n  ini: {\n    parse: function string(ini) {\n      var currentSection, map = {};\n      util.arrayEach(ini.split(/\\r?\\n/), function(line) {\n        line = line.split(/(^|\\s)[;#]/)[0]; // remove comments\n        var section = line.match(/^\\s*\\[([^\\[\\]]+)\\]\\s*$/);\n        if (section) {\n          currentSection = section[1];\n        } else if (currentSection) {\n          var item = line.match(/^\\s*(.+?)\\s*=\\s*(.+?)\\s*$/);\n          if (item) {\n            map[currentSection] = map[currentSection] || {};\n            map[currentSection][item[1]] = item[2];\n          }\n        }\n      });\n\n      return map;\n    }\n  },\n\n  fn: {\n    noop: function() {},\n    callback: function (err) { if (err) throw err; },\n\n    /**\n     * Turn a synchronous function into as \"async\" function by making it call\n     * a callback. The underlying function is called with all but the last argument,\n     * which is treated as the callback. The callback is passed passed a first argument\n     * of null on success to mimick standard node callbacks.\n     */\n    makeAsync: function makeAsync(fn, expectedArgs) {\n      if (expectedArgs && expectedArgs <= fn.length) {\n        return fn;\n      }\n\n      return function() {\n        var args = Array.prototype.slice.call(arguments, 0);\n        var callback = args.pop();\n        var result = fn.apply(null, args);\n        callback(result);\n      };\n    }\n  },\n\n  /**\n   * Date and time utility functions.\n   */\n  date: {\n\n    /**\n     * @return [Date] the current JavaScript date object. Since all\n     *   AWS services rely on this date object, you can override\n     *   this function to provide a special time value to AWS service\n     *   requests.\n     */\n    getDate: function getDate() {\n      if (!AWS) AWS = require('./core');\n      if (AWS.config.systemClockOffset) { // use offset when non-zero\n        return new Date(new Date().getTime() + AWS.config.systemClockOffset);\n      } else {\n        return new Date();\n      }\n    },\n\n    /**\n     * @return [String] the date in ISO-8601 format\n     */\n    iso8601: function iso8601(date) {\n      if (date === undefined) { date = util.date.getDate(); }\n      return date.toISOString().replace(/\\.\\d{3}Z$/, 'Z');\n    },\n\n    /**\n     * @return [String] the date in RFC 822 format\n     */\n    rfc822: function rfc822(date) {\n      if (date === undefined) { date = util.date.getDate(); }\n      return date.toUTCString();\n    },\n\n    /**\n     * @return [Integer] the UNIX timestamp value for the current time\n     */\n    unixTimestamp: function unixTimestamp(date) {\n      if (date === undefined) { date = util.date.getDate(); }\n      return date.getTime() / 1000;\n    },\n\n    /**\n     * @param [String,number,Date] date\n     * @return [Date]\n     */\n    from: function format(date) {\n      if (typeof date === 'number') {\n        return new Date(date * 1000); // unix timestamp\n      } else {\n        return new Date(date);\n      }\n    },\n\n    /**\n     * Given a Date or date-like value, this function formats the\n     * date into a string of the requested value.\n     * @param [String,number,Date] date\n     * @param [String] formatter Valid formats are:\n     #   * 'iso8601'\n     #   * 'rfc822'\n     #   * 'unixTimestamp'\n     * @return [String]\n     */\n    format: function format(date, formatter) {\n      if (!formatter) formatter = 'iso8601';\n      return util.date[formatter](util.date.from(date));\n    },\n\n    parseTimestamp: function parseTimestamp(value) {\n      if (typeof value === 'number') { // unix timestamp (number)\n        return new Date(value * 1000);\n      } else if (value.match(/^\\d+$/)) { // unix timestamp\n        return new Date(value * 1000);\n      } else if (value.match(/^\\d{4}/)) { // iso8601\n        return new Date(value);\n      } else if (value.match(/^\\w{3},/)) { // rfc822\n        return new Date(value);\n      } else {\n        throw util.error(\n          new Error('unhandled timestamp format: ' + value),\n          {code: 'TimestampParserError'});\n      }\n    }\n\n  },\n\n  crypto: {\n    crc32Table: [\n     0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419,\n     0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4,\n     0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07,\n     0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,\n     0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856,\n     0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n     0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4,\n     0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,\n     0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n     0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A,\n     0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599,\n     0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n     0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190,\n     0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F,\n     0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E,\n     0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,\n     0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED,\n     0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n     0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3,\n     0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,\n     0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A,\n     0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5,\n     0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010,\n     0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n     0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17,\n     0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6,\n     0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n     0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,\n     0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344,\n     0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n     0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A,\n     0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,\n     0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1,\n     0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C,\n     0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF,\n     0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n     0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE,\n     0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31,\n     0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C,\n     0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,\n     0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B,\n     0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n     0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1,\n     0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,\n     0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n     0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7,\n     0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66,\n     0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n     0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605,\n     0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8,\n     0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B,\n     0x2D02EF8D],\n\n    crc32: function crc32(data) {\n      var tbl = util.crypto.crc32Table;\n      var crc = 0 ^ -1;\n\n      if (typeof data === 'string') {\n        data = util.buffer.toBuffer(data);\n      }\n\n      for (var i = 0; i < data.length; i++) {\n        var code = data.readUInt8(i);\n        crc = (crc >>> 8) ^ tbl[(crc ^ code) & 0xFF];\n      }\n      return (crc ^ -1) >>> 0;\n    },\n\n    hmac: function hmac(key, string, digest, fn) {\n      if (!digest) digest = 'binary';\n      if (digest === 'buffer') { digest = undefined; }\n      if (!fn) fn = 'sha256';\n      if (typeof string === 'string') string = util.buffer.toBuffer(string);\n      return util.crypto.lib.createHmac(fn, key).update(string).digest(digest);\n    },\n\n    md5: function md5(data, digest, callback) {\n      return util.crypto.hash('md5', data, digest, callback);\n    },\n\n    sha256: function sha256(data, digest, callback) {\n      return util.crypto.hash('sha256', data, digest, callback);\n    },\n\n    hash: function(algorithm, data, digest, callback) {\n      var hash = util.crypto.createHash(algorithm);\n      if (!digest) { digest = 'binary'; }\n      if (digest === 'buffer') { digest = undefined; }\n      if (typeof data === 'string') data = util.buffer.toBuffer(data);\n      var sliceFn = util.arraySliceFn(data);\n      var isBuffer = util.Buffer.isBuffer(data);\n      //Identifying objects with an ArrayBuffer as buffers\n      if (util.isBrowser() && typeof ArrayBuffer !== 'undefined' && data && data.buffer instanceof ArrayBuffer) isBuffer = true;\n\n      if (callback && typeof data === 'object' &&\n          typeof data.on === 'function' && !isBuffer) {\n        data.on('data', function(chunk) { hash.update(chunk); });\n        data.on('error', function(err) { callback(err); });\n        data.on('end', function() { callback(null, hash.digest(digest)); });\n      } else if (callback && sliceFn && !isBuffer &&\n                 typeof FileReader !== 'undefined') {\n        // this might be a File/Blob\n        var index = 0, size = 1024 * 512;\n        var reader = new FileReader();\n        reader.onerror = function() {\n          callback(new Error('Failed to read data.'));\n        };\n        reader.onload = function() {\n          var buf = new util.Buffer(new Uint8Array(reader.result));\n          hash.update(buf);\n          index += buf.length;\n          reader._continueReading();\n        };\n        reader._continueReading = function() {\n          if (index >= data.size) {\n            callback(null, hash.digest(digest));\n            return;\n          }\n\n          var back = index + size;\n          if (back > data.size) back = data.size;\n          reader.readAsArrayBuffer(sliceFn.call(data, index, back));\n        };\n\n        reader._continueReading();\n      } else {\n        if (util.isBrowser() && typeof data === 'object' && !isBuffer) {\n          data = new util.Buffer(new Uint8Array(data));\n        }\n        var out = hash.update(data).digest(digest);\n        if (callback) callback(null, out);\n        return out;\n      }\n    },\n\n    toHex: function toHex(data) {\n      var out = [];\n      for (var i = 0; i < data.length; i++) {\n        out.push(('0' + data.charCodeAt(i).toString(16)).substr(-2, 2));\n      }\n      return out.join('');\n    },\n\n    createHash: function createHash(algorithm) {\n      return util.crypto.lib.createHash(algorithm);\n    }\n\n  },\n\n  /** @!ignore */\n\n  /* Abort constant */\n  abort: {},\n\n  each: function each(object, iterFunction) {\n    for (var key in object) {\n      if (Object.prototype.hasOwnProperty.call(object, key)) {\n        var ret = iterFunction.call(this, key, object[key]);\n        if (ret === util.abort) break;\n      }\n    }\n  },\n\n  arrayEach: function arrayEach(array, iterFunction) {\n    for (var idx in array) {\n      if (Object.prototype.hasOwnProperty.call(array, idx)) {\n        var ret = iterFunction.call(this, array[idx], parseInt(idx, 10));\n        if (ret === util.abort) break;\n      }\n    }\n  },\n\n  update: function update(obj1, obj2) {\n    util.each(obj2, function iterator(key, item) {\n      obj1[key] = item;\n    });\n    return obj1;\n  },\n\n  merge: function merge(obj1, obj2) {\n    return util.update(util.copy(obj1), obj2);\n  },\n\n  copy: function copy(object) {\n    if (object === null || object === undefined) return object;\n    var dupe = {};\n    // jshint forin:false\n    for (var key in object) {\n      dupe[key] = object[key];\n    }\n    return dupe;\n  },\n\n  isEmpty: function isEmpty(obj) {\n    for (var prop in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n        return false;\n      }\n    }\n    return true;\n  },\n\n  arraySliceFn: function arraySliceFn(obj) {\n    var fn = obj.slice || obj.webkitSlice || obj.mozSlice;\n    return typeof fn === 'function' ? fn : null;\n  },\n\n  isType: function isType(obj, type) {\n    // handle cross-\"frame\" objects\n    if (typeof type === 'function') type = util.typeName(type);\n    return Object.prototype.toString.call(obj) === '[object ' + type + ']';\n  },\n\n  typeName: function typeName(type) {\n    if (Object.prototype.hasOwnProperty.call(type, 'name')) return type.name;\n    var str = type.toString();\n    var match = str.match(/^\\s*function (.+)\\(/);\n    return match ? match[1] : str;\n  },\n\n  error: function error(err, options) {\n    var originalError = null;\n    if (typeof err.message === 'string' && err.message !== '') {\n      if (typeof options === 'string' || (options && options.message)) {\n        originalError = util.copy(err);\n        originalError.message = err.message;\n      }\n    }\n    err.message = err.message || null;\n\n    if (typeof options === 'string') {\n      err.message = options;\n    } else if (typeof options === 'object' && options !== null) {\n      util.update(err, options);\n      if (options.message)\n        err.message = options.message;\n      if (options.code || options.name)\n        err.code = options.code || options.name;\n      if (options.stack)\n        err.stack = options.stack;\n    }\n\n    if (typeof Object.defineProperty === 'function') {\n      Object.defineProperty(err, 'name', {writable: true, enumerable: false});\n      Object.defineProperty(err, 'message', {enumerable: true});\n    }\n\n    err.name = options && options.name || err.name || err.code || 'Error';\n    err.time = new Date();\n\n    if (originalError) err.originalError = originalError;\n\n    return err;\n  },\n\n  /**\n   * @api private\n   */\n  inherit: function inherit(klass, features) {\n    var newObject = null;\n    if (features === undefined) {\n      features = klass;\n      klass = Object;\n      newObject = {};\n    } else {\n      var ctor = function ConstructorWrapper() {};\n      ctor.prototype = klass.prototype;\n      newObject = new ctor();\n    }\n\n    // constructor not supplied, create pass-through ctor\n    if (features.constructor === Object) {\n      features.constructor = function() {\n        if (klass !== Object) {\n          return klass.apply(this, arguments);\n        }\n      };\n    }\n\n    features.constructor.prototype = newObject;\n    util.update(features.constructor.prototype, features);\n    features.constructor.__super__ = klass;\n    return features.constructor;\n  },\n\n  /**\n   * @api private\n   */\n  mixin: function mixin() {\n    var klass = arguments[0];\n    for (var i = 1; i < arguments.length; i++) {\n      // jshint forin:false\n      for (var prop in arguments[i].prototype) {\n        var fn = arguments[i].prototype[prop];\n        if (prop !== 'constructor') {\n          klass.prototype[prop] = fn;\n        }\n      }\n    }\n    return klass;\n  },\n\n  /**\n   * @api private\n   */\n  hideProperties: function hideProperties(obj, props) {\n    if (typeof Object.defineProperty !== 'function') return;\n\n    util.arrayEach(props, function (key) {\n      Object.defineProperty(obj, key, {\n        enumerable: false, writable: true, configurable: true });\n    });\n  },\n\n  /**\n   * @api private\n   */\n  property: function property(obj, name, value, enumerable, isValue) {\n    var opts = {\n      configurable: true,\n      enumerable: enumerable !== undefined ? enumerable : true\n    };\n    if (typeof value === 'function' && !isValue) {\n      opts.get = value;\n    }\n    else {\n      opts.value = value; opts.writable = true;\n    }\n\n    Object.defineProperty(obj, name, opts);\n  },\n\n  /**\n   * @api private\n   */\n  memoizedProperty: function memoizedProperty(obj, name, get, enumerable) {\n    var cachedValue = null;\n\n    // build enumerable attribute for each value with lazy accessor.\n    util.property(obj, name, function() {\n      if (cachedValue === null) {\n        cachedValue = get();\n      }\n      return cachedValue;\n    }, enumerable);\n  },\n\n  /**\n   * TODO Remove in major version revision\n   * This backfill populates response data without the\n   * top-level payload name.\n   *\n   * @api private\n   */\n  hoistPayloadMember: function hoistPayloadMember(resp) {\n    var req = resp.request;\n    var operationName = req.operation;\n    var operation = req.service.api.operations[operationName];\n    var output = operation.output;\n    if (output.payload && !operation.hasEventOutput) {\n      var payloadMember = output.members[output.payload];\n      var responsePayload = resp.data[output.payload];\n      if (payloadMember.type === 'structure') {\n        util.each(responsePayload, function(key, value) {\n          util.property(resp.data, key, value, false);\n        });\n      }\n    }\n  },\n\n  /**\n   * Compute SHA-256 checksums of streams\n   *\n   * @api private\n   */\n  computeSha256: function computeSha256(body, done) {\n    if (util.isNode()) {\n      var Stream = util.stream.Stream;\n      var fs = require('fs');\n      if (typeof Stream === 'function' && body instanceof Stream) {\n        if (typeof body.path === 'string') { // assume file object\n          var settings = {};\n          if (typeof body.start === 'number') {\n            settings.start = body.start;\n          }\n          if (typeof body.end === 'number') {\n            settings.end = body.end;\n          }\n          body = fs.createReadStream(body.path, settings);\n        } else { // TODO support other stream types\n          return done(new Error('Non-file stream objects are ' +\n                                'not supported with SigV4'));\n        }\n      }\n    }\n\n    util.crypto.sha256(body, 'hex', function(err, sha) {\n      if (err) done(err);\n      else done(null, sha);\n    });\n  },\n\n  /**\n   * @api private\n   */\n  isClockSkewed: function isClockSkewed(serverTime) {\n    if (serverTime) {\n      util.property(AWS.config, 'isClockSkewed',\n        Math.abs(new Date().getTime() - serverTime) >= 300000, false);\n      return AWS.config.isClockSkewed;\n    }\n  },\n\n  applyClockOffset: function applyClockOffset(serverTime) {\n    if (serverTime)\n      AWS.config.systemClockOffset = serverTime - new Date().getTime();\n  },\n\n  /**\n   * @api private\n   */\n  extractRequestId: function extractRequestId(resp) {\n    var requestId = resp.httpResponse.headers['x-amz-request-id'] ||\n                     resp.httpResponse.headers['x-amzn-requestid'];\n\n    if (!requestId && resp.data && resp.data.ResponseMetadata) {\n      requestId = resp.data.ResponseMetadata.RequestId;\n    }\n\n    if (requestId) {\n      resp.requestId = requestId;\n    }\n\n    if (resp.error) {\n      resp.error.requestId = requestId;\n    }\n  },\n\n  /**\n   * @api private\n   */\n  addPromises: function addPromises(constructors, PromiseDependency) {\n    var deletePromises = false;\n    if (PromiseDependency === undefined && AWS && AWS.config) {\n      PromiseDependency = AWS.config.getPromisesDependency();\n    }\n    if (PromiseDependency === undefined && typeof Promise !== 'undefined') {\n      PromiseDependency = Promise;\n    }\n    if (typeof PromiseDependency !== 'function') deletePromises = true;\n    if (!Array.isArray(constructors)) constructors = [constructors];\n\n    for (var ind = 0; ind < constructors.length; ind++) {\n      var constructor = constructors[ind];\n      if (deletePromises) {\n        if (constructor.deletePromisesFromClass) {\n          constructor.deletePromisesFromClass();\n        }\n      } else if (constructor.addPromisesToClass) {\n        constructor.addPromisesToClass(PromiseDependency);\n      }\n    }\n  },\n\n  /**\n   * @api private\n   */\n  promisifyMethod: function promisifyMethod(methodName, PromiseDependency) {\n    return function promise() {\n      var self = this;\n      return new PromiseDependency(function(resolve, reject) {\n        self[methodName](function(err, data) {\n          if (err) {\n            reject(err);\n          } else {\n            resolve(data);\n          }\n        });\n      });\n    };\n  },\n\n  /**\n   * @api private\n   */\n  isDualstackAvailable: function isDualstackAvailable(service) {\n    if (!service) return false;\n    var metadata = require('../apis/metadata.json');\n    if (typeof service !== 'string') service = service.serviceIdentifier;\n    if (typeof service !== 'string' || !metadata.hasOwnProperty(service)) return false;\n    return !!metadata[service].dualstackAvailable;\n  },\n\n  /**\n   * @api private\n   */\n  calculateRetryDelay: function calculateRetryDelay(retryCount, retryDelayOptions) {\n    if (!retryDelayOptions) retryDelayOptions = {};\n    var customBackoff = retryDelayOptions.customBackoff || null;\n    if (typeof customBackoff === 'function') {\n      return customBackoff(retryCount);\n    }\n    var base = typeof retryDelayOptions.base === 'number' ? retryDelayOptions.base : 100;\n    var delay = Math.random() * (Math.pow(2, retryCount) * base);\n    return delay;\n  },\n\n  /**\n   * @api private\n   */\n  handleRequestWithRetries: function handleRequestWithRetries(httpRequest, options, cb) {\n    if (!options) options = {};\n    var http = AWS.HttpClient.getInstance();\n    var httpOptions = options.httpOptions || {};\n    var retryCount = 0;\n\n    var errCallback = function(err) {\n      var maxRetries = options.maxRetries || 0;\n      if (err && err.code === 'TimeoutError') err.retryable = true;\n      if (err && err.retryable && retryCount < maxRetries) {\n        retryCount++;\n        var delay = util.calculateRetryDelay(retryCount, options.retryDelayOptions);\n        setTimeout(sendRequest, delay + (err.retryAfter || 0));\n      } else {\n        cb(err);\n      }\n    };\n\n    var sendRequest = function() {\n      var data = '';\n      http.handleRequest(httpRequest, httpOptions, function(httpResponse) {\n        httpResponse.on('data', function(chunk) { data += chunk.toString(); });\n        httpResponse.on('end', function() {\n          var statusCode = httpResponse.statusCode;\n          if (statusCode < 300) {\n            cb(null, data);\n          } else {\n            var retryAfter = parseInt(httpResponse.headers['retry-after'], 10) * 1000 || 0;\n            var err = util.error(new Error(),\n              { retryable: statusCode >= 500 || statusCode === 429 }\n            );\n            if (retryAfter && err.retryable) err.retryAfter = retryAfter;\n            errCallback(err);\n          }\n        });\n      }, errCallback);\n    };\n\n    AWS.util.defer(sendRequest);\n  },\n\n  /**\n   * @api private\n   */\n  uuid: {\n    v4: function uuidV4() {\n      return require('uuid').v4();\n    }\n  },\n\n  /**\n   * @api private\n   */\n  convertPayloadToString: function convertPayloadToString(resp) {\n    var req = resp.request;\n    var operation = req.operation;\n    var rules = req.service.api.operations[operation].output || {};\n    if (rules.payload && resp.data[rules.payload]) {\n      resp.data[rules.payload] = resp.data[rules.payload].toString();\n    }\n  },\n\n  /**\n   * @api private\n   */\n  defer: function defer(callback) {\n    if (typeof process === 'object' && typeof process.nextTick === 'function') {\n      process.nextTick(callback);\n    } else if (typeof setImmediate === 'function') {\n      setImmediate(callback);\n    } else {\n      setTimeout(callback, 0);\n    }\n  },\n\n  /**\n   * @api private\n   */\n  getRequestPayloadShape: function getRequestPayloadShape(req) {\n    var operations = req.service.api.operations;\n    if (!operations) return undefined;\n    var operation = (operations || {})[req.operation];\n    if (!operation || !operation.input || !operation.input.payload) return undefined;\n    return operation.input.members[operation.input.payload];\n  },\n\n  /**\n   * @api private\n   */\n  defaultProfile: 'default',\n\n  /**\n   * @api private\n   */\n  configOptInEnv: 'AWS_SDK_LOAD_CONFIG',\n\n  /**\n   * @api private\n   */\n  sharedCredentialsFileEnv: 'AWS_SHARED_CREDENTIALS_FILE',\n\n  /**\n   * @api private\n   */\n  sharedConfigFileEnv: 'AWS_CONFIG_FILE',\n\n  /**\n   * @api private\n   */\n  imdsDisabledEnv: 'AWS_EC2_METADATA_DISABLED'\n};\n\n/**\n * @api private\n */\nmodule.exports = util;\n","var util = require('../util');\nvar XmlNode = require('./xml-node').XmlNode;\nvar XmlText = require('./xml-text').XmlText;\n\nfunction XmlBuilder() { }\n\nXmlBuilder.prototype.toXML = function(params, shape, rootElement, noEmpty) {\n  var xml = new XmlNode(rootElement);\n  applyNamespaces(xml, shape, true);\n  serialize(xml, params, shape);\n  return xml.children.length > 0 || noEmpty ? xml.toString() : '';\n};\n\nfunction serialize(xml, value, shape) {\n  switch (shape.type) {\n    case 'structure': return serializeStructure(xml, value, shape);\n    case 'map': return serializeMap(xml, value, shape);\n    case 'list': return serializeList(xml, value, shape);\n    default: return serializeScalar(xml, value, shape);\n  }\n}\n\nfunction serializeStructure(xml, params, shape) {\n  util.arrayEach(shape.memberNames, function(memberName) {\n    var memberShape = shape.members[memberName];\n    if (memberShape.location !== 'body') return;\n\n    var value = params[memberName];\n    var name = memberShape.name;\n    if (value !== undefined && value !== null) {\n      if (memberShape.isXmlAttribute) {\n        xml.addAttribute(name, value);\n      } else if (memberShape.flattened) {\n        serialize(xml, value, memberShape);\n      } else {\n        var element = new XmlNode(name);\n        xml.addChildNode(element);\n        applyNamespaces(element, memberShape);\n        serialize(element, value, memberShape);\n      }\n    }\n  });\n}\n\nfunction serializeMap(xml, map, shape) {\n  var xmlKey = shape.key.name || 'key';\n  var xmlValue = shape.value.name || 'value';\n\n  util.each(map, function(key, value) {\n    var entry = new XmlNode(shape.flattened ? shape.name : 'entry');\n    xml.addChildNode(entry);\n\n    var entryKey = new XmlNode(xmlKey);\n    var entryValue = new XmlNode(xmlValue);\n    entry.addChildNode(entryKey);\n    entry.addChildNode(entryValue);\n\n    serialize(entryKey, key, shape.key);\n    serialize(entryValue, value, shape.value);\n  });\n}\n\nfunction serializeList(xml, list, shape) {\n  if (shape.flattened) {\n    util.arrayEach(list, function(value) {\n      var name = shape.member.name || shape.name;\n      var element = new XmlNode(name);\n      xml.addChildNode(element);\n      serialize(element, value, shape.member);\n    });\n  } else {\n    util.arrayEach(list, function(value) {\n      var name = shape.member.name || 'member';\n      var element = new XmlNode(name);\n      xml.addChildNode(element);\n      serialize(element, value, shape.member);\n    });\n  }\n}\n\nfunction serializeScalar(xml, value, shape) {\n  xml.addChildNode(\n    new XmlText(shape.toWireFormat(value))\n  );\n}\n\nfunction applyNamespaces(xml, shape, isRoot) {\n  var uri, prefix = 'xmlns';\n  if (shape.xmlNamespaceUri) {\n    uri = shape.xmlNamespaceUri;\n    if (shape.xmlNamespacePrefix) prefix += ':' + shape.xmlNamespacePrefix;\n  } else if (isRoot && shape.api.xmlNamespaceUri) {\n    uri = shape.api.xmlNamespaceUri;\n  }\n\n  if (uri) xml.addAttribute(prefix, uri);\n}\n\n/**\n * @api private\n */\nmodule.exports = XmlBuilder;\n","var escapeAttribute = require('./escape-attribute').escapeAttribute;\n\n/**\n * Represents an XML node.\n * @api private\n */\nfunction XmlNode(name, children) {\n    if (children === void 0) { children = []; }\n    this.name = name;\n    this.children = children;\n    this.attributes = {};\n}\nXmlNode.prototype.addAttribute = function (name, value) {\n    this.attributes[name] = value;\n    return this;\n};\nXmlNode.prototype.addChildNode = function (child) {\n    this.children.push(child);\n    return this;\n};\nXmlNode.prototype.removeAttribute = function (name) {\n    delete this.attributes[name];\n    return this;\n};\nXmlNode.prototype.toString = function () {\n    var hasChildren = Boolean(this.children.length);\n    var xmlText = '<' + this.name;\n    // add attributes\n    var attributes = this.attributes;\n    for (var i = 0, attributeNames = Object.keys(attributes); i < attributeNames.length; i++) {\n        var attributeName = attributeNames[i];\n        var attribute = attributes[attributeName];\n        if (typeof attribute !== 'undefined' && attribute !== null) {\n            xmlText += ' ' + attributeName + '=\\\"' + escapeAttribute('' + attribute) + '\\\"';\n        }\n    }\n    return xmlText += !hasChildren ? '/>' : '>' + this.children.map(function (c) { return c.toString(); }).join('') + '</' + this.name + '>';\n};\n\n/**\n * @api private\n */\nmodule.exports = {\n    XmlNode: XmlNode\n};\n","/**\n * Escapes characters that can not be in an XML attribute.\n */\nfunction escapeAttribute(value) {\n    return value.replace(/&/g, '&amp;').replace(/'/g, '&apos;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;');\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n    escapeAttribute: escapeAttribute\n};\n","var escapeElement = require('./escape-element').escapeElement;\n\n/**\n * Represents an XML text value.\n * @api private\n */\nfunction XmlText(value) {\n    this.value = value;\n}\n\nXmlText.prototype.toString = function () {\n    return escapeElement('' + this.value);\n};\n\n/**\n * @api private\n */\nmodule.exports = {\n    XmlText: XmlText\n};\n","/**\n * Escapes characters that can not be in an XML element.\n */\nfunction escapeElement(value) {\n    return value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n    escapeElement: escapeElement\n};\n","function apiLoader(svc, version) {\n  if (!apiLoader.services.hasOwnProperty(svc)) {\n    throw new Error('InvalidService: Failed to load api for ' + svc);\n  }\n  return apiLoader.services[svc][version];\n}\n\n/**\n * @api private\n *\n * This member of AWS.apiLoader is private, but changing it will necessitate a\n * change to ../scripts/services-table-generator.ts\n */\napiLoader.services = {};\n\n/**\n * @api private\n */\nmodule.exports = apiLoader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar LRU_1 = require(\"./utils/LRU\");\nvar CACHE_SIZE = 1000;\n/**\n * Inspired node-lru-cache[https://github.com/isaacs/node-lru-cache]\n */\nvar EndpointCache = /** @class */ (function () {\n    function EndpointCache(maxSize) {\n        if (maxSize === void 0) { maxSize = CACHE_SIZE; }\n        this.maxSize = maxSize;\n        this.cache = new LRU_1.LRUCache(maxSize);\n    }\n    ;\n    Object.defineProperty(EndpointCache.prototype, \"size\", {\n        get: function () {\n            return this.cache.length;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    EndpointCache.prototype.put = function (key, value) {\n      var keyString = typeof key !== 'string' ? EndpointCache.getKeyString(key) : key;\n        var endpointRecord = this.populateValue(value);\n        this.cache.put(keyString, endpointRecord);\n    };\n    EndpointCache.prototype.get = function (key) {\n      var keyString = typeof key !== 'string' ? EndpointCache.getKeyString(key) : key;\n        var now = Date.now();\n        var records = this.cache.get(keyString);\n        if (records) {\n            for (var i = 0; i < records.length; i++) {\n                var record = records[i];\n                if (record.Expire < now) {\n                    this.cache.remove(keyString);\n                    return undefined;\n                }\n            }\n        }\n        return records;\n    };\n    EndpointCache.getKeyString = function (key) {\n        var identifiers = [];\n        var identifierNames = Object.keys(key).sort();\n        for (var i = 0; i < identifierNames.length; i++) {\n            var identifierName = identifierNames[i];\n            if (key[identifierName] === undefined)\n                continue;\n            identifiers.push(key[identifierName]);\n        }\n        return identifiers.join(' ');\n    };\n    EndpointCache.prototype.populateValue = function (endpoints) {\n        var now = Date.now();\n        return endpoints.map(function (endpoint) { return ({\n            Address: endpoint.Address || '',\n            Expire: now + (endpoint.CachePeriodInMinutes || 1) * 60 * 1000\n        }); });\n    };\n    EndpointCache.prototype.empty = function () {\n        this.cache.empty();\n    };\n    EndpointCache.prototype.remove = function (key) {\n      var keyString = typeof key !== 'string' ? EndpointCache.getKeyString(key) : key;\n        this.cache.remove(keyString);\n    };\n    return EndpointCache;\n}());\nexports.EndpointCache = EndpointCache;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar LinkedListNode = /** @class */ (function () {\n    function LinkedListNode(key, value) {\n        this.key = key;\n        this.value = value;\n    }\n    return LinkedListNode;\n}());\nvar LRUCache = /** @class */ (function () {\n    function LRUCache(size) {\n        this.nodeMap = {};\n        this.size = 0;\n        if (typeof size !== 'number' || size < 1) {\n            throw new Error('Cache size can only be positive number');\n        }\n        this.sizeLimit = size;\n    }\n    Object.defineProperty(LRUCache.prototype, \"length\", {\n        get: function () {\n            return this.size;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    LRUCache.prototype.prependToList = function (node) {\n        if (!this.headerNode) {\n            this.tailNode = node;\n        }\n        else {\n            this.headerNode.prev = node;\n            node.next = this.headerNode;\n        }\n        this.headerNode = node;\n        this.size++;\n    };\n    LRUCache.prototype.removeFromTail = function () {\n        if (!this.tailNode) {\n            return undefined;\n        }\n        var node = this.tailNode;\n        var prevNode = node.prev;\n        if (prevNode) {\n            prevNode.next = undefined;\n        }\n        node.prev = undefined;\n        this.tailNode = prevNode;\n        this.size--;\n        return node;\n    };\n    LRUCache.prototype.detachFromList = function (node) {\n        if (this.headerNode === node) {\n            this.headerNode = node.next;\n        }\n        if (this.tailNode === node) {\n            this.tailNode = node.prev;\n        }\n        if (node.prev) {\n            node.prev.next = node.next;\n        }\n        if (node.next) {\n            node.next.prev = node.prev;\n        }\n        node.next = undefined;\n        node.prev = undefined;\n        this.size--;\n    };\n    LRUCache.prototype.get = function (key) {\n        if (this.nodeMap[key]) {\n            var node = this.nodeMap[key];\n            this.detachFromList(node);\n            this.prependToList(node);\n            return node.value;\n        }\n    };\n    LRUCache.prototype.remove = function (key) {\n        if (this.nodeMap[key]) {\n            var node = this.nodeMap[key];\n            this.detachFromList(node);\n            delete this.nodeMap[key];\n        }\n    };\n    LRUCache.prototype.put = function (key, value) {\n        if (this.nodeMap[key]) {\n            this.remove(key);\n        }\n        else if (this.size === this.sizeLimit) {\n            var tailNode = this.removeFromTail();\n            var key_1 = tailNode.key;\n            delete this.nodeMap[key_1];\n        }\n        var newNode = new LinkedListNode(key, value);\n        this.nodeMap[key] = newNode;\n        this.prependToList(newNode);\n    };\n    LRUCache.prototype.empty = function () {\n        var keys = Object.keys(this.nodeMap);\n        for (var i = 0; i < keys.length; i++) {\n            var key = keys[i];\n            var node = this.nodeMap[key];\n            this.detachFromList(node);\n            delete this.nodeMap[key];\n        }\n    };\n    return LRUCache;\n}());\nexports.LRUCache = LRUCache;","var AWS = require('./core');\nvar Api = require('./model/api');\nvar regionConfig = require('./region_config');\n\nvar inherit = AWS.util.inherit;\nvar clientCount = 0;\n\n/**\n * The service class representing an AWS service.\n *\n * @class_abstract This class is an abstract class.\n *\n * @!attribute apiVersions\n *   @return [Array<String>] the list of API versions supported by this service.\n *   @readonly\n */\nAWS.Service = inherit({\n  /**\n   * Create a new service object with a configuration object\n   *\n   * @param config [map] a map of configuration options\n   */\n  constructor: function Service(config) {\n    if (!this.loadServiceClass) {\n      throw AWS.util.error(new Error(),\n        'Service must be constructed with `new\\' operator');\n    }\n    var ServiceClass = this.loadServiceClass(config || {});\n    if (ServiceClass) {\n      var originalConfig = AWS.util.copy(config);\n      var svc = new ServiceClass(config);\n      Object.defineProperty(svc, '_originalConfig', {\n        get: function() { return originalConfig; },\n        enumerable: false,\n        configurable: true\n      });\n      svc._clientId = ++clientCount;\n      return svc;\n    }\n    this.initialize(config);\n  },\n\n  /**\n   * @api private\n   */\n  initialize: function initialize(config) {\n    var svcConfig = AWS.config[this.serviceIdentifier];\n    this.config = new AWS.Config(AWS.config);\n    if (svcConfig) this.config.update(svcConfig, true);\n    if (config) this.config.update(config, true);\n\n    this.validateService();\n    if (!this.config.endpoint) regionConfig(this);\n\n    this.config.endpoint = this.endpointFromTemplate(this.config.endpoint);\n    this.setEndpoint(this.config.endpoint);\n    //enable attaching listeners to service client\n    AWS.SequentialExecutor.call(this);\n    AWS.Service.addDefaultMonitoringListeners(this);\n    if ((this.config.clientSideMonitoring || AWS.Service._clientSideMonitoring) && this.publisher) {\n      var publisher = this.publisher;\n      this.addNamedListener('PUBLISH_API_CALL', 'apiCall', function PUBLISH_API_CALL(event) {\n        process.nextTick(function() {publisher.eventHandler(event);});\n      });\n      this.addNamedListener('PUBLISH_API_ATTEMPT', 'apiCallAttempt', function PUBLISH_API_ATTEMPT(event) {\n        process.nextTick(function() {publisher.eventHandler(event);});\n      });\n    }\n  },\n\n  /**\n   * @api private\n   */\n  validateService: function validateService() {\n  },\n\n  /**\n   * @api private\n   */\n  loadServiceClass: function loadServiceClass(serviceConfig) {\n    var config = serviceConfig;\n    if (!AWS.util.isEmpty(this.api)) {\n      return null;\n    } else if (config.apiConfig) {\n      return AWS.Service.defineServiceApi(this.constructor, config.apiConfig);\n    } else if (!this.constructor.services) {\n      return null;\n    } else {\n      config = new AWS.Config(AWS.config);\n      config.update(serviceConfig, true);\n      var version = config.apiVersions[this.constructor.serviceIdentifier];\n      version = version || config.apiVersion;\n      return this.getLatestServiceClass(version);\n    }\n  },\n\n  /**\n   * @api private\n   */\n  getLatestServiceClass: function getLatestServiceClass(version) {\n    version = this.getLatestServiceVersion(version);\n    if (this.constructor.services[version] === null) {\n      AWS.Service.defineServiceApi(this.constructor, version);\n    }\n\n    return this.constructor.services[version];\n  },\n\n  /**\n   * @api private\n   */\n  getLatestServiceVersion: function getLatestServiceVersion(version) {\n    if (!this.constructor.services || this.constructor.services.length === 0) {\n      throw new Error('No services defined on ' +\n                      this.constructor.serviceIdentifier);\n    }\n\n    if (!version) {\n      version = 'latest';\n    } else if (AWS.util.isType(version, Date)) {\n      version = AWS.util.date.iso8601(version).split('T')[0];\n    }\n\n    if (Object.hasOwnProperty(this.constructor.services, version)) {\n      return version;\n    }\n\n    var keys = Object.keys(this.constructor.services).sort();\n    var selectedVersion = null;\n    for (var i = keys.length - 1; i >= 0; i--) {\n      // versions that end in \"*\" are not available on disk and can be\n      // skipped, so do not choose these as selectedVersions\n      if (keys[i][keys[i].length - 1] !== '*') {\n        selectedVersion = keys[i];\n      }\n      if (keys[i].substr(0, 10) <= version) {\n        return selectedVersion;\n      }\n    }\n\n    throw new Error('Could not find ' + this.constructor.serviceIdentifier +\n                    ' API to satisfy version constraint `' + version + '\\'');\n  },\n\n  /**\n   * @api private\n   */\n  api: {},\n\n  /**\n   * @api private\n   */\n  defaultRetryCount: 3,\n\n  /**\n   * @api private\n   */\n  customizeRequests: function customizeRequests(callback) {\n    if (!callback) {\n      this.customRequestHandler = null;\n    } else if (typeof callback === 'function') {\n      this.customRequestHandler = callback;\n    } else {\n      throw new Error('Invalid callback type \\'' + typeof callback + '\\' provided in customizeRequests');\n    }\n  },\n\n  /**\n   * Calls an operation on a service with the given input parameters.\n   *\n   * @param operation [String] the name of the operation to call on the service.\n   * @param params [map] a map of input options for the operation\n   * @callback callback function(err, data)\n   *   If a callback is supplied, it is called when a response is returned\n   *   from the service.\n   *   @param err [Error] the error object returned from the request.\n   *     Set to `null` if the request is successful.\n   *   @param data [Object] the de-serialized data returned from\n   *     the request. Set to `null` if a request error occurs.\n   */\n  makeRequest: function makeRequest(operation, params, callback) {\n    if (typeof params === 'function') {\n      callback = params;\n      params = null;\n    }\n\n    params = params || {};\n    if (this.config.params) { // copy only toplevel bound params\n      var rules = this.api.operations[operation];\n      if (rules) {\n        params = AWS.util.copy(params);\n        AWS.util.each(this.config.params, function(key, value) {\n          if (rules.input.members[key]) {\n            if (params[key] === undefined || params[key] === null) {\n              params[key] = value;\n            }\n          }\n        });\n      }\n    }\n\n    var request = new AWS.Request(this, operation, params);\n    this.addAllRequestListeners(request);\n    this.attachMonitoringEmitter(request);\n    if (callback) request.send(callback);\n    return request;\n  },\n\n  /**\n   * Calls an operation on a service with the given input parameters, without\n   * any authentication data. This method is useful for \"public\" API operations.\n   *\n   * @param operation [String] the name of the operation to call on the service.\n   * @param params [map] a map of input options for the operation\n   * @callback callback function(err, data)\n   *   If a callback is supplied, it is called when a response is returned\n   *   from the service.\n   *   @param err [Error] the error object returned from the request.\n   *     Set to `null` if the request is successful.\n   *   @param data [Object] the de-serialized data returned from\n   *     the request. Set to `null` if a request error occurs.\n   */\n  makeUnauthenticatedRequest: function makeUnauthenticatedRequest(operation, params, callback) {\n    if (typeof params === 'function') {\n      callback = params;\n      params = {};\n    }\n\n    var request = this.makeRequest(operation, params).toUnauthenticated();\n    return callback ? request.send(callback) : request;\n  },\n\n  /**\n   * Waits for a given state\n   *\n   * @param state [String] the state on the service to wait for\n   * @param params [map] a map of parameters to pass with each request\n   * @option params $waiter [map] a map of configuration options for the waiter\n   * @option params $waiter.delay [Number] The number of seconds to wait between\n   *                                       requests\n   * @option params $waiter.maxAttempts [Number] The maximum number of requests\n   *                                             to send while waiting\n   * @callback callback function(err, data)\n   *   If a callback is supplied, it is called when a response is returned\n   *   from the service.\n   *   @param err [Error] the error object returned from the request.\n   *     Set to `null` if the request is successful.\n   *   @param data [Object] the de-serialized data returned from\n   *     the request. Set to `null` if a request error occurs.\n   */\n  waitFor: function waitFor(state, params, callback) {\n    var waiter = new AWS.ResourceWaiter(this, state);\n    return waiter.wait(params, callback);\n  },\n\n  /**\n   * @api private\n   */\n  addAllRequestListeners: function addAllRequestListeners(request) {\n    var list = [AWS.events, AWS.EventListeners.Core, this.serviceInterface(),\n                AWS.EventListeners.CorePost];\n    for (var i = 0; i < list.length; i++) {\n      if (list[i]) request.addListeners(list[i]);\n    }\n\n    // disable parameter validation\n    if (!this.config.paramValidation) {\n      request.removeListener('validate',\n        AWS.EventListeners.Core.VALIDATE_PARAMETERS);\n    }\n\n    if (this.config.logger) { // add logging events\n      request.addListeners(AWS.EventListeners.Logger);\n    }\n\n    this.setupRequestListeners(request);\n    // call prototype's customRequestHandler\n    if (typeof this.constructor.prototype.customRequestHandler === 'function') {\n      this.constructor.prototype.customRequestHandler(request);\n    }\n    // call instance's customRequestHandler\n    if (Object.prototype.hasOwnProperty.call(this, 'customRequestHandler') && typeof this.customRequestHandler === 'function') {\n      this.customRequestHandler(request);\n    }\n  },\n\n  /**\n   * Event recording metrics for a whole API call.\n   * @returns {object} a subset of api call metrics\n   * @api private\n   */\n  apiCallEvent: function apiCallEvent(request) {\n    var api = request.service.api.operations[request.operation];\n    var monitoringEvent = {\n      Type: 'ApiCall',\n      Api: api ? api.name : request.operation,\n      Version: 1,\n      Service: request.service.api.serviceId || request.service.api.endpointPrefix,\n      Region: request.httpRequest.region,\n      MaxRetriesExceeded: 0,\n      UserAgent: request.httpRequest.getUserAgent(),\n    };\n    var response = request.response;\n    if (response.httpResponse.statusCode) {\n      monitoringEvent.FinalHttpStatusCode = response.httpResponse.statusCode;\n    }\n    if (response.error) {\n      var error = response.error;\n      var statusCode = response.httpResponse.statusCode;\n      if (statusCode > 299) {\n        if (error.code) monitoringEvent.FinalAwsException = error.code;\n        if (error.message) monitoringEvent.FinalAwsExceptionMessage = error.message;\n      } else {\n        if (error.code || error.name) monitoringEvent.FinalSdkException = error.code || error.name;\n        if (error.message) monitoringEvent.FinalSdkExceptionMessage = error.message;\n      }\n    }\n    return monitoringEvent;\n  },\n\n  /**\n   * Event recording metrics for an API call attempt.\n   * @returns {object} a subset of api call attempt metrics\n   * @api private\n   */\n  apiAttemptEvent: function apiAttemptEvent(request) {\n    var api = request.service.api.operations[request.operation];\n    var monitoringEvent = {\n      Type: 'ApiCallAttempt',\n      Api: api ? api.name : request.operation,\n      Version: 1,\n      Service: request.service.api.serviceId || request.service.api.endpointPrefix,\n      Fqdn: request.httpRequest.endpoint.hostname,\n      UserAgent: request.httpRequest.getUserAgent(),\n    };\n    var response = request.response;\n    if (response.httpResponse.statusCode) {\n      monitoringEvent.HttpStatusCode = response.httpResponse.statusCode;\n    }\n    if (\n      !request._unAuthenticated &&\n      request.service.config.credentials &&\n      request.service.config.credentials.accessKeyId\n    ) {\n      monitoringEvent.AccessKey = request.service.config.credentials.accessKeyId;\n    }\n    if (!response.httpResponse.headers) return monitoringEvent;\n    if (request.httpRequest.headers['x-amz-security-token']) {\n      monitoringEvent.SessionToken = request.httpRequest.headers['x-amz-security-token'];\n    }\n    if (response.httpResponse.headers['x-amzn-requestid']) {\n      monitoringEvent.XAmznRequestId = response.httpResponse.headers['x-amzn-requestid'];\n    }\n    if (response.httpResponse.headers['x-amz-request-id']) {\n      monitoringEvent.XAmzRequestId = response.httpResponse.headers['x-amz-request-id'];\n    }\n    if (response.httpResponse.headers['x-amz-id-2']) {\n      monitoringEvent.XAmzId2 = response.httpResponse.headers['x-amz-id-2'];\n    }\n    return monitoringEvent;\n  },\n\n  /**\n   * Add metrics of failed request.\n   * @api private\n   */\n  attemptFailEvent: function attemptFailEvent(request) {\n    var monitoringEvent = this.apiAttemptEvent(request);\n    var response = request.response;\n    var error = response.error;\n    if (response.httpResponse.statusCode > 299 ) {\n      if (error.code) monitoringEvent.AwsException = error.code;\n      if (error.message) monitoringEvent.AwsExceptionMessage = error.message;\n    } else {\n      if (error.code || error.name) monitoringEvent.SdkException = error.code || error.name;\n      if (error.message) monitoringEvent.SdkExceptionMessage = error.message;\n    }\n    return monitoringEvent;\n  },\n\n  /**\n   * Attach listeners to request object to fetch metrics of each request\n   * and emit data object through \\'ApiCall\\' and \\'ApiCallAttempt\\' events.\n   * @api private\n   */\n  attachMonitoringEmitter: function attachMonitoringEmitter(request) {\n    var attemptTimestamp; //timestamp marking the beginning of a request attempt\n    var attemptStartRealTime; //Start time of request attempt. Used to calculating attemptLatency\n    var attemptLatency; //latency from request sent out to http response reaching SDK\n    var callStartRealTime; //Start time of API call. Used to calculating API call latency\n    var attemptCount = 0; //request.retryCount is not reliable here\n    var region; //region cache region for each attempt since it can be updated in plase (e.g. s3)\n    var callTimestamp; //timestamp when the request is created\n    var self = this;\n    var addToHead = true;\n\n    request.on('validate', function () {\n      callStartRealTime = AWS.util.realClock.now();\n      callTimestamp = Date.now();\n    }, addToHead);\n    request.on('sign', function () {\n      attemptStartRealTime = AWS.util.realClock.now();\n      attemptTimestamp = Date.now();\n      region = request.httpRequest.region;\n      attemptCount++;\n    }, addToHead);\n    request.on('validateResponse', function() {\n      attemptLatency = Math.round(AWS.util.realClock.now() - attemptStartRealTime);\n    });\n    request.addNamedListener('API_CALL_ATTEMPT', 'success', function API_CALL_ATTEMPT() {\n      var apiAttemptEvent = self.apiAttemptEvent(request);\n      apiAttemptEvent.Timestamp = attemptTimestamp;\n      apiAttemptEvent.AttemptLatency = attemptLatency >= 0 ? attemptLatency : 0;\n      apiAttemptEvent.Region = region;\n      self.emit('apiCallAttempt', [apiAttemptEvent]);\n    });\n    request.addNamedListener('API_CALL_ATTEMPT_RETRY', 'retry', function API_CALL_ATTEMPT_RETRY() {\n      var apiAttemptEvent = self.attemptFailEvent(request);\n      apiAttemptEvent.Timestamp = attemptTimestamp;\n      //attemptLatency may not be available if fail before response\n      attemptLatency = attemptLatency ||\n        Math.round(AWS.util.realClock.now() - attemptStartRealTime);\n      apiAttemptEvent.AttemptLatency = attemptLatency >= 0 ? attemptLatency : 0;\n      apiAttemptEvent.Region = region;\n      self.emit('apiCallAttempt', [apiAttemptEvent]);\n    });\n    request.addNamedListener('API_CALL', 'complete', function API_CALL() {\n      var apiCallEvent = self.apiCallEvent(request);\n      apiCallEvent.AttemptCount = attemptCount;\n      if (apiCallEvent.AttemptCount <= 0) return;\n      apiCallEvent.Timestamp = callTimestamp;\n      var latency = Math.round(AWS.util.realClock.now() - callStartRealTime);\n      apiCallEvent.Latency = latency >= 0 ? latency : 0;\n      var response = request.response;\n      if (\n        typeof response.retryCount === 'number' &&\n        typeof response.maxRetries === 'number' &&\n        (response.retryCount >= response.maxRetries)\n      ) {\n        apiCallEvent.MaxRetriesExceeded = 1;\n      }\n      self.emit('apiCall', [apiCallEvent]);\n    });\n  },\n\n  /**\n   * Override this method to setup any custom request listeners for each\n   * new request to the service.\n   *\n   * @method_abstract This is an abstract method.\n   */\n  setupRequestListeners: function setupRequestListeners(request) {\n  },\n\n  /**\n   * Gets the signer class for a given request\n   * @api private\n   */\n  getSignerClass: function getSignerClass(request) {\n    var version;\n    // get operation authtype if present\n    var operation = null;\n    var authtype = '';\n    if (request) {\n      var operations = request.service.api.operations || {};\n      operation = operations[request.operation] || null;\n      authtype = operation ? operation.authtype : '';\n    }\n    if (this.config.signatureVersion) {\n      version = this.config.signatureVersion;\n    } else if (authtype === 'v4' || authtype === 'v4-unsigned-body') {\n      version = 'v4';\n    } else {\n      version = this.api.signatureVersion;\n    }\n    return AWS.Signers.RequestSigner.getVersion(version);\n  },\n\n  /**\n   * @api private\n   */\n  serviceInterface: function serviceInterface() {\n    switch (this.api.protocol) {\n      case 'ec2': return AWS.EventListeners.Query;\n      case 'query': return AWS.EventListeners.Query;\n      case 'json': return AWS.EventListeners.Json;\n      case 'rest-json': return AWS.EventListeners.RestJson;\n      case 'rest-xml': return AWS.EventListeners.RestXml;\n    }\n    if (this.api.protocol) {\n      throw new Error('Invalid service `protocol\\' ' +\n        this.api.protocol + ' in API config');\n    }\n  },\n\n  /**\n   * @api private\n   */\n  successfulResponse: function successfulResponse(resp) {\n    return resp.httpResponse.statusCode < 300;\n  },\n\n  /**\n   * How many times a failed request should be retried before giving up.\n   * the defaultRetryCount can be overriden by service classes.\n   *\n   * @api private\n   */\n  numRetries: function numRetries() {\n    if (this.config.maxRetries !== undefined) {\n      return this.config.maxRetries;\n    } else {\n      return this.defaultRetryCount;\n    }\n  },\n\n  /**\n   * @api private\n   */\n  retryDelays: function retryDelays(retryCount) {\n    return AWS.util.calculateRetryDelay(retryCount, this.config.retryDelayOptions);\n  },\n\n  /**\n   * @api private\n   */\n  retryableError: function retryableError(error) {\n    if (this.timeoutError(error)) return true;\n    if (this.networkingError(error)) return true;\n    if (this.expiredCredentialsError(error)) return true;\n    if (this.throttledError(error)) return true;\n    if (error.statusCode >= 500) return true;\n    return false;\n  },\n\n  /**\n   * @api private\n   */\n  networkingError: function networkingError(error) {\n    return error.code === 'NetworkingError';\n  },\n\n  /**\n   * @api private\n   */\n  timeoutError: function timeoutError(error) {\n    return error.code === 'TimeoutError';\n  },\n\n  /**\n   * @api private\n   */\n  expiredCredentialsError: function expiredCredentialsError(error) {\n    // TODO : this only handles *one* of the expired credential codes\n    return (error.code === 'ExpiredTokenException');\n  },\n\n  /**\n   * @api private\n   */\n  clockSkewError: function clockSkewError(error) {\n    switch (error.code) {\n      case 'RequestTimeTooSkewed':\n      case 'RequestExpired':\n      case 'InvalidSignatureException':\n      case 'SignatureDoesNotMatch':\n      case 'AuthFailure':\n      case 'RequestInTheFuture':\n        return true;\n      default: return false;\n    }\n  },\n\n  /**\n   * @api private\n   */\n  getSkewCorrectedDate: function getSkewCorrectedDate() {\n    return new Date(Date.now() + this.config.systemClockOffset);\n  },\n\n  /**\n   * @api private\n   */\n  applyClockOffset: function applyClockOffset(newServerTime) {\n    if (newServerTime) {\n      this.config.systemClockOffset = newServerTime - Date.now();\n    }\n  },\n\n  /**\n   * @api private\n   */\n  isClockSkewed: function isClockSkewed(newServerTime) {\n    if (newServerTime) {\n      return Math.abs(this.getSkewCorrectedDate().getTime() - newServerTime) >= 30000;\n    }\n  },\n\n  /**\n   * @api private\n   */\n  throttledError: function throttledError(error) {\n    // this logic varies between services\n    switch (error.code) {\n      case 'ProvisionedThroughputExceededException':\n      case 'Throttling':\n      case 'ThrottlingException':\n      case 'RequestLimitExceeded':\n      case 'RequestThrottled':\n      case 'RequestThrottledException':\n      case 'TooManyRequestsException':\n      case 'TransactionInProgressException': //dynamodb\n        return true;\n      default:\n        return false;\n    }\n  },\n\n  /**\n   * @api private\n   */\n  endpointFromTemplate: function endpointFromTemplate(endpoint) {\n    if (typeof endpoint !== 'string') return endpoint;\n\n    var e = endpoint;\n    e = e.replace(/\\{service\\}/g, this.api.endpointPrefix);\n    e = e.replace(/\\{region\\}/g, this.config.region);\n    e = e.replace(/\\{scheme\\}/g, this.config.sslEnabled ? 'https' : 'http');\n    return e;\n  },\n\n  /**\n   * @api private\n   */\n  setEndpoint: function setEndpoint(endpoint) {\n    this.endpoint = new AWS.Endpoint(endpoint, this.config);\n  },\n\n  /**\n   * @api private\n   */\n  paginationConfig: function paginationConfig(operation, throwException) {\n    var paginator = this.api.operations[operation].paginator;\n    if (!paginator) {\n      if (throwException) {\n        var e = new Error();\n        throw AWS.util.error(e, 'No pagination configuration for ' + operation);\n      }\n      return null;\n    }\n\n    return paginator;\n  }\n});\n\nAWS.util.update(AWS.Service, {\n\n  /**\n   * Adds one method for each operation described in the api configuration\n   *\n   * @api private\n   */\n  defineMethods: function defineMethods(svc) {\n    AWS.util.each(svc.prototype.api.operations, function iterator(method) {\n      if (svc.prototype[method]) return;\n      var operation = svc.prototype.api.operations[method];\n      if (operation.authtype === 'none') {\n        svc.prototype[method] = function (params, callback) {\n          return this.makeUnauthenticatedRequest(method, params, callback);\n        };\n      } else {\n        svc.prototype[method] = function (params, callback) {\n          return this.makeRequest(method, params, callback);\n        };\n      }\n    });\n  },\n\n  /**\n   * Defines a new Service class using a service identifier and list of versions\n   * including an optional set of features (functions) to apply to the class\n   * prototype.\n   *\n   * @param serviceIdentifier [String] the identifier for the service\n   * @param versions [Array<String>] a list of versions that work with this\n   *   service\n   * @param features [Object] an object to attach to the prototype\n   * @return [Class<Service>] the service class defined by this function.\n   */\n  defineService: function defineService(serviceIdentifier, versions, features) {\n    AWS.Service._serviceMap[serviceIdentifier] = true;\n    if (!Array.isArray(versions)) {\n      features = versions;\n      versions = [];\n    }\n\n    var svc = inherit(AWS.Service, features || {});\n\n    if (typeof serviceIdentifier === 'string') {\n      AWS.Service.addVersions(svc, versions);\n\n      var identifier = svc.serviceIdentifier || serviceIdentifier;\n      svc.serviceIdentifier = identifier;\n    } else { // defineService called with an API\n      svc.prototype.api = serviceIdentifier;\n      AWS.Service.defineMethods(svc);\n    }\n    AWS.SequentialExecutor.call(this.prototype);\n    //util.clientSideMonitoring is only available in node\n    if (!this.prototype.publisher && AWS.util.clientSideMonitoring) {\n      var Publisher = AWS.util.clientSideMonitoring.Publisher;\n      var configProvider = AWS.util.clientSideMonitoring.configProvider;\n      var publisherConfig = configProvider();\n      this.prototype.publisher = new Publisher(publisherConfig);\n      if (publisherConfig.enabled) {\n        //if csm is enabled in environment, SDK should send all metrics\n        AWS.Service._clientSideMonitoring = true;\n      }\n    }\n    AWS.SequentialExecutor.call(svc.prototype);\n    AWS.Service.addDefaultMonitoringListeners(svc.prototype);\n    return svc;\n  },\n\n  /**\n   * @api private\n   */\n  addVersions: function addVersions(svc, versions) {\n    if (!Array.isArray(versions)) versions = [versions];\n\n    svc.services = svc.services || {};\n    for (var i = 0; i < versions.length; i++) {\n      if (svc.services[versions[i]] === undefined) {\n        svc.services[versions[i]] = null;\n      }\n    }\n\n    svc.apiVersions = Object.keys(svc.services).sort();\n  },\n\n  /**\n   * @api private\n   */\n  defineServiceApi: function defineServiceApi(superclass, version, apiConfig) {\n    var svc = inherit(superclass, {\n      serviceIdentifier: superclass.serviceIdentifier\n    });\n\n    function setApi(api) {\n      if (api.isApi) {\n        svc.prototype.api = api;\n      } else {\n        svc.prototype.api = new Api(api);\n      }\n    }\n\n    if (typeof version === 'string') {\n      if (apiConfig) {\n        setApi(apiConfig);\n      } else {\n        try {\n          setApi(AWS.apiLoader(superclass.serviceIdentifier, version));\n        } catch (err) {\n          throw AWS.util.error(err, {\n            message: 'Could not find API configuration ' +\n              superclass.serviceIdentifier + '-' + version\n          });\n        }\n      }\n      if (!Object.prototype.hasOwnProperty.call(superclass.services, version)) {\n        superclass.apiVersions = superclass.apiVersions.concat(version).sort();\n      }\n      superclass.services[version] = svc;\n    } else {\n      setApi(version);\n    }\n\n    AWS.Service.defineMethods(svc);\n    return svc;\n  },\n\n  /**\n   * @api private\n   */\n  hasService: function(identifier) {\n    return Object.prototype.hasOwnProperty.call(AWS.Service._serviceMap, identifier);\n  },\n\n  /**\n   * @param attachOn attach default monitoring listeners to object\n   *\n   * Each monitoring event should be emitted from service client to service constructor prototype and then\n   * to global service prototype like bubbling up. These default monitoring events listener will transfer\n   * the monitoring events to the upper layer.\n   * @api private\n   */\n  addDefaultMonitoringListeners: function addDefaultMonitoringListeners(attachOn) {\n    attachOn.addNamedListener('MONITOR_EVENTS_BUBBLE', 'apiCallAttempt', function EVENTS_BUBBLE(event) {\n      var baseClass = Object.getPrototypeOf(attachOn);\n      if (baseClass._events) baseClass.emit('apiCallAttempt', [event]);\n    });\n    attachOn.addNamedListener('CALL_EVENTS_BUBBLE', 'apiCall', function CALL_EVENTS_BUBBLE(event) {\n      var baseClass = Object.getPrototypeOf(attachOn);\n      if (baseClass._events) baseClass.emit('apiCall', [event]);\n    });\n  },\n\n  /**\n   * @api private\n   */\n  _serviceMap: {}\n});\n\nAWS.util.mixin(AWS.Service, AWS.SequentialExecutor);\n\n/**\n * @api private\n */\nmodule.exports = AWS.Service;\n","var util = require('./util');\nvar regionConfig = require('./region_config_data.json');\n\nfunction generateRegionPrefix(region) {\n  if (!region) return null;\n\n  var parts = region.split('-');\n  if (parts.length < 3) return null;\n  return parts.slice(0, parts.length - 2).join('-') + '-*';\n}\n\nfunction derivedKeys(service) {\n  var region = service.config.region;\n  var regionPrefix = generateRegionPrefix(region);\n  var endpointPrefix = service.api.endpointPrefix;\n\n  return [\n    [region, endpointPrefix],\n    [regionPrefix, endpointPrefix],\n    [region, '*'],\n    [regionPrefix, '*'],\n    ['*', endpointPrefix],\n    ['*', '*']\n  ].map(function(item) {\n    return item[0] && item[1] ? item.join('/') : null;\n  });\n}\n\nfunction applyConfig(service, config) {\n  util.each(config, function(key, value) {\n    if (key === 'globalEndpoint') return;\n    if (service.config[key] === undefined || service.config[key] === null) {\n      service.config[key] = value;\n    }\n  });\n}\n\nfunction configureEndpoint(service) {\n  var keys = derivedKeys(service);\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (!key) continue;\n\n    if (Object.prototype.hasOwnProperty.call(regionConfig.rules, key)) {\n      var config = regionConfig.rules[key];\n      if (typeof config === 'string') {\n        config = regionConfig.patterns[config];\n      }\n\n      // set dualstack endpoint\n      if (service.config.useDualstack && util.isDualstackAvailable(service)) {\n        config = util.copy(config);\n        config.endpoint = '{service}.dualstack.{region}.amazonaws.com';\n      }\n\n      // set global endpoint\n      service.isGlobalEndpoint = !!config.globalEndpoint;\n\n      // signature version\n      if (!config.signatureVersion) config.signatureVersion = 'v4';\n\n      // merge config\n      applyConfig(service, config);\n      return;\n    }\n  }\n}\n\n/**\n * @api private\n */\nmodule.exports = configureEndpoint;\n","//! moment.js\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks () {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback (callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return input != null && Object.prototype.toString.call(input) === '[object Object]';\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return (Object.getOwnPropertyNames(obj).length === 0);\n        } else {\n            var k;\n            for (k in obj) {\n                if (obj.hasOwnProperty(k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n    }\n\n    function isDate(input) {\n        return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n    }\n\n    function map(arr, fn) {\n        var res = [], i;\n        for (i = 0; i < arr.length; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty           : false,\n            unusedTokens    : [],\n            unusedInput     : [],\n            overflow        : -2,\n            charsLeftOver   : 0,\n            nullInput       : false,\n            invalidMonth    : null,\n            invalidFormat   : false,\n            userInvalidated : false,\n            iso             : false,\n            parsedDateParts : [],\n            meridiem        : null,\n            rfc2822         : false,\n            weekdayMismatch : false\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this);\n            var len = t.length >>> 0;\n\n            for (var i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m);\n            var parsedParts = some.call(flags.parsedDateParts, function (i) {\n                return i != null;\n            });\n            var isNowValid = !isNaN(m._d.getTime()) &&\n                flags.overflow < 0 &&\n                !flags.empty &&\n                !flags.invalidMonth &&\n                !flags.invalidWeekday &&\n                !flags.weekdayMismatch &&\n                !flags.nullInput &&\n                !flags.invalidFormat &&\n                !flags.userInvalidated &&\n                (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                isNowValid = isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n\n            if (Object.isFrozen == null || !Object.isFrozen(m)) {\n                m._isValid = isNowValid;\n            }\n            else {\n                return isNowValid;\n            }\n        }\n        return m._isValid;\n    }\n\n    function createInvalid (flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        }\n        else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = hooks.momentProperties = [];\n\n    function copyConfig(to, from) {\n        var i, prop, val;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentProperties.length > 0) {\n            for (i = 0; i < momentProperties.length; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    var updateInProgress = false;\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment (obj) {\n        return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n    }\n\n    function absFloor (number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if ((dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    function warn(msg) {\n        if (hooks.suppressDeprecationWarnings === false &&\n                (typeof console !==  'undefined') && console.warn) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [];\n                var arg;\n                for (var i = 0; i < arguments.length; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (var key in arguments[0]) {\n                            arg += key + ': ' + arguments[0][key] + ', ';\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n    }\n\n    function set (config) {\n        var prop, i;\n        for (i in config) {\n            prop = config[i];\n            if (isFunction(prop)) {\n                this[i] = prop;\n            } else {\n                this['_' + i] = prop;\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' + (/\\d{1,2}/).source);\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig), prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (hasOwnProp(parentConfig, prop) &&\n                    !hasOwnProp(childConfig, prop) &&\n                    isObject(parentConfig[prop])) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i, res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay : '[Today at] LT',\n        nextDay : '[Tomorrow at] LT',\n        nextWeek : 'dddd [at] LT',\n        lastDay : '[Yesterday at] LT',\n        lastWeek : '[Last] dddd [at] LT',\n        sameElse : 'L'\n    };\n\n    function calendar (key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    var defaultLongDateFormat = {\n        LTS  : 'h:mm:ss A',\n        LT   : 'h:mm A',\n        L    : 'MM/DD/YYYY',\n        LL   : 'MMMM D, YYYY',\n        LLL  : 'MMMM D, YYYY h:mm A',\n        LLLL : 'dddd, MMMM D, YYYY h:mm A'\n    };\n\n    function longDateFormat (key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n            return val.slice(1);\n        });\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate () {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d';\n    var defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal (number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future : 'in %s',\n        past   : '%s ago',\n        s  : 'a few seconds',\n        ss : '%d seconds',\n        m  : 'a minute',\n        mm : '%d minutes',\n        h  : 'an hour',\n        hh : '%d hours',\n        d  : 'a day',\n        dd : '%d days',\n        M  : 'a month',\n        MM : '%d months',\n        y  : 'a year',\n        yy : '%d years'\n    };\n\n    function relativeTime (number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return (isFunction(output)) ?\n            output(number, withoutSuffix, string, isFuture) :\n            output.replace(/%d/i, number);\n    }\n\n    function pastFuture (diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias (unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {};\n\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n    }\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [];\n        for (var u in unitsObj) {\n            units.push({unit: u, priority: priorities[u]});\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n    }\n\n    var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\n    var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\n    var formatFunctions = {};\n\n    var formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken (token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(func.apply(this, arguments), token);\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens), i, length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '', i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var match1         = /\\d/;            //       0 - 9\n    var match2         = /\\d\\d/;          //      00 - 99\n    var match3         = /\\d{3}/;         //     000 - 999\n    var match4         = /\\d{4}/;         //    0000 - 9999\n    var match6         = /[+-]?\\d{6}/;    // -999999 - 999999\n    var match1to2      = /\\d\\d?/;         //       0 - 99\n    var match3to4      = /\\d\\d\\d\\d?/;     //     999 - 9999\n    var match5to6      = /\\d\\d\\d\\d\\d\\d?/; //   99999 - 999999\n    var match1to3      = /\\d{1,3}/;       //       0 - 999\n    var match1to4      = /\\d{1,4}/;       //       0 - 9999\n    var match1to6      = /[+-]?\\d{1,6}/;  // -999999 - 999999\n\n    var matchUnsigned  = /\\d+/;           //       0 - inf\n    var matchSigned    = /[+-]?\\d+/;      //    -inf - inf\n\n    var matchOffset    = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n    var matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\n    var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n    // any word (or two) characters or numbers including two/three word month in arabic.\n    // includes scottish gaelic two word and hyphenated months\n    var matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\n\n    var regexes = {};\n\n    function addRegexToken (token, regex, strictRegex) {\n        regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n            return (isStrict && strictRegex) ? strictRegex : regex;\n        };\n    }\n\n    function getParseRegexForToken (token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n            return p1 || p2 || p3 || p4;\n        }));\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken (token, callback) {\n        var i, func = callback;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        for (i = 0; i < token.length; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken (token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0;\n    var MONTH = 1;\n    var DATE = 2;\n    var HOUR = 3;\n    var MINUTE = 4;\n    var SECOND = 5;\n    var MILLISECOND = 6;\n    var WEEK = 7;\n    var WEEKDAY = 8;\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? '' + y : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY',   4],       0, 'year');\n    addFormatToken(0, ['YYYYY',  5],       0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PRIORITIES\n\n    addUnitPriority('year', 1);\n\n    // PARSING\n\n    addRegexToken('Y',      matchSigned);\n    addRegexToken('YY',     match1to2, match2);\n    addRegexToken('YYYY',   match1to4, match4);\n    addRegexToken('YYYYY',  match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear () {\n        return isLeapYear(this.year());\n    }\n\n    function makeGetSet (unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get (mom, unit) {\n        return mom.isValid() ?\n            mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n    }\n\n    function set$1 (mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n            if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n            }\n            else {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function stringGet (units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n\n    function stringSet (units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units);\n            for (var i = 0; i < prioritized.length; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PRIORITY\n\n    addUnitPriority('month', 8);\n\n    // PARSING\n\n    addRegexToken('M',    match1to2);\n    addRegexToken('MM',   match1to2, match2);\n    addRegexToken('MMM',  function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n    function localeMonths (m, format) {\n        if (!m) {\n            return isArray(this._months) ? this._months :\n                this._months['standalone'];\n        }\n        return isArray(this._months) ? this._months[m.month()] :\n            this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n    }\n\n    var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n    function localeMonthsShort (m, format) {\n        if (!m) {\n            return isArray(this._monthsShort) ? this._monthsShort :\n                this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n            this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i, ii, mom, llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse (monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n                this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth (mom, value) {\n        var dayOfMonth;\n\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth (value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth () {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    var defaultMonthsShortRegex = matchWord;\n    function monthsShortRegex (isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict ?\n                this._monthsShortStrictRegex : this._monthsShortRegex;\n        }\n    }\n\n    var defaultMonthsRegex = matchWord;\n    function monthsRegex (isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict ?\n                this._monthsStrictRegex : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse () {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [], longPieces = [], mixedPieces = [],\n            i, mom;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortPieces.push(this.monthsShort(mom, ''));\n            longPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.monthsShort(mom, ''));\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 12; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n        this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n    }\n\n    function createDate (y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate (y) {\n        var date;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            var args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear, resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek, resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PRIORITIES\n\n    addUnitPriority('week', 5);\n    addUnitPriority('isoWeek', 5);\n\n    // PARSING\n\n    addRegexToken('w',  match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W',  match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n        week[token.substr(0, 1)] = toInt(input);\n    });\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek (mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek () {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear () {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek (input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek (input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PRIORITY\n    addUnitPriority('day', 11);\n    addUnitPriority('weekday', 11);\n    addUnitPriority('isoWeekday', 11);\n\n    // PARSING\n\n    addRegexToken('d',    match1to2);\n    addRegexToken('e',    match1to2);\n    addRegexToken('E',    match1to2);\n    addRegexToken('dd',   function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd',   function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd',   function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays (ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n    function localeWeekdays (m, format) {\n        var weekdays = isArray(this._weekdays) ? this._weekdays :\n            this._weekdays[(m && m !== true && this._weekdays.isFormat.test(format)) ? 'format' : 'standalone'];\n        return (m === true) ? shiftWeekdays(weekdays, this._week.dow)\n            : (m) ? weekdays[m.day()] : weekdays;\n    }\n\n    var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n    function localeWeekdaysShort (m) {\n        return (m === true) ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n    }\n\n    var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n    function localeWeekdaysMin (m) {\n        return (m === true) ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse (weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$', 'i');\n                this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$', 'i');\n                this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$', 'i');\n            }\n            if (!this._weekdaysParse[i]) {\n                regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    var defaultWeekdaysRegex = matchWord;\n    function weekdaysRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict ?\n                this._weekdaysStrictRegex : this._weekdaysRegex;\n        }\n    }\n\n    var defaultWeekdaysShortRegex = matchWord;\n    function weekdaysShortRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict ?\n                this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n        }\n    }\n\n    var defaultWeekdaysMinRegex = matchWord;\n    function weekdaysMinRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict ?\n                this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n        }\n    }\n\n\n    function computeWeekdaysParse () {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n            i, mom, minp, shortp, longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = this.weekdaysMin(mom, '');\n            shortp = this.weekdaysShort(mom, '');\n            longp = this.weekdays(mom, '');\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 7; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n        this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n        this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2);\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2);\n    });\n\n    function meridiem (token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PRIORITY\n    addUnitPriority('hour', 13);\n\n    // PARSING\n\n    function matchMeridiem (isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a',  matchMeridiem);\n    addRegexToken('A',  matchMeridiem);\n    addRegexToken('H',  match1to2);\n    addRegexToken('h',  match1to2);\n    addRegexToken('k',  match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4;\n        var pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4;\n        var pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM (input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return ((input + '').toLowerCase().charAt(0) === 'p');\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n    function localeMeridiem (hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n\n    // MOMENTS\n\n    // Setting the hour should keep the time, because the user explicitly\n    // specified which hour they want. So trying to maintain the same hour (in\n    // a new timezone) makes sense. Adding/subtracting hours does not follow\n    // this rule.\n    var getSetHour = makeGetSet('Hours', true);\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse\n    };\n\n    // internal storage for locale config files\n    var locales = {};\n    var localeFamilies = {};\n    var globalLocale;\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0, j, next, locale, split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (!locales[name] && (typeof module !== 'undefined') &&\n                module && module.exports) {\n            try {\n                oldLocale = globalLocale._abbr;\n                var aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {}\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale (key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            }\n            else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            }\n            else {\n                if ((typeof console !==  'undefined') && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn('Locale ' + key +  ' not found. Did you forget to load it?');\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale (name, config) {\n        if (config !== null) {\n            var locale, parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple('defineLocaleOverride',\n                        'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale, tmpLocale, parentConfig = baseConfig;\n            // MERGE\n            tmpLocale = loadLocale(name);\n            if (tmpLocale != null) {\n                parentConfig = tmpLocale._config;\n            }\n            config = mergeConfigs(parentConfig, config);\n            locale = new Locale(config);\n            locale.parentLocale = locales[name];\n            locales[name] = locale;\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale (key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow (m) {\n        var overflow;\n        var a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :\n                a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n                a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n                a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :\n                a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :\n                a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n                -1;\n\n            if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray (config) {\n        var i, date, input = [], currentDate, expectedWeekday, yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (config._a[HOUR] === 24 &&\n                config._a[MINUTE] === 0 &&\n                config._a[SECOND] === 0 &&\n                config._a[MILLISECOND] === 0) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n        expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            var curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n    var basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\n    var tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\n    var isoDates = [\n        ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n        ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n        ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n        ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n        ['YYYY-DDD', /\\d{4}-\\d{3}/],\n        ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n        ['YYYYYYMMDD', /[+-]\\d{10}/],\n        ['YYYYMMDD', /\\d{8}/],\n        // YYYYMM is NOT allowed by the standard\n        ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n        ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n        ['YYYYDDD', /\\d{7}/]\n    ];\n\n    // iso time formats and regexes\n    var isoTimes = [\n        ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n        ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n        ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n        ['HH:mm', /\\d\\d:\\d\\d/],\n        ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n        ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n        ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n        ['HHmm', /\\d\\d\\d\\d/],\n        ['HH', /\\d\\d/]\n    ];\n\n    var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n    // date from iso format\n    function configFromISO(config) {\n        var i, l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime, dateFormat, timeFormat, tzFormat;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n\n            for (i = 0, l = isoDates.length; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimes.length; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n    var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;\n\n    function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10)\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    var obsOffsets = {\n        UT: 0,\n        GMT: 0,\n        EDT: -4 * 60,\n        EST: -5 * 60,\n        CDT: -5 * 60,\n        CST: -6 * 60,\n        MDT: -6 * 60,\n        MST: -7 * 60,\n        PDT: -7 * 60,\n        PST: -8 * 60\n    };\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10);\n            var m = hm % 100, h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i));\n        if (match) {\n            var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from iso format or fallback\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        // Final attempt, use Input Fallback\n        hooks.createFromInputFallback(config);\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n        'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n        'discouraged and will be removed in an upcoming major release. Please refer to ' +\n        'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i, parsedInput, tokens, token, skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0;\n\n        tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n        for (i = 0; i < tokens.length; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n            // console.log('token', token, 'parsedInput', parsedInput,\n            //         'regex', getParseRegexForToken(token, config));\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                }\n                else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            }\n            else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n\n    function meridiemFixWrap (locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n\n            scoreToBeat,\n            i,\n            currentScore;\n\n        if (config._f.length === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < config._f.length; i++) {\n            currentScore = 0;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (!isValid(tempConfig)) {\n                continue;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (scoreToBeat == null || currentScore < scoreToBeat) {\n                scoreToBeat = currentScore;\n                bestMoment = tempConfig;\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i);\n        config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n            return obj && parseInt(obj, 10);\n        });\n\n        configFromArray(config);\n    }\n\n    function createFromConfig (config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig (config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({nullInput: true});\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        }  else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC (input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if ((isObject(input) && isObjectEmpty(input)) ||\n                (isArray(input) && input.length === 0)) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n        'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other < this ? this : other;\n            } else {\n                return createInvalid();\n            }\n        }\n    );\n\n    var prototypeMax = deprecate(\n        'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other > this ? this : other;\n            } else {\n                return createInvalid();\n            }\n        }\n    );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +(new Date());\n    };\n\n    var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\n    function isDurationValid(m) {\n        for (var key in m) {\n            if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n                return false;\n            }\n        }\n\n        var unitHasDecimal = false;\n        for (var i = 0; i < ordering.length; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration (duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds = +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days +\n            weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months +\n            quarters * 3 +\n            years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration (obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound (number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // FORMATTING\n\n    function offset (token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset();\n            var sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z',  matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher);\n\n        if (matches === null) {\n            return null;\n        }\n\n        var chunk   = matches[matches.length - 1] || [];\n        var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ?\n          0 :\n          parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset (m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset (input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone (input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC (keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal (keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset () {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            }\n            else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset (input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime () {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted () {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {};\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted = this.isValid() &&\n                compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal () {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset () {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc () {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\n    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n    // and further modified to allow for strings containing both week and day\n    var isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration (input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms : input._milliseconds,\n                d  : input._days,\n                M  : input._months\n            };\n        } else if (isNumber(input)) {\n            duration = {};\n            if (key) {\n                duration[key] = input;\n            } else {\n                duration.milliseconds = input;\n            }\n        } else if (!!(match = aspNetRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : 1;\n            duration = {\n                y  : 0,\n                d  : toInt(match[DATE])                         * sign,\n                h  : toInt(match[HOUR])                         * sign,\n                m  : toInt(match[MINUTE])                       * sign,\n                s  : toInt(match[SECOND])                       * sign,\n                ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n            };\n        } else if (!!(match = isoRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : 1;\n            duration = {\n                y : parseIso(match[2], sign),\n                M : parseIso(match[3], sign),\n                w : parseIso(match[4], sign),\n                d : parseIso(match[5], sign),\n                h : parseIso(match[6], sign),\n                m : parseIso(match[7], sign),\n                s : parseIso(match[8], sign)\n            };\n        } else if (duration == null) {// checks for null or undefined\n            duration = {};\n        } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n            diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso (inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months = other.month() - base.month() +\n            (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return {milliseconds: 0, months: 0};\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n                'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n                tmp = val; val = period; period = tmp;\n            }\n\n            val = typeof val === 'string' ? +val : val;\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract (mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add      = createAdder(1, 'add');\n    var subtract = createAdder(-1, 'subtract');\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6 ? 'sameElse' :\n                diff < -1 ? 'lastWeek' :\n                diff < 0 ? 'lastDay' :\n                diff < 1 ? 'sameDay' :\n                diff < 2 ? 'nextDay' :\n                diff < 7 ? 'nextWeek' : 'sameElse';\n    }\n\n    function calendar$1 (time, formats) {\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse';\n\n        var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n        return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n    }\n\n    function clone () {\n        return new Moment(this);\n    }\n\n    function isAfter (input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore (input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween (from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));\n    }\n\n    function isSame (input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n        }\n    }\n\n    function isSameOrAfter (input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore (input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff (input, units, asFloat) {\n        var that,\n            zoneDelta,\n            output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year': output = monthDiff(this, that) / 12; break;\n            case 'month': output = monthDiff(this, that); break;\n            case 'quarter': output = monthDiff(this, that) / 3; break;\n            case 'second': output = (this - that) / 1e3; break; // 1000\n            case 'minute': output = (this - that) / 6e4; break; // 1000 * 60\n            case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60\n            case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default: output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff (a, b) {\n        // difference in months\n        var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2, adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString () {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true;\n        var m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect () {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment';\n        var zone = '';\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        var prefix = '[' + func + '(\"]';\n        var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n        var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        var suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format (inputString) {\n        if (!inputString) {\n            inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from (time, withoutSuffix) {\n        if (this.isValid() &&\n                ((isMoment(time) && time.isValid()) ||\n                 createLocal(time).isValid())) {\n            return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow (withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to (time, withoutSuffix) {\n        if (this.isValid() &&\n                ((isMoment(time) && time.isValid()) ||\n                 createLocal(time).isValid())) {\n            return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow (withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale (key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData () {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000;\n    var MS_PER_MINUTE = 60 * MS_PER_SECOND;\n    var MS_PER_HOUR = 60 * MS_PER_MINUTE;\n    var MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return (dividend % divisor + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf (units) {\n        var time;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(this.year(), this.month() - this.month() % 3, 1);\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(this.year(), this.month(), this.date() - this.weekday());\n                break;\n            case 'isoWeek':\n                time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf (units) {\n        var time;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;\n                break;\n            case 'isoWeek':\n                time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf () {\n        return this._d.valueOf() - ((this._offset || 0) * 60000);\n    }\n\n    function unix () {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate () {\n        return new Date(this.valueOf());\n    }\n\n    function toArray () {\n        var m = this;\n        return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n    }\n\n    function toObject () {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds()\n        };\n    }\n\n    function toJSON () {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2 () {\n        return isValid(this);\n    }\n\n    function parsingFlags () {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt () {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict\n        };\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken (token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg',     'weekYear');\n    addWeekYearFormatToken('ggggg',    'weekYear');\n    addWeekYearFormatToken('GGGG',  'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PRIORITY\n\n    addUnitPriority('weekYear', 1);\n    addUnitPriority('isoWeekYear', 1);\n\n\n    // PARSING\n\n    addRegexToken('G',      matchSigned);\n    addRegexToken('g',      matchSigned);\n    addRegexToken('GG',     match1to2, match2);\n    addRegexToken('gg',     match1to2, match2);\n    addRegexToken('GGGG',   match1to4, match4);\n    addRegexToken('gggg',   match1to4, match4);\n    addRegexToken('GGGGG',  match1to6, match6);\n    addRegexToken('ggggg',  match1to6, match6);\n\n    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n        week[token.substr(0, 2)] = toInt(input);\n    });\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear (input) {\n        return getSetWeekYearHelper.call(this,\n                input,\n                this.week(),\n                this.weekday(),\n                this.localeData()._week.dow,\n                this.localeData()._week.doy);\n    }\n\n    function getSetISOWeekYear (input) {\n        return getSetWeekYearHelper.call(this,\n                input, this.isoWeek(), this.isoWeekday(), 1, 4);\n    }\n\n    function getISOWeeksInYear () {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getWeeksInYear () {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PRIORITY\n\n    addUnitPriority('quarter', 7);\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter (input) {\n        return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PRIORITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D',  match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict ?\n          (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n          locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PRIORITY\n    addUnitPriority('dayOfYear', 4);\n\n    // PARSING\n\n    addRegexToken('DDD',  match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear (input) {\n        var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n        return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PRIORITY\n\n    addUnitPriority('minute', 14);\n\n    // PARSING\n\n    addRegexToken('m',  match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PRIORITY\n\n    addUnitPriority('second', 15);\n\n    // PARSING\n\n    addRegexToken('s',  match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PRIORITY\n\n    addUnitPriority('millisecond', 16);\n\n    // PARSING\n\n    addRegexToken('S',    match1to3, match1);\n    addRegexToken('SS',   match1to3, match2);\n    addRegexToken('SSS',  match1to3, match3);\n\n    var token;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n    // MOMENTS\n\n    var getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z',  0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr () {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName () {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add               = add;\n    proto.calendar          = calendar$1;\n    proto.clone             = clone;\n    proto.diff              = diff;\n    proto.endOf             = endOf;\n    proto.format            = format;\n    proto.from              = from;\n    proto.fromNow           = fromNow;\n    proto.to                = to;\n    proto.toNow             = toNow;\n    proto.get               = stringGet;\n    proto.invalidAt         = invalidAt;\n    proto.isAfter           = isAfter;\n    proto.isBefore          = isBefore;\n    proto.isBetween         = isBetween;\n    proto.isSame            = isSame;\n    proto.isSameOrAfter     = isSameOrAfter;\n    proto.isSameOrBefore    = isSameOrBefore;\n    proto.isValid           = isValid$2;\n    proto.lang              = lang;\n    proto.locale            = locale;\n    proto.localeData        = localeData;\n    proto.max               = prototypeMax;\n    proto.min               = prototypeMin;\n    proto.parsingFlags      = parsingFlags;\n    proto.set               = stringSet;\n    proto.startOf           = startOf;\n    proto.subtract          = subtract;\n    proto.toArray           = toArray;\n    proto.toObject          = toObject;\n    proto.toDate            = toDate;\n    proto.toISOString       = toISOString;\n    proto.inspect           = inspect;\n    proto.toJSON            = toJSON;\n    proto.toString          = toString;\n    proto.unix              = unix;\n    proto.valueOf           = valueOf;\n    proto.creationData      = creationData;\n    proto.year       = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear    = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month       = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week           = proto.weeks        = getSetWeek;\n    proto.isoWeek        = proto.isoWeeks     = getSetISOWeek;\n    proto.weeksInYear    = getWeeksInYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.date       = getSetDayOfMonth;\n    proto.day        = proto.days             = getSetDayOfWeek;\n    proto.weekday    = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear  = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset            = getSetOffset;\n    proto.utc                  = setOffsetToUTC;\n    proto.local                = setOffsetToLocal;\n    proto.parseZone            = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST                = isDaylightSavingTime;\n    proto.isLocal              = isLocal;\n    proto.isUtcOffset          = isUtcOffset;\n    proto.isUtc                = isUtc;\n    proto.isUTC                = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n    proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n    proto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n    proto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n    proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n    function createUnix (input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone () {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat (string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar        = calendar;\n    proto$1.longDateFormat  = longDateFormat;\n    proto$1.invalidDate     = invalidDate;\n    proto$1.ordinal         = ordinal;\n    proto$1.preparse        = preParsePostFormat;\n    proto$1.postformat      = preParsePostFormat;\n    proto$1.relativeTime    = relativeTime;\n    proto$1.pastFuture      = pastFuture;\n    proto$1.set             = set;\n\n    proto$1.months            =        localeMonths;\n    proto$1.monthsShort       =        localeMonthsShort;\n    proto$1.monthsParse       =        localeMonthsParse;\n    proto$1.monthsRegex       = monthsRegex;\n    proto$1.monthsShortRegex  = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays       =        localeWeekdays;\n    proto$1.weekdaysMin    =        localeWeekdaysMin;\n    proto$1.weekdaysShort  =        localeWeekdaysShort;\n    proto$1.weekdaysParse  =        localeWeekdaysParse;\n\n    proto$1.weekdaysRegex       =        weekdaysRegex;\n    proto$1.weekdaysShortRegex  =        weekdaysShortRegex;\n    proto$1.weekdaysMinRegex    =        weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1 (format, index, field, setter) {\n        var locale = getLocale();\n        var utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl (format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl (localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0;\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths (format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort (format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (toInt(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n    hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\n    var mathAbs = Math.abs;\n\n    function abs () {\n        var data           = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days         = mathAbs(this._days);\n        this._months       = mathAbs(this._months);\n\n        data.milliseconds  = mathAbs(data.milliseconds);\n        data.seconds       = mathAbs(data.seconds);\n        data.minutes       = mathAbs(data.minutes);\n        data.hours         = mathAbs(data.hours);\n        data.months        = mathAbs(data.months);\n        data.years         = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1 (duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days         += direction * other._days;\n        duration._months       += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1 (input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1 (input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil (number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble () {\n        var milliseconds = this._milliseconds;\n        var days         = this._days;\n        var months       = this._months;\n        var data         = this._data;\n        var seconds, minutes, hours, years, monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0))) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds           = absFloor(milliseconds / 1000);\n        data.seconds      = seconds % 60;\n\n        minutes           = absFloor(seconds / 60);\n        data.minutes      = minutes % 60;\n\n        hours             = absFloor(minutes / 60);\n        data.hours        = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days   = days;\n        data.months = months;\n        data.years  = years;\n\n        return this;\n    }\n\n    function daysToMonths (days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return days * 4800 / 146097;\n    }\n\n    function monthsToDays (months) {\n        // the reverse of daysToMonths\n        return months * 146097 / 4800;\n    }\n\n    function as (units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days;\n        var months;\n        var milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':   return months;\n                case 'quarter': return months / 3;\n                case 'year':    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week'   : return days / 7     + milliseconds / 6048e5;\n                case 'day'    : return days         + milliseconds / 864e5;\n                case 'hour'   : return days * 24    + milliseconds / 36e5;\n                case 'minute' : return days * 1440  + milliseconds / 6e4;\n                case 'second' : return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n                default: throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function valueOf$1 () {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs (alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms');\n    var asSeconds      = makeAs('s');\n    var asMinutes      = makeAs('m');\n    var asHours        = makeAs('h');\n    var asDays         = makeAs('d');\n    var asWeeks        = makeAs('w');\n    var asMonths       = makeAs('M');\n    var asQuarters     = makeAs('Q');\n    var asYears        = makeAs('y');\n\n    function clone$1 () {\n        return createDuration(this);\n    }\n\n    function get$2 (units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds');\n    var seconds      = makeGetter('seconds');\n    var minutes      = makeGetter('minutes');\n    var hours        = makeGetter('hours');\n    var days         = makeGetter('days');\n    var months       = makeGetter('months');\n    var years        = makeGetter('years');\n\n    function weeks () {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round;\n    var thresholds = {\n        ss: 44,         // a few seconds to seconds\n        s : 45,         // seconds to minute\n        m : 45,         // minutes to hour\n        h : 22,         // hours to day\n        d : 26,         // days to month\n        M : 11          // months to year\n    };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n        var duration = createDuration(posNegDuration).abs();\n        var seconds  = round(duration.as('s'));\n        var minutes  = round(duration.as('m'));\n        var hours    = round(duration.as('h'));\n        var days     = round(duration.as('d'));\n        var months   = round(duration.as('M'));\n        var years    = round(duration.as('y'));\n\n        var a = seconds <= thresholds.ss && ['s', seconds]  ||\n                seconds < thresholds.s   && ['ss', seconds] ||\n                minutes <= 1             && ['m']           ||\n                minutes < thresholds.m   && ['mm', minutes] ||\n                hours   <= 1             && ['h']           ||\n                hours   < thresholds.h   && ['hh', hours]   ||\n                days    <= 1             && ['d']           ||\n                days    < thresholds.d   && ['dd', days]    ||\n                months  <= 1             && ['M']           ||\n                months  < thresholds.M   && ['MM', months]  ||\n                years   <= 1             && ['y']           || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding (roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof(roundingFunction) === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold (threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize (withSuffix) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var locale = this.localeData();\n        var output = relativeTime$1(this, !withSuffix, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return ((x > 0) - (x < 0)) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000;\n        var days         = abs$1(this._days);\n        var months       = abs$1(this._months);\n        var minutes, hours, years;\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes           = absFloor(seconds / 60);\n        hours             = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years  = absFloor(months / 12);\n        months %= 12;\n\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        var Y = years;\n        var M = months;\n        var D = days;\n        var h = hours;\n        var m = minutes;\n        var s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n        var total = this.asSeconds();\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        var totalSign = total < 0 ? '-' : '';\n        var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return totalSign + 'P' +\n            (Y ? ymSign + Y + 'Y' : '') +\n            (M ? ymSign + M + 'M' : '') +\n            (D ? daysSign + D + 'D' : '') +\n            ((h || m || s) ? 'T' : '') +\n            (h ? hmsSign + h + 'H' : '') +\n            (m ? hmsSign + m + 'M' : '') +\n            (s ? hmsSign + s + 'S' : '');\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid        = isValid$1;\n    proto$2.abs            = abs;\n    proto$2.add            = add$1;\n    proto$2.subtract       = subtract$1;\n    proto$2.as             = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds      = asSeconds;\n    proto$2.asMinutes      = asMinutes;\n    proto$2.asHours        = asHours;\n    proto$2.asDays         = asDays;\n    proto$2.asWeeks        = asWeeks;\n    proto$2.asMonths       = asMonths;\n    proto$2.asQuarters     = asQuarters;\n    proto$2.asYears        = asYears;\n    proto$2.valueOf        = valueOf$1;\n    proto$2._bubble        = bubble;\n    proto$2.clone          = clone$1;\n    proto$2.get            = get$2;\n    proto$2.milliseconds   = milliseconds;\n    proto$2.seconds        = seconds;\n    proto$2.minutes        = minutes;\n    proto$2.hours          = hours;\n    proto$2.days           = days;\n    proto$2.weeks          = weeks;\n    proto$2.months         = months;\n    proto$2.years          = years;\n    proto$2.humanize       = humanize;\n    proto$2.toISOString    = toISOString$1;\n    proto$2.toString       = toISOString$1;\n    proto$2.toJSON         = toISOString$1;\n    proto$2.locale         = locale;\n    proto$2.localeData     = localeData;\n\n    proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n    proto$2.lang = lang;\n\n    // Side effect imports\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input, 10) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    // Side effect imports\n\n\n    hooks.version = '2.24.0';\n\n    setHookCallback(createLocal);\n\n    hooks.fn                    = proto;\n    hooks.min                   = min;\n    hooks.max                   = max;\n    hooks.now                   = now;\n    hooks.utc                   = createUTC;\n    hooks.unix                  = createUnix;\n    hooks.months                = listMonths;\n    hooks.isDate                = isDate;\n    hooks.locale                = getSetGlobalLocale;\n    hooks.invalid               = createInvalid;\n    hooks.duration              = createDuration;\n    hooks.isMoment              = isMoment;\n    hooks.weekdays              = listWeekdays;\n    hooks.parseZone             = createInZone;\n    hooks.localeData            = getLocale;\n    hooks.isDuration            = isDuration;\n    hooks.monthsShort           = listMonthsShort;\n    hooks.weekdaysMin           = listWeekdaysMin;\n    hooks.defineLocale          = defineLocale;\n    hooks.updateLocale          = updateLocale;\n    hooks.locales               = listLocales;\n    hooks.weekdaysShort         = listWeekdaysShort;\n    hooks.normalizeUnits        = normalizeUnits;\n    hooks.relativeTimeRounding  = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat        = getCalendarFormat;\n    hooks.prototype             = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',             // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',  // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',   // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD',                             // <input type=\"date\" />\n        TIME: 'HH:mm',                                  // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss',                       // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS',                        // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW',                             // <input type=\"week\" />\n        MONTH: 'YYYY-MM'                                // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { Kind } from '../language/kinds';\n\nimport { GraphQLList, GraphQLNonNull } from '../type/wrappers';\n\n/**\n * Given a Schema and an AST node describing a type, return a GraphQLType\n * definition which applies to that type. For example, if provided the parsed\n * AST node for `[User]`, a GraphQLList instance will be returned, containing\n * the type called \"User\" found in the schema. If a type called \"User\" is not\n * found in the schema, then undefined will be returned.\n */\n/* eslint-disable no-redeclare */\n\nexport function typeFromAST(schema, typeNode) {\n  /* eslint-enable no-redeclare */\n  var innerType = void 0;\n  if (typeNode.kind === Kind.LIST_TYPE) {\n    innerType = typeFromAST(schema, typeNode.type);\n    return innerType && GraphQLList(innerType);\n  }\n  if (typeNode.kind === Kind.NON_NULL_TYPE) {\n    innerType = typeFromAST(schema, typeNode.type);\n    return innerType && GraphQLNonNull(innerType);\n  }\n  if (typeNode.kind === Kind.NAMED_TYPE) {\n    return schema.getType(typeNode.name.value);\n  }\n  /* istanbul ignore next */\n  throw new Error('Unexpected type kind: ' + typeNode.kind + '.');\n}","var AWS = require('./core');\nrequire('./credentials');\nrequire('./credentials/credential_provider_chain');\nvar PromisesDependency;\n\n/**\n * The main configuration class used by all service objects to set\n * the region, credentials, and other options for requests.\n *\n * By default, credentials and region settings are left unconfigured.\n * This should be configured by the application before using any\n * AWS service APIs.\n *\n * In order to set global configuration options, properties should\n * be assigned to the global {AWS.config} object.\n *\n * @see AWS.config\n *\n * @!group General Configuration Options\n *\n * @!attribute credentials\n *   @return [AWS.Credentials] the AWS credentials to sign requests with.\n *\n * @!attribute region\n *   @example Set the global region setting to us-west-2\n *     AWS.config.update({region: 'us-west-2'});\n *   @return [AWS.Credentials] The region to send service requests to.\n *   @see http://docs.amazonwebservices.com/general/latest/gr/rande.html\n *     A list of available endpoints for each AWS service\n *\n * @!attribute maxRetries\n *   @return [Integer] the maximum amount of retries to perform for a\n *     service request. By default this value is calculated by the specific\n *     service object that the request is being made to.\n *\n * @!attribute maxRedirects\n *   @return [Integer] the maximum amount of redirects to follow for a\n *     service request. Defaults to 10.\n *\n * @!attribute paramValidation\n *   @return [Boolean|map] whether input parameters should be validated against\n *     the operation description before sending the request. Defaults to true.\n *     Pass a map to enable any of the following specific validation features:\n *\n *     * **min** [Boolean] &mdash; Validates that a value meets the min\n *       constraint. This is enabled by default when paramValidation is set\n *       to `true`.\n *     * **max** [Boolean] &mdash; Validates that a value meets the max\n *       constraint.\n *     * **pattern** [Boolean] &mdash; Validates that a string value matches a\n *       regular expression.\n *     * **enum** [Boolean] &mdash; Validates that a string value matches one\n *       of the allowable enum values.\n *\n * @!attribute computeChecksums\n *   @return [Boolean] whether to compute checksums for payload bodies when\n *     the service accepts it (currently supported in S3 only).\n *\n * @!attribute convertResponseTypes\n *   @return [Boolean] whether types are converted when parsing response data.\n *     Currently only supported for JSON based services. Turning this off may\n *     improve performance on large response payloads. Defaults to `true`.\n *\n * @!attribute correctClockSkew\n *   @return [Boolean] whether to apply a clock skew correction and retry\n *     requests that fail because of an skewed client clock. Defaults to\n *     `false`.\n *\n * @!attribute sslEnabled\n *   @return [Boolean] whether SSL is enabled for requests\n *\n * @!attribute s3ForcePathStyle\n *   @return [Boolean] whether to force path style URLs for S3 objects\n *\n * @!attribute s3BucketEndpoint\n *   @note Setting this configuration option requires an `endpoint` to be\n *     provided explicitly to the service constructor.\n *   @return [Boolean] whether the provided endpoint addresses an individual\n *     bucket (false if it addresses the root API endpoint).\n *\n * @!attribute s3DisableBodySigning\n *   @return [Boolean] whether to disable S3 body signing when using signature version `v4`.\n *     Body signing can only be disabled when using https. Defaults to `true`.\n *\n * @!attribute useAccelerateEndpoint\n *   @note This configuration option is only compatible with S3 while accessing\n *     dns-compatible buckets.\n *   @return [Boolean] Whether to use the Accelerate endpoint with the S3 service.\n *     Defaults to `false`.\n *\n * @!attribute retryDelayOptions\n *   @example Set the base retry delay for all services to 300 ms\n *     AWS.config.update({retryDelayOptions: {base: 300}});\n *     // Delays with maxRetries = 3: 300, 600, 1200\n *   @example Set a custom backoff function to provide delay values on retries\n *     AWS.config.update({retryDelayOptions: {customBackoff: function(retryCount) {\n *       // returns delay in ms\n *     }}});\n *   @return [map] A set of options to configure the retry delay on retryable errors.\n *     Currently supported options are:\n *\n *     * **base** [Integer] &mdash; The base number of milliseconds to use in the\n *       exponential backoff for operation retries. Defaults to 100 ms for all services except\n *       DynamoDB, where it defaults to 50ms.\n *     * **customBackoff ** [function] &mdash; A custom function that accepts a retry count\n *       and returns the amount of time to delay in milliseconds. The `base` option will be\n *       ignored if this option is supplied.\n *\n * @!attribute httpOptions\n *   @return [map] A set of options to pass to the low-level HTTP request.\n *     Currently supported options are:\n *\n *     * **proxy** [String] &mdash; the URL to proxy requests through\n *     * **agent** [http.Agent, https.Agent] &mdash; the Agent object to perform\n *       HTTP requests with. Used for connection pooling. Note that for\n *       SSL connections, a special Agent object is used in order to enable\n *       peer certificate verification. This feature is only supported in the\n *       Node.js environment.\n *     * **connectTimeout** [Integer] &mdash; Sets the socket to timeout after\n *       failing to establish a connection with the server after\n *       `connectTimeout` milliseconds. This timeout has no effect once a socket\n *       connection has been established.\n *     * **timeout** [Integer] &mdash; Sets the socket to timeout after timeout\n *       milliseconds of inactivity on the socket. Defaults to two minutes\n *       (120000)\n *     * **xhrAsync** [Boolean] &mdash; Whether the SDK will send asynchronous\n *       HTTP requests. Used in the browser environment only. Set to false to\n *       send requests synchronously. Defaults to true (async on).\n *     * **xhrWithCredentials** [Boolean] &mdash; Sets the \"withCredentials\"\n *       property of an XMLHttpRequest object. Used in the browser environment\n *       only. Defaults to false.\n * @!attribute logger\n *   @return [#write,#log] an object that responds to .write() (like a stream)\n *     or .log() (like the console object) in order to log information about\n *     requests\n *\n * @!attribute systemClockOffset\n *   @return [Number] an offset value in milliseconds to apply to all signing\n *     times. Use this to compensate for clock skew when your system may be\n *     out of sync with the service time. Note that this configuration option\n *     can only be applied to the global `AWS.config` object and cannot be\n *     overridden in service-specific configuration. Defaults to 0 milliseconds.\n *\n * @!attribute signatureVersion\n *   @return [String] the signature version to sign requests with (overriding\n *     the API configuration). Possible values are: 'v2', 'v3', 'v4'.\n *\n * @!attribute signatureCache\n *   @return [Boolean] whether the signature to sign requests with (overriding\n *     the API configuration) is cached. Only applies to the signature version 'v4'.\n *     Defaults to `true`.\n *\n * @!attribute endpointDiscoveryEnabled\n *   @return [Boolean] whether to enable endpoint discovery for operations that\n *     allow optionally using an endpoint returned by the service.\n *     Defaults to 'false'\n *\n * @!attribute endpointCacheSize\n *   @return [Number] the size of the global cache storing endpoints from endpoint\n *     discovery operations. Once endpoint cache is created, updating this setting\n *     cannot change existing cache size.\n *     Defaults to 1000\n *\n * @!attribute hostPrefixEnabled\n *   @return [Boolean] whether to marshal request parameters to the prefix of\n *     hostname. Defaults to `true`.\n */\nAWS.Config = AWS.util.inherit({\n  /**\n   * @!endgroup\n   */\n\n  /**\n   * Creates a new configuration object. This is the object that passes\n   * option data along to service requests, including credentials, security,\n   * region information, and some service specific settings.\n   *\n   * @example Creating a new configuration object with credentials and region\n   *   var config = new AWS.Config({\n   *     accessKeyId: 'AKID', secretAccessKey: 'SECRET', region: 'us-west-2'\n   *   });\n   * @option options accessKeyId [String] your AWS access key ID.\n   * @option options secretAccessKey [String] your AWS secret access key.\n   * @option options sessionToken [AWS.Credentials] the optional AWS\n   *   session token to sign requests with.\n   * @option options credentials [AWS.Credentials] the AWS credentials\n   *   to sign requests with. You can either specify this object, or\n   *   specify the accessKeyId and secretAccessKey options directly.\n   * @option options credentialProvider [AWS.CredentialProviderChain] the\n   *   provider chain used to resolve credentials if no static `credentials`\n   *   property is set.\n   * @option options region [String] the region to send service requests to.\n   *   See {region} for more information.\n   * @option options maxRetries [Integer] the maximum amount of retries to\n   *   attempt with a request. See {maxRetries} for more information.\n   * @option options maxRedirects [Integer] the maximum amount of redirects to\n   *   follow with a request. See {maxRedirects} for more information.\n   * @option options sslEnabled [Boolean] whether to enable SSL for\n   *   requests.\n   * @option options paramValidation [Boolean|map] whether input parameters\n   *   should be validated against the operation description before sending\n   *   the request. Defaults to true. Pass a map to enable any of the\n   *   following specific validation features:\n   *\n   *   * **min** [Boolean] &mdash; Validates that a value meets the min\n   *     constraint. This is enabled by default when paramValidation is set\n   *     to `true`.\n   *   * **max** [Boolean] &mdash; Validates that a value meets the max\n   *     constraint.\n   *   * **pattern** [Boolean] &mdash; Validates that a string value matches a\n   *     regular expression.\n   *   * **enum** [Boolean] &mdash; Validates that a string value matches one\n   *     of the allowable enum values.\n   * @option options computeChecksums [Boolean] whether to compute checksums\n   *   for payload bodies when the service accepts it (currently supported\n   *   in S3 only)\n   * @option options convertResponseTypes [Boolean] whether types are converted\n   *     when parsing response data. Currently only supported for JSON based\n   *     services. Turning this off may improve performance on large response\n   *     payloads. Defaults to `true`.\n   * @option options correctClockSkew [Boolean] whether to apply a clock skew\n   *     correction and retry requests that fail because of an skewed client\n   *     clock. Defaults to `false`.\n   * @option options s3ForcePathStyle [Boolean] whether to force path\n   *   style URLs for S3 objects.\n   * @option options s3BucketEndpoint [Boolean] whether the provided endpoint\n   *   addresses an individual bucket (false if it addresses the root API\n   *   endpoint). Note that setting this configuration option requires an\n   *   `endpoint` to be provided explicitly to the service constructor.\n   * @option options s3DisableBodySigning [Boolean] whether S3 body signing\n   *   should be disabled when using signature version `v4`. Body signing\n   *   can only be disabled when using https. Defaults to `true`.\n   *\n   * @option options retryDelayOptions [map] A set of options to configure\n   *   the retry delay on retryable errors. Currently supported options are:\n   *\n   *   * **base** [Integer] &mdash; The base number of milliseconds to use in the\n   *     exponential backoff for operation retries. Defaults to 100 ms for all\n   *     services except DynamoDB, where it defaults to 50ms.\n   *   * **customBackoff ** [function] &mdash; A custom function that accepts a retry count\n   *     and returns the amount of time to delay in milliseconds. The `base` option will be\n   *     ignored if this option is supplied.\n   * @option options httpOptions [map] A set of options to pass to the low-level\n   *   HTTP request. Currently supported options are:\n   *\n   *   * **proxy** [String] &mdash; the URL to proxy requests through\n   *   * **agent** [http.Agent, https.Agent] &mdash; the Agent object to perform\n   *     HTTP requests with. Used for connection pooling. Defaults to the global\n   *     agent (`http.globalAgent`) for non-SSL connections. Note that for\n   *     SSL connections, a special Agent object is used in order to enable\n   *     peer certificate verification. This feature is only available in the\n   *     Node.js environment.\n   *   * **connectTimeout** [Integer] &mdash; Sets the socket to timeout after\n   *     failing to establish a connection with the server after\n   *     `connectTimeout` milliseconds. This timeout has no effect once a socket\n   *     connection has been established.\n   *   * **timeout** [Integer] &mdash; Sets the socket to timeout after timeout\n   *     milliseconds of inactivity on the socket. Defaults to two minutes\n   *     (120000).\n   *   * **xhrAsync** [Boolean] &mdash; Whether the SDK will send asynchronous\n   *     HTTP requests. Used in the browser environment only. Set to false to\n   *     send requests synchronously. Defaults to true (async on).\n   *   * **xhrWithCredentials** [Boolean] &mdash; Sets the \"withCredentials\"\n   *     property of an XMLHttpRequest object. Used in the browser environment\n   *     only. Defaults to false.\n   * @option options apiVersion [String, Date] a String in YYYY-MM-DD format\n   *   (or a date) that represents the latest possible API version that can be\n   *   used in all services (unless overridden by `apiVersions`). Specify\n   *   'latest' to use the latest possible version.\n   * @option options apiVersions [map<String, String|Date>] a map of service\n   *   identifiers (the lowercase service class name) with the API version to\n   *   use when instantiating a service. Specify 'latest' for each individual\n   *   that can use the latest available version.\n   * @option options logger [#write,#log] an object that responds to .write()\n   *   (like a stream) or .log() (like the console object) in order to log\n   *   information about requests\n   * @option options systemClockOffset [Number] an offset value in milliseconds\n   *   to apply to all signing times. Use this to compensate for clock skew\n   *   when your system may be out of sync with the service time. Note that\n   *   this configuration option can only be applied to the global `AWS.config`\n   *   object and cannot be overridden in service-specific configuration.\n   *   Defaults to 0 milliseconds.\n   * @option options signatureVersion [String] the signature version to sign\n   *   requests with (overriding the API configuration). Possible values are:\n   *   'v2', 'v3', 'v4'.\n   * @option options signatureCache [Boolean] whether the signature to sign\n   *   requests with (overriding the API configuration) is cached. Only applies\n   *   to the signature version 'v4'. Defaults to `true`.\n   * @option options dynamoDbCrc32 [Boolean] whether to validate the CRC32\n   *   checksum of HTTP response bodies returned by DynamoDB. Default: `true`.\n   * @option options useAccelerateEndpoint [Boolean] Whether to use the\n   *   S3 Transfer Acceleration endpoint with the S3 service. Default: `false`.\n   * @option options clientSideMonitoring [Boolean] whether to collect and\n   *   publish this client's performance metrics of all its API requests.\n   * @option options endpointDiscoveryEnabled [Boolean] whether to enable endpoint\n   *   discovery for operations that allow optionally using an endpoint returned by\n   *   the service.\n   *   Defaults to 'false'\n   * @option options endpointCacheSize [Number] the size of the global cache storing\n   *   endpoints from endpoint discovery operations. Once endpoint cache is created,\n   *   updating this setting cannot change existing cache size.\n   *   Defaults to 1000\n   * @option options hostPrefixEnabled [Boolean] whether to marshal request\n   *   parameters to the prefix of hostname.\n   *   Defaults to `true`.\n   */\n  constructor: function Config(options) {\n    if (options === undefined) options = {};\n    options = this.extractCredentials(options);\n\n    AWS.util.each.call(this, this.keys, function (key, value) {\n      this.set(key, options[key], value);\n    });\n  },\n\n  /**\n   * @!group Managing Credentials\n   */\n\n  /**\n   * Loads credentials from the configuration object. This is used internally\n   * by the SDK to ensure that refreshable {Credentials} objects are properly\n   * refreshed and loaded when sending a request. If you want to ensure that\n   * your credentials are loaded prior to a request, you can use this method\n   * directly to provide accurate credential data stored in the object.\n   *\n   * @note If you configure the SDK with static or environment credentials,\n   *   the credential data should already be present in {credentials} attribute.\n   *   This method is primarily necessary to load credentials from asynchronous\n   *   sources, or sources that can refresh credentials periodically.\n   * @example Getting your access key\n   *   AWS.config.getCredentials(function(err) {\n   *     if (err) console.log(err.stack); // credentials not loaded\n   *     else console.log(\"Access Key:\", AWS.config.credentials.accessKeyId);\n   *   })\n   * @callback callback function(err)\n   *   Called when the {credentials} have been properly set on the configuration\n   *   object.\n   *\n   *   @param err [Error] if this is set, credentials were not successfully\n   *     loaded and this error provides information why.\n   * @see credentials\n   * @see Credentials\n   */\n  getCredentials: function getCredentials(callback) {\n    var self = this;\n\n    function finish(err) {\n      callback(err, err ? null : self.credentials);\n    }\n\n    function credError(msg, err) {\n      return new AWS.util.error(err || new Error(), {\n        code: 'CredentialsError',\n        message: msg,\n        name: 'CredentialsError'\n      });\n    }\n\n    function getAsyncCredentials() {\n      self.credentials.get(function(err) {\n        if (err) {\n          var msg = 'Could not load credentials from ' +\n            self.credentials.constructor.name;\n          err = credError(msg, err);\n        }\n        finish(err);\n      });\n    }\n\n    function getStaticCredentials() {\n      var err = null;\n      if (!self.credentials.accessKeyId || !self.credentials.secretAccessKey) {\n        err = credError('Missing credentials');\n      }\n      finish(err);\n    }\n\n    if (self.credentials) {\n      if (typeof self.credentials.get === 'function') {\n        getAsyncCredentials();\n      } else { // static credentials\n        getStaticCredentials();\n      }\n    } else if (self.credentialProvider) {\n      self.credentialProvider.resolve(function(err, creds) {\n        if (err) {\n          err = credError('Could not load credentials from any providers', err);\n        }\n        self.credentials = creds;\n        finish(err);\n      });\n    } else {\n      finish(credError('No credentials to load'));\n    }\n  },\n\n  /**\n   * @!group Loading and Setting Configuration Options\n   */\n\n  /**\n   * @overload update(options, allowUnknownKeys = false)\n   *   Updates the current configuration object with new options.\n   *\n   *   @example Update maxRetries property of a configuration object\n   *     config.update({maxRetries: 10});\n   *   @param [Object] options a map of option keys and values.\n   *   @param [Boolean] allowUnknownKeys whether unknown keys can be set on\n   *     the configuration object. Defaults to `false`.\n   *   @see constructor\n   */\n  update: function update(options, allowUnknownKeys) {\n    allowUnknownKeys = allowUnknownKeys || false;\n    options = this.extractCredentials(options);\n    AWS.util.each.call(this, options, function (key, value) {\n      if (allowUnknownKeys || Object.prototype.hasOwnProperty.call(this.keys, key) ||\n          AWS.Service.hasService(key)) {\n        this.set(key, value);\n      }\n    });\n  },\n\n  /**\n   * Loads configuration data from a JSON file into this config object.\n   * @note Loading configuration will reset all existing configuration\n   *   on the object.\n   * @!macro nobrowser\n   * @param path [String] the path relative to your process's current\n   *    working directory to load configuration from.\n   * @return [AWS.Config] the same configuration object\n   */\n  loadFromPath: function loadFromPath(path) {\n    this.clear();\n\n    var options = JSON.parse(AWS.util.readFileSync(path));\n    var fileSystemCreds = new AWS.FileSystemCredentials(path);\n    var chain = new AWS.CredentialProviderChain();\n    chain.providers.unshift(fileSystemCreds);\n    chain.resolve(function (err, creds) {\n      if (err) throw err;\n      else options.credentials = creds;\n    });\n\n    this.constructor(options);\n\n    return this;\n  },\n\n  /**\n   * Clears configuration data on this object\n   *\n   * @api private\n   */\n  clear: function clear() {\n    /*jshint forin:false */\n    AWS.util.each.call(this, this.keys, function (key) {\n      delete this[key];\n    });\n\n    // reset credential provider\n    this.set('credentials', undefined);\n    this.set('credentialProvider', undefined);\n  },\n\n  /**\n   * Sets a property on the configuration object, allowing for a\n   * default value\n   * @api private\n   */\n  set: function set(property, value, defaultValue) {\n    if (value === undefined) {\n      if (defaultValue === undefined) {\n        defaultValue = this.keys[property];\n      }\n      if (typeof defaultValue === 'function') {\n        this[property] = defaultValue.call(this);\n      } else {\n        this[property] = defaultValue;\n      }\n    } else if (property === 'httpOptions' && this[property]) {\n      // deep merge httpOptions\n      this[property] = AWS.util.merge(this[property], value);\n    } else {\n      this[property] = value;\n    }\n  },\n\n  /**\n   * All of the keys with their default values.\n   *\n   * @constant\n   * @api private\n   */\n  keys: {\n    credentials: null,\n    credentialProvider: null,\n    region: null,\n    logger: null,\n    apiVersions: {},\n    apiVersion: null,\n    endpoint: undefined,\n    httpOptions: {\n      timeout: 120000\n    },\n    maxRetries: undefined,\n    maxRedirects: 10,\n    paramValidation: true,\n    sslEnabled: true,\n    s3ForcePathStyle: false,\n    s3BucketEndpoint: false,\n    s3DisableBodySigning: true,\n    computeChecksums: true,\n    convertResponseTypes: true,\n    correctClockSkew: false,\n    customUserAgent: null,\n    dynamoDbCrc32: true,\n    systemClockOffset: 0,\n    signatureVersion: null,\n    signatureCache: true,\n    retryDelayOptions: {},\n    useAccelerateEndpoint: false,\n    clientSideMonitoring: false,\n    endpointDiscoveryEnabled: false,\n    endpointCacheSize: 1000,\n    hostPrefixEnabled: true\n  },\n\n  /**\n   * Extracts accessKeyId, secretAccessKey and sessionToken\n   * from a configuration hash.\n   *\n   * @api private\n   */\n  extractCredentials: function extractCredentials(options) {\n    if (options.accessKeyId && options.secretAccessKey) {\n      options = AWS.util.copy(options);\n      options.credentials = new AWS.Credentials(options);\n    }\n    return options;\n  },\n\n  /**\n   * Sets the promise dependency the SDK will use wherever Promises are returned.\n   * Passing `null` will force the SDK to use native Promises if they are available.\n   * If native Promises are not available, passing `null` will have no effect.\n   * @param [Constructor] dep A reference to a Promise constructor\n   */\n  setPromisesDependency: function setPromisesDependency(dep) {\n    PromisesDependency = dep;\n    // if null was passed in, we should try to use native promises\n    if (dep === null && typeof Promise === 'function') {\n      PromisesDependency = Promise;\n    }\n    var constructors = [AWS.Request, AWS.Credentials, AWS.CredentialProviderChain];\n    if (AWS.S3 && AWS.S3.ManagedUpload) constructors.push(AWS.S3.ManagedUpload);\n    AWS.util.addPromises(constructors, PromisesDependency);\n  },\n\n  /**\n   * Gets the promise dependency set by `AWS.config.setPromisesDependency`.\n   */\n  getPromisesDependency: function getPromisesDependency() {\n    return PromisesDependency;\n  }\n});\n\n/**\n * @return [AWS.Config] The global configuration object singleton instance\n * @readonly\n * @see AWS.Config\n */\nAWS.config = new AWS.Config();\n","var AWS = require('./core');\nvar SequentialExecutor = require('./sequential_executor');\nvar DISCOVER_ENDPOINT = require('./discover_endpoint').discoverEndpoint;\n/**\n * The namespace used to register global event listeners for request building\n * and sending.\n */\nAWS.EventListeners = {\n  /**\n   * @!attribute VALIDATE_CREDENTIALS\n   *   A request listener that validates whether the request is being\n   *   sent with credentials.\n   *   Handles the {AWS.Request~validate 'validate' Request event}\n   *   @example Sending a request without validating credentials\n   *     var listener = AWS.EventListeners.Core.VALIDATE_CREDENTIALS;\n   *     request.removeListener('validate', listener);\n   *   @readonly\n   *   @return [Function]\n   * @!attribute VALIDATE_REGION\n   *   A request listener that validates whether the region is set\n   *   for a request.\n   *   Handles the {AWS.Request~validate 'validate' Request event}\n   *   @example Sending a request without validating region configuration\n   *     var listener = AWS.EventListeners.Core.VALIDATE_REGION;\n   *     request.removeListener('validate', listener);\n   *   @readonly\n   *   @return [Function]\n   * @!attribute VALIDATE_PARAMETERS\n   *   A request listener that validates input parameters in a request.\n   *   Handles the {AWS.Request~validate 'validate' Request event}\n   *   @example Sending a request without validating parameters\n   *     var listener = AWS.EventListeners.Core.VALIDATE_PARAMETERS;\n   *     request.removeListener('validate', listener);\n   *   @example Disable parameter validation globally\n   *     AWS.EventListeners.Core.removeListener('validate',\n   *       AWS.EventListeners.Core.VALIDATE_REGION);\n   *   @readonly\n   *   @return [Function]\n   * @!attribute SEND\n   *   A request listener that initiates the HTTP connection for a\n   *   request being sent. Handles the {AWS.Request~send 'send' Request event}\n   *   @example Replacing the HTTP handler\n   *     var listener = AWS.EventListeners.Core.SEND;\n   *     request.removeListener('send', listener);\n   *     request.on('send', function(response) {\n   *       customHandler.send(response);\n   *     });\n   *   @return [Function]\n   *   @readonly\n   * @!attribute HTTP_DATA\n   *   A request listener that reads data from the HTTP connection in order\n   *   to build the response data.\n   *   Handles the {AWS.Request~httpData 'httpData' Request event}.\n   *   Remove this handler if you are overriding the 'httpData' event and\n   *   do not want extra data processing and buffering overhead.\n   *   @example Disabling default data processing\n   *     var listener = AWS.EventListeners.Core.HTTP_DATA;\n   *     request.removeListener('httpData', listener);\n   *   @return [Function]\n   *   @readonly\n   */\n  Core: {} /* doc hack */\n};\n\n/**\n * @api private\n */\nfunction getOperationAuthtype(req) {\n  if (!req.service.api.operations) {\n    return '';\n  }\n  var operation = req.service.api.operations[req.operation];\n  return operation ? operation.authtype : '';\n}\n\nAWS.EventListeners = {\n  Core: new SequentialExecutor().addNamedListeners(function(add, addAsync) {\n    addAsync('VALIDATE_CREDENTIALS', 'validate',\n        function VALIDATE_CREDENTIALS(req, done) {\n      if (!req.service.api.signatureVersion) return done(); // none\n      req.service.config.getCredentials(function(err) {\n        if (err) {\n          req.response.error = AWS.util.error(err,\n            {code: 'CredentialsError', message: 'Missing credentials in config'});\n        }\n        done();\n      });\n    });\n\n    add('VALIDATE_REGION', 'validate', function VALIDATE_REGION(req) {\n      if (!req.service.config.region && !req.service.isGlobalEndpoint) {\n        req.response.error = AWS.util.error(new Error(),\n          {code: 'ConfigError', message: 'Missing region in config'});\n      }\n    });\n\n    add('BUILD_IDEMPOTENCY_TOKENS', 'validate', function BUILD_IDEMPOTENCY_TOKENS(req) {\n      if (!req.service.api.operations) {\n        return;\n      }\n      var operation = req.service.api.operations[req.operation];\n      if (!operation) {\n        return;\n      }\n      var idempotentMembers = operation.idempotentMembers;\n      if (!idempotentMembers.length) {\n        return;\n      }\n      // creates a copy of params so user's param object isn't mutated\n      var params = AWS.util.copy(req.params);\n      for (var i = 0, iLen = idempotentMembers.length; i < iLen; i++) {\n        if (!params[idempotentMembers[i]]) {\n          // add the member\n          params[idempotentMembers[i]] = AWS.util.uuid.v4();\n        }\n      }\n      req.params = params;\n    });\n\n    add('VALIDATE_PARAMETERS', 'validate', function VALIDATE_PARAMETERS(req) {\n      if (!req.service.api.operations) {\n        return;\n      }\n      var rules = req.service.api.operations[req.operation].input;\n      var validation = req.service.config.paramValidation;\n      new AWS.ParamValidator(validation).validate(rules, req.params);\n    });\n\n    addAsync('COMPUTE_SHA256', 'afterBuild', function COMPUTE_SHA256(req, done) {\n      req.haltHandlersOnError();\n      if (!req.service.api.operations) {\n        return;\n      }\n      var operation = req.service.api.operations[req.operation];\n      var authtype = operation ? operation.authtype : '';\n      if (!req.service.api.signatureVersion && !authtype) return done(); // none\n      if (req.service.getSignerClass(req) === AWS.Signers.V4) {\n        var body = req.httpRequest.body || '';\n        if (authtype.indexOf('unsigned-body') >= 0) {\n          req.httpRequest.headers['X-Amz-Content-Sha256'] = 'UNSIGNED-PAYLOAD';\n          return done();\n        }\n        AWS.util.computeSha256(body, function(err, sha) {\n          if (err) {\n            done(err);\n          }\n          else {\n            req.httpRequest.headers['X-Amz-Content-Sha256'] = sha;\n            done();\n          }\n        });\n      } else {\n        done();\n      }\n    });\n\n    add('SET_CONTENT_LENGTH', 'afterBuild', function SET_CONTENT_LENGTH(req) {\n      var authtype = getOperationAuthtype(req);\n      var payloadMember = AWS.util.getRequestPayloadShape(req);\n      if (req.httpRequest.headers['Content-Length'] === undefined) {\n        try {\n          var length = AWS.util.string.byteLength(req.httpRequest.body);\n          req.httpRequest.headers['Content-Length'] = length;\n        } catch (err) {\n          if (payloadMember && payloadMember.isStreaming) {\n            if (payloadMember.requiresLength) {\n              //streaming payload requires length(s3, glacier)\n              throw err;\n            } else if (authtype.indexOf('unsigned-body') >= 0) {\n              //unbounded streaming payload(lex, mediastore)\n              req.httpRequest.headers['Transfer-Encoding'] = 'chunked';\n              return;\n            } else {\n              throw err;\n            }\n          }\n          throw err;\n        }\n      }\n    });\n\n    add('SET_HTTP_HOST', 'afterBuild', function SET_HTTP_HOST(req) {\n      req.httpRequest.headers['Host'] = req.httpRequest.endpoint.host;\n    });\n\n    add('RESTART', 'restart', function RESTART() {\n      var err = this.response.error;\n      if (!err || !err.retryable) return;\n\n      this.httpRequest = new AWS.HttpRequest(\n        this.service.endpoint,\n        this.service.region\n      );\n\n      if (this.response.retryCount < this.service.config.maxRetries) {\n        this.response.retryCount++;\n      } else {\n        this.response.error = null;\n      }\n    });\n\n    var addToHead = true;\n    addAsync('DISCOVER_ENDPOINT', 'sign', DISCOVER_ENDPOINT, addToHead);\n\n    addAsync('SIGN', 'sign', function SIGN(req, done) {\n      var service = req.service;\n      var operations = req.service.api.operations || {};\n      var operation = operations[req.operation];\n      var authtype = operation ? operation.authtype : '';\n      if (!service.api.signatureVersion && !authtype) return done(); // none\n\n      service.config.getCredentials(function (err, credentials) {\n        if (err) {\n          req.response.error = err;\n          return done();\n        }\n\n        try {\n          var date = service.getSkewCorrectedDate();\n          var SignerClass = service.getSignerClass(req);\n          var signer = new SignerClass(req.httpRequest,\n            service.api.signingName || service.api.endpointPrefix,\n            {\n              signatureCache: service.config.signatureCache,\n              operation: operation,\n              signatureVersion: service.api.signatureVersion\n            });\n          signer.setServiceClientId(service._clientId);\n\n          // clear old authorization headers\n          delete req.httpRequest.headers['Authorization'];\n          delete req.httpRequest.headers['Date'];\n          delete req.httpRequest.headers['X-Amz-Date'];\n\n          // add new authorization\n          signer.addAuthorization(credentials, date);\n          req.signedAt = date;\n        } catch (e) {\n          req.response.error = e;\n        }\n        done();\n      });\n    });\n\n    add('VALIDATE_RESPONSE', 'validateResponse', function VALIDATE_RESPONSE(resp) {\n      if (this.service.successfulResponse(resp, this)) {\n        resp.data = {};\n        resp.error = null;\n      } else {\n        resp.data = null;\n        resp.error = AWS.util.error(new Error(),\n          {code: 'UnknownError', message: 'An unknown error occurred.'});\n      }\n    });\n\n    addAsync('SEND', 'send', function SEND(resp, done) {\n      resp.httpResponse._abortCallback = done;\n      resp.error = null;\n      resp.data = null;\n\n      function callback(httpResp) {\n        resp.httpResponse.stream = httpResp;\n        var stream = resp.request.httpRequest.stream;\n        var service = resp.request.service;\n        var api = service.api;\n        var operationName = resp.request.operation;\n        var operation = api.operations[operationName] || {};\n\n        httpResp.on('headers', function onHeaders(statusCode, headers, statusMessage) {\n          resp.request.emit(\n            'httpHeaders',\n            [statusCode, headers, resp, statusMessage]\n          );\n\n          if (!resp.httpResponse.streaming) {\n            if (AWS.HttpClient.streamsApiVersion === 2) { // streams2 API check\n              // if we detect event streams, we're going to have to\n              // return the stream immediately\n              if (operation.hasEventOutput && service.successfulResponse(resp)) {\n                // skip reading the IncomingStream\n                resp.request.emit('httpDone');\n                done();\n                return;\n              }\n\n              httpResp.on('readable', function onReadable() {\n                var data = httpResp.read();\n                if (data !== null) {\n                  resp.request.emit('httpData', [data, resp]);\n                }\n              });\n            } else { // legacy streams API\n              httpResp.on('data', function onData(data) {\n                resp.request.emit('httpData', [data, resp]);\n              });\n            }\n          }\n        });\n\n        httpResp.on('end', function onEnd() {\n          if (!stream || !stream.didCallback) {\n            if (AWS.HttpClient.streamsApiVersion === 2 && (operation.hasEventOutput && service.successfulResponse(resp))) {\n              // don't concatenate response chunks when streaming event stream data when response is successful\n              return;\n            }\n            resp.request.emit('httpDone');\n            done();\n          }\n        });\n      }\n\n      function progress(httpResp) {\n        httpResp.on('sendProgress', function onSendProgress(value) {\n          resp.request.emit('httpUploadProgress', [value, resp]);\n        });\n\n        httpResp.on('receiveProgress', function onReceiveProgress(value) {\n          resp.request.emit('httpDownloadProgress', [value, resp]);\n        });\n      }\n\n      function error(err) {\n        if (err.code !== 'RequestAbortedError') {\n          var errCode = err.code === 'TimeoutError' ? err.code : 'NetworkingError';\n          err = AWS.util.error(err, {\n            code: errCode,\n            region: resp.request.httpRequest.region,\n            hostname: resp.request.httpRequest.endpoint.hostname,\n            retryable: true\n          });\n        }\n        resp.error = err;\n        resp.request.emit('httpError', [resp.error, resp], function() {\n          done();\n        });\n      }\n\n      function executeSend() {\n        var http = AWS.HttpClient.getInstance();\n        var httpOptions = resp.request.service.config.httpOptions || {};\n        try {\n          var stream = http.handleRequest(resp.request.httpRequest, httpOptions,\n                                          callback, error);\n          progress(stream);\n        } catch (err) {\n          error(err);\n        }\n      }\n      var timeDiff = (resp.request.service.getSkewCorrectedDate() - this.signedAt) / 1000;\n      if (timeDiff >= 60 * 10) { // if we signed 10min ago, re-sign\n        this.emit('sign', [this], function(err) {\n          if (err) done(err);\n          else executeSend();\n        });\n      } else {\n        executeSend();\n      }\n    });\n\n    add('HTTP_HEADERS', 'httpHeaders',\n        function HTTP_HEADERS(statusCode, headers, resp, statusMessage) {\n      resp.httpResponse.statusCode = statusCode;\n      resp.httpResponse.statusMessage = statusMessage;\n      resp.httpResponse.headers = headers;\n      resp.httpResponse.body = AWS.util.buffer.toBuffer('');\n      resp.httpResponse.buffers = [];\n      resp.httpResponse.numBytes = 0;\n      var dateHeader = headers.date || headers.Date;\n      var service = resp.request.service;\n      if (dateHeader) {\n        var serverTime = Date.parse(dateHeader);\n        if (service.config.correctClockSkew\n            && service.isClockSkewed(serverTime)) {\n          service.applyClockOffset(serverTime);\n        }\n      }\n    });\n\n    add('HTTP_DATA', 'httpData', function HTTP_DATA(chunk, resp) {\n      if (chunk) {\n        if (AWS.util.isNode()) {\n          resp.httpResponse.numBytes += chunk.length;\n\n          var total = resp.httpResponse.headers['content-length'];\n          var progress = { loaded: resp.httpResponse.numBytes, total: total };\n          resp.request.emit('httpDownloadProgress', [progress, resp]);\n        }\n\n        resp.httpResponse.buffers.push(AWS.util.buffer.toBuffer(chunk));\n      }\n    });\n\n    add('HTTP_DONE', 'httpDone', function HTTP_DONE(resp) {\n      // convert buffers array into single buffer\n      if (resp.httpResponse.buffers && resp.httpResponse.buffers.length > 0) {\n        var body = AWS.util.buffer.concat(resp.httpResponse.buffers);\n        resp.httpResponse.body = body;\n      }\n      delete resp.httpResponse.numBytes;\n      delete resp.httpResponse.buffers;\n    });\n\n    add('FINALIZE_ERROR', 'retry', function FINALIZE_ERROR(resp) {\n      if (resp.httpResponse.statusCode) {\n        resp.error.statusCode = resp.httpResponse.statusCode;\n        if (resp.error.retryable === undefined) {\n          resp.error.retryable = this.service.retryableError(resp.error, this);\n        }\n      }\n    });\n\n    add('INVALIDATE_CREDENTIALS', 'retry', function INVALIDATE_CREDENTIALS(resp) {\n      if (!resp.error) return;\n      switch (resp.error.code) {\n        case 'RequestExpired': // EC2 only\n        case 'ExpiredTokenException':\n        case 'ExpiredToken':\n          resp.error.retryable = true;\n          resp.request.service.config.credentials.expired = true;\n      }\n    });\n\n    add('EXPIRED_SIGNATURE', 'retry', function EXPIRED_SIGNATURE(resp) {\n      var err = resp.error;\n      if (!err) return;\n      if (typeof err.code === 'string' && typeof err.message === 'string') {\n        if (err.code.match(/Signature/) && err.message.match(/expired/)) {\n          resp.error.retryable = true;\n        }\n      }\n    });\n\n    add('CLOCK_SKEWED', 'retry', function CLOCK_SKEWED(resp) {\n      if (!resp.error) return;\n      if (this.service.clockSkewError(resp.error)\n          && this.service.config.correctClockSkew) {\n        resp.error.retryable = true;\n      }\n    });\n\n    add('REDIRECT', 'retry', function REDIRECT(resp) {\n      if (resp.error && resp.error.statusCode >= 300 &&\n          resp.error.statusCode < 400 && resp.httpResponse.headers['location']) {\n        this.httpRequest.endpoint =\n          new AWS.Endpoint(resp.httpResponse.headers['location']);\n        this.httpRequest.headers['Host'] = this.httpRequest.endpoint.host;\n        resp.error.redirect = true;\n        resp.error.retryable = true;\n      }\n    });\n\n    add('RETRY_CHECK', 'retry', function RETRY_CHECK(resp) {\n      if (resp.error) {\n        if (resp.error.redirect && resp.redirectCount < resp.maxRedirects) {\n          resp.error.retryDelay = 0;\n        } else if (resp.retryCount < resp.maxRetries) {\n          resp.error.retryDelay = this.service.retryDelays(resp.retryCount) || 0;\n        }\n      }\n    });\n\n    addAsync('RESET_RETRY_STATE', 'afterRetry', function RESET_RETRY_STATE(resp, done) {\n      var delay, willRetry = false;\n\n      if (resp.error) {\n        delay = resp.error.retryDelay || 0;\n        if (resp.error.retryable && resp.retryCount < resp.maxRetries) {\n          resp.retryCount++;\n          willRetry = true;\n        } else if (resp.error.redirect && resp.redirectCount < resp.maxRedirects) {\n          resp.redirectCount++;\n          willRetry = true;\n        }\n      }\n\n      if (willRetry) {\n        resp.error = null;\n        setTimeout(done, delay);\n      } else {\n        done();\n      }\n    });\n  }),\n\n  CorePost: new SequentialExecutor().addNamedListeners(function(add) {\n    add('EXTRACT_REQUEST_ID', 'extractData', AWS.util.extractRequestId);\n    add('EXTRACT_REQUEST_ID', 'extractError', AWS.util.extractRequestId);\n\n    add('ENOTFOUND_ERROR', 'httpError', function ENOTFOUND_ERROR(err) {\n      if (err.code === 'NetworkingError' && err.errno === 'ENOTFOUND') {\n        var message = 'Inaccessible host: `' + err.hostname +\n          '\\'. This service may not be available in the `' + err.region +\n          '\\' region.';\n        this.response.error = AWS.util.error(new Error(message), {\n          code: 'UnknownEndpoint',\n          region: err.region,\n          hostname: err.hostname,\n          retryable: true,\n          originalError: err\n        });\n      }\n    });\n  }),\n\n  Logger: new SequentialExecutor().addNamedListeners(function(add) {\n    add('LOG_REQUEST', 'complete', function LOG_REQUEST(resp) {\n      var req = resp.request;\n      var logger = req.service.config.logger;\n      if (!logger) return;\n      function filterSensitiveLog(inputShape, shape) {\n        if (!shape) {\n          return shape;\n        }\n        switch (inputShape.type) {\n          case 'structure':\n            var struct = {};\n            AWS.util.each(shape, function(subShapeName, subShape) {\n              if (Object.prototype.hasOwnProperty.call(inputShape.members, subShapeName)) {\n                struct[subShapeName] = filterSensitiveLog(inputShape.members[subShapeName], subShape);\n              } else {\n                struct[subShapeName] = subShape;\n              }\n            });\n            return struct;\n          case 'list':\n            var list = [];\n            AWS.util.arrayEach(shape, function(subShape, index) {\n              list.push(filterSensitiveLog(inputShape.member, subShape));\n            });\n            return list;\n          case 'map':\n            var map = {};\n            AWS.util.each(shape, function(key, value) {\n              map[key] = filterSensitiveLog(inputShape.value, value);\n            });\n            return map;\n          default:\n            if (inputShape.isSensitive) {\n              return '***SensitiveInformation***';\n            } else {\n              return shape;\n            }\n        }\n      }\n\n      function buildMessage() {\n        var time = resp.request.service.getSkewCorrectedDate().getTime();\n        var delta = (time - req.startTime.getTime()) / 1000;\n        var ansi = logger.isTTY ? true : false;\n        var status = resp.httpResponse.statusCode;\n        var censoredParams = req.params;\n        if (\n          req.service.api.operations &&\n              req.service.api.operations[req.operation] &&\n              req.service.api.operations[req.operation].input\n        ) {\n          var inputShape = req.service.api.operations[req.operation].input;\n          censoredParams = filterSensitiveLog(inputShape, req.params);\n        }\n        var params = require('util').inspect(censoredParams, true, null);\n        var message = '';\n        if (ansi) message += '\\x1B[33m';\n        message += '[AWS ' + req.service.serviceIdentifier + ' ' + status;\n        message += ' ' + delta.toString() + 's ' + resp.retryCount + ' retries]';\n        if (ansi) message += '\\x1B[0;1m';\n        message += ' ' + AWS.util.string.lowerFirst(req.operation);\n        message += '(' + params + ')';\n        if (ansi) message += '\\x1B[0m';\n        return message;\n      }\n\n      var line = buildMessage();\n      if (typeof logger.log === 'function') {\n        logger.log(line);\n      } else if (typeof logger.write === 'function') {\n        logger.write(line + '\\n');\n      }\n    });\n  }),\n\n  Json: new SequentialExecutor().addNamedListeners(function(add) {\n    var svc = require('./protocol/json');\n    add('BUILD', 'build', svc.buildRequest);\n    add('EXTRACT_DATA', 'extractData', svc.extractData);\n    add('EXTRACT_ERROR', 'extractError', svc.extractError);\n  }),\n\n  Rest: new SequentialExecutor().addNamedListeners(function(add) {\n    var svc = require('./protocol/rest');\n    add('BUILD', 'build', svc.buildRequest);\n    add('EXTRACT_DATA', 'extractData', svc.extractData);\n    add('EXTRACT_ERROR', 'extractError', svc.extractError);\n  }),\n\n  RestJson: new SequentialExecutor().addNamedListeners(function(add) {\n    var svc = require('./protocol/rest_json');\n    add('BUILD', 'build', svc.buildRequest);\n    add('EXTRACT_DATA', 'extractData', svc.extractData);\n    add('EXTRACT_ERROR', 'extractError', svc.extractError);\n  }),\n\n  RestXml: new SequentialExecutor().addNamedListeners(function(add) {\n    var svc = require('./protocol/rest_xml');\n    add('BUILD', 'build', svc.buildRequest);\n    add('EXTRACT_DATA', 'extractData', svc.extractData);\n    add('EXTRACT_ERROR', 'extractError', svc.extractError);\n  }),\n\n  Query: new SequentialExecutor().addNamedListeners(function(add) {\n    var svc = require('./protocol/query');\n    add('BUILD', 'build', svc.buildRequest);\n    add('EXTRACT_DATA', 'extractData', svc.extractData);\n    add('EXTRACT_ERROR', 'extractError', svc.extractError);\n  })\n};\n","var AWS = require('./core');\nvar util = require('./util');\nvar endpointDiscoveryEnabledEnvs = ['AWS_ENABLE_ENDPOINT_DISCOVERY', 'AWS_ENDPOINT_DISCOVERY_ENABLED'];\n\n/**\n * Generate key (except resources and operation part) to index the endpoints in the cache\n * If input shape has endpointdiscoveryid trait then use\n *   accessKey + operation + resources + region + service as cache key\n * If input shape doesn't have endpointdiscoveryid trait then use\n *   accessKey + region + service as cache key\n * @return [map<String,String>] object with keys to index endpoints.\n * @api private\n */\nfunction getCacheKey(request) {\n  var service = request.service;\n  var api = service.api || {};\n  var operations = api.operations;\n  var identifiers = {};\n  if (service.config.region) {\n    identifiers.region = service.config.region;\n  }\n  if (api.serviceId) {\n    identifiers.serviceId = api.serviceId;\n  }\n  if (service.config.credentials.accessKeyId) {\n    identifiers.accessKeyId = service.config.credentials.accessKeyId;\n  }\n  return identifiers;\n}\n\n/**\n * Recursive helper for marshallCustomIdentifiers().\n * Looks for required string input members that have 'endpointdiscoveryid' trait.\n * @api private\n */\nfunction marshallCustomIdentifiersHelper(result, params, shape) {\n  if (!shape || params === undefined || params === null) return;\n  if (shape.type === 'structure' && shape.required && shape.required.length > 0) {\n    util.arrayEach(shape.required, function(name) {\n      var memberShape = shape.members[name];\n      if (memberShape.endpointDiscoveryId === true) {\n        var locationName = memberShape.isLocationName ? memberShape.name : name;\n        result[locationName] = String(params[name]);\n      } else {\n        marshallCustomIdentifiersHelper(result, params[name], memberShape);\n      }\n    });\n  }\n}\n\n/**\n * Get custom identifiers for cache key.\n * Identifies custom identifiers by checking each shape's `endpointDiscoveryId` trait.\n * @param [object] request object\n * @param [object] input shape of the given operation's api\n * @api private\n */\nfunction marshallCustomIdentifiers(request, shape) {\n  var identifiers = {};\n  marshallCustomIdentifiersHelper(identifiers, request.params, shape);\n  return identifiers;\n}\n\n/**\n * Call endpoint discovery operation when it's optional.\n * When endpoint is available in cache then use the cached endpoints. If endpoints\n * are unavailable then use regional endpoints and call endpoint discovery operation\n * asynchronously. This is turned off by default.\n * @param [object] request object\n * @api private\n */\nfunction optionalDiscoverEndpoint(request) {\n  var service = request.service;\n  var api = service.api;\n  var operationModel = api.operations ? api.operations[request.operation] : undefined;\n  var inputShape = operationModel ? operationModel.input : undefined;\n\n  var identifiers = marshallCustomIdentifiers(request, inputShape);\n  var cacheKey = getCacheKey(request);\n  if (Object.keys(identifiers).length > 0) {\n    cacheKey = util.update(cacheKey, identifiers);\n    if (operationModel) cacheKey.operation = operationModel.name;\n  }\n  var endpoints = AWS.endpointCache.get(cacheKey);\n  if (endpoints && endpoints.length === 1 && endpoints[0].Address === '') {\n    //endpoint operation is being made but response not yet received\n    //or endpoint operation just failed in 1 minute\n    return;\n  } else if (endpoints && endpoints.length > 0) {\n    //found endpoint record from cache\n    request.httpRequest.updateEndpoint(endpoints[0].Address);\n  } else {\n    //endpoint record not in cache or outdated. make discovery operation\n    var endpointRequest = service.makeRequest(api.endpointOperation, {\n      Operation: operationModel.name,\n      Identifiers: identifiers,\n    });\n    addApiVersionHeader(endpointRequest);\n    endpointRequest.removeListener('validate', AWS.EventListeners.Core.VALIDATE_PARAMETERS);\n    endpointRequest.removeListener('retry', AWS.EventListeners.Core.RETRY_CHECK);\n    //put in a placeholder for endpoints already requested, prevent\n    //too much in-flight calls\n    AWS.endpointCache.put(cacheKey, [{\n      Address: '',\n      CachePeriodInMinutes: 1\n    }]);\n    endpointRequest.send(function(err, data) {\n      if (data && data.Endpoints) {\n        AWS.endpointCache.put(cacheKey, data.Endpoints);\n      } else if (err) {\n        AWS.endpointCache.put(cacheKey, [{\n          Address: '',\n          CachePeriodInMinutes: 1 //not to make more endpoint operation in next 1 minute\n        }]);\n      }\n    });\n  }\n}\n\nvar requestQueue = {};\n\n/**\n * Call endpoint discovery operation when it's required.\n * When endpoint is available in cache then use cached ones. If endpoints are\n * unavailable then SDK should call endpoint operation then use returned new\n * endpoint for the api call. SDK will automatically attempt to do endpoint\n * discovery. This is turned off by default\n * @param [object] request object\n * @api private\n */\nfunction requiredDiscoverEndpoint(request, done) {\n  var service = request.service;\n  var api = service.api;\n  var operationModel = api.operations ? api.operations[request.operation] : undefined;\n  var inputShape = operationModel ? operationModel.input : undefined;\n\n  var identifiers = marshallCustomIdentifiers(request, inputShape);\n  var cacheKey = getCacheKey(request);\n  if (Object.keys(identifiers).length > 0) {\n    cacheKey = util.update(cacheKey, identifiers);\n    if (operationModel) cacheKey.operation = operationModel.name;\n  }\n  var cacheKeyStr = AWS.EndpointCache.getKeyString(cacheKey);\n  var endpoints = AWS.endpointCache.get(cacheKeyStr); //endpoint cache also accepts string keys\n  if (endpoints && endpoints.length === 1 && endpoints[0].Address === '') {\n    //endpoint operation is being made but response not yet received\n    //push request object to a pending queue\n    if (!requestQueue[cacheKeyStr]) requestQueue[cacheKeyStr] = [];\n    requestQueue[cacheKeyStr].push({request: request, callback: done});\n    return;\n  } else if (endpoints && endpoints.length > 0) {\n    request.httpRequest.updateEndpoint(endpoints[0].Address);\n    done();\n  } else {\n    var endpointRequest = service.makeRequest(api.endpointOperation, {\n      Operation: operationModel.name,\n      Identifiers: identifiers,\n    });\n    endpointRequest.removeListener('validate', AWS.EventListeners.Core.VALIDATE_PARAMETERS);\n    addApiVersionHeader(endpointRequest);\n\n    //put in a placeholder for endpoints already requested, prevent\n    //too much in-flight calls\n    AWS.endpointCache.put(cacheKeyStr, [{\n      Address: '',\n      CachePeriodInMinutes: 60 //long-live cache\n    }]);\n    endpointRequest.send(function(err, data) {\n      if (err) {\n        var errorParams = {\n          code: 'EndpointDiscoveryException',\n          message: 'Request cannot be fulfilled without specifying an endpoint',\n          retryable: false\n        };\n        request.response.error = util.error(err, errorParams);\n        AWS.endpointCache.remove(cacheKey);\n\n        //fail all the pending requests in batch\n        if (requestQueue[cacheKeyStr]) {\n          var pendingRequests = requestQueue[cacheKeyStr];\n          util.arrayEach(pendingRequests, function(requestContext) {\n            requestContext.request.response.error = util.error(err, errorParams);\n            requestContext.callback();\n          });\n          delete requestQueue[cacheKeyStr];\n        }\n      } else if (data) {\n        AWS.endpointCache.put(cacheKeyStr, data.Endpoints);\n        request.httpRequest.updateEndpoint(data.Endpoints[0].Address);\n\n        //update the endpoint for all the pending requests in batch\n        if (requestQueue[cacheKeyStr]) {\n          var pendingRequests = requestQueue[cacheKeyStr];\n          util.arrayEach(pendingRequests, function(requestContext) {\n            requestContext.request.httpRequest.updateEndpoint(data.Endpoints[0].Address);\n            requestContext.callback();\n          });\n          delete requestQueue[cacheKeyStr];\n        }\n      }\n      done();\n    });\n  }\n}\n\n/**\n * add api version header to endpoint operation\n * @api private\n */\nfunction addApiVersionHeader(endpointRequest) {\n  var api = endpointRequest.service.api;\n  var apiVersion = api.apiVersion;\n  if (apiVersion && !endpointRequest.httpRequest.headers['x-amz-api-version']) {\n    endpointRequest.httpRequest.headers['x-amz-api-version'] = apiVersion;\n  }\n}\n\n/**\n * If api call gets invalid endpoint exception, SDK should attempt to remove the invalid\n * endpoint from cache.\n * @api private\n */\nfunction invalidateCachedEndpoints(response) {\n  var error = response.error;\n  var httpResponse = response.httpResponse;\n  if (error &&\n    (error.code === 'InvalidEndpointException' || httpResponse.statusCode === 421)\n  ) {\n    var request = response.request;\n    var operations = request.service.api.operations || {};\n    var inputShape = operations[request.operation] ? operations[request.operation].input : undefined;\n    var identifiers = marshallCustomIdentifiers(request, inputShape);\n    var cacheKey = getCacheKey(request);\n    if (Object.keys(identifiers).length > 0) {\n      cacheKey = util.update(cacheKey, identifiers);\n      if (operations[request.operation]) cacheKey.operation = operations[request.operation].name;\n    }\n    AWS.endpointCache.remove(cacheKey);\n  }\n}\n\n/**\n * If endpoint is explicitly configured, SDK should not do endpoint discovery in anytime.\n * @param [object] client Service client object.\n * @api private\n */\nfunction hasCustomEndpoint(client) {\n  //if set endpoint is set for specific client, enable endpoint discovery will raise an error.\n  if (client._originalConfig && client._originalConfig.endpoint && client._originalConfig.endpointDiscoveryEnabled === true) {\n    throw util.error(new Error(), {\n      code: 'ConfigurationException',\n      message: 'Custom endpoint is supplied; endpointDiscoveryEnabled must not be true.'\n    });\n  };\n  var svcConfig = AWS.config[client.serviceIdentifier] || {};\n  return Boolean(AWS.config.endpoint || svcConfig.endpoint || (client._originalConfig && client._originalConfig.endpoint));\n}\n\n/**\n * @api private\n */\nfunction isFalsy(value) {\n  return ['false', '0'].indexOf(value) >= 0;\n}\n\n/**\n * If endpoint discovery should perform for this request when endpoint discovery is optional.\n * SDK performs config resolution in order like below:\n * 1. If turned on client configuration(default to off) then turn on endpoint discovery.\n * 2. If turned on in env AWS_ENABLE_ENDPOINT_DISCOVERY then turn on endpoint discovery.\n * 3. If turned on in shared ini config file with key 'endpoint_discovery_enabled', then\n *   turn on endpoint discovery.\n * @param [object] request request object.\n * @api private\n */\nfunction isEndpointDiscoveryApplicable(request) {\n  var service = request.service || {};\n  if (service.config.endpointDiscoveryEnabled === true) return true;\n\n  //shared ini file is only available in Node\n  //not to check env in browser\n  if (util.isBrowser()) return false;\n\n  for (var i = 0; i < endpointDiscoveryEnabledEnvs.length; i++) {\n    var env = endpointDiscoveryEnabledEnvs[i];\n    if (Object.prototype.hasOwnProperty.call(process.env, env)) {\n      if (process.env[env] === '' || process.env[env] === undefined) {\n        throw util.error(new Error(), {\n          code: 'ConfigurationException',\n          message: 'environmental variable ' + env + ' cannot be set to nothing'\n        });\n      }\n      if (!isFalsy(process.env[env])) return true;\n    }\n  }\n\n  var configFile = {};\n  try {\n    configFile = AWS.util.iniLoader ? AWS.util.iniLoader.loadFrom({\n      isConfig: true,\n      filename: process.env[AWS.util.sharedConfigFileEnv]\n    }) : {};\n  } catch (e) {}\n  var sharedFileConfig = configFile[\n    process.env.AWS_PROFILE || AWS.util.defaultProfile\n  ] || {};\n  if (Object.prototype.hasOwnProperty.call(sharedFileConfig, 'endpoint_discovery_enabled')) {\n    if (sharedFileConfig.endpoint_discovery_enabled === undefined) {\n      throw util.error(new Error(), {\n        code: 'ConfigurationException',\n        message: 'config file entry \\'endpoint_discovery_enabled\\' cannot be set to nothing'\n      });\n    }\n    if (!isFalsy(sharedFileConfig.endpoint_discovery_enabled)) return true;\n  }\n  return false;\n}\n\n/**\n * attach endpoint discovery logic to request object\n * @param [object] request\n * @api private\n */\nfunction discoverEndpoint(request, done) {\n  var service = request.service || {};\n  if (hasCustomEndpoint(service) || request.isPresigned()) return done();\n\n  if (!isEndpointDiscoveryApplicable(request)) return done();\n\n  request.httpRequest.appendToUserAgent('endpoint-discovery');\n\n  var operations = service.api.operations || {};\n  var operationModel = operations[request.operation];\n  var isEndpointDiscoveryRequired = operationModel ? operationModel.endpointDiscoveryRequired : 'NULL';\n  switch (isEndpointDiscoveryRequired) {\n    case 'OPTIONAL':\n      optionalDiscoverEndpoint(request);\n      request.addNamedListener('INVALIDATE_CACHED_ENDPOINTS', 'extractError', invalidateCachedEndpoints);\n      done();\n      break;\n    case 'REQUIRED':\n      request.addNamedListener('INVALIDATE_CACHED_ENDPOINTS', 'extractError', invalidateCachedEndpoints);\n      requiredDiscoverEndpoint(request, done);\n      break;\n    case 'NULL':\n    default:\n      done();\n      break;\n  }\n}\n\nmodule.exports = {\n  discoverEndpoint: discoverEndpoint,\n  requiredDiscoverEndpoint: requiredDiscoverEndpoint,\n  optionalDiscoverEndpoint: optionalDiscoverEndpoint,\n  marshallCustomIdentifiers: marshallCustomIdentifiers,\n  getCacheKey: getCacheKey,\n  invalidateCachedEndpoint: invalidateCachedEndpoints,\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n  function getOwnPropertyDescriptors(obj) {\n    var keys = Object.keys(obj);\n    var descriptors = {};\n    for (var i = 0; i < keys.length; i++) {\n      descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n    }\n    return descriptors;\n  };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n  if (typeof process !== 'undefined' && process.noDeprecation === true) {\n    return fn;\n  }\n\n  // Allow for deprecating things in the process of starting up.\n  if (typeof process === 'undefined') {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n  if (isUndefined(debugEnviron))\n    debugEnviron = process.env.NODE_DEBUG || '';\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n  // default options\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  // legacy...\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    // legacy...\n    ctx.showHidden = opts;\n  } else if (opts) {\n    // got an \"options\" object\n    exports._extend(ctx, opts);\n  }\n  // set default options\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  // \"name\": intentionally not styling\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== exports.inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // Look up the keys of the object.\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n\n  // IE doesn't make error fields non-enumerable\n  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n\n  // Some type of object without properties can be shortcutted.\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  // For some reason typeof null is \"object\", so special case here.\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').substr(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.substr(1, name.length - 2);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n *     prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n  // Don't do anything if add isn't an object\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n  if (typeof original !== 'function')\n    throw new TypeError('The \"original\" argument must be of type Function');\n\n  if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n    var fn = original[kCustomPromisifiedSymbol];\n    if (typeof fn !== 'function') {\n      throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n    }\n    Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n      value: fn, enumerable: false, writable: false, configurable: true\n    });\n    return fn;\n  }\n\n  function fn() {\n    var promiseResolve, promiseReject;\n    var promise = new Promise(function (resolve, reject) {\n      promiseResolve = resolve;\n      promiseReject = reject;\n    });\n\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n    args.push(function (err, value) {\n      if (err) {\n        promiseReject(err);\n      } else {\n        promiseResolve(value);\n      }\n    });\n\n    try {\n      original.apply(this, args);\n    } catch (err) {\n      promiseReject(err);\n    }\n\n    return promise;\n  }\n\n  Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n  if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n    value: fn, enumerable: false, writable: false, configurable: true\n  });\n  return Object.defineProperties(\n    fn,\n    getOwnPropertyDescriptors(original)\n  );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n  // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n  // Because `null` is a special error value in callbacks which means \"no error\n  // occurred\", we error-wrap so the callback consumer can distinguish between\n  // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n  if (!reason) {\n    var newReason = new Error('Promise was rejected with a falsy value');\n    newReason.reason = reason;\n    reason = newReason;\n  }\n  return cb(reason);\n}\n\nfunction callbackify(original) {\n  if (typeof original !== 'function') {\n    throw new TypeError('The \"original\" argument must be of type Function');\n  }\n\n  // We DO NOT return the promise as it gives the user a false sense that\n  // the promise is actually somehow related to the callback's execution\n  // and that the callback throwing will reject the promise.\n  function callbackified() {\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n\n    var maybeCb = args.pop();\n    if (typeof maybeCb !== 'function') {\n      throw new TypeError('The last argument must be of type Function');\n    }\n    var self = this;\n    var cb = function() {\n      return maybeCb.apply(self, arguments);\n    };\n    // In true node style we process the callback on `nextTick` with all the\n    // implications (stack, `uncaughtException`, `async_hooks`)\n    original.apply(this, args)\n      .then(function(ret) { process.nextTick(cb, null, ret) },\n            function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n  }\n\n  Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n  Object.defineProperties(callbackified,\n                          getOwnPropertyDescriptors(original));\n  return callbackified;\n}\nexports.callbackify = callbackify;\n","module.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n}","if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n","var AWS = require('./core');\nvar AcceptorStateMachine = require('./state_machine');\nvar inherit = AWS.util.inherit;\nvar domain = AWS.util.domain;\nvar jmespath = require('jmespath');\n\n/**\n * @api private\n */\nvar hardErrorStates = {success: 1, error: 1, complete: 1};\n\nfunction isTerminalState(machine) {\n  return Object.prototype.hasOwnProperty.call(hardErrorStates, machine._asm.currentState);\n}\n\nvar fsm = new AcceptorStateMachine();\nfsm.setupStates = function() {\n  var transition = function(_, done) {\n    var self = this;\n    self._haltHandlersOnError = false;\n\n    self.emit(self._asm.currentState, function(err) {\n      if (err) {\n        if (isTerminalState(self)) {\n          if (domain && self.domain instanceof domain.Domain) {\n            err.domainEmitter = self;\n            err.domain = self.domain;\n            err.domainThrown = false;\n            self.domain.emit('error', err);\n          } else {\n            throw err;\n          }\n        } else {\n          self.response.error = err;\n          done(err);\n        }\n      } else {\n        done(self.response.error);\n      }\n    });\n\n  };\n\n  this.addState('validate', 'build', 'error', transition);\n  this.addState('build', 'afterBuild', 'restart', transition);\n  this.addState('afterBuild', 'sign', 'restart', transition);\n  this.addState('sign', 'send', 'retry', transition);\n  this.addState('retry', 'afterRetry', 'afterRetry', transition);\n  this.addState('afterRetry', 'sign', 'error', transition);\n  this.addState('send', 'validateResponse', 'retry', transition);\n  this.addState('validateResponse', 'extractData', 'extractError', transition);\n  this.addState('extractError', 'extractData', 'retry', transition);\n  this.addState('extractData', 'success', 'retry', transition);\n  this.addState('restart', 'build', 'error', transition);\n  this.addState('success', 'complete', 'complete', transition);\n  this.addState('error', 'complete', 'complete', transition);\n  this.addState('complete', null, null, transition);\n};\nfsm.setupStates();\n\n/**\n * ## Asynchronous Requests\n *\n * All requests made through the SDK are asynchronous and use a\n * callback interface. Each service method that kicks off a request\n * returns an `AWS.Request` object that you can use to register\n * callbacks.\n *\n * For example, the following service method returns the request\n * object as \"request\", which can be used to register callbacks:\n *\n * ```javascript\n * // request is an AWS.Request object\n * var request = ec2.describeInstances();\n *\n * // register callbacks on request to retrieve response data\n * request.on('success', function(response) {\n *   console.log(response.data);\n * });\n * ```\n *\n * When a request is ready to be sent, the {send} method should\n * be called:\n *\n * ```javascript\n * request.send();\n * ```\n *\n * Since registered callbacks may or may not be idempotent, requests should only\n * be sent once. To perform the same operation multiple times, you will need to\n * create multiple request objects, each with its own registered callbacks.\n *\n * ## Removing Default Listeners for Events\n *\n * Request objects are built with default listeners for the various events,\n * depending on the service type. In some cases, you may want to remove\n * some built-in listeners to customize behaviour. Doing this requires\n * access to the built-in listener functions, which are exposed through\n * the {AWS.EventListeners.Core} namespace. For instance, you may\n * want to customize the HTTP handler used when sending a request. In this\n * case, you can remove the built-in listener associated with the 'send'\n * event, the {AWS.EventListeners.Core.SEND} listener and add your own.\n *\n * ## Multiple Callbacks and Chaining\n *\n * You can register multiple callbacks on any request object. The\n * callbacks can be registered for different events, or all for the\n * same event. In addition, you can chain callback registration, for\n * example:\n *\n * ```javascript\n * request.\n *   on('success', function(response) {\n *     console.log(\"Success!\");\n *   }).\n *   on('error', function(error, response) {\n *     console.log(\"Error!\");\n *   }).\n *   on('complete', function(response) {\n *     console.log(\"Always!\");\n *   }).\n *   send();\n * ```\n *\n * The above example will print either \"Success! Always!\", or \"Error! Always!\",\n * depending on whether the request succeeded or not.\n *\n * @!attribute httpRequest\n *   @readonly\n *   @!group HTTP Properties\n *   @return [AWS.HttpRequest] the raw HTTP request object\n *     containing request headers and body information\n *     sent by the service.\n *\n * @!attribute startTime\n *   @readonly\n *   @!group Operation Properties\n *   @return [Date] the time that the request started\n *\n * @!group Request Building Events\n *\n * @!event validate(request)\n *   Triggered when a request is being validated. Listeners\n *   should throw an error if the request should not be sent.\n *   @param request [Request] the request object being sent\n *   @see AWS.EventListeners.Core.VALIDATE_CREDENTIALS\n *   @see AWS.EventListeners.Core.VALIDATE_REGION\n *   @example Ensuring that a certain parameter is set before sending a request\n *     var req = s3.putObject(params);\n *     req.on('validate', function() {\n *       if (!req.params.Body.match(/^Hello\\s/)) {\n *         throw new Error('Body must start with \"Hello \"');\n *       }\n *     });\n *     req.send(function(err, data) { ... });\n *\n * @!event build(request)\n *   Triggered when the request payload is being built. Listeners\n *   should fill the necessary information to send the request\n *   over HTTP.\n *   @param (see AWS.Request~validate)\n *   @example Add a custom HTTP header to a request\n *     var req = s3.putObject(params);\n *     req.on('build', function() {\n *       req.httpRequest.headers['Custom-Header'] = 'value';\n *     });\n *     req.send(function(err, data) { ... });\n *\n * @!event sign(request)\n *   Triggered when the request is being signed. Listeners should\n *   add the correct authentication headers and/or adjust the body,\n *   depending on the authentication mechanism being used.\n *   @param (see AWS.Request~validate)\n *\n * @!group Request Sending Events\n *\n * @!event send(response)\n *   Triggered when the request is ready to be sent. Listeners\n *   should call the underlying transport layer to initiate\n *   the sending of the request.\n *   @param response [Response] the response object\n *   @context [Request] the request object that was sent\n *   @see AWS.EventListeners.Core.SEND\n *\n * @!event retry(response)\n *   Triggered when a request failed and might need to be retried or redirected.\n *   If the response is retryable, the listener should set the\n *   `response.error.retryable` property to `true`, and optionally set\n *   `response.error.retryDelay` to the millisecond delay for the next attempt.\n *   In the case of a redirect, `response.error.redirect` should be set to\n *   `true` with `retryDelay` set to an optional delay on the next request.\n *\n *   If a listener decides that a request should not be retried,\n *   it should set both `retryable` and `redirect` to false.\n *\n *   Note that a retryable error will be retried at most\n *   {AWS.Config.maxRetries} times (based on the service object's config).\n *   Similarly, a request that is redirected will only redirect at most\n *   {AWS.Config.maxRedirects} times.\n *\n *   @param (see AWS.Request~send)\n *   @context (see AWS.Request~send)\n *   @example Adding a custom retry for a 404 response\n *     request.on('retry', function(response) {\n *       // this resource is not yet available, wait 10 seconds to get it again\n *       if (response.httpResponse.statusCode === 404 && response.error) {\n *         response.error.retryable = true;   // retry this error\n *         response.error.retryDelay = 10000; // wait 10 seconds\n *       }\n *     });\n *\n * @!group Data Parsing Events\n *\n * @!event extractError(response)\n *   Triggered on all non-2xx requests so that listeners can extract\n *   error details from the response body. Listeners to this event\n *   should set the `response.error` property.\n *   @param (see AWS.Request~send)\n *   @context (see AWS.Request~send)\n *\n * @!event extractData(response)\n *   Triggered in successful requests to allow listeners to\n *   de-serialize the response body into `response.data`.\n *   @param (see AWS.Request~send)\n *   @context (see AWS.Request~send)\n *\n * @!group Completion Events\n *\n * @!event success(response)\n *   Triggered when the request completed successfully.\n *   `response.data` will contain the response data and\n *   `response.error` will be null.\n *   @param (see AWS.Request~send)\n *   @context (see AWS.Request~send)\n *\n * @!event error(error, response)\n *   Triggered when an error occurs at any point during the\n *   request. `response.error` will contain details about the error\n *   that occurred. `response.data` will be null.\n *   @param error [Error] the error object containing details about\n *     the error that occurred.\n *   @param (see AWS.Request~send)\n *   @context (see AWS.Request~send)\n *\n * @!event complete(response)\n *   Triggered whenever a request cycle completes. `response.error`\n *   should be checked, since the request may have failed.\n *   @param (see AWS.Request~send)\n *   @context (see AWS.Request~send)\n *\n * @!group HTTP Events\n *\n * @!event httpHeaders(statusCode, headers, response, statusMessage)\n *   Triggered when headers are sent by the remote server\n *   @param statusCode [Integer] the HTTP response code\n *   @param headers [map<String,String>] the response headers\n *   @param (see AWS.Request~send)\n *   @param statusMessage [String] A status message corresponding to the HTTP\n *                                 response code\n *   @context (see AWS.Request~send)\n *\n * @!event httpData(chunk, response)\n *   Triggered when data is sent by the remote server\n *   @param chunk [Buffer] the buffer data containing the next data chunk\n *     from the server\n *   @param (see AWS.Request~send)\n *   @context (see AWS.Request~send)\n *   @see AWS.EventListeners.Core.HTTP_DATA\n *\n * @!event httpUploadProgress(progress, response)\n *   Triggered when the HTTP request has uploaded more data\n *   @param progress [map] An object containing the `loaded` and `total` bytes\n *     of the request.\n *   @param (see AWS.Request~send)\n *   @context (see AWS.Request~send)\n *   @note This event will not be emitted in Node.js 0.8.x.\n *\n * @!event httpDownloadProgress(progress, response)\n *   Triggered when the HTTP request has downloaded more data\n *   @param progress [map] An object containing the `loaded` and `total` bytes\n *     of the request.\n *   @param (see AWS.Request~send)\n *   @context (see AWS.Request~send)\n *   @note This event will not be emitted in Node.js 0.8.x.\n *\n * @!event httpError(error, response)\n *   Triggered when the HTTP request failed\n *   @param error [Error] the error object that was thrown\n *   @param (see AWS.Request~send)\n *   @context (see AWS.Request~send)\n *\n * @!event httpDone(response)\n *   Triggered when the server is finished sending data\n *   @param (see AWS.Request~send)\n *   @context (see AWS.Request~send)\n *\n * @see AWS.Response\n */\nAWS.Request = inherit({\n\n  /**\n   * Creates a request for an operation on a given service with\n   * a set of input parameters.\n   *\n   * @param service [AWS.Service] the service to perform the operation on\n   * @param operation [String] the operation to perform on the service\n   * @param params [Object] parameters to send to the operation.\n   *   See the operation's documentation for the format of the\n   *   parameters.\n   */\n  constructor: function Request(service, operation, params) {\n    var endpoint = service.endpoint;\n    var region = service.config.region;\n    var customUserAgent = service.config.customUserAgent;\n\n    // global endpoints sign as us-east-1\n    if (service.isGlobalEndpoint) region = 'us-east-1';\n\n    this.domain = domain && domain.active;\n    this.service = service;\n    this.operation = operation;\n    this.params = params || {};\n    this.httpRequest = new AWS.HttpRequest(endpoint, region);\n    this.httpRequest.appendToUserAgent(customUserAgent);\n    this.startTime = service.getSkewCorrectedDate();\n\n    this.response = new AWS.Response(this);\n    this._asm = new AcceptorStateMachine(fsm.states, 'validate');\n    this._haltHandlersOnError = false;\n\n    AWS.SequentialExecutor.call(this);\n    this.emit = this.emitEvent;\n  },\n\n  /**\n   * @!group Sending a Request\n   */\n\n  /**\n   * @overload send(callback = null)\n   *   Sends the request object.\n   *\n   *   @callback callback function(err, data)\n   *     If a callback is supplied, it is called when a response is returned\n   *     from the service.\n   *     @context [AWS.Request] the request object being sent.\n   *     @param err [Error] the error object returned from the request.\n   *       Set to `null` if the request is successful.\n   *     @param data [Object] the de-serialized data returned from\n   *       the request. Set to `null` if a request error occurs.\n   *   @example Sending a request with a callback\n   *     request = s3.putObject({Bucket: 'bucket', Key: 'key'});\n   *     request.send(function(err, data) { console.log(err, data); });\n   *   @example Sending a request with no callback (using event handlers)\n   *     request = s3.putObject({Bucket: 'bucket', Key: 'key'});\n   *     request.on('complete', function(response) { ... }); // register a callback\n   *     request.send();\n   */\n  send: function send(callback) {\n    if (callback) {\n      // append to user agent\n      this.httpRequest.appendToUserAgent('callback');\n      this.on('complete', function (resp) {\n        callback.call(resp, resp.error, resp.data);\n      });\n    }\n    this.runTo();\n\n    return this.response;\n  },\n\n  /**\n   * @!method  promise()\n   *   Sends the request and returns a 'thenable' promise.\n   *\n   *   Two callbacks can be provided to the `then` method on the returned promise.\n   *   The first callback will be called if the promise is fulfilled, and the second\n   *   callback will be called if the promise is rejected.\n   *   @callback fulfilledCallback function(data)\n   *     Called if the promise is fulfilled.\n   *     @param data [Object] the de-serialized data returned from the request.\n   *   @callback rejectedCallback function(error)\n   *     Called if the promise is rejected.\n   *     @param error [Error] the error object returned from the request.\n   *   @return [Promise] A promise that represents the state of the request.\n   *   @example Sending a request using promises.\n   *     var request = s3.putObject({Bucket: 'bucket', Key: 'key'});\n   *     var result = request.promise();\n   *     result.then(function(data) { ... }, function(error) { ... });\n   */\n\n  /**\n   * @api private\n   */\n  build: function build(callback) {\n    return this.runTo('send', callback);\n  },\n\n  /**\n   * @api private\n   */\n  runTo: function runTo(state, done) {\n    this._asm.runTo(state, done, this);\n    return this;\n  },\n\n  /**\n   * Aborts a request, emitting the error and complete events.\n   *\n   * @!macro nobrowser\n   * @example Aborting a request after sending\n   *   var params = {\n   *     Bucket: 'bucket', Key: 'key',\n   *     Body: Buffer.alloc(1024 * 1024 * 5) // 5MB payload\n   *   };\n   *   var request = s3.putObject(params);\n   *   request.send(function (err, data) {\n   *     if (err) console.log(\"Error:\", err.code, err.message);\n   *     else console.log(data);\n   *   });\n   *\n   *   // abort request in 1 second\n   *   setTimeout(request.abort.bind(request), 1000);\n   *\n   *   // prints \"Error: RequestAbortedError Request aborted by user\"\n   * @return [AWS.Request] the same request object, for chaining.\n   * @since v1.4.0\n   */\n  abort: function abort() {\n    this.removeAllListeners('validateResponse');\n    this.removeAllListeners('extractError');\n    this.on('validateResponse', function addAbortedError(resp) {\n      resp.error = AWS.util.error(new Error('Request aborted by user'), {\n         code: 'RequestAbortedError', retryable: false\n      });\n    });\n\n    if (this.httpRequest.stream && !this.httpRequest.stream.didCallback) { // abort HTTP stream\n      this.httpRequest.stream.abort();\n      if (this.httpRequest._abortCallback) {\n         this.httpRequest._abortCallback();\n      } else {\n        this.removeAllListeners('send'); // haven't sent yet, so let's not\n      }\n    }\n\n    return this;\n  },\n\n  /**\n   * Iterates over each page of results given a pageable request, calling\n   * the provided callback with each page of data. After all pages have been\n   * retrieved, the callback is called with `null` data.\n   *\n   * @note This operation can generate multiple requests to a service.\n   * @example Iterating over multiple pages of objects in an S3 bucket\n   *   var pages = 1;\n   *   s3.listObjects().eachPage(function(err, data) {\n   *     if (err) return;\n   *     console.log(\"Page\", pages++);\n   *     console.log(data);\n   *   });\n   * @example Iterating over multiple pages with an asynchronous callback\n   *   s3.listObjects(params).eachPage(function(err, data, done) {\n   *     doSomethingAsyncAndOrExpensive(function() {\n   *       // The next page of results isn't fetched until done is called\n   *       done();\n   *     });\n   *   });\n   * @callback callback function(err, data, [doneCallback])\n   *   Called with each page of resulting data from the request. If the\n   *   optional `doneCallback` is provided in the function, it must be called\n   *   when the callback is complete.\n   *\n   *   @param err [Error] an error object, if an error occurred.\n   *   @param data [Object] a single page of response data. If there is no\n   *     more data, this object will be `null`.\n   *   @param doneCallback [Function] an optional done callback. If this\n   *     argument is defined in the function declaration, it should be called\n   *     when the next page is ready to be retrieved. This is useful for\n   *     controlling serial pagination across asynchronous operations.\n   *   @return [Boolean] if the callback returns `false`, pagination will\n   *     stop.\n   *\n   * @see AWS.Request.eachItem\n   * @see AWS.Response.nextPage\n   * @since v1.4.0\n   */\n  eachPage: function eachPage(callback) {\n    // Make all callbacks async-ish\n    callback = AWS.util.fn.makeAsync(callback, 3);\n\n    function wrappedCallback(response) {\n      callback.call(response, response.error, response.data, function (result) {\n        if (result === false) return;\n\n        if (response.hasNextPage()) {\n          response.nextPage().on('complete', wrappedCallback).send();\n        } else {\n          callback.call(response, null, null, AWS.util.fn.noop);\n        }\n      });\n    }\n\n    this.on('complete', wrappedCallback).send();\n  },\n\n  /**\n   * Enumerates over individual items of a request, paging the responses if\n   * necessary.\n   *\n   * @api experimental\n   * @since v1.4.0\n   */\n  eachItem: function eachItem(callback) {\n    var self = this;\n    function wrappedCallback(err, data) {\n      if (err) return callback(err, null);\n      if (data === null) return callback(null, null);\n\n      var config = self.service.paginationConfig(self.operation);\n      var resultKey = config.resultKey;\n      if (Array.isArray(resultKey)) resultKey = resultKey[0];\n      var items = jmespath.search(data, resultKey);\n      var continueIteration = true;\n      AWS.util.arrayEach(items, function(item) {\n        continueIteration = callback(null, item);\n        if (continueIteration === false) {\n          return AWS.util.abort;\n        }\n      });\n      return continueIteration;\n    }\n\n    this.eachPage(wrappedCallback);\n  },\n\n  /**\n   * @return [Boolean] whether the operation can return multiple pages of\n   *   response data.\n   * @see AWS.Response.eachPage\n   * @since v1.4.0\n   */\n  isPageable: function isPageable() {\n    return this.service.paginationConfig(this.operation) ? true : false;\n  },\n\n  /**\n   * Sends the request and converts the request object into a readable stream\n   * that can be read from or piped into a writable stream.\n   *\n   * @note The data read from a readable stream contains only\n   *   the raw HTTP body contents.\n   * @example Manually reading from a stream\n   *   request.createReadStream().on('data', function(data) {\n   *     console.log(\"Got data:\", data.toString());\n   *   });\n   * @example Piping a request body into a file\n   *   var out = fs.createWriteStream('/path/to/outfile.jpg');\n   *   s3.service.getObject(params).createReadStream().pipe(out);\n   * @return [Stream] the readable stream object that can be piped\n   *   or read from (by registering 'data' event listeners).\n   * @!macro nobrowser\n   */\n  createReadStream: function createReadStream() {\n    var streams = AWS.util.stream;\n    var req = this;\n    var stream = null;\n\n    if (AWS.HttpClient.streamsApiVersion === 2) {\n      stream = new streams.PassThrough();\n      process.nextTick(function() { req.send(); });\n    } else {\n      stream = new streams.Stream();\n      stream.readable = true;\n\n      stream.sent = false;\n      stream.on('newListener', function(event) {\n        if (!stream.sent && event === 'data') {\n          stream.sent = true;\n          process.nextTick(function() { req.send(); });\n        }\n      });\n    }\n\n    this.on('error', function(err) {\n      stream.emit('error', err);\n    });\n\n    this.on('httpHeaders', function streamHeaders(statusCode, headers, resp) {\n      if (statusCode < 300) {\n        req.removeListener('httpData', AWS.EventListeners.Core.HTTP_DATA);\n        req.removeListener('httpError', AWS.EventListeners.Core.HTTP_ERROR);\n        req.on('httpError', function streamHttpError(error) {\n          resp.error = error;\n          resp.error.retryable = false;\n        });\n\n        var shouldCheckContentLength = false;\n        var expectedLen;\n        if (req.httpRequest.method !== 'HEAD') {\n          expectedLen = parseInt(headers['content-length'], 10);\n        }\n        if (expectedLen !== undefined && !isNaN(expectedLen) && expectedLen >= 0) {\n          shouldCheckContentLength = true;\n          var receivedLen = 0;\n        }\n\n        var checkContentLengthAndEmit = function checkContentLengthAndEmit() {\n          if (shouldCheckContentLength && receivedLen !== expectedLen) {\n            stream.emit('error', AWS.util.error(\n              new Error('Stream content length mismatch. Received ' +\n                receivedLen + ' of ' + expectedLen + ' bytes.'),\n              { code: 'StreamContentLengthMismatch' }\n            ));\n          } else if (AWS.HttpClient.streamsApiVersion === 2) {\n            stream.end();\n          } else {\n            stream.emit('end');\n          }\n        };\n\n        var httpStream = resp.httpResponse.createUnbufferedStream();\n\n        if (AWS.HttpClient.streamsApiVersion === 2) {\n          if (shouldCheckContentLength) {\n            var lengthAccumulator = new streams.PassThrough();\n            lengthAccumulator._write = function(chunk) {\n              if (chunk && chunk.length) {\n                receivedLen += chunk.length;\n              }\n              return streams.PassThrough.prototype._write.apply(this, arguments);\n            };\n\n            lengthAccumulator.on('end', checkContentLengthAndEmit);\n            stream.on('error', function(err) {\n              shouldCheckContentLength = false;\n              httpStream.unpipe(lengthAccumulator);\n              lengthAccumulator.emit('end');\n              lengthAccumulator.end();\n            });\n            httpStream.pipe(lengthAccumulator).pipe(stream, { end: false });\n          } else {\n            httpStream.pipe(stream);\n          }\n        } else {\n\n          if (shouldCheckContentLength) {\n            httpStream.on('data', function(arg) {\n              if (arg && arg.length) {\n                receivedLen += arg.length;\n              }\n            });\n          }\n\n          httpStream.on('data', function(arg) {\n            stream.emit('data', arg);\n          });\n          httpStream.on('end', checkContentLengthAndEmit);\n        }\n\n        httpStream.on('error', function(err) {\n          shouldCheckContentLength = false;\n          stream.emit('error', err);\n        });\n      }\n    });\n\n    return stream;\n  },\n\n  /**\n   * @param [Array,Response] args This should be the response object,\n   *   or an array of args to send to the event.\n   * @api private\n   */\n  emitEvent: function emit(eventName, args, done) {\n    if (typeof args === 'function') { done = args; args = null; }\n    if (!done) done = function() { };\n    if (!args) args = this.eventParameters(eventName, this.response);\n\n    var origEmit = AWS.SequentialExecutor.prototype.emit;\n    origEmit.call(this, eventName, args, function (err) {\n      if (err) this.response.error = err;\n      done.call(this, err);\n    });\n  },\n\n  /**\n   * @api private\n   */\n  eventParameters: function eventParameters(eventName) {\n    switch (eventName) {\n      case 'restart':\n      case 'validate':\n      case 'sign':\n      case 'build':\n      case 'afterValidate':\n      case 'afterBuild':\n        return [this];\n      case 'error':\n        return [this.response.error, this.response];\n      default:\n        return [this.response];\n    }\n  },\n\n  /**\n   * @api private\n   */\n  presign: function presign(expires, callback) {\n    if (!callback && typeof expires === 'function') {\n      callback = expires;\n      expires = null;\n    }\n    return new AWS.Signers.Presign().sign(this.toGet(), expires, callback);\n  },\n\n  /**\n   * @api private\n   */\n  isPresigned: function isPresigned() {\n    return Object.prototype.hasOwnProperty.call(this.httpRequest.headers, 'presigned-expires');\n  },\n\n  /**\n   * @api private\n   */\n  toUnauthenticated: function toUnauthenticated() {\n    this._unAuthenticated = true;\n    this.removeListener('validate', AWS.EventListeners.Core.VALIDATE_CREDENTIALS);\n    this.removeListener('sign', AWS.EventListeners.Core.SIGN);\n    return this;\n  },\n\n  /**\n   * @api private\n   */\n  toGet: function toGet() {\n    if (this.service.api.protocol === 'query' ||\n        this.service.api.protocol === 'ec2') {\n      this.removeListener('build', this.buildAsGet);\n      this.addListener('build', this.buildAsGet);\n    }\n    return this;\n  },\n\n  /**\n   * @api private\n   */\n  buildAsGet: function buildAsGet(request) {\n    request.httpRequest.method = 'GET';\n    request.httpRequest.path = request.service.endpoint.path +\n                               '?' + request.httpRequest.body;\n    request.httpRequest.body = '';\n\n    // don't need these headers on a GET request\n    delete request.httpRequest.headers['Content-Length'];\n    delete request.httpRequest.headers['Content-Type'];\n  },\n\n  /**\n   * @api private\n   */\n  haltHandlersOnError: function haltHandlersOnError() {\n    this._haltHandlersOnError = true;\n  }\n});\n\n/**\n * @api private\n */\nAWS.Request.addPromisesToClass = function addPromisesToClass(PromiseDependency) {\n  this.prototype.promise = function promise() {\n    var self = this;\n    // append to user agent\n    this.httpRequest.appendToUserAgent('promise');\n    return new PromiseDependency(function(resolve, reject) {\n      self.on('complete', function(resp) {\n        if (resp.error) {\n          reject(resp.error);\n        } else {\n          // define $response property so that it is not enumberable\n          // this prevents circular reference errors when stringifying the JSON object\n          resolve(Object.defineProperty(\n            resp.data || {},\n            '$response',\n            {value: resp}\n          ));\n        }\n      });\n      self.runTo();\n    });\n  };\n};\n\n/**\n * @api private\n */\nAWS.Request.deletePromisesFromClass = function deletePromisesFromClass() {\n  delete this.prototype.promise;\n};\n\nAWS.util.addPromises(AWS.Request);\n\nAWS.util.mixin(AWS.Request, AWS.SequentialExecutor);\n","function AcceptorStateMachine(states, state) {\n  this.currentState = state || null;\n  this.states = states || {};\n}\n\nAcceptorStateMachine.prototype.runTo = function runTo(finalState, done, bindObject, inputError) {\n  if (typeof finalState === 'function') {\n    inputError = bindObject; bindObject = done;\n    done = finalState; finalState = null;\n  }\n\n  var self = this;\n  var state = self.states[self.currentState];\n  state.fn.call(bindObject || self, inputError, function(err) {\n    if (err) {\n      if (state.fail) self.currentState = state.fail;\n      else return done ? done.call(bindObject, err) : null;\n    } else {\n      if (state.accept) self.currentState = state.accept;\n      else return done ? done.call(bindObject) : null;\n    }\n    if (self.currentState === finalState) {\n      return done ? done.call(bindObject, err) : null;\n    }\n\n    self.runTo(finalState, done, bindObject, err);\n  });\n};\n\nAcceptorStateMachine.prototype.addState = function addState(name, acceptState, failState, fn) {\n  if (typeof acceptState === 'function') {\n    fn = acceptState; acceptState = null; failState = null;\n  } else if (typeof failState === 'function') {\n    fn = failState; failState = null;\n  }\n\n  if (!this.currentState) this.currentState = name;\n  this.states[name] = { accept: acceptState, fail: failState, fn: fn };\n  return this;\n};\n\n/**\n * @api private\n */\nmodule.exports = AcceptorStateMachine;\n","var AWS = require('./core');\nvar inherit = AWS.util.inherit;\nvar jmespath = require('jmespath');\n\n/**\n * This class encapsulates the response information\n * from a service request operation sent through {AWS.Request}.\n * The response object has two main properties for getting information\n * back from a request:\n *\n * ## The `data` property\n *\n * The `response.data` property contains the serialized object data\n * retrieved from the service request. For instance, for an\n * Amazon DynamoDB `listTables` method call, the response data might\n * look like:\n *\n * ```\n * > resp.data\n * { TableNames:\n *    [ 'table1', 'table2', ... ] }\n * ```\n *\n * The `data` property can be null if an error occurs (see below).\n *\n * ## The `error` property\n *\n * In the event of a service error (or transfer error), the\n * `response.error` property will be filled with the given\n * error data in the form:\n *\n * ```\n * { code: 'SHORT_UNIQUE_ERROR_CODE',\n *   message: 'Some human readable error message' }\n * ```\n *\n * In the case of an error, the `data` property will be `null`.\n * Note that if you handle events that can be in a failure state,\n * you should always check whether `response.error` is set\n * before attempting to access the `response.data` property.\n *\n * @!attribute data\n *   @readonly\n *   @!group Data Properties\n *   @note Inside of a {AWS.Request~httpData} event, this\n *     property contains a single raw packet instead of the\n *     full de-serialized service response.\n *   @return [Object] the de-serialized response data\n *     from the service.\n *\n * @!attribute error\n *   An structure containing information about a service\n *   or networking error.\n *   @readonly\n *   @!group Data Properties\n *   @note This attribute is only filled if a service or\n *     networking error occurs.\n *   @return [Error]\n *     * code [String] a unique short code representing the\n *       error that was emitted.\n *     * message [String] a longer human readable error message\n *     * retryable [Boolean] whether the error message is\n *       retryable.\n *     * statusCode [Numeric] in the case of a request that reached the service,\n *       this value contains the response status code.\n *     * time [Date] the date time object when the error occurred.\n *     * hostname [String] set when a networking error occurs to easily\n *       identify the endpoint of the request.\n *     * region [String] set when a networking error occurs to easily\n *       identify the region of the request.\n *\n * @!attribute requestId\n *   @readonly\n *   @!group Data Properties\n *   @return [String] the unique request ID associated with the response.\n *     Log this value when debugging requests for AWS support.\n *\n * @!attribute retryCount\n *   @readonly\n *   @!group Operation Properties\n *   @return [Integer] the number of retries that were\n *     attempted before the request was completed.\n *\n * @!attribute redirectCount\n *   @readonly\n *   @!group Operation Properties\n *   @return [Integer] the number of redirects that were\n *     followed before the request was completed.\n *\n * @!attribute httpResponse\n *   @readonly\n *   @!group HTTP Properties\n *   @return [AWS.HttpResponse] the raw HTTP response object\n *     containing the response headers and body information\n *     from the server.\n *\n * @see AWS.Request\n */\nAWS.Response = inherit({\n\n  /**\n   * @api private\n   */\n  constructor: function Response(request) {\n    this.request = request;\n    this.data = null;\n    this.error = null;\n    this.retryCount = 0;\n    this.redirectCount = 0;\n    this.httpResponse = new AWS.HttpResponse();\n    if (request) {\n      this.maxRetries = request.service.numRetries();\n      this.maxRedirects = request.service.config.maxRedirects;\n    }\n  },\n\n  /**\n   * Creates a new request for the next page of response data, calling the\n   * callback with the page data if a callback is provided.\n   *\n   * @callback callback function(err, data)\n   *   Called when a page of data is returned from the next request.\n   *\n   *   @param err [Error] an error object, if an error occurred in the request\n   *   @param data [Object] the next page of data, or null, if there are no\n   *     more pages left.\n   * @return [AWS.Request] the request object for the next page of data\n   * @return [null] if no callback is provided and there are no pages left\n   *   to retrieve.\n   * @since v1.4.0\n   */\n  nextPage: function nextPage(callback) {\n    var config;\n    var service = this.request.service;\n    var operation = this.request.operation;\n    try {\n      config = service.paginationConfig(operation, true);\n    } catch (e) { this.error = e; }\n\n    if (!this.hasNextPage()) {\n      if (callback) callback(this.error, null);\n      else if (this.error) throw this.error;\n      return null;\n    }\n\n    var params = AWS.util.copy(this.request.params);\n    if (!this.nextPageTokens) {\n      return callback ? callback(null, null) : null;\n    } else {\n      var inputTokens = config.inputToken;\n      if (typeof inputTokens === 'string') inputTokens = [inputTokens];\n      for (var i = 0; i < inputTokens.length; i++) {\n        params[inputTokens[i]] = this.nextPageTokens[i];\n      }\n      return service.makeRequest(this.request.operation, params, callback);\n    }\n  },\n\n  /**\n   * @return [Boolean] whether more pages of data can be returned by further\n   *   requests\n   * @since v1.4.0\n   */\n  hasNextPage: function hasNextPage() {\n    this.cacheNextPageTokens();\n    if (this.nextPageTokens) return true;\n    if (this.nextPageTokens === undefined) return undefined;\n    else return false;\n  },\n\n  /**\n   * @api private\n   */\n  cacheNextPageTokens: function cacheNextPageTokens() {\n    if (Object.prototype.hasOwnProperty.call(this, 'nextPageTokens')) return this.nextPageTokens;\n    this.nextPageTokens = undefined;\n\n    var config = this.request.service.paginationConfig(this.request.operation);\n    if (!config) return this.nextPageTokens;\n\n    this.nextPageTokens = null;\n    if (config.moreResults) {\n      if (!jmespath.search(this.data, config.moreResults)) {\n        return this.nextPageTokens;\n      }\n    }\n\n    var exprs = config.outputToken;\n    if (typeof exprs === 'string') exprs = [exprs];\n    AWS.util.arrayEach.call(this, exprs, function (expr) {\n      var output = jmespath.search(this.data, expr);\n      if (output) {\n        this.nextPageTokens = this.nextPageTokens || [];\n        this.nextPageTokens.push(output);\n      }\n    });\n\n    return this.nextPageTokens;\n  }\n\n});\n","\n\n/* eslint-disable no-redeclare */\n// $FlowFixMe workaround for: https://github.com/facebook/flow/issues/2221\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar objectValues = Object.values || function (obj) {\n  return Object.keys(obj).map(function (key) {\n    return obj[key];\n  });\n};\nexport default objectValues;","/**\n * Copyright 2012-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You\n * may not use this file except in compliance with the License. A copy of\n * the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific\n * language governing permissions and limitations under the License.\n */\n\nvar AWS = require('./core');\nvar inherit = AWS.util.inherit;\nvar jmespath = require('jmespath');\n\n/**\n * @api private\n */\nfunction CHECK_ACCEPTORS(resp) {\n  var waiter = resp.request._waiter;\n  var acceptors = waiter.config.acceptors;\n  var acceptorMatched = false;\n  var state = 'retry';\n\n  acceptors.forEach(function(acceptor) {\n    if (!acceptorMatched) {\n      var matcher = waiter.matchers[acceptor.matcher];\n      if (matcher && matcher(resp, acceptor.expected, acceptor.argument)) {\n        acceptorMatched = true;\n        state = acceptor.state;\n      }\n    }\n  });\n\n  if (!acceptorMatched && resp.error) state = 'failure';\n\n  if (state === 'success') {\n    waiter.setSuccess(resp);\n  } else {\n    waiter.setError(resp, state === 'retry');\n  }\n}\n\n/**\n * @api private\n */\nAWS.ResourceWaiter = inherit({\n  /**\n   * Waits for a given state on a service object\n   * @param service [Service] the service object to wait on\n   * @param state [String] the state (defined in waiter configuration) to wait\n   *   for.\n   * @example Create a waiter for running EC2 instances\n   *   var ec2 = new AWS.EC2;\n   *   var waiter = new AWS.ResourceWaiter(ec2, 'instanceRunning');\n   */\n  constructor: function constructor(service, state) {\n    this.service = service;\n    this.state = state;\n    this.loadWaiterConfig(this.state);\n  },\n\n  service: null,\n\n  state: null,\n\n  config: null,\n\n  matchers: {\n    path: function(resp, expected, argument) {\n      try {\n        var result = jmespath.search(resp.data, argument);\n      } catch (err) {\n        return false;\n      }\n\n      return jmespath.strictDeepEqual(result,expected);\n    },\n\n    pathAll: function(resp, expected, argument) {\n      try {\n        var results = jmespath.search(resp.data, argument);\n      } catch (err) {\n        return false;\n      }\n\n      if (!Array.isArray(results)) results = [results];\n      var numResults = results.length;\n      if (!numResults) return false;\n      for (var ind = 0 ; ind < numResults; ind++) {\n        if (!jmespath.strictDeepEqual(results[ind], expected)) {\n          return false;\n        }\n      }\n      return true;\n    },\n\n    pathAny: function(resp, expected, argument) {\n      try {\n        var results = jmespath.search(resp.data, argument);\n      } catch (err) {\n        return false;\n      }\n\n      if (!Array.isArray(results)) results = [results];\n      var numResults = results.length;\n      for (var ind = 0 ; ind < numResults; ind++) {\n        if (jmespath.strictDeepEqual(results[ind], expected)) {\n          return true;\n        }\n      }\n      return false;\n    },\n\n    status: function(resp, expected) {\n      var statusCode = resp.httpResponse.statusCode;\n      return (typeof statusCode === 'number') && (statusCode === expected);\n    },\n\n    error: function(resp, expected) {\n      if (typeof expected === 'string' && resp.error) {\n        return expected === resp.error.code;\n      }\n      // if expected is not string, can be boolean indicating presence of error\n      return expected === !!resp.error;\n    }\n  },\n\n  listeners: new AWS.SequentialExecutor().addNamedListeners(function(add) {\n    add('RETRY_CHECK', 'retry', function(resp) {\n      var waiter = resp.request._waiter;\n      if (resp.error && resp.error.code === 'ResourceNotReady') {\n        resp.error.retryDelay = (waiter.config.delay || 0) * 1000;\n      }\n    });\n\n    add('CHECK_OUTPUT', 'extractData', CHECK_ACCEPTORS);\n\n    add('CHECK_ERROR', 'extractError', CHECK_ACCEPTORS);\n  }),\n\n  /**\n   * @return [AWS.Request]\n   */\n  wait: function wait(params, callback) {\n    if (typeof params === 'function') {\n      callback = params; params = undefined;\n    }\n\n    if (params && params.$waiter) {\n      params = AWS.util.copy(params);\n      if (typeof params.$waiter.delay === 'number') {\n        this.config.delay = params.$waiter.delay;\n      }\n      if (typeof params.$waiter.maxAttempts === 'number') {\n        this.config.maxAttempts = params.$waiter.maxAttempts;\n      }\n      delete params.$waiter;\n    }\n\n    var request = this.service.makeRequest(this.config.operation, params);\n    request._waiter = this;\n    request.response.maxRetries = this.config.maxAttempts;\n    request.addListeners(this.listeners);\n\n    if (callback) request.send(callback);\n    return request;\n  },\n\n  setSuccess: function setSuccess(resp) {\n    resp.error = null;\n    resp.data = resp.data || {};\n    resp.request.removeAllListeners('extractData');\n  },\n\n  setError: function setError(resp, retryable) {\n    resp.data = null;\n    resp.error = AWS.util.error(resp.error || new Error(), {\n      code: 'ResourceNotReady',\n      message: 'Resource is not in the state ' + this.state,\n      retryable: retryable\n    });\n  },\n\n  /**\n   * Loads waiter configuration from API configuration\n   *\n   * @api private\n   */\n  loadWaiterConfig: function loadWaiterConfig(state) {\n    if (!this.service.api.waiters[state]) {\n      throw new AWS.util.error(new Error(), {\n        code: 'StateNotFoundError',\n        message: 'State ' + state + ' not found.'\n      });\n    }\n\n    this.config = AWS.util.copy(this.service.api.waiters[state]);\n  }\n});\n","var AWS = require('../core');\n\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nAWS.Signers.RequestSigner = inherit({\n  constructor: function RequestSigner(request) {\n    this.request = request;\n  },\n\n  setServiceClientId: function setServiceClientId(id) {\n    this.serviceClientId = id;\n  },\n\n  getServiceClientId: function getServiceClientId() {\n    return this.serviceClientId;\n  }\n});\n\nAWS.Signers.RequestSigner.getVersion = function getVersion(version) {\n  switch (version) {\n    case 'v2': return AWS.Signers.V2;\n    case 'v3': return AWS.Signers.V3;\n    case 's3v4': return AWS.Signers.V4;\n    case 'v4': return AWS.Signers.V4;\n    case 's3': return AWS.Signers.S3;\n    case 'v3https': return AWS.Signers.V3Https;\n  }\n  throw new Error('Unknown signing version ' + version);\n};\n\nrequire('./v2');\nrequire('./v3');\nrequire('./v3https');\nrequire('./v4');\nrequire('./s3');\nrequire('./presign');\n","var AWS = require('../core');\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nAWS.Signers.V2 = inherit(AWS.Signers.RequestSigner, {\n  addAuthorization: function addAuthorization(credentials, date) {\n\n    if (!date) date = AWS.util.date.getDate();\n\n    var r = this.request;\n\n    r.params.Timestamp = AWS.util.date.iso8601(date);\n    r.params.SignatureVersion = '2';\n    r.params.SignatureMethod = 'HmacSHA256';\n    r.params.AWSAccessKeyId = credentials.accessKeyId;\n\n    if (credentials.sessionToken) {\n      r.params.SecurityToken = credentials.sessionToken;\n    }\n\n    delete r.params.Signature; // delete old Signature for re-signing\n    r.params.Signature = this.signature(credentials);\n\n    r.body = AWS.util.queryParamsToString(r.params);\n    r.headers['Content-Length'] = r.body.length;\n  },\n\n  signature: function signature(credentials) {\n    return AWS.util.crypto.hmac(credentials.secretAccessKey, this.stringToSign(), 'base64');\n  },\n\n  stringToSign: function stringToSign() {\n    var parts = [];\n    parts.push(this.request.method);\n    parts.push(this.request.endpoint.host.toLowerCase());\n    parts.push(this.request.pathname());\n    parts.push(AWS.util.queryParamsToString(this.request.params));\n    return parts.join('\\n');\n  }\n\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.V2;\n","var AWS = require('../core');\nvar inherit = AWS.util.inherit;\n\nrequire('./v3');\n\n/**\n * @api private\n */\nAWS.Signers.V3Https = inherit(AWS.Signers.V3, {\n  authorization: function authorization(credentials) {\n    return 'AWS3-HTTPS ' +\n      'AWSAccessKeyId=' + credentials.accessKeyId + ',' +\n      'Algorithm=HmacSHA256,' +\n      'Signature=' + this.signature(credentials);\n  },\n\n  stringToSign: function stringToSign() {\n    return this.request.headers['X-Amz-Date'];\n  }\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.V3Https;\n","var AWS = require('../core');\nvar v4Credentials = require('./v4_credentials');\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nvar expiresHeader = 'presigned-expires';\n\n/**\n * @api private\n */\nAWS.Signers.V4 = inherit(AWS.Signers.RequestSigner, {\n  constructor: function V4(request, serviceName, options) {\n    AWS.Signers.RequestSigner.call(this, request);\n    this.serviceName = serviceName;\n    options = options || {};\n    this.signatureCache = typeof options.signatureCache === 'boolean' ? options.signatureCache : true;\n    this.operation = options.operation;\n    this.signatureVersion = options.signatureVersion;\n  },\n\n  algorithm: 'AWS4-HMAC-SHA256',\n\n  addAuthorization: function addAuthorization(credentials, date) {\n    var datetime = AWS.util.date.iso8601(date).replace(/[:\\-]|\\.\\d{3}/g, '');\n\n    if (this.isPresigned()) {\n      this.updateForPresigned(credentials, datetime);\n    } else {\n      this.addHeaders(credentials, datetime);\n    }\n\n    this.request.headers['Authorization'] =\n      this.authorization(credentials, datetime);\n  },\n\n  addHeaders: function addHeaders(credentials, datetime) {\n    this.request.headers['X-Amz-Date'] = datetime;\n    if (credentials.sessionToken) {\n      this.request.headers['x-amz-security-token'] = credentials.sessionToken;\n    }\n  },\n\n  updateForPresigned: function updateForPresigned(credentials, datetime) {\n    var credString = this.credentialString(datetime);\n    var qs = {\n      'X-Amz-Date': datetime,\n      'X-Amz-Algorithm': this.algorithm,\n      'X-Amz-Credential': credentials.accessKeyId + '/' + credString,\n      'X-Amz-Expires': this.request.headers[expiresHeader],\n      'X-Amz-SignedHeaders': this.signedHeaders()\n    };\n\n    if (credentials.sessionToken) {\n      qs['X-Amz-Security-Token'] = credentials.sessionToken;\n    }\n\n    if (this.request.headers['Content-Type']) {\n      qs['Content-Type'] = this.request.headers['Content-Type'];\n    }\n    if (this.request.headers['Content-MD5']) {\n      qs['Content-MD5'] = this.request.headers['Content-MD5'];\n    }\n    if (this.request.headers['Cache-Control']) {\n      qs['Cache-Control'] = this.request.headers['Cache-Control'];\n    }\n\n    // need to pull in any other X-Amz-* headers\n    AWS.util.each.call(this, this.request.headers, function(key, value) {\n      if (key === expiresHeader) return;\n      if (this.isSignableHeader(key)) {\n        var lowerKey = key.toLowerCase();\n        // Metadata should be normalized\n        if (lowerKey.indexOf('x-amz-meta-') === 0) {\n          qs[lowerKey] = value;\n        } else if (lowerKey.indexOf('x-amz-') === 0) {\n          qs[key] = value;\n        }\n      }\n    });\n\n    var sep = this.request.path.indexOf('?') >= 0 ? '&' : '?';\n    this.request.path += sep + AWS.util.queryParamsToString(qs);\n  },\n\n  authorization: function authorization(credentials, datetime) {\n    var parts = [];\n    var credString = this.credentialString(datetime);\n    parts.push(this.algorithm + ' Credential=' +\n      credentials.accessKeyId + '/' + credString);\n    parts.push('SignedHeaders=' + this.signedHeaders());\n    parts.push('Signature=' + this.signature(credentials, datetime));\n    return parts.join(', ');\n  },\n\n  signature: function signature(credentials, datetime) {\n    var signingKey = v4Credentials.getSigningKey(\n      credentials,\n      datetime.substr(0, 8),\n      this.request.region,\n      this.serviceName,\n      this.signatureCache\n    );\n    return AWS.util.crypto.hmac(signingKey, this.stringToSign(datetime), 'hex');\n  },\n\n  stringToSign: function stringToSign(datetime) {\n    var parts = [];\n    parts.push('AWS4-HMAC-SHA256');\n    parts.push(datetime);\n    parts.push(this.credentialString(datetime));\n    parts.push(this.hexEncodedHash(this.canonicalString()));\n    return parts.join('\\n');\n  },\n\n  canonicalString: function canonicalString() {\n    var parts = [], pathname = this.request.pathname();\n    if (this.serviceName !== 's3' && this.signatureVersion !== 's3v4') pathname = AWS.util.uriEscapePath(pathname);\n\n    parts.push(this.request.method);\n    parts.push(pathname);\n    parts.push(this.request.search());\n    parts.push(this.canonicalHeaders() + '\\n');\n    parts.push(this.signedHeaders());\n    parts.push(this.hexEncodedBodyHash());\n    return parts.join('\\n');\n  },\n\n  canonicalHeaders: function canonicalHeaders() {\n    var headers = [];\n    AWS.util.each.call(this, this.request.headers, function (key, item) {\n      headers.push([key, item]);\n    });\n    headers.sort(function (a, b) {\n      return a[0].toLowerCase() < b[0].toLowerCase() ? -1 : 1;\n    });\n    var parts = [];\n    AWS.util.arrayEach.call(this, headers, function (item) {\n      var key = item[0].toLowerCase();\n      if (this.isSignableHeader(key)) {\n        var value = item[1];\n        if (typeof value === 'undefined' || value === null || typeof value.toString !== 'function') {\n          throw AWS.util.error(new Error('Header ' + key + ' contains invalid value'), {\n            code: 'InvalidHeader'\n          });\n        }\n        parts.push(key + ':' +\n          this.canonicalHeaderValues(value.toString()));\n      }\n    });\n    return parts.join('\\n');\n  },\n\n  canonicalHeaderValues: function canonicalHeaderValues(values) {\n    return values.replace(/\\s+/g, ' ').replace(/^\\s+|\\s+$/g, '');\n  },\n\n  signedHeaders: function signedHeaders() {\n    var keys = [];\n    AWS.util.each.call(this, this.request.headers, function (key) {\n      key = key.toLowerCase();\n      if (this.isSignableHeader(key)) keys.push(key);\n    });\n    return keys.sort().join(';');\n  },\n\n  credentialString: function credentialString(datetime) {\n    return v4Credentials.createScope(\n      datetime.substr(0, 8),\n      this.request.region,\n      this.serviceName\n    );\n  },\n\n  hexEncodedHash: function hash(string) {\n    return AWS.util.crypto.sha256(string, 'hex');\n  },\n\n  hexEncodedBodyHash: function hexEncodedBodyHash() {\n    var request = this.request;\n    if (this.isPresigned() && this.serviceName === 's3' && !request.body) {\n      return 'UNSIGNED-PAYLOAD';\n    } else if (request.headers['X-Amz-Content-Sha256']) {\n      return request.headers['X-Amz-Content-Sha256'];\n    } else {\n      return this.hexEncodedHash(this.request.body || '');\n    }\n  },\n\n  unsignableHeaders: [\n    'authorization',\n    'content-type',\n    'content-length',\n    'user-agent',\n    expiresHeader,\n    'expect',\n    'x-amzn-trace-id'\n  ],\n\n  isSignableHeader: function isSignableHeader(key) {\n    if (key.toLowerCase().indexOf('x-amz-') === 0) return true;\n    return this.unsignableHeaders.indexOf(key) < 0;\n  },\n\n  isPresigned: function isPresigned() {\n    return this.request.headers[expiresHeader] ? true : false;\n  }\n\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.V4;\n","var AWS = require('../core');\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nAWS.Signers.S3 = inherit(AWS.Signers.RequestSigner, {\n  /**\n   * When building the stringToSign, these sub resource params should be\n   * part of the canonical resource string with their NON-decoded values\n   */\n  subResources: {\n    'acl': 1,\n    'accelerate': 1,\n    'analytics': 1,\n    'cors': 1,\n    'lifecycle': 1,\n    'delete': 1,\n    'inventory': 1,\n    'location': 1,\n    'logging': 1,\n    'metrics': 1,\n    'notification': 1,\n    'partNumber': 1,\n    'policy': 1,\n    'requestPayment': 1,\n    'replication': 1,\n    'restore': 1,\n    'tagging': 1,\n    'torrent': 1,\n    'uploadId': 1,\n    'uploads': 1,\n    'versionId': 1,\n    'versioning': 1,\n    'versions': 1,\n    'website': 1\n  },\n\n  // when building the stringToSign, these querystring params should be\n  // part of the canonical resource string with their NON-encoded values\n  responseHeaders: {\n    'response-content-type': 1,\n    'response-content-language': 1,\n    'response-expires': 1,\n    'response-cache-control': 1,\n    'response-content-disposition': 1,\n    'response-content-encoding': 1\n  },\n\n  addAuthorization: function addAuthorization(credentials, date) {\n    if (!this.request.headers['presigned-expires']) {\n      this.request.headers['X-Amz-Date'] = AWS.util.date.rfc822(date);\n    }\n\n    if (credentials.sessionToken) {\n      // presigned URLs require this header to be lowercased\n      this.request.headers['x-amz-security-token'] = credentials.sessionToken;\n    }\n\n    var signature = this.sign(credentials.secretAccessKey, this.stringToSign());\n    var auth = 'AWS ' + credentials.accessKeyId + ':' + signature;\n\n    this.request.headers['Authorization'] = auth;\n  },\n\n  stringToSign: function stringToSign() {\n    var r = this.request;\n\n    var parts = [];\n    parts.push(r.method);\n    parts.push(r.headers['Content-MD5'] || '');\n    parts.push(r.headers['Content-Type'] || '');\n\n    // This is the \"Date\" header, but we use X-Amz-Date.\n    // The S3 signing mechanism requires us to pass an empty\n    // string for this Date header regardless.\n    parts.push(r.headers['presigned-expires'] || '');\n\n    var headers = this.canonicalizedAmzHeaders();\n    if (headers) parts.push(headers);\n    parts.push(this.canonicalizedResource());\n\n    return parts.join('\\n');\n\n  },\n\n  canonicalizedAmzHeaders: function canonicalizedAmzHeaders() {\n\n    var amzHeaders = [];\n\n    AWS.util.each(this.request.headers, function (name) {\n      if (name.match(/^x-amz-/i))\n        amzHeaders.push(name);\n    });\n\n    amzHeaders.sort(function (a, b) {\n      return a.toLowerCase() < b.toLowerCase() ? -1 : 1;\n    });\n\n    var parts = [];\n    AWS.util.arrayEach.call(this, amzHeaders, function (name) {\n      parts.push(name.toLowerCase() + ':' + String(this.request.headers[name]));\n    });\n\n    return parts.join('\\n');\n\n  },\n\n  canonicalizedResource: function canonicalizedResource() {\n\n    var r = this.request;\n\n    var parts = r.path.split('?');\n    var path = parts[0];\n    var querystring = parts[1];\n\n    var resource = '';\n\n    if (r.virtualHostedBucket)\n      resource += '/' + r.virtualHostedBucket;\n\n    resource += path;\n\n    if (querystring) {\n\n      // collect a list of sub resources and query params that need to be signed\n      var resources = [];\n\n      AWS.util.arrayEach.call(this, querystring.split('&'), function (param) {\n        var name = param.split('=')[0];\n        var value = param.split('=')[1];\n        if (this.subResources[name] || this.responseHeaders[name]) {\n          var subresource = { name: name };\n          if (value !== undefined) {\n            if (this.subResources[name]) {\n              subresource.value = value;\n            } else {\n              subresource.value = decodeURIComponent(value);\n            }\n          }\n          resources.push(subresource);\n        }\n      });\n\n      resources.sort(function (a, b) { return a.name < b.name ? -1 : 1; });\n\n      if (resources.length) {\n\n        querystring = [];\n        AWS.util.arrayEach(resources, function (res) {\n          if (res.value === undefined) {\n            querystring.push(res.name);\n          } else {\n            querystring.push(res.name + '=' + res.value);\n          }\n        });\n\n        resource += '?' + querystring.join('&');\n      }\n\n    }\n\n    return resource;\n\n  },\n\n  sign: function sign(secret, string) {\n    return AWS.util.crypto.hmac(secret, string, 'base64', 'sha1');\n  }\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.S3;\n","var AWS = require('../core');\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nvar expiresHeader = 'presigned-expires';\n\n/**\n * @api private\n */\nfunction signedUrlBuilder(request) {\n  var expires = request.httpRequest.headers[expiresHeader];\n  var signerClass = request.service.getSignerClass(request);\n\n  delete request.httpRequest.headers['User-Agent'];\n  delete request.httpRequest.headers['X-Amz-User-Agent'];\n\n  if (signerClass === AWS.Signers.V4) {\n    if (expires > 604800) { // one week expiry is invalid\n      var message = 'Presigning does not support expiry time greater ' +\n                    'than a week with SigV4 signing.';\n      throw AWS.util.error(new Error(), {\n        code: 'InvalidExpiryTime', message: message, retryable: false\n      });\n    }\n    request.httpRequest.headers[expiresHeader] = expires;\n  } else if (signerClass === AWS.Signers.S3) {\n    var now = request.service ? request.service.getSkewCorrectedDate() : AWS.util.date.getDate();\n    request.httpRequest.headers[expiresHeader] = parseInt(\n      AWS.util.date.unixTimestamp(now) + expires, 10).toString();\n  } else {\n    throw AWS.util.error(new Error(), {\n      message: 'Presigning only supports S3 or SigV4 signing.',\n      code: 'UnsupportedSigner', retryable: false\n    });\n  }\n}\n\n/**\n * @api private\n */\nfunction signedUrlSigner(request) {\n  var endpoint = request.httpRequest.endpoint;\n  var parsedUrl = AWS.util.urlParse(request.httpRequest.path);\n  var queryParams = {};\n\n  if (parsedUrl.search) {\n    queryParams = AWS.util.queryStringParse(parsedUrl.search.substr(1));\n  }\n\n  var auth = request.httpRequest.headers['Authorization'].split(' ');\n  if (auth[0] === 'AWS') {\n    auth = auth[1].split(':');\n    queryParams['AWSAccessKeyId'] = auth[0];\n    queryParams['Signature'] = auth[1];\n\n    AWS.util.each(request.httpRequest.headers, function (key, value) {\n      if (key === expiresHeader) key = 'Expires';\n      if (key.indexOf('x-amz-meta-') === 0) {\n        // Delete existing, potentially not normalized key\n        delete queryParams[key];\n        key = key.toLowerCase();\n      }\n      queryParams[key] = value;\n    });\n    delete request.httpRequest.headers[expiresHeader];\n    delete queryParams['Authorization'];\n    delete queryParams['Host'];\n  } else if (auth[0] === 'AWS4-HMAC-SHA256') { // SigV4 signing\n    auth.shift();\n    var rest = auth.join(' ');\n    var signature = rest.match(/Signature=(.*?)(?:,|\\s|\\r?\\n|$)/)[1];\n    queryParams['X-Amz-Signature'] = signature;\n    delete queryParams['Expires'];\n  }\n\n  // build URL\n  endpoint.pathname = parsedUrl.pathname;\n  endpoint.search = AWS.util.queryParamsToString(queryParams);\n}\n\n/**\n * @api private\n */\nAWS.Signers.Presign = inherit({\n  /**\n   * @api private\n   */\n  sign: function sign(request, expireTime, callback) {\n    request.httpRequest.headers[expiresHeader] = expireTime || 3600;\n    request.on('build', signedUrlBuilder);\n    request.on('sign', signedUrlSigner);\n    request.removeListener('afterBuild',\n      AWS.EventListeners.Core.SET_CONTENT_LENGTH);\n    request.removeListener('afterBuild',\n      AWS.EventListeners.Core.COMPUTE_SHA256);\n\n    request.emit('beforePresign', [request]);\n\n    if (callback) {\n      request.build(function() {\n        if (this.response.error) callback(this.response.error);\n        else {\n          callback(null, AWS.util.urlFormat(request.httpRequest.endpoint));\n        }\n      });\n    } else {\n      request.build();\n      if (request.response.error) throw request.response.error;\n      return AWS.util.urlFormat(request.httpRequest.endpoint);\n    }\n  }\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.Presign;\n","var AWS = require('./core');\n\n/**\n * @api private\n */\nAWS.ParamValidator = AWS.util.inherit({\n  /**\n   * Create a new validator object.\n   *\n   * @param validation [Boolean|map] whether input parameters should be\n   *     validated against the operation description before sending the\n   *     request. Pass a map to enable any of the following specific\n   *     validation features:\n   *\n   *     * **min** [Boolean] &mdash; Validates that a value meets the min\n   *       constraint. This is enabled by default when paramValidation is set\n   *       to `true`.\n   *     * **max** [Boolean] &mdash; Validates that a value meets the max\n   *       constraint.\n   *     * **pattern** [Boolean] &mdash; Validates that a string value matches a\n   *       regular expression.\n   *     * **enum** [Boolean] &mdash; Validates that a string value matches one\n   *       of the allowable enum values.\n   */\n  constructor: function ParamValidator(validation) {\n    if (validation === true || validation === undefined) {\n      validation = {'min': true};\n    }\n    this.validation = validation;\n  },\n\n  validate: function validate(shape, params, context) {\n    this.errors = [];\n    this.validateMember(shape, params || {}, context || 'params');\n\n    if (this.errors.length > 1) {\n      var msg = this.errors.join('\\n* ');\n      msg = 'There were ' + this.errors.length +\n        ' validation errors:\\n* ' + msg;\n      throw AWS.util.error(new Error(msg),\n        {code: 'MultipleValidationErrors', errors: this.errors});\n    } else if (this.errors.length === 1) {\n      throw this.errors[0];\n    } else {\n      return true;\n    }\n  },\n\n  fail: function fail(code, message) {\n    this.errors.push(AWS.util.error(new Error(message), {code: code}));\n  },\n\n  validateStructure: function validateStructure(shape, params, context) {\n    this.validateType(params, context, ['object'], 'structure');\n\n    var paramName;\n    for (var i = 0; shape.required && i < shape.required.length; i++) {\n      paramName = shape.required[i];\n      var value = params[paramName];\n      if (value === undefined || value === null) {\n        this.fail('MissingRequiredParameter',\n          'Missing required key \\'' + paramName + '\\' in ' + context);\n      }\n    }\n\n    // validate hash members\n    for (paramName in params) {\n      if (!Object.prototype.hasOwnProperty.call(params, paramName)) continue;\n\n      var paramValue = params[paramName],\n          memberShape = shape.members[paramName];\n\n      if (memberShape !== undefined) {\n        var memberContext = [context, paramName].join('.');\n        this.validateMember(memberShape, paramValue, memberContext);\n      } else {\n        this.fail('UnexpectedParameter',\n          'Unexpected key \\'' + paramName + '\\' found in ' + context);\n      }\n    }\n\n    return true;\n  },\n\n  validateMember: function validateMember(shape, param, context) {\n    switch (shape.type) {\n      case 'structure':\n        return this.validateStructure(shape, param, context);\n      case 'list':\n        return this.validateList(shape, param, context);\n      case 'map':\n        return this.validateMap(shape, param, context);\n      default:\n        return this.validateScalar(shape, param, context);\n    }\n  },\n\n  validateList: function validateList(shape, params, context) {\n    if (this.validateType(params, context, [Array])) {\n      this.validateRange(shape, params.length, context, 'list member count');\n      // validate array members\n      for (var i = 0; i < params.length; i++) {\n        this.validateMember(shape.member, params[i], context + '[' + i + ']');\n      }\n    }\n  },\n\n  validateMap: function validateMap(shape, params, context) {\n    if (this.validateType(params, context, ['object'], 'map')) {\n      // Build up a count of map members to validate range traits.\n      var mapCount = 0;\n      for (var param in params) {\n        if (!Object.prototype.hasOwnProperty.call(params, param)) continue;\n        // Validate any map key trait constraints\n        this.validateMember(shape.key, param,\n                            context + '[key=\\'' + param + '\\']');\n        this.validateMember(shape.value, params[param],\n                            context + '[\\'' + param + '\\']');\n        mapCount++;\n      }\n      this.validateRange(shape, mapCount, context, 'map member count');\n    }\n  },\n\n  validateScalar: function validateScalar(shape, value, context) {\n    switch (shape.type) {\n      case null:\n      case undefined:\n      case 'string':\n        return this.validateString(shape, value, context);\n      case 'base64':\n      case 'binary':\n        return this.validatePayload(value, context);\n      case 'integer':\n      case 'float':\n        return this.validateNumber(shape, value, context);\n      case 'boolean':\n        return this.validateType(value, context, ['boolean']);\n      case 'timestamp':\n        return this.validateType(value, context, [Date,\n          /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$/, 'number'],\n          'Date object, ISO-8601 string, or a UNIX timestamp');\n      default:\n        return this.fail('UnkownType', 'Unhandled type ' +\n                         shape.type + ' for ' + context);\n    }\n  },\n\n  validateString: function validateString(shape, value, context) {\n    var validTypes = ['string'];\n    if (shape.isJsonValue) {\n      validTypes = validTypes.concat(['number', 'object', 'boolean']);\n    }\n    if (value !== null && this.validateType(value, context, validTypes)) {\n      this.validateEnum(shape, value, context);\n      this.validateRange(shape, value.length, context, 'string length');\n      this.validatePattern(shape, value, context);\n      this.validateUri(shape, value, context);\n    }\n  },\n\n  validateUri: function validateUri(shape, value, context) {\n    if (shape['location'] === 'uri') {\n      if (value.length === 0) {\n        this.fail('UriParameterError', 'Expected uri parameter to have length >= 1,'\n          + ' but found \"' + value +'\" for ' + context);\n      }\n    }\n  },\n\n  validatePattern: function validatePattern(shape, value, context) {\n    if (this.validation['pattern'] && shape['pattern'] !== undefined) {\n      if (!(new RegExp(shape['pattern'])).test(value)) {\n        this.fail('PatternMatchError', 'Provided value \"' + value + '\" '\n          + 'does not match regex pattern /' + shape['pattern'] + '/ for '\n          + context);\n      }\n    }\n  },\n\n  validateRange: function validateRange(shape, value, context, descriptor) {\n    if (this.validation['min']) {\n      if (shape['min'] !== undefined && value < shape['min']) {\n        this.fail('MinRangeError', 'Expected ' + descriptor + ' >= '\n          + shape['min'] + ', but found ' + value + ' for ' + context);\n      }\n    }\n    if (this.validation['max']) {\n      if (shape['max'] !== undefined && value > shape['max']) {\n        this.fail('MaxRangeError', 'Expected ' + descriptor + ' <= '\n          + shape['max'] + ', but found ' + value + ' for ' + context);\n      }\n    }\n  },\n\n  validateEnum: function validateRange(shape, value, context) {\n    if (this.validation['enum'] && shape['enum'] !== undefined) {\n      // Fail if the string value is not present in the enum list\n      if (shape['enum'].indexOf(value) === -1) {\n        this.fail('EnumError', 'Found string value of ' + value + ', but '\n          + 'expected ' + shape['enum'].join('|') + ' for ' + context);\n      }\n    }\n  },\n\n  validateType: function validateType(value, context, acceptedTypes, type) {\n    // We will not log an error for null or undefined, but we will return\n    // false so that callers know that the expected type was not strictly met.\n    if (value === null || value === undefined) return false;\n\n    var foundInvalidType = false;\n    for (var i = 0; i < acceptedTypes.length; i++) {\n      if (typeof acceptedTypes[i] === 'string') {\n        if (typeof value === acceptedTypes[i]) return true;\n      } else if (acceptedTypes[i] instanceof RegExp) {\n        if ((value || '').toString().match(acceptedTypes[i])) return true;\n      } else {\n        if (value instanceof acceptedTypes[i]) return true;\n        if (AWS.util.isType(value, acceptedTypes[i])) return true;\n        if (!type && !foundInvalidType) acceptedTypes = acceptedTypes.slice();\n        acceptedTypes[i] = AWS.util.typeName(acceptedTypes[i]);\n      }\n      foundInvalidType = true;\n    }\n\n    var acceptedType = type;\n    if (!acceptedType) {\n      acceptedType = acceptedTypes.join(', ').replace(/,([^,]+)$/, ', or$1');\n    }\n\n    var vowel = acceptedType.match(/^[aeiou]/i) ? 'n' : '';\n    this.fail('InvalidParameterType', 'Expected ' + context + ' to be a' +\n              vowel + ' ' + acceptedType);\n    return false;\n  },\n\n  validateNumber: function validateNumber(shape, value, context) {\n    if (value === null || value === undefined) return;\n    if (typeof value === 'string') {\n      var castedValue = parseFloat(value);\n      if (castedValue.toString() === value) value = castedValue;\n    }\n    if (this.validateType(value, context, ['number'])) {\n      this.validateRange(shape, value, context, 'numeric value');\n    }\n  },\n\n  validatePayload: function validatePayload(value, context) {\n    if (value === null || value === undefined) return;\n    if (typeof value === 'string') return;\n    if (value && typeof value.byteLength === 'number') return; // typed arrays\n    if (AWS.util.isNode()) { // special check for buffer/stream in Node.js\n      var Stream = AWS.util.stream.Stream;\n      if (AWS.util.Buffer.isBuffer(value) || value instanceof Stream) return;\n    } else {\n      if (typeof Blob !== void 0 && value instanceof Blob) return;\n    }\n\n    var types = ['Buffer', 'Stream', 'File', 'Blob', 'ArrayBuffer', 'DataView'];\n    if (value) {\n      for (var i = 0; i < types.length; i++) {\n        if (AWS.util.isType(value, types[i])) return;\n        if (AWS.util.typeName(value.constructor) === types[i]) return;\n      }\n    }\n\n    this.fail('InvalidParameterType', 'Expected ' + context + ' to be a ' +\n      'string, Buffer, Stream, Blob, or typed array object');\n  }\n});\n","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","import { autoinject } from \"aurelia-framework\";\nimport { DefaultService } from \"shared-service/default-service\";\nimport { SearchResult } from \"shared-models/search-result\";\nimport { SearchRequest } from \"shared-models/search-request\";\n\n@autoinject\nexport class SearchService extends DefaultService{\n    private static readonly URI = \"search\";\n\n    constructor(){\n        super(SearchService.name);\n    }\n\n    async searchRecords(searchRequest: SearchRequest, recordConverter: (record: any) => any, self:any=this): Promise<SearchResult>{\n        let searchResult = await this.post(SearchService.URI, searchRequest);\n        \n        let records = (searchResult[\"records\"] || []).map(recordConverter.bind(self));\n        return new SearchResult({\n            recordType: searchRequest.recordType,\n            filter: searchRequest.filter,\n            pageCount: searchResult[\"pageCount\"],\n            pageSize: searchResult[\"pageSize\"],\n            totalRecords: searchResult[\"totalRecords\"],\n            records: records\n        });\n    }\n}","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n  var i = buf && offset || 0;\n  var b = buf || [];\n\n  options = options || {};\n  var node = options.node || _nodeId;\n  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n  // node and clockseq need to be initialized to random values if they're not\n  // specified.  We do this lazily to minimize issues related to insufficient\n  // system entropy.  See #189\n  if (node == null || clockseq == null) {\n    var seedBytes = rng();\n    if (node == null) {\n      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n      node = _nodeId = [\n        seedBytes[0] | 0x01,\n        seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n      ];\n    }\n    if (clockseq == null) {\n      // Per 4.2.2, randomize (14 bit) clockseq\n      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n    }\n  }\n\n  // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n  // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n  // Time since last uuid creation (in msecs)\n  var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n  // Per 4.2.1.2, Bump clockseq on clock regression\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  }\n\n  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  }\n\n  // Per 4.2.1.2 Throw error if too many uuids are requested\n  if (nsecs >= 10000) {\n    throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n  }\n\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq;\n\n  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n  msecs += 12219292800000;\n\n  // `time_low`\n  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n  b[i++] = tl >>> 24 & 0xff;\n  b[i++] = tl >>> 16 & 0xff;\n  b[i++] = tl >>> 8 & 0xff;\n  b[i++] = tl & 0xff;\n\n  // `time_mid`\n  var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff;\n\n  // `time_high_and_version`\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n  b[i++] = tmh >>> 16 & 0xff;\n\n  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n  b[i++] = clockseq >>> 8 | 0x80;\n\n  // `clock_seq_low`\n  b[i++] = clockseq & 0xff;\n\n  // `node`\n  for (var n = 0; n < 6; ++n) {\n    b[i + n] = node[n];\n  }\n\n  return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n  var i = buf && offset || 0;\n\n  if (typeof(options) == 'string') {\n    buf = options === 'binary' ? new Array(16) : null;\n    options = null;\n  }\n  options = options || {};\n\n  var rnds = options.random || (options.rng || rng)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = (rnds[6] & 0x0f) | 0x40;\n  rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    for (var ii = 0; ii < 16; ++ii) {\n      buf[i + ii] = rnds[ii];\n    }\n  }\n\n  return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","var Hmac = require('./browserHmac');\nvar Md5 = require('./browserMd5');\nvar Sha1 = require('./browserSha1');\nvar Sha256 = require('./browserSha256');\n\n/**\n * @api private\n */\nmodule.exports = exports = {\n    createHash: function createHash(alg) {\n      alg = alg.toLowerCase();\n      if (alg === 'md5') {\n        return new Md5();\n      } else if (alg === 'sha256') {\n        return new Sha256();\n      } else if (alg === 'sha1') {\n        return new Sha1();\n      }\n\n      throw new Error('Hash algorithm ' + alg + ' is not supported in the browser SDK');\n    },\n    createHmac: function createHmac(alg, key) {\n      alg = alg.toLowerCase();\n      if (alg === 'md5') {\n        return new Hmac(Md5, key);\n      } else if (alg === 'sha256') {\n        return new Hmac(Sha256, key);\n      } else if (alg === 'sha1') {\n        return new Hmac(Sha1, key);\n      }\n\n      throw new Error('HMAC algorithm ' + alg + ' is not supported in the browser SDK');\n    },\n    createSign: function() {\n      throw new Error('createSign is not implemented in the browser');\n    }\n  };\n","var hashUtils = require('./browserHashUtils');\n\n/**\n * @api private\n */\nfunction Hmac(hashCtor, secret) {\n    this.hash = new hashCtor();\n    this.outer = new hashCtor();\n\n    var inner = bufferFromSecret(hashCtor, secret);\n    var outer = new Uint8Array(hashCtor.BLOCK_SIZE);\n    outer.set(inner);\n\n    for (var i = 0; i < hashCtor.BLOCK_SIZE; i++) {\n        inner[i] ^= 0x36;\n        outer[i] ^= 0x5c;\n    }\n\n    this.hash.update(inner);\n    this.outer.update(outer);\n\n    // Zero out the copied key buffer.\n    for (var i = 0; i < inner.byteLength; i++) {\n        inner[i] = 0;\n    }\n}\n\n/**\n * @api private\n */\nmodule.exports = exports = Hmac;\n\nHmac.prototype.update = function (toHash) {\n    if (hashUtils.isEmptyData(toHash) || this.error) {\n        return this;\n    }\n\n    try {\n        this.hash.update(hashUtils.convertToBuffer(toHash));\n    } catch (e) {\n        this.error = e;\n    }\n\n    return this;\n};\n\nHmac.prototype.digest = function (encoding) {\n    if (!this.outer.finished) {\n        this.outer.update(this.hash.digest());\n    }\n\n    return this.outer.digest(encoding);\n};\n\nfunction bufferFromSecret(hashCtor, secret) {\n    var input = hashUtils.convertToBuffer(secret);\n    if (input.byteLength > hashCtor.BLOCK_SIZE) {\n        var bufferHash = new hashCtor;\n        bufferHash.update(input);\n        input = bufferHash.digest();\n    }\n    var buffer = new Uint8Array(hashCtor.BLOCK_SIZE);\n    buffer.set(input);\n    return buffer;\n}\n","var hashUtils = require('./browserHashUtils');\nvar Buffer = require('buffer/').Buffer;\n\nvar BLOCK_SIZE = 64;\n\nvar DIGEST_LENGTH = 16;\n\nvar INIT = [\n    0x67452301,\n    0xefcdab89,\n    0x98badcfe,\n    0x10325476,\n];\n\n/**\n * @api private\n */\nfunction Md5() {\n    this.state = [\n        0x67452301,\n        0xefcdab89,\n        0x98badcfe,\n        0x10325476,\n    ];\n    this.buffer = new DataView(new ArrayBuffer(BLOCK_SIZE));\n    this.bufferLength = 0;\n    this.bytesHashed = 0;\n    this.finished = false;\n}\n\n/**\n * @api private\n */\nmodule.exports = exports = Md5;\n\nMd5.BLOCK_SIZE = BLOCK_SIZE;\n\nMd5.prototype.update = function (sourceData) {\n    if (hashUtils.isEmptyData(sourceData)) {\n        return this;\n    } else if (this.finished) {\n        throw new Error('Attempted to update an already finished hash.');\n    }\n\n    var data = hashUtils.convertToBuffer(sourceData);\n    var position = 0;\n    var byteLength = data.byteLength;\n    this.bytesHashed += byteLength;\n    while (byteLength > 0) {\n        this.buffer.setUint8(this.bufferLength++, data[position++]);\n        byteLength--;\n        if (this.bufferLength === BLOCK_SIZE) {\n            this.hashBuffer();\n            this.bufferLength = 0;\n        }\n    }\n\n    return this;\n};\n\nMd5.prototype.digest = function (encoding) {\n    if (!this.finished) {\n        var _a = this, buffer = _a.buffer, undecoratedLength = _a.bufferLength, bytesHashed = _a.bytesHashed;\n        var bitsHashed = bytesHashed * 8;\n        buffer.setUint8(this.bufferLength++, 128);\n        // Ensure the final block has enough room for the hashed length\n        if (undecoratedLength % BLOCK_SIZE >= BLOCK_SIZE - 8) {\n            for (var i = this.bufferLength; i < BLOCK_SIZE; i++) {\n                buffer.setUint8(i, 0);\n            }\n            this.hashBuffer();\n            this.bufferLength = 0;\n        }\n        for (var i = this.bufferLength; i < BLOCK_SIZE - 8; i++) {\n            buffer.setUint8(i, 0);\n        }\n        buffer.setUint32(BLOCK_SIZE - 8, bitsHashed >>> 0, true);\n        buffer.setUint32(BLOCK_SIZE - 4, Math.floor(bitsHashed / 0x100000000), true);\n        this.hashBuffer();\n        this.finished = true;\n    }\n    var out = new DataView(new ArrayBuffer(DIGEST_LENGTH));\n    for (var i = 0; i < 4; i++) {\n        out.setUint32(i * 4, this.state[i], true);\n    }\n    var buff = new Buffer(out.buffer, out.byteOffset, out.byteLength);\n    return encoding ? buff.toString(encoding) : buff;\n};\n\nMd5.prototype.hashBuffer = function () {\n    var _a = this, buffer = _a.buffer, state = _a.state;\n    var a = state[0], b = state[1], c = state[2], d = state[3];\n    a = ff(a, b, c, d, buffer.getUint32(0, true), 7, 0xd76aa478);\n    d = ff(d, a, b, c, buffer.getUint32(4, true), 12, 0xe8c7b756);\n    c = ff(c, d, a, b, buffer.getUint32(8, true), 17, 0x242070db);\n    b = ff(b, c, d, a, buffer.getUint32(12, true), 22, 0xc1bdceee);\n    a = ff(a, b, c, d, buffer.getUint32(16, true), 7, 0xf57c0faf);\n    d = ff(d, a, b, c, buffer.getUint32(20, true), 12, 0x4787c62a);\n    c = ff(c, d, a, b, buffer.getUint32(24, true), 17, 0xa8304613);\n    b = ff(b, c, d, a, buffer.getUint32(28, true), 22, 0xfd469501);\n    a = ff(a, b, c, d, buffer.getUint32(32, true), 7, 0x698098d8);\n    d = ff(d, a, b, c, buffer.getUint32(36, true), 12, 0x8b44f7af);\n    c = ff(c, d, a, b, buffer.getUint32(40, true), 17, 0xffff5bb1);\n    b = ff(b, c, d, a, buffer.getUint32(44, true), 22, 0x895cd7be);\n    a = ff(a, b, c, d, buffer.getUint32(48, true), 7, 0x6b901122);\n    d = ff(d, a, b, c, buffer.getUint32(52, true), 12, 0xfd987193);\n    c = ff(c, d, a, b, buffer.getUint32(56, true), 17, 0xa679438e);\n    b = ff(b, c, d, a, buffer.getUint32(60, true), 22, 0x49b40821);\n    a = gg(a, b, c, d, buffer.getUint32(4, true), 5, 0xf61e2562);\n    d = gg(d, a, b, c, buffer.getUint32(24, true), 9, 0xc040b340);\n    c = gg(c, d, a, b, buffer.getUint32(44, true), 14, 0x265e5a51);\n    b = gg(b, c, d, a, buffer.getUint32(0, true), 20, 0xe9b6c7aa);\n    a = gg(a, b, c, d, buffer.getUint32(20, true), 5, 0xd62f105d);\n    d = gg(d, a, b, c, buffer.getUint32(40, true), 9, 0x02441453);\n    c = gg(c, d, a, b, buffer.getUint32(60, true), 14, 0xd8a1e681);\n    b = gg(b, c, d, a, buffer.getUint32(16, true), 20, 0xe7d3fbc8);\n    a = gg(a, b, c, d, buffer.getUint32(36, true), 5, 0x21e1cde6);\n    d = gg(d, a, b, c, buffer.getUint32(56, true), 9, 0xc33707d6);\n    c = gg(c, d, a, b, buffer.getUint32(12, true), 14, 0xf4d50d87);\n    b = gg(b, c, d, a, buffer.getUint32(32, true), 20, 0x455a14ed);\n    a = gg(a, b, c, d, buffer.getUint32(52, true), 5, 0xa9e3e905);\n    d = gg(d, a, b, c, buffer.getUint32(8, true), 9, 0xfcefa3f8);\n    c = gg(c, d, a, b, buffer.getUint32(28, true), 14, 0x676f02d9);\n    b = gg(b, c, d, a, buffer.getUint32(48, true), 20, 0x8d2a4c8a);\n    a = hh(a, b, c, d, buffer.getUint32(20, true), 4, 0xfffa3942);\n    d = hh(d, a, b, c, buffer.getUint32(32, true), 11, 0x8771f681);\n    c = hh(c, d, a, b, buffer.getUint32(44, true), 16, 0x6d9d6122);\n    b = hh(b, c, d, a, buffer.getUint32(56, true), 23, 0xfde5380c);\n    a = hh(a, b, c, d, buffer.getUint32(4, true), 4, 0xa4beea44);\n    d = hh(d, a, b, c, buffer.getUint32(16, true), 11, 0x4bdecfa9);\n    c = hh(c, d, a, b, buffer.getUint32(28, true), 16, 0xf6bb4b60);\n    b = hh(b, c, d, a, buffer.getUint32(40, true), 23, 0xbebfbc70);\n    a = hh(a, b, c, d, buffer.getUint32(52, true), 4, 0x289b7ec6);\n    d = hh(d, a, b, c, buffer.getUint32(0, true), 11, 0xeaa127fa);\n    c = hh(c, d, a, b, buffer.getUint32(12, true), 16, 0xd4ef3085);\n    b = hh(b, c, d, a, buffer.getUint32(24, true), 23, 0x04881d05);\n    a = hh(a, b, c, d, buffer.getUint32(36, true), 4, 0xd9d4d039);\n    d = hh(d, a, b, c, buffer.getUint32(48, true), 11, 0xe6db99e5);\n    c = hh(c, d, a, b, buffer.getUint32(60, true), 16, 0x1fa27cf8);\n    b = hh(b, c, d, a, buffer.getUint32(8, true), 23, 0xc4ac5665);\n    a = ii(a, b, c, d, buffer.getUint32(0, true), 6, 0xf4292244);\n    d = ii(d, a, b, c, buffer.getUint32(28, true), 10, 0x432aff97);\n    c = ii(c, d, a, b, buffer.getUint32(56, true), 15, 0xab9423a7);\n    b = ii(b, c, d, a, buffer.getUint32(20, true), 21, 0xfc93a039);\n    a = ii(a, b, c, d, buffer.getUint32(48, true), 6, 0x655b59c3);\n    d = ii(d, a, b, c, buffer.getUint32(12, true), 10, 0x8f0ccc92);\n    c = ii(c, d, a, b, buffer.getUint32(40, true), 15, 0xffeff47d);\n    b = ii(b, c, d, a, buffer.getUint32(4, true), 21, 0x85845dd1);\n    a = ii(a, b, c, d, buffer.getUint32(32, true), 6, 0x6fa87e4f);\n    d = ii(d, a, b, c, buffer.getUint32(60, true), 10, 0xfe2ce6e0);\n    c = ii(c, d, a, b, buffer.getUint32(24, true), 15, 0xa3014314);\n    b = ii(b, c, d, a, buffer.getUint32(52, true), 21, 0x4e0811a1);\n    a = ii(a, b, c, d, buffer.getUint32(16, true), 6, 0xf7537e82);\n    d = ii(d, a, b, c, buffer.getUint32(44, true), 10, 0xbd3af235);\n    c = ii(c, d, a, b, buffer.getUint32(8, true), 15, 0x2ad7d2bb);\n    b = ii(b, c, d, a, buffer.getUint32(36, true), 21, 0xeb86d391);\n    state[0] = (a + state[0]) & 0xFFFFFFFF;\n    state[1] = (b + state[1]) & 0xFFFFFFFF;\n    state[2] = (c + state[2]) & 0xFFFFFFFF;\n    state[3] = (d + state[3]) & 0xFFFFFFFF;\n};\n\nfunction cmn(q, a, b, x, s, t) {\n    a = (((a + q) & 0xFFFFFFFF) + ((x + t) & 0xFFFFFFFF)) & 0xFFFFFFFF;\n    return (((a << s) | (a >>> (32 - s))) + b) & 0xFFFFFFFF;\n}\n\nfunction ff(a, b, c, d, x, s, t) {\n    return cmn((b & c) | ((~b) & d), a, b, x, s, t);\n}\n\nfunction gg(a, b, c, d, x, s, t) {\n    return cmn((b & d) | (c & (~d)), a, b, x, s, t);\n}\n\nfunction hh(a, b, c, d, x, s, t) {\n    return cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction ii(a, b, c, d, x, s, t) {\n    return cmn(c ^ (b | (~d)), a, b, x, s, t);\n}\n","var Buffer = require('buffer/').Buffer;\nvar hashUtils = require('./browserHashUtils');\n\nvar BLOCK_SIZE = 64;\n\nvar DIGEST_LENGTH = 20;\n\nvar KEY = new Uint32Array([\n    0x5a827999,\n    0x6ed9eba1,\n    0x8f1bbcdc | 0,\n    0xca62c1d6 | 0\n]);\n\nvar INIT = [\n    0x6a09e667,\n    0xbb67ae85,\n    0x3c6ef372,\n    0xa54ff53a,\n    0x510e527f,\n    0x9b05688c,\n    0x1f83d9ab,\n    0x5be0cd19,\n];\n\nvar MAX_HASHABLE_LENGTH = Math.pow(2, 53) - 1;\n\n/**\n * @api private\n */\nfunction Sha1() {\n    this.h0 = 0x67452301;\n    this.h1 = 0xEFCDAB89;\n    this.h2 = 0x98BADCFE;\n    this.h3 = 0x10325476;\n    this.h4 = 0xC3D2E1F0;\n    // The first 64 bytes (16 words) is the data chunk\n    this.block = new Uint32Array(80);\n    this.offset = 0;\n    this.shift = 24;\n    this.totalLength = 0;\n}\n\n/**\n * @api private\n */\nmodule.exports = exports = Sha1;\n\nSha1.BLOCK_SIZE = BLOCK_SIZE;\n\nSha1.prototype.update = function (data) {\n    if (this.finished) {\n        throw new Error('Attempted to update an already finished hash.');\n    }\n\n    if (hashUtils.isEmptyData(data)) {\n        return this;\n    }\n\n    data = hashUtils.convertToBuffer(data);\n\n    var length = data.length;\n    this.totalLength += length * 8;\n    for (var i = 0; i < length; i++) {\n        this.write(data[i]);\n    }\n\n    return this;\n};\n\nSha1.prototype.write = function write(byte) {\n    this.block[this.offset] |= (byte & 0xff) << this.shift;\n    if (this.shift) {\n        this.shift -= 8;\n    } else {\n        this.offset++;\n        this.shift = 24;\n    }\n\n    if (this.offset === 16) this.processBlock();\n};\n\nSha1.prototype.digest = function (encoding) {\n    // Pad\n    this.write(0x80);\n    if (this.offset > 14 || (this.offset === 14 && this.shift < 24)) {\n      this.processBlock();\n    }\n    this.offset = 14;\n    this.shift = 24;\n\n    // 64-bit length big-endian\n    this.write(0x00); // numbers this big aren't accurate in javascript anyway\n    this.write(0x00); // ..So just hard-code to zero.\n    this.write(this.totalLength > 0xffffffffff ? this.totalLength / 0x10000000000 : 0x00);\n    this.write(this.totalLength > 0xffffffff ? this.totalLength / 0x100000000 : 0x00);\n    for (var s = 24; s >= 0; s -= 8) {\n        this.write(this.totalLength >> s);\n    }\n    // The value in state is little-endian rather than big-endian, so flip\n    // each word into a new Uint8Array\n    var out = new Buffer(DIGEST_LENGTH);\n    var outView = new DataView(out.buffer);\n    outView.setUint32(0, this.h0, false);\n    outView.setUint32(4, this.h1, false);\n    outView.setUint32(8, this.h2, false);\n    outView.setUint32(12, this.h3, false);\n    outView.setUint32(16, this.h4, false);\n\n    return encoding ? out.toString(encoding) : out;\n};\n\nSha1.prototype.processBlock = function processBlock() {\n    // Extend the sixteen 32-bit words into eighty 32-bit words:\n    for (var i = 16; i < 80; i++) {\n      var w = this.block[i - 3] ^ this.block[i - 8] ^ this.block[i - 14] ^ this.block[i - 16];\n      this.block[i] = (w << 1) | (w >>> 31);\n    }\n\n    // Initialize hash value for this chunk:\n    var a = this.h0;\n    var b = this.h1;\n    var c = this.h2;\n    var d = this.h3;\n    var e = this.h4;\n    var f, k;\n\n    // Main loop:\n    for (i = 0; i < 80; i++) {\n      if (i < 20) {\n        f = d ^ (b & (c ^ d));\n        k = 0x5A827999;\n      }\n      else if (i < 40) {\n        f = b ^ c ^ d;\n        k = 0x6ED9EBA1;\n      }\n      else if (i < 60) {\n        f = (b & c) | (d & (b | c));\n        k = 0x8F1BBCDC;\n      }\n      else {\n        f = b ^ c ^ d;\n        k = 0xCA62C1D6;\n      }\n      var temp = (a << 5 | a >>> 27) + f + e + k + (this.block[i]|0);\n      e = d;\n      d = c;\n      c = (b << 30 | b >>> 2);\n      b = a;\n      a = temp;\n    }\n\n    // Add this chunk's hash to result so far:\n    this.h0 = (this.h0 + a) | 0;\n    this.h1 = (this.h1 + b) | 0;\n    this.h2 = (this.h2 + c) | 0;\n    this.h3 = (this.h3 + d) | 0;\n    this.h4 = (this.h4 + e) | 0;\n\n    // The block is now reusable.\n    this.offset = 0;\n    for (i = 0; i < 16; i++) {\n        this.block[i] = 0;\n    }\n};\n","var Buffer = require('buffer/').Buffer;\nvar hashUtils = require('./browserHashUtils');\n\nvar BLOCK_SIZE = 64;\n\nvar DIGEST_LENGTH = 32;\n\nvar KEY = new Uint32Array([\n    0x428a2f98,\n    0x71374491,\n    0xb5c0fbcf,\n    0xe9b5dba5,\n    0x3956c25b,\n    0x59f111f1,\n    0x923f82a4,\n    0xab1c5ed5,\n    0xd807aa98,\n    0x12835b01,\n    0x243185be,\n    0x550c7dc3,\n    0x72be5d74,\n    0x80deb1fe,\n    0x9bdc06a7,\n    0xc19bf174,\n    0xe49b69c1,\n    0xefbe4786,\n    0x0fc19dc6,\n    0x240ca1cc,\n    0x2de92c6f,\n    0x4a7484aa,\n    0x5cb0a9dc,\n    0x76f988da,\n    0x983e5152,\n    0xa831c66d,\n    0xb00327c8,\n    0xbf597fc7,\n    0xc6e00bf3,\n    0xd5a79147,\n    0x06ca6351,\n    0x14292967,\n    0x27b70a85,\n    0x2e1b2138,\n    0x4d2c6dfc,\n    0x53380d13,\n    0x650a7354,\n    0x766a0abb,\n    0x81c2c92e,\n    0x92722c85,\n    0xa2bfe8a1,\n    0xa81a664b,\n    0xc24b8b70,\n    0xc76c51a3,\n    0xd192e819,\n    0xd6990624,\n    0xf40e3585,\n    0x106aa070,\n    0x19a4c116,\n    0x1e376c08,\n    0x2748774c,\n    0x34b0bcb5,\n    0x391c0cb3,\n    0x4ed8aa4a,\n    0x5b9cca4f,\n    0x682e6ff3,\n    0x748f82ee,\n    0x78a5636f,\n    0x84c87814,\n    0x8cc70208,\n    0x90befffa,\n    0xa4506ceb,\n    0xbef9a3f7,\n    0xc67178f2\n]);\n\nvar INIT = [\n    0x6a09e667,\n    0xbb67ae85,\n    0x3c6ef372,\n    0xa54ff53a,\n    0x510e527f,\n    0x9b05688c,\n    0x1f83d9ab,\n    0x5be0cd19,\n];\n\nvar MAX_HASHABLE_LENGTH = Math.pow(2, 53) - 1;\n\n/**\n * @private\n */\nfunction Sha256() {\n    this.state = [\n        0x6a09e667,\n        0xbb67ae85,\n        0x3c6ef372,\n        0xa54ff53a,\n        0x510e527f,\n        0x9b05688c,\n        0x1f83d9ab,\n        0x5be0cd19,\n    ];\n    this.temp = new Int32Array(64);\n    this.buffer = new Uint8Array(64);\n    this.bufferLength = 0;\n    this.bytesHashed = 0;\n    /**\n     * @private\n     */\n    this.finished = false;\n}\n\n/**\n * @api private\n */\nmodule.exports = exports = Sha256;\n\nSha256.BLOCK_SIZE = BLOCK_SIZE;\n\nSha256.prototype.update = function (data) {\n    if (this.finished) {\n        throw new Error('Attempted to update an already finished hash.');\n    }\n\n    if (hashUtils.isEmptyData(data)) {\n        return this;\n    }\n\n    data = hashUtils.convertToBuffer(data);\n\n    var position = 0;\n    var byteLength = data.byteLength;\n    this.bytesHashed += byteLength;\n    if (this.bytesHashed * 8 > MAX_HASHABLE_LENGTH) {\n        throw new Error('Cannot hash more than 2^53 - 1 bits');\n    }\n\n    while (byteLength > 0) {\n        this.buffer[this.bufferLength++] = data[position++];\n        byteLength--;\n        if (this.bufferLength === BLOCK_SIZE) {\n            this.hashBuffer();\n            this.bufferLength = 0;\n        }\n    }\n\n    return this;\n};\n\nSha256.prototype.digest = function (encoding) {\n    if (!this.finished) {\n        var bitsHashed = this.bytesHashed * 8;\n        var bufferView = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);\n        var undecoratedLength = this.bufferLength;\n        bufferView.setUint8(this.bufferLength++, 0x80);\n        // Ensure the final block has enough room for the hashed length\n        if (undecoratedLength % BLOCK_SIZE >= BLOCK_SIZE - 8) {\n            for (var i = this.bufferLength; i < BLOCK_SIZE; i++) {\n                bufferView.setUint8(i, 0);\n            }\n            this.hashBuffer();\n            this.bufferLength = 0;\n        }\n        for (var i = this.bufferLength; i < BLOCK_SIZE - 8; i++) {\n            bufferView.setUint8(i, 0);\n        }\n        bufferView.setUint32(BLOCK_SIZE - 8, Math.floor(bitsHashed / 0x100000000), true);\n        bufferView.setUint32(BLOCK_SIZE - 4, bitsHashed);\n        this.hashBuffer();\n        this.finished = true;\n    }\n    // The value in state is little-endian rather than big-endian, so flip\n    // each word into a new Uint8Array\n    var out = new Buffer(DIGEST_LENGTH);\n    for (var i = 0; i < 8; i++) {\n        out[i * 4] = (this.state[i] >>> 24) & 0xff;\n        out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n        out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n        out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n    }\n    return encoding ? out.toString(encoding) : out;\n};\n\nSha256.prototype.hashBuffer = function () {\n    var _a = this,\n        buffer = _a.buffer,\n        state = _a.state;\n    var state0 = state[0],\n        state1 = state[1],\n        state2 = state[2],\n        state3 = state[3],\n        state4 = state[4],\n        state5 = state[5],\n        state6 = state[6],\n        state7 = state[7];\n    for (var i = 0; i < BLOCK_SIZE; i++) {\n        if (i < 16) {\n            this.temp[i] = (((buffer[i * 4] & 0xff) << 24) |\n                ((buffer[(i * 4) + 1] & 0xff) << 16) |\n                ((buffer[(i * 4) + 2] & 0xff) << 8) |\n                (buffer[(i * 4) + 3] & 0xff));\n        }\n        else {\n            var u = this.temp[i - 2];\n            var t1_1 = (u >>> 17 | u << 15) ^\n                (u >>> 19 | u << 13) ^\n                (u >>> 10);\n            u = this.temp[i - 15];\n            var t2_1 = (u >>> 7 | u << 25) ^\n                (u >>> 18 | u << 14) ^\n                (u >>> 3);\n            this.temp[i] = (t1_1 + this.temp[i - 7] | 0) +\n                (t2_1 + this.temp[i - 16] | 0);\n        }\n        var t1 = (((((state4 >>> 6 | state4 << 26) ^\n            (state4 >>> 11 | state4 << 21) ^\n            (state4 >>> 25 | state4 << 7))\n            + ((state4 & state5) ^ (~state4 & state6))) | 0)\n            + ((state7 + ((KEY[i] + this.temp[i]) | 0)) | 0)) | 0;\n        var t2 = (((state0 >>> 2 | state0 << 30) ^\n            (state0 >>> 13 | state0 << 19) ^\n            (state0 >>> 22 | state0 << 10)) + ((state0 & state1) ^ (state0 & state2) ^ (state1 & state2))) | 0;\n        state7 = state6;\n        state6 = state5;\n        state5 = state4;\n        state4 = (state3 + t1) | 0;\n        state3 = state2;\n        state2 = state1;\n        state1 = state0;\n        state0 = (t1 + t2) | 0;\n    }\n    state[0] += state0;\n    state[1] += state1;\n    state[2] += state2;\n    state[3] += state3;\n    state[4] += state4;\n    state[5] += state5;\n    state[6] += state6;\n    state[7] += state7;\n};\n","/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t    counter = 0,\n\t\t    length = string.length,\n\t\t    value,\n\t\t    extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t//  0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t    inputLength = input.length,\n\t\t    out,\n\t\t    i = 0,\n\t\t    n = initialN,\n\t\t    bias = initialBias,\n\t\t    basic,\n\t\t    j,\n\t\t    index,\n\t\t    oldi,\n\t\t    w,\n\t\t    k,\n\t\t    digit,\n\t\t    t,\n\t\t    /** Cached calculation results */\n\t\t    baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t    delta,\n\t\t    handledCPCount,\n\t\t    basicLength,\n\t\t    bias,\n\t\t    j,\n\t\t    m,\n\t\t    q,\n\t\t    k,\n\t\t    t,\n\t\t    currentValue,\n\t\t    output = [],\n\t\t    /** `inputLength` will hold the number of code points in `input`. */\n\t\t    inputLength,\n\t\t    /** Cached calculation results */\n\t\t    handledCPCountPlusOne,\n\t\t    baseMinusT,\n\t\t    qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","'use strict';\n\nmodule.exports = {\n  isString: function(arg) {\n    return typeof(arg) === 'string';\n  },\n  isObject: function(arg) {\n    return typeof(arg) === 'object' && arg !== null;\n  },\n  isNull: function(arg) {\n    return arg === null;\n  },\n  isNullOrUndefined: function(arg) {\n    return arg == null;\n  }\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n  sep = sep || '&';\n  eq = eq || '=';\n  var obj = {};\n\n  if (typeof qs !== 'string' || qs.length === 0) {\n    return obj;\n  }\n\n  var regexp = /\\+/g;\n  qs = qs.split(sep);\n\n  var maxKeys = 1000;\n  if (options && typeof options.maxKeys === 'number') {\n    maxKeys = options.maxKeys;\n  }\n\n  var len = qs.length;\n  // maxKeys <= 0 means that we should not limit keys count\n  if (maxKeys > 0 && len > maxKeys) {\n    len = maxKeys;\n  }\n\n  for (var i = 0; i < len; ++i) {\n    var x = qs[i].replace(regexp, '%20'),\n        idx = x.indexOf(eq),\n        kstr, vstr, k, v;\n\n    if (idx >= 0) {\n      kstr = x.substr(0, idx);\n      vstr = x.substr(idx + 1);\n    } else {\n      kstr = x;\n      vstr = '';\n    }\n\n    k = decodeURIComponent(kstr);\n    v = decodeURIComponent(vstr);\n\n    if (!hasOwnProperty(obj, k)) {\n      obj[k] = v;\n    } else if (isArray(obj[k])) {\n      obj[k].push(v);\n    } else {\n      obj[k] = [obj[k], v];\n    }\n  }\n\n  return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","import { autoinject } from \"aurelia-framework\";\nimport { DefaultService } from \"shared-service/default-service\";\nimport { GetRecordRequest } from \"shared-models/get-record-request\";\nimport { GetRecordResponse } from \"shared-models/get-record-response\";\n\n@autoinject\nexport class GetRecordService extends DefaultService{\n    private static readonly URI = \"get-record\";\n\n    constructor(){\n        super(GetRecordService.name);\n    }\n\n    async getRecord(getRecordRequest: GetRecordRequest, recordConverter: (record: any) => any, self:any=this): Promise<GetRecordResponse>{\n        let getRecordResult = await this.post(GetRecordService.URI, getRecordRequest);\n        \n        let record = recordConverter.call(self, getRecordResult[\"record\"]);\n        return new GetRecordResponse({\n            recordType: getRecordRequest.recordType,\n            recordId: getRecordRequest.recordId,\n            record: record\n        });\n    }\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n  switch (typeof v) {\n    case 'string':\n      return v;\n\n    case 'boolean':\n      return v ? 'true' : 'false';\n\n    case 'number':\n      return isFinite(v) ? v : '';\n\n    default:\n      return '';\n  }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n  sep = sep || '&';\n  eq = eq || '=';\n  if (obj === null) {\n    obj = undefined;\n  }\n\n  if (typeof obj === 'object') {\n    return map(objectKeys(obj), function(k) {\n      var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n      if (isArray(obj[k])) {\n        return map(obj[k], function(v) {\n          return ks + encodeURIComponent(stringifyPrimitive(v));\n        }).join(sep);\n      } else {\n        return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n      }\n    }).join(sep);\n\n  }\n\n  if (!name) return '';\n  return encodeURIComponent(stringifyPrimitive(name)) + eq +\n         encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n  if (xs.map) return xs.map(f);\n  var res = [];\n  for (var i = 0; i < xs.length; i++) {\n    res.push(f(xs[i], i));\n  }\n  return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n  var res = [];\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n  }\n  return res;\n};\n","module.exports = {\n  //provide realtime clock for performance measurement\n  now: function now() {\n    if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n      return performance.now();\n    }\n    return Date.now();\n  }\n};\n","var eventMessageChunker = require('../event-stream/event-message-chunker').eventMessageChunker;\nvar parseEvent = require('./parse-event').parseEvent;\n\nfunction createEventStream(body, parser, model) {\n    var eventMessages = eventMessageChunker(body);\n\n    var events = [];\n\n    for (var i = 0; i < eventMessages.length; i++) {\n        events.push(parseEvent(parser, eventMessages[i], model));\n    }\n\n    return events;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n    createEventStream: createEventStream\n};\n","/**\n * Takes in a buffer of event messages and splits them into individual messages.\n * @param {Buffer} buffer\n * @api private\n */\nfunction eventMessageChunker(buffer) {\n    /** @type Buffer[] */\n    var messages = [];\n    var offset = 0;\n\n    while (offset < buffer.length) {\n        var totalLength = buffer.readInt32BE(offset);\n\n        // create new buffer for individual message (shares memory with original)\n        var message = buffer.slice(offset, totalLength + offset);\n        // increment offset to it starts at the next message\n        offset += totalLength;\n\n        messages.push(message);\n    }\n\n    return messages;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n    eventMessageChunker: eventMessageChunker\n};\n","var parseMessage = require('./parse-message').parseMessage;\n\n/**\n *\n * @param {*} parser\n * @param {Buffer} message\n * @param {*} shape\n * @api private\n */\nfunction parseEvent(parser, message, shape) {\n    var parsedMessage = parseMessage(message);\n\n    // check if message is an event or error\n    var messageType = parsedMessage.headers[':message-type'];\n    if (messageType) {\n        if (messageType.value === 'error') {\n            throw parseError(parsedMessage);\n        } else if (messageType.value !== 'event') {\n            // not sure how to parse non-events/non-errors, ignore for now\n            return;\n        }\n    }\n\n    // determine event type\n    var eventType = parsedMessage.headers[':event-type'];\n    // check that the event type is modeled\n    var eventModel = shape.members[eventType.value];\n    if (!eventModel) {\n        return;\n    }\n\n    var result = {};\n    // check if an event payload exists\n    var eventPayloadMemberName = eventModel.eventPayloadMemberName;\n    if (eventPayloadMemberName) {\n        var payloadShape = eventModel.members[eventPayloadMemberName];\n        // if the shape is binary, return the byte array\n        if (payloadShape.type === 'binary') {\n            result[eventPayloadMemberName] = parsedMessage.body;\n        } else {\n            result[eventPayloadMemberName] = parser.parse(parsedMessage.body.toString(), payloadShape);\n        }\n    }\n\n    // read event headers\n    var eventHeaderNames = eventModel.eventHeaderMemberNames;\n    for (var i = 0; i < eventHeaderNames.length; i++) {\n        var name = eventHeaderNames[i];\n        if (parsedMessage.headers[name]) {\n            // parse the header!\n            result[name] = eventModel.members[name].toType(parsedMessage.headers[name].value);\n        }\n    }\n\n    var output = {};\n    output[eventType.value] = result;\n    return output;\n}\n\nfunction parseError(message) {\n    var errorCode = message.headers[':error-code'];\n    var errorMessage = message.headers[':error-message'];\n    var error = new Error(errorMessage.value || errorMessage);\n    error.code = error.name = errorCode.value || errorCode;\n    return error;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n    parseEvent: parseEvent\n};\n","var Int64 = require('./int64').Int64;\n\nvar splitMessage = require('./split-message').splitMessage;\n\nvar BOOLEAN_TAG = 'boolean';\nvar BYTE_TAG = 'byte';\nvar SHORT_TAG = 'short';\nvar INT_TAG = 'integer';\nvar LONG_TAG = 'long';\nvar BINARY_TAG = 'binary';\nvar STRING_TAG = 'string';\nvar TIMESTAMP_TAG = 'timestamp';\nvar UUID_TAG = 'uuid';\n\n/**\n * @api private\n *\n * @param {Buffer} headers\n */\nfunction parseHeaders(headers) {\n    var out = {};\n    var position = 0;\n    while (position < headers.length) {\n        var nameLength = headers.readUInt8(position++);\n        var name = headers.slice(position, position + nameLength).toString();\n        position += nameLength;\n        switch (headers.readUInt8(position++)) {\n            case 0 /* boolTrue */:\n                out[name] = {\n                    type: BOOLEAN_TAG,\n                    value: true\n                };\n                break;\n            case 1 /* boolFalse */:\n                out[name] = {\n                    type: BOOLEAN_TAG,\n                    value: false\n                };\n                break;\n            case 2 /* byte */:\n                out[name] = {\n                    type: BYTE_TAG,\n                    value: headers.readInt8(position++)\n                };\n                break;\n            case 3 /* short */:\n                out[name] = {\n                    type: SHORT_TAG,\n                    value: headers.readInt16BE(position)\n                };\n                position += 2;\n                break;\n            case 4 /* integer */:\n                out[name] = {\n                    type: INT_TAG,\n                    value: headers.readInt32BE(position)\n                };\n                position += 4;\n                break;\n            case 5 /* long */:\n                out[name] = {\n                    type: LONG_TAG,\n                    value: new Int64(headers.slice(position, position + 8))\n                };\n                position += 8;\n                break;\n            case 6 /* byteArray */:\n                var binaryLength = headers.readUInt16BE(position);\n                position += 2;\n                out[name] = {\n                    type: BINARY_TAG,\n                    value: headers.slice(position, position + binaryLength)\n                };\n                position += binaryLength;\n                break;\n            case 7 /* string */:\n                var stringLength = headers.readUInt16BE(position);\n                position += 2;\n                out[name] = {\n                    type: STRING_TAG,\n                    value: headers.slice(\n                        position,\n                        position + stringLength\n                    ).toString()\n                };\n                position += stringLength;\n                break;\n            case 8 /* timestamp */:\n                out[name] = {\n                    type: TIMESTAMP_TAG,\n                    value: new Date(\n                        new Int64(headers.slice(position, position + 8))\n                            .valueOf()\n                    )\n                };\n                position += 8;\n                break;\n            case 9 /* uuid */:\n                var uuidChars = headers.slice(position, position + 16)\n                    .toString('hex');\n                position += 16;\n                out[name] = {\n                    type: UUID_TAG,\n                    value: uuidChars.substr(0, 8) + '-' +\n                        uuidChars.substr(8, 4) + '-' +\n                        uuidChars.substr(12, 4) + '-' +\n                        uuidChars.substr(16, 4) + '-' +\n                        uuidChars.substr(20)\n                };\n                break;\n            default:\n                throw new Error('Unrecognized header type tag');\n        }\n    }\n    return out;\n}\n\nfunction parseMessage(message) {\n    var parsed = splitMessage(message);\n    return { headers: parseHeaders(parsed.headers), body: parsed.body };\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n    parseMessage: parseMessage\n};\n","var util = require('../core').util;\nvar toBuffer = util.buffer.toBuffer;\n\n/**\n * A lossless representation of a signed, 64-bit integer. Instances of this\n * class may be used in arithmetic expressions as if they were numeric\n * primitives, but the binary representation will be preserved unchanged as the\n * `bytes` property of the object. The bytes should be encoded as big-endian,\n * two's complement integers.\n * @param {Buffer} bytes\n *\n * @api private\n */\nfunction Int64(bytes) {\n    if (bytes.length !== 8) {\n        throw new Error('Int64 buffers must be exactly 8 bytes');\n    }\n    if (!util.Buffer.isBuffer(bytes)) bytes = toBuffer(bytes);\n\n    this.bytes = bytes;\n}\n\n/**\n * @param {number} number\n * @returns {Int64}\n *\n * @api private\n */\nInt64.fromNumber = function(number) {\n    if (number > 9223372036854775807 || number < -9223372036854775808) {\n        throw new Error(\n            number + ' is too large (or, if negative, too small) to represent as an Int64'\n        );\n    }\n\n    var bytes = new Uint8Array(8);\n    for (\n        var i = 7, remaining = Math.abs(Math.round(number));\n        i > -1 && remaining > 0;\n        i--, remaining /= 256\n    ) {\n        bytes[i] = remaining;\n    }\n\n    if (number < 0) {\n        negate(bytes);\n    }\n\n    return new Int64(bytes);\n};\n\n/**\n * @returns {number}\n *\n * @api private\n */\nInt64.prototype.valueOf = function() {\n    var bytes = this.bytes.slice(0);\n    var negative = bytes[0] & 128;\n    if (negative) {\n        negate(bytes);\n    }\n\n    return parseInt(bytes.toString('hex'), 16) * (negative ? -1 : 1);\n};\n\nInt64.prototype.toString = function() {\n    return String(this.valueOf());\n};\n\n/**\n * @param {Buffer} bytes\n *\n * @api private\n */\nfunction negate(bytes) {\n    for (var i = 0; i < 8; i++) {\n        bytes[i] ^= 0xFF;\n    }\n    for (var i = 7; i > -1; i--) {\n        bytes[i]++;\n        if (bytes[i] !== 0) {\n            break;\n        }\n    }\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n    Int64: Int64\n};\n","var util = require('../core').util;\nvar toBuffer = util.buffer.toBuffer;\n\n// All prelude components are unsigned, 32-bit integers\nvar PRELUDE_MEMBER_LENGTH = 4;\n// The prelude consists of two components\nvar PRELUDE_LENGTH = PRELUDE_MEMBER_LENGTH * 2;\n// Checksums are always CRC32 hashes.\nvar CHECKSUM_LENGTH = 4;\n// Messages must include a full prelude, a prelude checksum, and a message checksum\nvar MINIMUM_MESSAGE_LENGTH = PRELUDE_LENGTH + CHECKSUM_LENGTH * 2;\n\n/**\n * @api private\n *\n * @param {Buffer} message\n */\nfunction splitMessage(message) {\n    if (!util.Buffer.isBuffer(message)) message = toBuffer(message);\n\n    if (message.length < MINIMUM_MESSAGE_LENGTH) {\n        throw new Error('Provided message too short to accommodate event stream message overhead');\n    }\n\n    if (message.length !== message.readUInt32BE(0)) {\n        throw new Error('Reported message length does not match received message length');\n    }\n\n    var expectedPreludeChecksum = message.readUInt32BE(PRELUDE_LENGTH);\n\n    if (\n        expectedPreludeChecksum !== util.crypto.crc32(\n            message.slice(0, PRELUDE_LENGTH)\n        )\n    ) {\n        throw new Error(\n            'The prelude checksum specified in the message (' +\n            expectedPreludeChecksum +\n            ') does not match the calculated CRC32 checksum.'\n        );\n    }\n\n    var expectedMessageChecksum = message.readUInt32BE(message.length - CHECKSUM_LENGTH);\n\n    if (\n        expectedMessageChecksum !== util.crypto.crc32(\n            message.slice(0, message.length - CHECKSUM_LENGTH)\n        )\n    ) {\n        throw new Error(\n            'The message checksum did not match the expected value of ' +\n                expectedMessageChecksum\n        );\n    }\n\n    var headersStart = PRELUDE_LENGTH + CHECKSUM_LENGTH;\n    var headersEnd = headersStart + message.readUInt32BE(PRELUDE_MEMBER_LENGTH);\n\n    return {\n        headers: message.slice(headersStart, headersEnd),\n        body: message.slice(headersEnd, message.length - CHECKSUM_LENGTH),\n    };\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n    splitMessage: splitMessage\n};\n","var AWS = require('../core');\nvar STS = require('../../clients/sts');\n\n/**\n * Represents temporary credentials retrieved from {AWS.STS}. Without any\n * extra parameters, credentials will be fetched from the\n * {AWS.STS.getSessionToken} operation. If an IAM role is provided, the\n * {AWS.STS.assumeRole} operation will be used to fetch credentials for the\n * role instead.\n *\n * @note AWS.TemporaryCredentials is deprecated, but remains available for\n *   backwards compatibility. {AWS.ChainableTemporaryCredentials} is the\n *   preferred class for temporary credentials.\n *\n * To setup temporary credentials, configure a set of master credentials\n * using the standard credentials providers (environment, EC2 instance metadata,\n * or from the filesystem), then set the global credentials to a new\n * temporary credentials object:\n *\n * ```javascript\n * // Note that environment credentials are loaded by default,\n * // the following line is shown for clarity:\n * AWS.config.credentials = new AWS.EnvironmentCredentials('AWS');\n *\n * // Now set temporary credentials seeded from the master credentials\n * AWS.config.credentials = new AWS.TemporaryCredentials();\n *\n * // subsequent requests will now use temporary credentials from AWS STS.\n * new AWS.S3().listBucket(function(err, data) { ... });\n * ```\n *\n * @!attribute masterCredentials\n *   @return [AWS.Credentials] the master (non-temporary) credentials used to\n *     get and refresh temporary credentials from AWS STS.\n * @note (see constructor)\n */\nAWS.TemporaryCredentials = AWS.util.inherit(AWS.Credentials, {\n  /**\n   * Creates a new temporary credentials object.\n   *\n   * @note In order to create temporary credentials, you first need to have\n   *   \"master\" credentials configured in {AWS.Config.credentials}. These\n   *   master credentials are necessary to retrieve the temporary credentials,\n   *   as well as refresh the credentials when they expire.\n   * @param params [map] a map of options that are passed to the\n   *   {AWS.STS.assumeRole} or {AWS.STS.getSessionToken} operations.\n   *   If a `RoleArn` parameter is passed in, credentials will be based on the\n   *   IAM role.\n   * @param masterCredentials [AWS.Credentials] the master (non-temporary) credentials\n   *  used to get and refresh temporary credentials from AWS STS.\n   * @example Creating a new credentials object for generic temporary credentials\n   *   AWS.config.credentials = new AWS.TemporaryCredentials();\n   * @example Creating a new credentials object for an IAM role\n   *   AWS.config.credentials = new AWS.TemporaryCredentials({\n   *     RoleArn: 'arn:aws:iam::1234567890:role/TemporaryCredentials',\n   *   });\n   * @see AWS.STS.assumeRole\n   * @see AWS.STS.getSessionToken\n   */\n  constructor: function TemporaryCredentials(params, masterCredentials) {\n    AWS.Credentials.call(this);\n    this.loadMasterCredentials(masterCredentials);\n    this.expired = true;\n\n    this.params = params || {};\n    if (this.params.RoleArn) {\n      this.params.RoleSessionName =\n        this.params.RoleSessionName || 'temporary-credentials';\n    }\n  },\n\n  /**\n   * Refreshes credentials using {AWS.STS.assumeRole} or\n   * {AWS.STS.getSessionToken}, depending on whether an IAM role ARN was passed\n   * to the credentials {constructor}.\n   *\n   * @callback callback function(err)\n   *   Called when the STS service responds (or fails). When\n   *   this callback is called with no error, it means that the credentials\n   *   information has been loaded into the object (as the `accessKeyId`,\n   *   `secretAccessKey`, and `sessionToken` properties).\n   *   @param err [Error] if an error occurred, this value will be filled\n   * @see get\n   */\n  refresh: function refresh (callback) {\n    this.coalesceRefresh(callback || AWS.util.fn.callback);\n  },\n\n  /**\n   * @api private\n   */\n  load: function load (callback) {\n    var self = this;\n    self.createClients();\n    self.masterCredentials.get(function () {\n      self.service.config.credentials = self.masterCredentials;\n      var operation = self.params.RoleArn ?\n        self.service.assumeRole : self.service.getSessionToken;\n      operation.call(self.service, function (err, data) {\n        if (!err) {\n          self.service.credentialsFrom(data, self);\n        }\n        callback(err);\n      });\n    });\n  },\n\n  /**\n   * @api private\n   */\n  loadMasterCredentials: function loadMasterCredentials (masterCredentials) {\n    this.masterCredentials = masterCredentials || AWS.config.credentials;\n    while (this.masterCredentials.masterCredentials) {\n      this.masterCredentials = this.masterCredentials.masterCredentials;\n    }\n\n    if (typeof this.masterCredentials.get !== 'function') {\n      this.masterCredentials = new AWS.Credentials(this.masterCredentials);\n    }\n  },\n\n  /**\n   * @api private\n   */\n  createClients: function () {\n    this.service = this.service || new STS({params: this.params});\n  }\n\n});\n","var AWS = require('../core');\n\nAWS.util.update(AWS.STS.prototype, {\n  /**\n   * @overload credentialsFrom(data, credentials = null)\n   *   Creates a credentials object from STS response data containing\n   *   credentials information. Useful for quickly setting AWS credentials.\n   *\n   *   @note This is a low-level utility function. If you want to load temporary\n   *     credentials into your process for subsequent requests to AWS resources,\n   *     you should use {AWS.TemporaryCredentials} instead.\n   *   @param data [map] data retrieved from a call to {getFederatedToken},\n   *     {getSessionToken}, {assumeRole}, or {assumeRoleWithWebIdentity}.\n   *   @param credentials [AWS.Credentials] an optional credentials object to\n   *     fill instead of creating a new object. Useful when modifying an\n   *     existing credentials object from a refresh call.\n   *   @return [AWS.TemporaryCredentials] the set of temporary credentials\n   *     loaded from a raw STS operation response.\n   *   @example Using credentialsFrom to load global AWS credentials\n   *     var sts = new AWS.STS();\n   *     sts.getSessionToken(function (err, data) {\n   *       if (err) console.log(\"Error getting credentials\");\n   *       else {\n   *         AWS.config.credentials = sts.credentialsFrom(data);\n   *       }\n   *     });\n   *   @see AWS.TemporaryCredentials\n   */\n  credentialsFrom: function credentialsFrom(data, credentials) {\n    if (!data) return null;\n    if (!credentials) credentials = new AWS.TemporaryCredentials();\n    credentials.expired = false;\n    credentials.accessKeyId = data.Credentials.AccessKeyId;\n    credentials.secretAccessKey = data.Credentials.SecretAccessKey;\n    credentials.sessionToken = data.Credentials.SessionToken;\n    credentials.expireTime = data.Credentials.Expiration;\n    return credentials;\n  },\n\n  assumeRoleWithWebIdentity: function assumeRoleWithWebIdentity(params, callback) {\n    return this.makeUnauthenticatedRequest('assumeRoleWithWebIdentity', params, callback);\n  },\n\n  assumeRoleWithSAML: function assumeRoleWithSAML(params, callback) {\n    return this.makeUnauthenticatedRequest('assumeRoleWithSAML', params, callback);\n  }\n});\n","\n\n/**\n * Creates a keyed JS object from an array, given a function to produce the keys\n * for each value in the array.\n *\n * This provides a convenient lookup for the array items if the key function\n * produces unique results.\n *\n *     const phoneBook = [\n *       { name: 'Jon', num: '555-1234' },\n *       { name: 'Jenny', num: '867-5309' }\n *     ]\n *\n *     // { Jon: { name: 'Jon', num: '555-1234' },\n *     //   Jenny: { name: 'Jenny', num: '867-5309' } }\n *     const entriesByName = keyMap(\n *       phoneBook,\n *       entry => entry.name\n *     )\n *\n *     // { name: 'Jenny', num: '857-6309' }\n *     const jennyEntry = entriesByName['Jenny']\n *\n */\nexport default function keyMap(list, keyFn) {\n  return list.reduce(function (map, item) {\n    return map[keyFn(item)] = item, map;\n  }, Object.create(null));\n} /**\n   * Copyright (c) 2015-present, Facebook, Inc.\n   *\n   * This source code is licensed under the MIT license found in the\n   * LICENSE file in the root directory of this source tree.\n   *\n   * \n   */","var AWS = require('../core');\nvar STS = require('../../clients/sts');\n\n/**\n * Represents temporary credentials retrieved from {AWS.STS}. Without any\n * extra parameters, credentials will be fetched from the\n * {AWS.STS.getSessionToken} operation. If an IAM role is provided, the\n * {AWS.STS.assumeRole} operation will be used to fetch credentials for the\n * role instead.\n *\n * AWS.ChainableTemporaryCredentials differs from AWS.TemporaryCredentials in\n * the way masterCredentials and refreshes are handled.\n * AWS.ChainableTemporaryCredentials refreshes expired credentials using the\n * masterCredentials passed by the user to support chaining of STS credentials.\n * However, AWS.TemporaryCredentials recursively collapses the masterCredentials\n * during instantiation, precluding the ability to refresh credentials which\n * require intermediate, temporary credentials.\n *\n * For example, if the application should use RoleA, which must be assumed from\n * RoleB, and the environment provides credentials which can assume RoleB, then\n * AWS.ChainableTemporaryCredentials must be used to support refreshing the\n * temporary credentials for RoleA:\n *\n * ```javascript\n * var roleACreds = new AWS.ChainableTemporaryCredentials({\n *   params: {RoleArn: 'RoleA'},\n *   masterCredentials: new AWS.ChainableTemporaryCredentials({\n *     params: {RoleArn: 'RoleB'},\n *     masterCredentials: new AWS.EnvironmentCredentials('AWS')\n *   })\n * });\n * ```\n *\n * If AWS.TemporaryCredentials had been used in the previous example,\n * `roleACreds` would fail to refresh because `roleACreds` would\n * use the environment credentials for the AssumeRole request.\n *\n * Another difference is that AWS.ChainableTemporaryCredentials creates the STS\n * service instance during instantiation while AWS.TemporaryCredentials creates\n * the STS service instance during the first refresh. Creating the service\n * instance during instantiation effectively captures the master credentials\n * from the global config, so that subsequent changes to the global config do\n * not affect the master credentials used to refresh the temporary credentials.\n *\n * This allows an instance of AWS.ChainableTemporaryCredentials to be assigned\n * to AWS.config.credentials:\n *\n * ```javascript\n * var envCreds = new AWS.EnvironmentCredentials('AWS');\n * AWS.config.credentials = envCreds;\n * // masterCredentials will be envCreds\n * AWS.config.credentials = new AWS.ChainableTemporaryCredentials({\n *   params: {RoleArn: '...'}\n * });\n * ```\n *\n * Similarly, to use the CredentialProviderChain's default providers as the\n * master credentials, simply create a new instance of\n * AWS.ChainableTemporaryCredentials:\n *\n * ```javascript\n * AWS.config.credentials = new ChainableTemporaryCredentials({\n *   params: {RoleArn: '...'}\n * });\n * ```\n *\n * @!attribute service\n *   @return [AWS.STS] the STS service instance used to\n *     get and refresh temporary credentials from AWS STS.\n * @note (see constructor)\n */\nAWS.ChainableTemporaryCredentials = AWS.util.inherit(AWS.Credentials, {\n  /**\n   * Creates a new temporary credentials object.\n   *\n   * @param options [map] a set of options\n   * @option options params [map] ({}) a map of options that are passed to the\n   *   {AWS.STS.assumeRole} or {AWS.STS.getSessionToken} operations.\n   *   If a `RoleArn` parameter is passed in, credentials will be based on the\n   *   IAM role. If a `SerialNumber` parameter is passed in, {tokenCodeFn} must\n   *   also be passed in or an error will be thrown.\n   * @option options masterCredentials [AWS.Credentials] the master credentials\n   *   used to get and refresh temporary credentials from AWS STS. By default,\n   *   AWS.config.credentials or AWS.config.credentialProvider will be used.\n   * @option options tokenCodeFn [Function] (null) Function to provide\n   *   `TokenCode`, if `SerialNumber` is provided for profile in {params}. Function\n   *   is called with value of `SerialNumber` and `callback`, and should provide\n   *   the `TokenCode` or an error to the callback in the format\n   *   `callback(err, token)`.\n   * @example Creating a new credentials object for generic temporary credentials\n   *   AWS.config.credentials = new AWS.ChainableTemporaryCredentials();\n   * @example Creating a new credentials object for an IAM role\n   *   AWS.config.credentials = new AWS.ChainableTemporaryCredentials({\n   *     params: {\n   *       RoleArn: 'arn:aws:iam::1234567890:role/TemporaryCredentials'\n   *     }\n   *   });\n   * @see AWS.STS.assumeRole\n   * @see AWS.STS.getSessionToken\n   */\n  constructor: function ChainableTemporaryCredentials(options) {\n    AWS.Credentials.call(this);\n    options = options || {};\n    this.errorCode = 'ChainableTemporaryCredentialsProviderFailure';\n    this.expired = true;\n    this.tokenCodeFn = null;\n\n    var params = AWS.util.copy(options.params) || {};\n    if (params.RoleArn) {\n      params.RoleSessionName = params.RoleSessionName || 'temporary-credentials';\n    }\n    if (params.SerialNumber) {\n      if (!options.tokenCodeFn || (typeof options.tokenCodeFn !== 'function')) {\n        throw new AWS.util.error(\n          new Error('tokenCodeFn must be a function when params.SerialNumber is given'),\n          {code: this.errorCode}\n        );\n      } else {\n        this.tokenCodeFn = options.tokenCodeFn;\n      }\n    }\n    this.service = new STS({\n      params: params,\n      credentials: options.masterCredentials || AWS.config.credentials\n    });\n  },\n\n  /**\n   * Refreshes credentials using {AWS.STS.assumeRole} or\n   * {AWS.STS.getSessionToken}, depending on whether an IAM role ARN was passed\n   * to the credentials {constructor}.\n   *\n   * @callback callback function(err)\n   *   Called when the STS service responds (or fails). When\n   *   this callback is called with no error, it means that the credentials\n   *   information has been loaded into the object (as the `accessKeyId`,\n   *   `secretAccessKey`, and `sessionToken` properties).\n   *   @param err [Error] if an error occurred, this value will be filled\n   * @see AWS.Credentials.get\n   */\n  refresh: function refresh(callback) {\n    this.coalesceRefresh(callback || AWS.util.fn.callback);\n  },\n\n  /**\n   * @api private\n   * @param callback\n   */\n  load: function load(callback) {\n    var self = this;\n    var operation = self.service.config.params.RoleArn ? 'assumeRole' : 'getSessionToken';\n    this.getTokenCode(function (err, tokenCode) {\n      var params = {};\n      if (err) {\n        callback(err);\n        return;\n      }\n      if (tokenCode) {\n        params.TokenCode = tokenCode;\n      }\n      self.service[operation](params, function (err, data) {\n        if (!err) {\n          self.service.credentialsFrom(data, self);\n        }\n        callback(err);\n      });\n    });\n  },\n\n  /**\n   * @api private\n   */\n  getTokenCode: function getTokenCode(callback) {\n    var self = this;\n    if (this.tokenCodeFn) {\n      this.tokenCodeFn(this.service.config.params.SerialNumber, function (err, token) {\n        if (err) {\n          var message = err;\n          if (err instanceof Error) {\n            message = err.message;\n          }\n          callback(\n            AWS.util.error(\n              new Error('Error fetching MFA token: ' + message),\n              { code: self.errorCode}\n            )\n          );\n          return;\n        }\n        callback(null, token);\n      });\n    } else {\n      callback(null);\n    }\n  }\n});\n","var AWS = require('../core');\nvar STS = require('../../clients/sts');\n\n/**\n * Represents credentials retrieved from STS Web Identity Federation support.\n *\n * By default this provider gets credentials using the\n * {AWS.STS.assumeRoleWithWebIdentity} service operation. This operation\n * requires a `RoleArn` containing the ARN of the IAM trust policy for the\n * application for which credentials will be given. In addition, the\n * `WebIdentityToken` must be set to the token provided by the identity\n * provider. See {constructor} for an example on creating a credentials\n * object with proper `RoleArn` and `WebIdentityToken` values.\n *\n * ## Refreshing Credentials from Identity Service\n *\n * In addition to AWS credentials expiring after a given amount of time, the\n * login token from the identity provider will also expire. Once this token\n * expires, it will not be usable to refresh AWS credentials, and another\n * token will be needed. The SDK does not manage refreshing of the token value,\n * but this can be done through a \"refresh token\" supported by most identity\n * providers. Consult the documentation for the identity provider for refreshing\n * tokens. Once the refreshed token is acquired, you should make sure to update\n * this new token in the credentials object's {params} property. The following\n * code will update the WebIdentityToken, assuming you have retrieved an updated\n * token from the identity provider:\n *\n * ```javascript\n * AWS.config.credentials.params.WebIdentityToken = updatedToken;\n * ```\n *\n * Future calls to `credentials.refresh()` will now use the new token.\n *\n * @!attribute params\n *   @return [map] the map of params passed to\n *     {AWS.STS.assumeRoleWithWebIdentity}. To update the token, set the\n *     `params.WebIdentityToken` property.\n * @!attribute data\n *   @return [map] the raw data response from the call to\n *     {AWS.STS.assumeRoleWithWebIdentity}. Use this if you want to get\n *     access to other properties from the response.\n */\nAWS.WebIdentityCredentials = AWS.util.inherit(AWS.Credentials, {\n  /**\n   * Creates a new credentials object.\n   * @param (see AWS.STS.assumeRoleWithWebIdentity)\n   * @example Creating a new credentials object\n   *   AWS.config.credentials = new AWS.WebIdentityCredentials({\n   *     RoleArn: 'arn:aws:iam::1234567890:role/WebIdentity',\n   *     WebIdentityToken: 'ABCDEFGHIJKLMNOP', // token from identity service\n   *     RoleSessionName: 'web' // optional name, defaults to web-identity\n   *   }, {\n   *     // optionally provide configuration to apply to the underlying AWS.STS service client\n   *     // if configuration is not provided, then configuration will be pulled from AWS.config\n   *\n   *     // specify timeout options\n   *     httpOptions: {\n   *       timeout: 100\n   *     }\n   *   });\n   * @see AWS.STS.assumeRoleWithWebIdentity\n   * @see AWS.Config\n   */\n  constructor: function WebIdentityCredentials(params, clientConfig) {\n    AWS.Credentials.call(this);\n    this.expired = true;\n    this.params = params;\n    this.params.RoleSessionName = this.params.RoleSessionName || 'web-identity';\n    this.data = null;\n    this._clientConfig = AWS.util.copy(clientConfig || {});\n  },\n\n  /**\n   * Refreshes credentials using {AWS.STS.assumeRoleWithWebIdentity}\n   *\n   * @callback callback function(err)\n   *   Called when the STS service responds (or fails). When\n   *   this callback is called with no error, it means that the credentials\n   *   information has been loaded into the object (as the `accessKeyId`,\n   *   `secretAccessKey`, and `sessionToken` properties).\n   *   @param err [Error] if an error occurred, this value will be filled\n   * @see get\n   */\n  refresh: function refresh(callback) {\n    this.coalesceRefresh(callback || AWS.util.fn.callback);\n  },\n\n  /**\n   * @api private\n   */\n  load: function load(callback) {\n    var self = this;\n    self.createClients();\n    self.service.assumeRoleWithWebIdentity(function (err, data) {\n      self.data = null;\n      if (!err) {\n        self.data = data;\n        self.service.credentialsFrom(data, self);\n      }\n      callback(err);\n    });\n  },\n\n  /**\n   * @api private\n   */\n  createClients: function() {\n    if (!this.service) {\n      var stsConfig = AWS.util.merge({}, this._clientConfig);\n      stsConfig.params = this.params;\n      this.service = new STS(stsConfig);\n    }\n  }\n\n});\n","var AWS = require('../core');\nvar CognitoIdentity = require('../../clients/cognitoidentity');\nvar STS = require('../../clients/sts');\n\n/**\n * Represents credentials retrieved from STS Web Identity Federation using\n * the Amazon Cognito Identity service.\n *\n * By default this provider gets credentials using the\n * {AWS.CognitoIdentity.getCredentialsForIdentity} service operation, which\n * requires either an `IdentityId` or an `IdentityPoolId` (Amazon Cognito\n * Identity Pool ID), which is used to call {AWS.CognitoIdentity.getId} to\n * obtain an `IdentityId`. If the identity or identity pool is not configured in\n * the Amazon Cognito Console to use IAM roles with the appropriate permissions,\n * then additionally a `RoleArn` is required containing the ARN of the IAM trust\n * policy for the Amazon Cognito role that the user will log into. If a `RoleArn`\n * is provided, then this provider gets credentials using the\n * {AWS.STS.assumeRoleWithWebIdentity} service operation, after first getting an\n * Open ID token from {AWS.CognitoIdentity.getOpenIdToken}.\n *\n * In addition, if this credential provider is used to provide authenticated\n * login, the `Logins` map may be set to the tokens provided by the respective\n * identity providers. See {constructor} for an example on creating a credentials\n * object with proper property values.\n *\n * ## Refreshing Credentials from Identity Service\n *\n * In addition to AWS credentials expiring after a given amount of time, the\n * login token from the identity provider will also expire. Once this token\n * expires, it will not be usable to refresh AWS credentials, and another\n * token will be needed. The SDK does not manage refreshing of the token value,\n * but this can be done through a \"refresh token\" supported by most identity\n * providers. Consult the documentation for the identity provider for refreshing\n * tokens. Once the refreshed token is acquired, you should make sure to update\n * this new token in the credentials object's {params} property. The following\n * code will update the WebIdentityToken, assuming you have retrieved an updated\n * token from the identity provider:\n *\n * ```javascript\n * AWS.config.credentials.params.Logins['graph.facebook.com'] = updatedToken;\n * ```\n *\n * Future calls to `credentials.refresh()` will now use the new token.\n *\n * @!attribute params\n *   @return [map] the map of params passed to\n *     {AWS.CognitoIdentity.getId},\n *     {AWS.CognitoIdentity.getOpenIdToken}, and\n *     {AWS.STS.assumeRoleWithWebIdentity}. To update the token, set the\n *     `params.WebIdentityToken` property.\n * @!attribute data\n *   @return [map] the raw data response from the call to\n *     {AWS.CognitoIdentity.getCredentialsForIdentity}, or\n *     {AWS.STS.assumeRoleWithWebIdentity}. Use this if you want to get\n *     access to other properties from the response.\n * @!attribute identityId\n *   @return [String] the Cognito ID returned by the last call to\n *     {AWS.CognitoIdentity.getOpenIdToken}. This ID represents the actual\n *     final resolved identity ID from Amazon Cognito.\n */\nAWS.CognitoIdentityCredentials = AWS.util.inherit(AWS.Credentials, {\n  /**\n   * @api private\n   */\n  localStorageKey: {\n    id: 'aws.cognito.identity-id.',\n    providers: 'aws.cognito.identity-providers.'\n  },\n\n  /**\n   * Creates a new credentials object.\n   * @example Creating a new credentials object\n   *   AWS.config.credentials = new AWS.CognitoIdentityCredentials({\n   *\n   *     // either IdentityPoolId or IdentityId is required\n   *     // See the IdentityPoolId param for AWS.CognitoIdentity.getID (linked below)\n   *     // See the IdentityId param for AWS.CognitoIdentity.getCredentialsForIdentity\n   *     // or AWS.CognitoIdentity.getOpenIdToken (linked below)\n   *     IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030',\n   *     IdentityId: 'us-east-1:128d0a74-c82f-4553-916d-90053e4a8b0f'\n   *\n   *     // optional, only necessary when the identity pool is not configured\n   *     // to use IAM roles in the Amazon Cognito Console\n   *     // See the RoleArn param for AWS.STS.assumeRoleWithWebIdentity (linked below)\n   *     RoleArn: 'arn:aws:iam::1234567890:role/MYAPP-CognitoIdentity',\n   *\n   *     // optional tokens, used for authenticated login\n   *     // See the Logins param for AWS.CognitoIdentity.getID (linked below)\n   *     Logins: {\n   *       'graph.facebook.com': 'FBTOKEN',\n   *       'www.amazon.com': 'AMAZONTOKEN',\n   *       'accounts.google.com': 'GOOGLETOKEN',\n   *       'api.twitter.com': 'TWITTERTOKEN',\n   *       'www.digits.com': 'DIGITSTOKEN'\n   *     },\n   *\n   *     // optional name, defaults to web-identity\n   *     // See the RoleSessionName param for AWS.STS.assumeRoleWithWebIdentity (linked below)\n   *     RoleSessionName: 'web',\n   *\n   *     // optional, only necessary when application runs in a browser\n   *     // and multiple users are signed in at once, used for caching\n   *     LoginId: 'example@gmail.com'\n   *\n   *   }, {\n   *      // optionally provide configuration to apply to the underlying service clients\n   *      // if configuration is not provided, then configuration will be pulled from AWS.config\n   *\n   *      // region should match the region your identity pool is located in\n   *      region: 'us-east-1',\n   *\n   *      // specify timeout options\n   *      httpOptions: {\n   *        timeout: 100\n   *      }\n   *   });\n   * @see AWS.CognitoIdentity.getId\n   * @see AWS.CognitoIdentity.getCredentialsForIdentity\n   * @see AWS.STS.assumeRoleWithWebIdentity\n   * @see AWS.CognitoIdentity.getOpenIdToken\n   * @see AWS.Config\n   * @note If a region is not provided in the global AWS.config, or\n   *   specified in the `clientConfig` to the CognitoIdentityCredentials\n   *   constructor, you may encounter a 'Missing credentials in config' error\n   *   when calling making a service call.\n   */\n  constructor: function CognitoIdentityCredentials(params, clientConfig) {\n    AWS.Credentials.call(this);\n    this.expired = true;\n    this.params = params;\n    this.data = null;\n    this._identityId = null;\n    this._clientConfig = AWS.util.copy(clientConfig || {});\n    this.loadCachedId();\n    var self = this;\n    Object.defineProperty(this, 'identityId', {\n      get: function() {\n        self.loadCachedId();\n        return self._identityId || self.params.IdentityId;\n      },\n      set: function(identityId) {\n        self._identityId = identityId;\n      }\n    });\n  },\n\n  /**\n   * Refreshes credentials using {AWS.CognitoIdentity.getCredentialsForIdentity},\n   * or {AWS.STS.assumeRoleWithWebIdentity}.\n   *\n   * @callback callback function(err)\n   *   Called when the STS service responds (or fails). When\n   *   this callback is called with no error, it means that the credentials\n   *   information has been loaded into the object (as the `accessKeyId`,\n   *   `secretAccessKey`, and `sessionToken` properties).\n   *   @param err [Error] if an error occurred, this value will be filled\n   * @see AWS.Credentials.get\n   */\n  refresh: function refresh(callback) {\n    this.coalesceRefresh(callback || AWS.util.fn.callback);\n  },\n\n  /**\n   * @api private\n   * @param callback\n   */\n  load: function load(callback) {\n    var self = this;\n    self.createClients();\n    self.data = null;\n    self._identityId = null;\n    self.getId(function(err) {\n      if (!err) {\n        if (!self.params.RoleArn) {\n          self.getCredentialsForIdentity(callback);\n        } else {\n          self.getCredentialsFromSTS(callback);\n        }\n      } else {\n        self.clearIdOnNotAuthorized(err);\n        callback(err);\n      }\n    });\n  },\n\n  /**\n   * Clears the cached Cognito ID associated with the currently configured\n   * identity pool ID. Use this to manually invalidate your cache if\n   * the identity pool ID was deleted.\n   */\n  clearCachedId: function clearCache() {\n    this._identityId = null;\n    delete this.params.IdentityId;\n\n    var poolId = this.params.IdentityPoolId;\n    var loginId = this.params.LoginId || '';\n    delete this.storage[this.localStorageKey.id + poolId + loginId];\n    delete this.storage[this.localStorageKey.providers + poolId + loginId];\n  },\n\n  /**\n   * @api private\n   */\n  clearIdOnNotAuthorized: function clearIdOnNotAuthorized(err) {\n    var self = this;\n    if (err.code == 'NotAuthorizedException') {\n      self.clearCachedId();\n    }\n  },\n\n  /**\n   * Retrieves a Cognito ID, loading from cache if it was already retrieved\n   * on this device.\n   *\n   * @callback callback function(err, identityId)\n   *   @param err [Error, null] an error object if the call failed or null if\n   *     it succeeded.\n   *   @param identityId [String, null] if successful, the callback will return\n   *     the Cognito ID.\n   * @note If not loaded explicitly, the Cognito ID is loaded and stored in\n   *   localStorage in the browser environment of a device.\n   * @api private\n   */\n  getId: function getId(callback) {\n    var self = this;\n    if (typeof self.params.IdentityId === 'string') {\n      return callback(null, self.params.IdentityId);\n    }\n\n    self.cognito.getId(function(err, data) {\n      if (!err && data.IdentityId) {\n        self.params.IdentityId = data.IdentityId;\n        callback(null, data.IdentityId);\n      } else {\n        callback(err);\n      }\n    });\n  },\n\n\n  /**\n   * @api private\n   */\n  loadCredentials: function loadCredentials(data, credentials) {\n    if (!data || !credentials) return;\n    credentials.expired = false;\n    credentials.accessKeyId = data.Credentials.AccessKeyId;\n    credentials.secretAccessKey = data.Credentials.SecretKey;\n    credentials.sessionToken = data.Credentials.SessionToken;\n    credentials.expireTime = data.Credentials.Expiration;\n  },\n\n  /**\n   * @api private\n   */\n  getCredentialsForIdentity: function getCredentialsForIdentity(callback) {\n    var self = this;\n    self.cognito.getCredentialsForIdentity(function(err, data) {\n      if (!err) {\n        self.cacheId(data);\n        self.data = data;\n        self.loadCredentials(self.data, self);\n      } else {\n        self.clearIdOnNotAuthorized(err);\n      }\n      callback(err);\n    });\n  },\n\n  /**\n   * @api private\n   */\n  getCredentialsFromSTS: function getCredentialsFromSTS(callback) {\n    var self = this;\n    self.cognito.getOpenIdToken(function(err, data) {\n      if (!err) {\n        self.cacheId(data);\n        self.params.WebIdentityToken = data.Token;\n        self.webIdentityCredentials.refresh(function(webErr) {\n          if (!webErr) {\n            self.data = self.webIdentityCredentials.data;\n            self.sts.credentialsFrom(self.data, self);\n          }\n          callback(webErr);\n        });\n      } else {\n        self.clearIdOnNotAuthorized(err);\n        callback(err);\n      }\n    });\n  },\n\n  /**\n   * @api private\n   */\n  loadCachedId: function loadCachedId() {\n    var self = this;\n\n    // in the browser we source default IdentityId from localStorage\n    if (AWS.util.isBrowser() && !self.params.IdentityId) {\n      var id = self.getStorage('id');\n      if (id && self.params.Logins) {\n        var actualProviders = Object.keys(self.params.Logins);\n        var cachedProviders =\n          (self.getStorage('providers') || '').split(',');\n\n        // only load ID if at least one provider used this ID before\n        var intersect = cachedProviders.filter(function(n) {\n          return actualProviders.indexOf(n) !== -1;\n        });\n        if (intersect.length !== 0) {\n          self.params.IdentityId = id;\n        }\n      } else if (id) {\n        self.params.IdentityId = id;\n      }\n    }\n  },\n\n  /**\n   * @api private\n   */\n  createClients: function() {\n    var clientConfig = this._clientConfig;\n    this.webIdentityCredentials = this.webIdentityCredentials ||\n      new AWS.WebIdentityCredentials(this.params, clientConfig);\n    if (!this.cognito) {\n      var cognitoConfig = AWS.util.merge({}, clientConfig);\n      cognitoConfig.params = this.params;\n      this.cognito = new CognitoIdentity(cognitoConfig);\n    }\n    this.sts = this.sts || new STS(clientConfig);\n  },\n\n  /**\n   * @api private\n   */\n  cacheId: function cacheId(data) {\n    this._identityId = data.IdentityId;\n    this.params.IdentityId = this._identityId;\n\n    // cache this IdentityId in browser localStorage if possible\n    if (AWS.util.isBrowser()) {\n      this.setStorage('id', data.IdentityId);\n\n      if (this.params.Logins) {\n        this.setStorage('providers', Object.keys(this.params.Logins).join(','));\n      }\n    }\n  },\n\n  /**\n   * @api private\n   */\n  getStorage: function getStorage(key) {\n    return this.storage[this.localStorageKey[key] + this.params.IdentityPoolId + (this.params.LoginId || '')];\n  },\n\n  /**\n   * @api private\n   */\n  setStorage: function setStorage(key, val) {\n    try {\n      this.storage[this.localStorageKey[key] + this.params.IdentityPoolId + (this.params.LoginId || '')] = val;\n    } catch (_) {}\n  },\n\n  /**\n   * @api private\n   */\n  storage: (function() {\n    try {\n      var storage = AWS.util.isBrowser() && window.localStorage !== null && typeof window.localStorage === 'object' ?\n          window.localStorage : {};\n\n      // Test set/remove which would throw an error in Safari's private browsing\n      storage['aws.test-storage'] = 'foobar';\n      delete storage['aws.test-storage'];\n\n      return storage;\n    } catch (_) {\n      return {};\n    }\n  })()\n});\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['cognitoidentity'] = {};\nAWS.CognitoIdentity = Service.defineService('cognitoidentity', ['2014-06-30']);\nrequire('../lib/services/cognitoidentity');\nObject.defineProperty(apiLoader.services['cognitoidentity'], '2014-06-30', {\n  get: function get() {\n    var model = require('../apis/cognito-identity-2014-06-30.min.json');\n    model.paginators = require('../apis/cognito-identity-2014-06-30.paginators.json').pagination;\n    return model;\n  },\n  enumerable: true,\n  configurable: true\n});\n\nmodule.exports = AWS.CognitoIdentity;\n","var AWS = require('../core');\n\nAWS.util.update(AWS.CognitoIdentity.prototype, {\n  getOpenIdToken: function getOpenIdToken(params, callback) {\n    return this.makeUnauthenticatedRequest('getOpenIdToken', params, callback);\n  },\n\n  getId: function getId(params, callback) {\n    return this.makeUnauthenticatedRequest('getId', params, callback);\n  },\n\n  getCredentialsForIdentity: function getCredentialsForIdentity(params, callback) {\n    return this.makeUnauthenticatedRequest('getCredentialsForIdentity', params, callback);\n  }\n});\n","var AWS = require('../core');\nvar STS = require('../../clients/sts');\n\n/**\n * Represents credentials retrieved from STS SAML support.\n *\n * By default this provider gets credentials using the\n * {AWS.STS.assumeRoleWithSAML} service operation. This operation\n * requires a `RoleArn` containing the ARN of the IAM trust policy for the\n * application for which credentials will be given, as well as a `PrincipalArn`\n * representing the ARN for the SAML identity provider. In addition, the\n * `SAMLAssertion` must be set to the token provided by the identity\n * provider. See {constructor} for an example on creating a credentials\n * object with proper `RoleArn`, `PrincipalArn`, and `SAMLAssertion` values.\n *\n * ## Refreshing Credentials from Identity Service\n *\n * In addition to AWS credentials expiring after a given amount of time, the\n * login token from the identity provider will also expire. Once this token\n * expires, it will not be usable to refresh AWS credentials, and another\n * token will be needed. The SDK does not manage refreshing of the token value,\n * but this can be done through a \"refresh token\" supported by most identity\n * providers. Consult the documentation for the identity provider for refreshing\n * tokens. Once the refreshed token is acquired, you should make sure to update\n * this new token in the credentials object's {params} property. The following\n * code will update the SAMLAssertion, assuming you have retrieved an updated\n * token from the identity provider:\n *\n * ```javascript\n * AWS.config.credentials.params.SAMLAssertion = updatedToken;\n * ```\n *\n * Future calls to `credentials.refresh()` will now use the new token.\n *\n * @!attribute params\n *   @return [map] the map of params passed to\n *     {AWS.STS.assumeRoleWithSAML}. To update the token, set the\n *     `params.SAMLAssertion` property.\n */\nAWS.SAMLCredentials = AWS.util.inherit(AWS.Credentials, {\n  /**\n   * Creates a new credentials object.\n   * @param (see AWS.STS.assumeRoleWithSAML)\n   * @example Creating a new credentials object\n   *   AWS.config.credentials = new AWS.SAMLCredentials({\n   *     RoleArn: 'arn:aws:iam::1234567890:role/SAMLRole',\n   *     PrincipalArn: 'arn:aws:iam::1234567890:role/SAMLPrincipal',\n   *     SAMLAssertion: 'base64-token', // base64-encoded token from IdP\n   *   });\n   * @see AWS.STS.assumeRoleWithSAML\n   */\n  constructor: function SAMLCredentials(params) {\n    AWS.Credentials.call(this);\n    this.expired = true;\n    this.params = params;\n  },\n\n  /**\n   * Refreshes credentials using {AWS.STS.assumeRoleWithSAML}\n   *\n   * @callback callback function(err)\n   *   Called when the STS service responds (or fails). When\n   *   this callback is called with no error, it means that the credentials\n   *   information has been loaded into the object (as the `accessKeyId`,\n   *   `secretAccessKey`, and `sessionToken` properties).\n   *   @param err [Error] if an error occurred, this value will be filled\n   * @see get\n   */\n  refresh: function refresh(callback) {\n    this.coalesceRefresh(callback || AWS.util.fn.callback);\n  },\n\n  /**\n   * @api private\n   */\n  load: function load(callback) {\n    var self = this;\n    self.createClients();\n    self.service.assumeRoleWithSAML(function (err, data) {\n      if (!err) {\n        self.service.credentialsFrom(data, self);\n      }\n      callback(err);\n    });\n  },\n\n  /**\n   * @api private\n   */\n  createClients: function() {\n    this.service = this.service || new STS({params: this.params});\n  }\n\n});\n","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { forEach, isCollection } from 'iterall';\nimport { GraphQLError, locatedError } from '../error';\nimport getPromise from '../jsutils/getPromise';\nimport invariant from '../jsutils/invariant';\nimport isInvalid from '../jsutils/isInvalid';\nimport isNullish from '../jsutils/isNullish';\nimport memoize3 from '../jsutils/memoize3';\nimport promiseForObject from '../jsutils/promiseForObject';\nimport promiseReduce from '../jsutils/promiseReduce';\n\n\nimport { typeFromAST } from '../utilities/typeFromAST';\nimport { Kind } from '../language/kinds';\nimport { getVariableValues, getArgumentValues, getDirectiveValues } from './values';\nimport { isObjectType, isAbstractType, isLeafType, isListType, isNonNullType } from '../type/definition';\n\nimport { GraphQLSchema } from '../type/schema';\nimport { SchemaMetaFieldDef, TypeMetaFieldDef, TypeNameMetaFieldDef } from '../type/introspection';\nimport { GraphQLIncludeDirective, GraphQLSkipDirective } from '../type/directives';\nimport { assertValidSchema } from '../type/validate';\n\n/**\n * Terminology\n *\n * \"Definitions\" are the generic name for top-level statements in the document.\n * Examples of this include:\n * 1) Operations (such as a query)\n * 2) Fragments\n *\n * \"Operations\" are a generic name for requests in the document.\n * Examples of this include:\n * 1) query,\n * 2) mutation\n *\n * \"Selections\" are the definitions that can appear legally and at\n * single level of the query. These include:\n * 1) field references e.g \"a\"\n * 2) fragment \"spreads\" e.g. \"...c\"\n * 3) inline fragment \"spreads\" e.g. \"...on Type { a }\"\n */\n\n/**\n * Data that must be available at all points during query execution.\n *\n * Namely, schema of the type system that is currently executing,\n * and the fragments defined in the query document\n */\n\n\n/**\n * The result of GraphQL execution.\n *\n *   - `errors` is included when any errors occurred as a non-empty array.\n *   - `data` is the result of a successful execution of the query.\n */\n\n\n/**\n * Implements the \"Evaluating requests\" section of the GraphQL specification.\n *\n * Returns either a synchronous ExecutionResult (if all encountered resolvers\n * are synchronous), or a Promise of an ExecutionResult that will eventually be\n * resolved and never rejected.\n *\n * If the arguments to this function do not result in a legal execution context,\n * a GraphQLError will be thrown immediately explaining the invalid input.\n *\n * Accepts either an object with named arguments, or individual arguments.\n */\n\n/* eslint-disable no-redeclare */\n\nexport function execute(argsOrSchema, document, rootValue, contextValue, variableValues, operationName, fieldResolver) {\n  /* eslint-enable no-redeclare */\n  // Extract arguments from object args if provided.\n  return arguments.length === 1 ? executeImpl(argsOrSchema.schema, argsOrSchema.document, argsOrSchema.rootValue, argsOrSchema.contextValue, argsOrSchema.variableValues, argsOrSchema.operationName, argsOrSchema.fieldResolver) : executeImpl(argsOrSchema, document, rootValue, contextValue, variableValues, operationName, fieldResolver);\n}\n\nfunction executeImpl(schema, document, rootValue, contextValue, variableValues, operationName, fieldResolver) {\n  // If arguments are missing or incorrect, throw an error.\n  assertValidExecutionArguments(schema, document, variableValues);\n\n  // If a valid context cannot be created due to incorrect arguments,\n  // a \"Response\" with only errors is returned.\n  var context = buildExecutionContext(schema, document, rootValue, contextValue, variableValues, operationName, fieldResolver);\n\n  // Return early errors if execution context failed.\n  if (Array.isArray(context)) {\n    return { errors: context };\n  }\n\n  // Return a Promise that will eventually resolve to the data described by\n  // The \"Response\" section of the GraphQL specification.\n  //\n  // If errors are encountered while executing a GraphQL field, only that\n  // field and its descendants will be omitted, and sibling fields will still\n  // be executed. An execution which encounters errors will still result in a\n  // resolved Promise.\n  var data = executeOperation(context, context.operation, rootValue);\n  return buildResponse(context, data);\n}\n\n/**\n * Given a completed execution context and data, build the { errors, data }\n * response defined by the \"Response\" section of the GraphQL specification.\n */\nfunction buildResponse(context, data) {\n  var promise = getPromise(data);\n  if (promise) {\n    return promise.then(function (resolved) {\n      return buildResponse(context, resolved);\n    });\n  }\n  return context.errors.length === 0 ? { data: data } : { errors: context.errors, data: data };\n}\n\n/**\n * Given a ResponsePath (found in the `path` entry in the information provided\n * as the last argument to a field resolver), return an Array of the path keys.\n */\nexport function responsePathAsArray(path) {\n  var flattened = [];\n  var curr = path;\n  while (curr) {\n    flattened.push(curr.key);\n    curr = curr.prev;\n  }\n  return flattened.reverse();\n}\n\n/**\n * Given a ResponsePath and a key, return a new ResponsePath containing the\n * new key.\n */\nexport function addPath(prev, key) {\n  return { prev: prev, key: key };\n}\n\n/**\n * Essential assertions before executing to provide developer feedback for\n * improper use of the GraphQL library.\n */\nexport function assertValidExecutionArguments(schema, document, rawVariableValues) {\n  !document ? invariant(0, 'Must provide document') : void 0;\n\n  // If the schema used for execution is invalid, throw an error.\n  assertValidSchema(schema);\n\n  // Variables, if provided, must be an object.\n  !(!rawVariableValues || (typeof rawVariableValues === 'undefined' ? 'undefined' : _typeof(rawVariableValues)) === 'object') ? invariant(0, 'Variables must be provided as an Object where each property is a ' + 'variable value. Perhaps look to see if an unparsed JSON string ' + 'was provided.') : void 0;\n}\n\n/**\n * Constructs a ExecutionContext object from the arguments passed to\n * execute, which we will pass throughout the other execution methods.\n *\n * Throws a GraphQLError if a valid execution context cannot be created.\n */\nexport function buildExecutionContext(schema, document, rootValue, contextValue, rawVariableValues, operationName, fieldResolver) {\n  var errors = [];\n  var operation = void 0;\n  var hasMultipleAssumedOperations = false;\n  var fragments = Object.create(null);\n  for (var i = 0; i < document.definitions.length; i++) {\n    var definition = document.definitions[i];\n    switch (definition.kind) {\n      case Kind.OPERATION_DEFINITION:\n        if (!operationName && operation) {\n          hasMultipleAssumedOperations = true;\n        } else if (!operationName || definition.name && definition.name.value === operationName) {\n          operation = definition;\n        }\n        break;\n      case Kind.FRAGMENT_DEFINITION:\n        fragments[definition.name.value] = definition;\n        break;\n    }\n  }\n\n  if (!operation) {\n    if (operationName) {\n      errors.push(new GraphQLError('Unknown operation named \"' + operationName + '\".'));\n    } else {\n      errors.push(new GraphQLError('Must provide an operation.'));\n    }\n  } else if (hasMultipleAssumedOperations) {\n    errors.push(new GraphQLError('Must provide operation name if query contains ' + 'multiple operations.'));\n  }\n\n  var variableValues = void 0;\n  if (operation) {\n    var coercedVariableValues = getVariableValues(schema, operation.variableDefinitions || [], rawVariableValues || {});\n\n    if (coercedVariableValues.errors) {\n      errors.push.apply(errors, coercedVariableValues.errors);\n    } else {\n      variableValues = coercedVariableValues.coerced;\n    }\n  }\n\n  if (errors.length !== 0) {\n    return errors;\n  }\n\n  !operation ? invariant(0, 'Has operation if no errors.') : void 0;\n  !variableValues ? invariant(0, 'Has variables if no errors.') : void 0;\n\n  return {\n    schema: schema,\n    fragments: fragments,\n    rootValue: rootValue,\n    contextValue: contextValue,\n    operation: operation,\n    variableValues: variableValues,\n    fieldResolver: fieldResolver || defaultFieldResolver,\n    errors: errors\n  };\n}\n\n/**\n * Implements the \"Evaluating operations\" section of the spec.\n */\nfunction executeOperation(exeContext, operation, rootValue) {\n  var type = getOperationRootType(exeContext.schema, operation);\n  var fields = collectFields(exeContext, type, operation.selectionSet, Object.create(null), Object.create(null));\n\n  var path = undefined;\n\n  // Errors from sub-fields of a NonNull type may propagate to the top level,\n  // at which point we still log the error and null the parent field, which\n  // in this case is the entire response.\n  //\n  // Similar to completeValueCatchingError.\n  try {\n    var result = operation.operation === 'mutation' ? executeFieldsSerially(exeContext, type, rootValue, path, fields) : executeFields(exeContext, type, rootValue, path, fields);\n    var promise = getPromise(result);\n    if (promise) {\n      return promise.then(undefined, function (error) {\n        exeContext.errors.push(error);\n        return Promise.resolve(null);\n      });\n    }\n    return result;\n  } catch (error) {\n    exeContext.errors.push(error);\n    return null;\n  }\n}\n\n/**\n * Extracts the root type of the operation from the schema.\n */\nexport function getOperationRootType(schema, operation) {\n  switch (operation.operation) {\n    case 'query':\n      var queryType = schema.getQueryType();\n      if (!queryType) {\n        throw new GraphQLError('Schema does not define the required query root type.', [operation]);\n      }\n      return queryType;\n    case 'mutation':\n      var mutationType = schema.getMutationType();\n      if (!mutationType) {\n        throw new GraphQLError('Schema is not configured for mutations.', [operation]);\n      }\n      return mutationType;\n    case 'subscription':\n      var subscriptionType = schema.getSubscriptionType();\n      if (!subscriptionType) {\n        throw new GraphQLError('Schema is not configured for subscriptions.', [operation]);\n      }\n      return subscriptionType;\n    default:\n      throw new GraphQLError('Can only execute queries, mutations and subscriptions.', [operation]);\n  }\n}\n\n/**\n * Implements the \"Evaluating selection sets\" section of the spec\n * for \"write\" mode.\n */\nfunction executeFieldsSerially(exeContext, parentType, sourceValue, path, fields) {\n  return promiseReduce(Object.keys(fields), function (results, responseName) {\n    var fieldNodes = fields[responseName];\n    var fieldPath = addPath(path, responseName);\n    var result = resolveField(exeContext, parentType, sourceValue, fieldNodes, fieldPath);\n    if (result === undefined) {\n      return results;\n    }\n    var promise = getPromise(result);\n    if (promise) {\n      return promise.then(function (resolvedResult) {\n        results[responseName] = resolvedResult;\n        return results;\n      });\n    }\n    results[responseName] = result;\n    return results;\n  }, Object.create(null));\n}\n\n/**\n * Implements the \"Evaluating selection sets\" section of the spec\n * for \"read\" mode.\n */\nfunction executeFields(exeContext, parentType, sourceValue, path, fields) {\n  var containsPromise = false;\n\n  var finalResults = Object.keys(fields).reduce(function (results, responseName) {\n    var fieldNodes = fields[responseName];\n    var fieldPath = addPath(path, responseName);\n    var result = resolveField(exeContext, parentType, sourceValue, fieldNodes, fieldPath);\n    if (result === undefined) {\n      return results;\n    }\n    results[responseName] = result;\n    if (getPromise(result)) {\n      containsPromise = true;\n    }\n    return results;\n  }, Object.create(null));\n\n  // If there are no promises, we can just return the object\n  if (!containsPromise) {\n    return finalResults;\n  }\n\n  // Otherwise, results is a map from field name to the result\n  // of resolving that field, which is possibly a promise. Return\n  // a promise that will return this same map, but with any\n  // promises replaced with the values they resolved to.\n  return promiseForObject(finalResults);\n}\n\n/**\n * Given a selectionSet, adds all of the fields in that selection to\n * the passed in map of fields, and returns it at the end.\n *\n * CollectFields requires the \"runtime type\" of an object. For a field which\n * returns an Interface or Union type, the \"runtime type\" will be the actual\n * Object type returned by that field.\n */\nexport function collectFields(exeContext, runtimeType, selectionSet, fields, visitedFragmentNames) {\n  for (var i = 0; i < selectionSet.selections.length; i++) {\n    var selection = selectionSet.selections[i];\n    switch (selection.kind) {\n      case Kind.FIELD:\n        if (!shouldIncludeNode(exeContext, selection)) {\n          continue;\n        }\n        var name = getFieldEntryKey(selection);\n        if (!fields[name]) {\n          fields[name] = [];\n        }\n        fields[name].push(selection);\n        break;\n      case Kind.INLINE_FRAGMENT:\n        if (!shouldIncludeNode(exeContext, selection) || !doesFragmentConditionMatch(exeContext, selection, runtimeType)) {\n          continue;\n        }\n        collectFields(exeContext, runtimeType, selection.selectionSet, fields, visitedFragmentNames);\n        break;\n      case Kind.FRAGMENT_SPREAD:\n        var fragName = selection.name.value;\n        if (visitedFragmentNames[fragName] || !shouldIncludeNode(exeContext, selection)) {\n          continue;\n        }\n        visitedFragmentNames[fragName] = true;\n        var fragment = exeContext.fragments[fragName];\n        if (!fragment || !doesFragmentConditionMatch(exeContext, fragment, runtimeType)) {\n          continue;\n        }\n        collectFields(exeContext, runtimeType, fragment.selectionSet, fields, visitedFragmentNames);\n        break;\n    }\n  }\n  return fields;\n}\n\n/**\n * Determines if a field should be included based on the @include and @skip\n * directives, where @skip has higher precidence than @include.\n */\nfunction shouldIncludeNode(exeContext, node) {\n  var skip = getDirectiveValues(GraphQLSkipDirective, node, exeContext.variableValues);\n  if (skip && skip.if === true) {\n    return false;\n  }\n\n  var include = getDirectiveValues(GraphQLIncludeDirective, node, exeContext.variableValues);\n  if (include && include.if === false) {\n    return false;\n  }\n  return true;\n}\n\n/**\n * Determines if a fragment is applicable to the given type.\n */\nfunction doesFragmentConditionMatch(exeContext, fragment, type) {\n  var typeConditionNode = fragment.typeCondition;\n  if (!typeConditionNode) {\n    return true;\n  }\n  var conditionalType = typeFromAST(exeContext.schema, typeConditionNode);\n  if (conditionalType === type) {\n    return true;\n  }\n  if (isAbstractType(conditionalType)) {\n    return exeContext.schema.isPossibleType(conditionalType, type);\n  }\n  return false;\n}\n\n/**\n * Implements the logic to compute the key of a given field's entry\n */\nfunction getFieldEntryKey(node) {\n  return node.alias ? node.alias.value : node.name.value;\n}\n\n/**\n * Resolves the field on the given source object. In particular, this\n * figures out the value that the field returns by calling its resolve function,\n * then calls completeValue to complete promises, serialize scalars, or execute\n * the sub-selection-set for objects.\n */\nfunction resolveField(exeContext, parentType, source, fieldNodes, path) {\n  var fieldNode = fieldNodes[0];\n  var fieldName = fieldNode.name.value;\n\n  var fieldDef = getFieldDef(exeContext.schema, parentType, fieldName);\n  if (!fieldDef) {\n    return;\n  }\n\n  var resolveFn = fieldDef.resolve || exeContext.fieldResolver;\n\n  var info = buildResolveInfo(exeContext, fieldDef, fieldNodes, parentType, path);\n\n  // Get the resolve function, regardless of if its result is normal\n  // or abrupt (error).\n  var result = resolveFieldValueOrError(exeContext, fieldDef, fieldNodes, resolveFn, source, info);\n\n  return completeValueCatchingError(exeContext, fieldDef.type, fieldNodes, info, path, result);\n}\n\nexport function buildResolveInfo(exeContext, fieldDef, fieldNodes, parentType, path) {\n  // The resolve function's optional fourth argument is a collection of\n  // information about the current execution state.\n  return {\n    fieldName: fieldNodes[0].name.value,\n    fieldNodes: fieldNodes,\n    returnType: fieldDef.type,\n    parentType: parentType,\n    path: path,\n    schema: exeContext.schema,\n    fragments: exeContext.fragments,\n    rootValue: exeContext.rootValue,\n    operation: exeContext.operation,\n    variableValues: exeContext.variableValues\n  };\n}\n\n// Isolates the \"ReturnOrAbrupt\" behavior to not de-opt the `resolveField`\n// function. Returns the result of resolveFn or the abrupt-return Error object.\nexport function resolveFieldValueOrError(exeContext, fieldDef, fieldNodes, resolveFn, source, info) {\n  try {\n    // Build a JS object of arguments from the field.arguments AST, using the\n    // variables scope to fulfill any variable references.\n    // TODO: find a way to memoize, in case this field is within a List type.\n    var args = getArgumentValues(fieldDef, fieldNodes[0], exeContext.variableValues);\n\n    // The resolve function's optional third argument is a context value that\n    // is provided to every resolve function within an execution. It is commonly\n    // used to represent an authenticated user, or request-specific caches.\n    var context = exeContext.contextValue;\n\n    var result = resolveFn(source, args, context, info);\n    var promise = getPromise(result);\n    return promise ? promise.then(undefined, asErrorInstance) : result;\n  } catch (error) {\n    return asErrorInstance(error);\n  }\n}\n\n// Sometimes a non-error is thrown, wrap it as an Error instance to ensure a\n// consistent Error interface.\nfunction asErrorInstance(error) {\n  return error instanceof Error ? error : new Error(error || undefined);\n}\n\n// This is a small wrapper around completeValue which detects and logs errors\n// in the execution context.\nfunction completeValueCatchingError(exeContext, returnType, fieldNodes, info, path, result) {\n  // If the field type is non-nullable, then it is resolved without any\n  // protection from errors, however it still properly locates the error.\n  if (isNonNullType(returnType)) {\n    return completeValueWithLocatedError(exeContext, returnType, fieldNodes, info, path, result);\n  }\n\n  // Otherwise, error protection is applied, logging the error and resolving\n  // a null value for this field if one is encountered.\n  try {\n    var completed = completeValueWithLocatedError(exeContext, returnType, fieldNodes, info, path, result);\n    var promise = getPromise(completed);\n    if (promise) {\n      // If `completeValueWithLocatedError` returned a rejected promise, log\n      // the rejection error and resolve to null.\n      // Note: we don't rely on a `catch` method, but we do expect \"thenable\"\n      // to take a second callback for the error case.\n      return promise.then(undefined, function (error) {\n        exeContext.errors.push(error);\n        return Promise.resolve(null);\n      });\n    }\n    return completed;\n  } catch (error) {\n    // If `completeValueWithLocatedError` returned abruptly (threw an error),\n    // log the error and return null.\n    exeContext.errors.push(error);\n    return null;\n  }\n}\n\n// This is a small wrapper around completeValue which annotates errors with\n// location information.\nfunction completeValueWithLocatedError(exeContext, returnType, fieldNodes, info, path, result) {\n  try {\n    var completed = completeValue(exeContext, returnType, fieldNodes, info, path, result);\n    var promise = getPromise(completed);\n    if (promise) {\n      return promise.then(undefined, function (error) {\n        return Promise.reject(locatedError(asErrorInstance(error), fieldNodes, responsePathAsArray(path)));\n      });\n    }\n    return completed;\n  } catch (error) {\n    throw locatedError(asErrorInstance(error), fieldNodes, responsePathAsArray(path));\n  }\n}\n\n/**\n * Implements the instructions for completeValue as defined in the\n * \"Field entries\" section of the spec.\n *\n * If the field type is Non-Null, then this recursively completes the value\n * for the inner type. It throws a field error if that completion returns null,\n * as per the \"Nullability\" section of the spec.\n *\n * If the field type is a List, then this recursively completes the value\n * for the inner type on each item in the list.\n *\n * If the field type is a Scalar or Enum, ensures the completed value is a legal\n * value of the type by calling the `serialize` method of GraphQL type\n * definition.\n *\n * If the field is an abstract type, determine the runtime type of the value\n * and then complete based on that type\n *\n * Otherwise, the field type expects a sub-selection set, and will complete the\n * value by evaluating all sub-selections.\n */\nfunction completeValue(exeContext, returnType, fieldNodes, info, path, result) {\n  // If result is a Promise, apply-lift over completeValue.\n  var promise = getPromise(result);\n  if (promise) {\n    return promise.then(function (resolved) {\n      return completeValue(exeContext, returnType, fieldNodes, info, path, resolved);\n    });\n  }\n\n  // If result is an Error, throw a located error.\n  if (result instanceof Error) {\n    throw result;\n  }\n\n  // If field type is NonNull, complete for inner type, and throw field error\n  // if result is null.\n  if (isNonNullType(returnType)) {\n    var completed = completeValue(exeContext, returnType.ofType, fieldNodes, info, path, result);\n    if (completed === null) {\n      throw new Error('Cannot return null for non-nullable field ' + info.parentType.name + '.' + info.fieldName + '.');\n    }\n    return completed;\n  }\n\n  // If result value is null-ish (null, undefined, or NaN) then return null.\n  if (isNullish(result)) {\n    return null;\n  }\n\n  // If field type is List, complete each item in the list with the inner type\n  if (isListType(returnType)) {\n    return completeListValue(exeContext, returnType, fieldNodes, info, path, result);\n  }\n\n  // If field type is a leaf type, Scalar or Enum, serialize to a valid value,\n  // returning null if serialization is not possible.\n  if (isLeafType(returnType)) {\n    return completeLeafValue(returnType, result);\n  }\n\n  // If field type is an abstract type, Interface or Union, determine the\n  // runtime Object type and complete for that type.\n  if (isAbstractType(returnType)) {\n    return completeAbstractValue(exeContext, returnType, fieldNodes, info, path, result);\n  }\n\n  // If field type is Object, execute and complete all sub-selections.\n  if (isObjectType(returnType)) {\n    return completeObjectValue(exeContext, returnType, fieldNodes, info, path, result);\n  }\n\n  // Not reachable. All possible output types have been considered.\n  /* istanbul ignore next */\n  throw new Error('Cannot complete value of unexpected type \"' + String(returnType) + '\".');\n}\n\n/**\n * Complete a list value by completing each item in the list with the\n * inner type\n */\nfunction completeListValue(exeContext, returnType, fieldNodes, info, path, result) {\n  !isCollection(result) ? invariant(0, 'Expected Iterable, but did not find one for field ' + info.parentType.name + '.' + info.fieldName + '.') : void 0;\n\n  // This is specified as a simple map, however we're optimizing the path\n  // where the list contains no Promises by avoiding creating another Promise.\n  var itemType = returnType.ofType;\n  var containsPromise = false;\n  var completedResults = [];\n  forEach(result, function (item, index) {\n    // No need to modify the info object containing the path,\n    // since from here on it is not ever accessed by resolver functions.\n    var fieldPath = addPath(path, index);\n    var completedItem = completeValueCatchingError(exeContext, itemType, fieldNodes, info, fieldPath, item);\n\n    if (!containsPromise && getPromise(completedItem)) {\n      containsPromise = true;\n    }\n    completedResults.push(completedItem);\n  });\n\n  return containsPromise ? Promise.all(completedResults) : completedResults;\n}\n\n/**\n * Complete a Scalar or Enum by serializing to a valid value, returning\n * null if serialization is not possible.\n */\nfunction completeLeafValue(returnType, result) {\n  !returnType.serialize ? invariant(0, 'Missing serialize method on type') : void 0;\n  var serializedResult = returnType.serialize(result);\n  if (isInvalid(serializedResult)) {\n    throw new Error('Expected a value of type \"' + String(returnType) + '\" but ' + ('received: ' + String(result)));\n  }\n  return serializedResult;\n}\n\n/**\n * Complete a value of an abstract type by determining the runtime object type\n * of that value, then complete the value for that type.\n */\nfunction completeAbstractValue(exeContext, returnType, fieldNodes, info, path, result) {\n  var runtimeType = returnType.resolveType ? returnType.resolveType(result, exeContext.contextValue, info) : defaultResolveTypeFn(result, exeContext.contextValue, info, returnType);\n\n  var promise = getPromise(runtimeType);\n  if (promise) {\n    return promise.then(function (resolvedRuntimeType) {\n      return completeObjectValue(exeContext, ensureValidRuntimeType(resolvedRuntimeType, exeContext, returnType, fieldNodes, info, result), fieldNodes, info, path, result);\n    });\n  }\n\n  return completeObjectValue(exeContext, ensureValidRuntimeType(runtimeType, exeContext, returnType, fieldNodes, info, result), fieldNodes, info, path, result);\n}\n\nfunction ensureValidRuntimeType(runtimeTypeOrName, exeContext, returnType, fieldNodes, info, result) {\n  var runtimeType = typeof runtimeTypeOrName === 'string' ? exeContext.schema.getType(runtimeTypeOrName) : runtimeTypeOrName;\n\n  if (!isObjectType(runtimeType)) {\n    throw new GraphQLError('Abstract type ' + returnType.name + ' must resolve to an Object type at ' + ('runtime for field ' + info.parentType.name + '.' + info.fieldName + ' with ') + ('value \"' + String(result) + '\", received \"' + String(runtimeType) + '\". ') + ('Either the ' + returnType.name + ' type should provide a \"resolveType\" ') + 'function or each possible types should provide an ' + '\"isTypeOf\" function.', fieldNodes);\n  }\n\n  if (!exeContext.schema.isPossibleType(returnType, runtimeType)) {\n    throw new GraphQLError('Runtime Object type \"' + runtimeType.name + '\" is not a possible type ' + ('for \"' + returnType.name + '\".'), fieldNodes);\n  }\n\n  return runtimeType;\n}\n\n/**\n * Complete an Object value by executing all sub-selections.\n */\nfunction completeObjectValue(exeContext, returnType, fieldNodes, info, path, result) {\n  // If there is an isTypeOf predicate function, call it with the\n  // current result. If isTypeOf returns false, then raise an error rather\n  // than continuing execution.\n  if (returnType.isTypeOf) {\n    var isTypeOf = returnType.isTypeOf(result, exeContext.contextValue, info);\n\n    var promise = getPromise(isTypeOf);\n    if (promise) {\n      return promise.then(function (isTypeOfResult) {\n        if (!isTypeOfResult) {\n          throw invalidReturnTypeError(returnType, result, fieldNodes);\n        }\n        return collectAndExecuteSubfields(exeContext, returnType, fieldNodes, info, path, result);\n      });\n    }\n\n    if (!isTypeOf) {\n      throw invalidReturnTypeError(returnType, result, fieldNodes);\n    }\n  }\n\n  return collectAndExecuteSubfields(exeContext, returnType, fieldNodes, info, path, result);\n}\n\nfunction invalidReturnTypeError(returnType, result, fieldNodes) {\n  return new GraphQLError('Expected value of type \"' + returnType.name + '\" but got: ' + String(result) + '.', fieldNodes);\n}\n\nfunction collectAndExecuteSubfields(exeContext, returnType, fieldNodes, info, path, result) {\n  // Collect sub-fields to execute to complete this value.\n  var subFieldNodes = collectSubfields(exeContext, returnType, fieldNodes);\n  return executeFields(exeContext, returnType, result, path, subFieldNodes);\n}\n\n/**\n * A memoized collection of relevant subfields in the context of the return\n * type. Memoizing ensures the subfields are not repeatedly calculated, which\n * saves overhead when resolving lists of values.\n */\nvar collectSubfields = memoize3(_collectSubfields);\nfunction _collectSubfields(exeContext, returnType, fieldNodes) {\n  var subFieldNodes = Object.create(null);\n  var visitedFragmentNames = Object.create(null);\n  for (var i = 0; i < fieldNodes.length; i++) {\n    var selectionSet = fieldNodes[i].selectionSet;\n    if (selectionSet) {\n      subFieldNodes = collectFields(exeContext, returnType, selectionSet, subFieldNodes, visitedFragmentNames);\n    }\n  }\n  return subFieldNodes;\n}\n\n/**\n * If a resolveType function is not given, then a default resolve behavior is\n * used which attempts two strategies:\n *\n * First, See if the provided value has a `__typename` field defined, if so, use\n * that value as name of the resolved type.\n *\n * Otherwise, test each possible type for the abstract type by calling\n * isTypeOf for the object being coerced, returning the first type that matches.\n */\nfunction defaultResolveTypeFn(value, context, info, abstractType) {\n  // First, look for `__typename`.\n  if (value !== null && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && typeof value.__typename === 'string') {\n    return value.__typename;\n  }\n\n  // Otherwise, test each possible type.\n  var possibleTypes = info.schema.getPossibleTypes(abstractType);\n  var promisedIsTypeOfResults = [];\n\n  for (var i = 0; i < possibleTypes.length; i++) {\n    var type = possibleTypes[i];\n\n    if (type.isTypeOf) {\n      var isTypeOfResult = type.isTypeOf(value, context, info);\n\n      var promise = getPromise(isTypeOfResult);\n      if (promise) {\n        promisedIsTypeOfResults[i] = promise;\n      } else if (isTypeOfResult) {\n        return type;\n      }\n    }\n  }\n\n  if (promisedIsTypeOfResults.length) {\n    return Promise.all(promisedIsTypeOfResults).then(function (isTypeOfResults) {\n      for (var _i = 0; _i < isTypeOfResults.length; _i++) {\n        if (isTypeOfResults[_i]) {\n          return possibleTypes[_i];\n        }\n      }\n    });\n  }\n}\n\n/**\n * If a resolve function is not given, then a default resolve behavior is used\n * which takes the property of the source object of the same name as the field\n * and returns it as the result, or if it's a function, returns the result\n * of calling that function while passing along args and context.\n */\nexport var defaultFieldResolver = function defaultFieldResolver(source, args, context, info) {\n  // ensure source is a value for which property access is acceptable.\n  if ((typeof source === 'undefined' ? 'undefined' : _typeof(source)) === 'object' || typeof source === 'function') {\n    var property = source[info.fieldName];\n    if (typeof property === 'function') {\n      return source[info.fieldName](args, context, info);\n    }\n    return property;\n  }\n};\n\n/**\n * This method looks up the field on the given type defintion.\n * It has special casing for the two introspection fields, __schema\n * and __typename. __typename is special because it can always be\n * queried as a field, even in situations where no other fields\n * are allowed, like on a Union. __schema could get automatically\n * added to the query type, but that would require mutating type\n * definitions, which would cause issues.\n */\nexport function getFieldDef(schema, parentType, fieldName) {\n  if (fieldName === SchemaMetaFieldDef.name && schema.getQueryType() === parentType) {\n    return SchemaMetaFieldDef;\n  } else if (fieldName === TypeMetaFieldDef.name && schema.getQueryType() === parentType) {\n    return TypeMetaFieldDef;\n  } else if (fieldName === TypeNameMetaFieldDef.name) {\n    return TypeNameMetaFieldDef;\n  }\n  return parentType.getFields()[fieldName];\n}","var util = require('../util');\nvar Shape = require('../model/shape');\n\nfunction DomXmlParser() { }\n\nDomXmlParser.prototype.parse = function(xml, shape) {\n  if (xml.replace(/^\\s+/, '') === '') return {};\n\n  var result, error;\n  try {\n    if (window.DOMParser) {\n      try {\n        var parser = new DOMParser();\n        result = parser.parseFromString(xml, 'text/xml');\n      } catch (syntaxError) {\n        throw util.error(new Error('Parse error in document'),\n          {\n            originalError: syntaxError,\n            code: 'XMLParserError',\n            retryable: true\n          });\n      }\n\n      if (result.documentElement === null) {\n        throw util.error(new Error('Cannot parse empty document.'),\n          {\n            code: 'XMLParserError',\n            retryable: true\n          });\n      }\n\n      var isError = result.getElementsByTagName('parsererror')[0];\n      if (isError && (isError.parentNode === result ||\n          isError.parentNode.nodeName === 'body' ||\n          isError.parentNode.parentNode === result ||\n          isError.parentNode.parentNode.nodeName === 'body')) {\n        var errorElement = isError.getElementsByTagName('div')[0] || isError;\n        throw util.error(new Error(errorElement.textContent || 'Parser error in document'),\n          {\n            code: 'XMLParserError',\n            retryable: true\n          });\n      }\n    } else if (window.ActiveXObject) {\n      result = new window.ActiveXObject('Microsoft.XMLDOM');\n      result.async = false;\n\n      if (!result.loadXML(xml)) {\n        throw util.error(new Error('Parse error in document'),\n          {\n            code: 'XMLParserError',\n            retryable: true\n          });\n      }\n    } else {\n      throw new Error('Cannot load XML parser');\n    }\n  } catch (e) {\n    error = e;\n  }\n\n  if (result && result.documentElement && !error) {\n    var data = parseXml(result.documentElement, shape);\n    var metadata = getElementByTagName(result.documentElement, 'ResponseMetadata');\n    if (metadata) {\n      data.ResponseMetadata = parseXml(metadata, {});\n    }\n    return data;\n  } else if (error) {\n    throw util.error(error || new Error(), {code: 'XMLParserError', retryable: true});\n  } else { // empty xml document\n    return {};\n  }\n};\n\nfunction getElementByTagName(xml, tag) {\n  var elements = xml.getElementsByTagName(tag);\n  for (var i = 0, iLen = elements.length; i < iLen; i++) {\n    if (elements[i].parentNode === xml) {\n      return elements[i];\n    }\n  }\n}\n\nfunction parseXml(xml, shape) {\n  if (!shape) shape = {};\n  switch (shape.type) {\n    case 'structure': return parseStructure(xml, shape);\n    case 'map': return parseMap(xml, shape);\n    case 'list': return parseList(xml, shape);\n    case undefined: case null: return parseUnknown(xml);\n    default: return parseScalar(xml, shape);\n  }\n}\n\nfunction parseStructure(xml, shape) {\n  var data = {};\n  if (xml === null) return data;\n\n  util.each(shape.members, function(memberName, memberShape) {\n    if (memberShape.isXmlAttribute) {\n      if (Object.prototype.hasOwnProperty.call(xml.attributes, memberShape.name)) {\n        var value = xml.attributes[memberShape.name].value;\n        data[memberName] = parseXml({textContent: value}, memberShape);\n      }\n    } else {\n      var xmlChild = memberShape.flattened ? xml :\n        getElementByTagName(xml, memberShape.name);\n      if (xmlChild) {\n        data[memberName] = parseXml(xmlChild, memberShape);\n      } else if (!memberShape.flattened && memberShape.type === 'list') {\n        data[memberName] = memberShape.defaultValue;\n      }\n    }\n  });\n\n  return data;\n}\n\nfunction parseMap(xml, shape) {\n  var data = {};\n  var xmlKey = shape.key.name || 'key';\n  var xmlValue = shape.value.name || 'value';\n  var tagName = shape.flattened ? shape.name : 'entry';\n\n  var child = xml.firstElementChild;\n  while (child) {\n    if (child.nodeName === tagName) {\n      var key = getElementByTagName(child, xmlKey).textContent;\n      var value = getElementByTagName(child, xmlValue);\n      data[key] = parseXml(value, shape.value);\n    }\n    child = child.nextElementSibling;\n  }\n  return data;\n}\n\nfunction parseList(xml, shape) {\n  var data = [];\n  var tagName = shape.flattened ? shape.name : (shape.member.name || 'member');\n\n  var child = xml.firstElementChild;\n  while (child) {\n    if (child.nodeName === tagName) {\n      data.push(parseXml(child, shape.member));\n    }\n    child = child.nextElementSibling;\n  }\n  return data;\n}\n\nfunction parseScalar(xml, shape) {\n  if (xml.getAttribute) {\n    var encoding = xml.getAttribute('encoding');\n    if (encoding === 'base64') {\n      shape = new Shape.create({type: encoding});\n    }\n  }\n\n  var text = xml.textContent;\n  if (text === '') text = null;\n  if (typeof shape.toType === 'function') {\n    return shape.toType(text);\n  } else {\n    return text;\n  }\n}\n\nfunction parseUnknown(xml) {\n  if (xml === undefined || xml === null) return '';\n\n  // empty object\n  if (!xml.firstElementChild) {\n    if (xml.parentNode.parentNode === null) return {};\n    if (xml.childNodes.length === 0) return '';\n    else return xml.textContent;\n  }\n\n  // object, parse as structure\n  var shape = {type: 'structure', members: {}};\n  var child = xml.firstElementChild;\n  while (child) {\n    var tag = child.nodeName;\n    if (Object.prototype.hasOwnProperty.call(shape.members, tag)) {\n      // multiple tags of the same name makes it a list\n      shape.members[tag].type = 'list';\n    } else {\n      shape.members[tag] = {name: tag};\n    }\n    child = child.nextElementSibling;\n  }\n  return parseStructure(xml, shape);\n}\n\n/**\n * @api private\n */\nmodule.exports = DomXmlParser;\n","var AWS = require('../core');\nvar EventEmitter = require('events').EventEmitter;\nrequire('../http');\n\n/**\n * @api private\n */\nAWS.XHRClient = AWS.util.inherit({\n  handleRequest: function handleRequest(httpRequest, httpOptions, callback, errCallback) {\n    var self = this;\n    var endpoint = httpRequest.endpoint;\n    var emitter = new EventEmitter();\n    var href = endpoint.protocol + '//' + endpoint.hostname;\n    if (endpoint.port !== 80 && endpoint.port !== 443) {\n      href += ':' + endpoint.port;\n    }\n    href += httpRequest.path;\n\n    var xhr = new XMLHttpRequest(), headersEmitted = false;\n    httpRequest.stream = xhr;\n\n    xhr.addEventListener('readystatechange', function() {\n      try {\n        if (xhr.status === 0) return; // 0 code is invalid\n      } catch (e) { return; }\n\n      if (this.readyState >= this.HEADERS_RECEIVED && !headersEmitted) {\n        emitter.statusCode = xhr.status;\n        emitter.headers = self.parseHeaders(xhr.getAllResponseHeaders());\n        emitter.emit(\n          'headers',\n          emitter.statusCode,\n          emitter.headers,\n          xhr.statusText\n        );\n        headersEmitted = true;\n      }\n      if (this.readyState === this.DONE) {\n        self.finishRequest(xhr, emitter);\n      }\n    }, false);\n    xhr.upload.addEventListener('progress', function (evt) {\n      emitter.emit('sendProgress', evt);\n    });\n    xhr.addEventListener('progress', function (evt) {\n      emitter.emit('receiveProgress', evt);\n    }, false);\n    xhr.addEventListener('timeout', function () {\n      errCallback(AWS.util.error(new Error('Timeout'), {code: 'TimeoutError'}));\n    }, false);\n    xhr.addEventListener('error', function () {\n      errCallback(AWS.util.error(new Error('Network Failure'), {\n        code: 'NetworkingError'\n      }));\n    }, false);\n    xhr.addEventListener('abort', function () {\n      errCallback(AWS.util.error(new Error('Request aborted'), {\n        code: 'RequestAbortedError'\n      }));\n    }, false);\n\n    callback(emitter);\n    xhr.open(httpRequest.method, href, httpOptions.xhrAsync !== false);\n    AWS.util.each(httpRequest.headers, function (key, value) {\n      if (key !== 'Content-Length' && key !== 'User-Agent' && key !== 'Host') {\n        xhr.setRequestHeader(key, value);\n      }\n    });\n\n    if (httpOptions.timeout && httpOptions.xhrAsync !== false) {\n      xhr.timeout = httpOptions.timeout;\n    }\n\n    if (httpOptions.xhrWithCredentials) {\n      xhr.withCredentials = true;\n    }\n    try { xhr.responseType = 'arraybuffer'; } catch (e) {}\n\n    try {\n      if (httpRequest.body) {\n        xhr.send(httpRequest.body);\n      } else {\n        xhr.send();\n      }\n    } catch (err) {\n      if (httpRequest.body && typeof httpRequest.body.buffer === 'object') {\n        xhr.send(httpRequest.body.buffer); // send ArrayBuffer directly\n      } else {\n        throw err;\n      }\n    }\n\n    return emitter;\n  },\n\n  parseHeaders: function parseHeaders(rawHeaders) {\n    var headers = {};\n    AWS.util.arrayEach(rawHeaders.split(/\\r?\\n/), function (line) {\n      var key = line.split(':', 1)[0];\n      var value = line.substring(key.length + 2);\n      if (key.length > 0) headers[key.toLowerCase()] = value;\n    });\n    return headers;\n  },\n\n  finishRequest: function finishRequest(xhr, emitter) {\n    var buffer;\n    if (xhr.responseType === 'arraybuffer' && xhr.response) {\n      var ab = xhr.response;\n      buffer = new AWS.util.Buffer(ab.byteLength);\n      var view = new Uint8Array(ab);\n      for (var i = 0; i < buffer.length; ++i) {\n        buffer[i] = view[i];\n      }\n    }\n\n    try {\n      if (!buffer && typeof xhr.responseText === 'string') {\n        buffer = new AWS.util.Buffer(xhr.responseText);\n      }\n    } catch (e) {}\n\n    if (buffer) emitter.emit('data', buffer);\n    emitter.emit('end');\n  }\n});\n\n/**\n * @api private\n */\nAWS.HttpClient.prototype = AWS.XHRClient.prototype;\n\n/**\n * @api private\n */\nAWS.HttpClient.streamsApiVersion = 1;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n  ? R.apply\n  : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target)\n      .concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n}\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function() {\n    return defaultMaxListeners;\n  },\n  set: function(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function() {\n\n  if (this._events === undefined ||\n      this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\n  this._maxListeners = n;\n  return this;\n};\n\nfunction $getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return $getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n  var doError = (type === 'error');\n\n  var events = this._events;\n  if (events !== undefined)\n    doError = (doError && events.error === undefined);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    var er;\n    if (args.length > 0)\n      er = args[0];\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    }\n    // At least give some kind of context to the user\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n\n  if (handler === undefined)\n    return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      ReflectApply(listeners[i], this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n\n  events = target._events;\n  if (events === undefined) {\n    events = target._events = Object.create(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener !== undefined) {\n      target.emit('newListener', type,\n                  listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (existing === undefined) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n        prepend ? [listener, existing] : [existing, listener];\n      // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    }\n\n    // Check for listener leak\n    m = $getMaxListeners(target);\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true;\n      // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n      var w = new Error('Possible EventEmitter memory leak detected. ' +\n                          existing.length + ' ' + String(type) + ' listeners ' +\n                          'added. Use emitter.setMaxListeners() to ' +\n                          'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  var args = [];\n  for (var i = 0; i < arguments.length; i++) args.push(arguments[i]);\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    ReflectApply(this.listener, this.target, args);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      if (typeof listener !== 'function') {\n        throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n      }\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      if (typeof listener !== 'function') {\n        throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n      }\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      list = events[type];\n      if (list === undefined)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else {\n          spliceOne(list, position);\n        }\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener !== undefined)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (events.removeListener === undefined) {\n        if (arguments.length === 0) {\n          this._events = Object.create(null);\n          this._eventsCount = 0;\n        } else if (events[type] !== undefined) {\n          if (--this._eventsCount === 0)\n            this._events = Object.create(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = Object.keys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners !== undefined) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (events === undefined)\n    return [];\n\n  var evlistener = events[type];\n  if (evlistener === undefined)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ?\n    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++)\n    list[index] = list[index + 1];\n  list.pop();\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n","\"use strict\";\n/*\n * Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar LOG_LEVELS = {\n    VERBOSE: 1,\n    DEBUG: 2,\n    INFO: 3,\n    WARN: 4,\n    ERROR: 5\n};\n/**\n* Write logs\n* @class Logger\n*/\nvar ConsoleLogger = /** @class */ (function () {\n    /**\n    * @constructor\n    * @param {string} name - Name of the logger\n    */\n    function ConsoleLogger(name, level) {\n        if (level === void 0) { level = 'WARN'; }\n        this.name = name;\n        this.level = level;\n    }\n    ConsoleLogger.prototype._padding = function (n) {\n        return n < 10 ? '0' + n : '' + n;\n    };\n    ConsoleLogger.prototype._ts = function () {\n        var dt = new Date();\n        return [\n            this._padding(dt.getMinutes()),\n            this._padding(dt.getSeconds())\n        ].join(':') + '.' + dt.getMilliseconds();\n    };\n    /**\n    * Write log\n    * @method\n    * @memeberof Logger\n    * @param {string} type - log type, default INFO\n    * @param {string|object} msg - Logging message or object\n    */\n    ConsoleLogger.prototype._log = function (type) {\n        var msg = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            msg[_i - 1] = arguments[_i];\n        }\n        var logger_level_name = this.level;\n        if (ConsoleLogger.LOG_LEVEL) {\n            logger_level_name = ConsoleLogger.LOG_LEVEL;\n        }\n        if ((typeof window !== 'undefined') && window.LOG_LEVEL) {\n            logger_level_name = window.LOG_LEVEL;\n        }\n        var logger_level = LOG_LEVELS[logger_level_name];\n        var type_level = LOG_LEVELS[type];\n        if (!(type_level >= logger_level)) {\n            // Do nothing if type is not greater than or equal to logger level (handle undefined)\n            return;\n        }\n        var log = console.log.bind(console);\n        if (type === 'ERROR' && console.error) {\n            log = console.error.bind(console);\n        }\n        if (type === 'WARN' && console.warn) {\n            log = console.warn.bind(console);\n        }\n        var prefix = \"[\" + type + \"] \" + this._ts() + \" \" + this.name;\n        if (msg.length === 1 && typeof msg[0] === 'string') {\n            log(prefix + \" - \" + msg[0]);\n        }\n        else if (msg.length === 1) {\n            log(prefix, msg[0]);\n        }\n        else if (typeof msg[0] === 'string') {\n            var obj = msg.slice(1);\n            if (obj.length === 1) {\n                obj = obj[0];\n            }\n            log(prefix + \" - \" + msg[0], obj);\n        }\n        else {\n            log(prefix, msg);\n        }\n    };\n    /**\n    * Write General log. Default to INFO\n    * @method\n    * @memeberof Logger\n    * @param {string|object} msg - Logging message or object\n    */\n    ConsoleLogger.prototype.log = function () {\n        var msg = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            msg[_i] = arguments[_i];\n        }\n        this._log.apply(this, ['INFO'].concat(msg));\n    };\n    /**\n    * Write INFO log\n    * @method\n    * @memeberof Logger\n    * @param {string|object} msg - Logging message or object\n    */\n    ConsoleLogger.prototype.info = function () {\n        var msg = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            msg[_i] = arguments[_i];\n        }\n        this._log.apply(this, ['INFO'].concat(msg));\n    };\n    /**\n    * Write WARN log\n    * @method\n    * @memeberof Logger\n    * @param {string|object} msg - Logging message or object\n    */\n    ConsoleLogger.prototype.warn = function () {\n        var msg = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            msg[_i] = arguments[_i];\n        }\n        this._log.apply(this, ['WARN'].concat(msg));\n    };\n    /**\n    * Write ERROR log\n    * @method\n    * @memeberof Logger\n    * @param {string|object} msg - Logging message or object\n    */\n    ConsoleLogger.prototype.error = function () {\n        var msg = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            msg[_i] = arguments[_i];\n        }\n        this._log.apply(this, ['ERROR'].concat(msg));\n    };\n    /**\n    * Write DEBUG log\n    * @method\n    * @memeberof Logger\n    * @param {string|object} msg - Logging message or object\n    */\n    ConsoleLogger.prototype.debug = function () {\n        var msg = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            msg[_i] = arguments[_i];\n        }\n        this._log.apply(this, ['DEBUG'].concat(msg));\n    };\n    /**\n    * Write VERBOSE log\n    * @method\n    * @memeberof Logger\n    * @param {string|object} msg - Logging message or object\n    */\n    ConsoleLogger.prototype.verbose = function () {\n        var msg = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            msg[_i] = arguments[_i];\n        }\n        this._log.apply(this, ['VERBOSE'].concat(msg));\n    };\n    ConsoleLogger.LOG_LEVEL = null;\n    return ConsoleLogger;\n}());\nexports.ConsoleLogger = ConsoleLogger;\n//# sourceMappingURL=ConsoleLogger.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Browser = require(\"./browser\");\nvar ClientDevice = /** @class */ (function () {\n    function ClientDevice() {\n    }\n    ClientDevice.clientInfo = function () {\n        return Browser.clientInfo();\n    };\n    ClientDevice.dimension = function () {\n        return Browser.dimension();\n    };\n    return ClientDevice;\n}());\nexports.default = ClientDevice;\n//# sourceMappingURL=index.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Logger_1 = require(\"../Logger\");\nvar logger = new Logger_1.ConsoleLogger('ClientDevice_Browser');\nfunction clientInfo() {\n    if (typeof window === 'undefined') {\n        return {};\n    }\n    return browserClientInfo();\n}\nexports.clientInfo = clientInfo;\nfunction browserClientInfo() {\n    if (typeof window === 'undefined') {\n        logger.warn('No window object available to get browser client info');\n        return {};\n    }\n    var nav = window.navigator;\n    if (!nav) {\n        logger.warn('No navigator object available to get browser client info');\n        return {};\n    }\n    var platform = nav.platform, product = nav.product, vendor = nav.vendor, userAgent = nav.userAgent, language = nav.language;\n    var type = browserType(userAgent);\n    var timezone = browserTimezone();\n    return {\n        'platform': platform,\n        'make': product || vendor,\n        'model': type.type,\n        'version': type.version,\n        'appVersion': [type.type, type.version].join('/'),\n        'language': language,\n        'timezone': timezone\n    };\n}\nfunction dimension() {\n    if (typeof window === 'undefined') {\n        logger.warn('No window object available to get browser client info');\n        return { width: 320, height: 320 };\n    }\n    return {\n        'width': window.innerWidth,\n        'height': window.innerHeight\n    };\n}\nexports.dimension = dimension;\nfunction browserTimezone() {\n    var tzMatch = /\\(([A-Za-z\\s].*)\\)/.exec(new Date().toString());\n    return tzMatch ? tzMatch[1] || \"\" : \"\";\n}\nfunction browserType(userAgent) {\n    var operaMatch = /.+(Opera[\\s[A-Z]*|OPR[\\sA-Z]*)\\/([0-9\\.]+).*/i.exec(userAgent);\n    if (operaMatch) {\n        return { type: operaMatch[1], version: operaMatch[2] };\n    }\n    var cfMatch = /.+(Chrome|Firefox|FxiOS)\\/([0-9\\.]+).*/i.exec(userAgent);\n    if (cfMatch) {\n        return { type: cfMatch[1], version: cfMatch[2] };\n    }\n    var ieMatch = /.+(Trident|Edge)\\/([0-9\\.]+).*/i.exec(userAgent);\n    if (ieMatch) {\n        return { type: ieMatch[1], version: ieMatch[2] };\n    }\n    var sMatch = /.+(Safari)\\/([0-9\\.]+).*/i.exec(userAgent);\n    if (sMatch) {\n        return { type: sMatch[1], version: sMatch[2] };\n    }\n    var awkMatch = /.+(AppleWebKit)\\/([0-9\\.]+).*/i.exec(userAgent);\n    if (awkMatch) {\n        return { type: awkMatch[1], version: awkMatch[2] };\n    }\n    var anyMatch = /.*([A-Z]+)\\/([0-9\\.]+).*/i.exec(userAgent);\n    if (anyMatch) {\n        return { type: anyMatch[1], version: anyMatch[2] };\n    }\n    return { type: '', version: '' };\n}\n//# sourceMappingURL=browser.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction missingConfig(name) { return new Error('Missing config value of ' + name); }\nexports.missingConfig = missingConfig;\nfunction invalidParameter(name) { return new Error('Invalid parameter value of ' + name); }\nexports.invalidParameter = invalidParameter;\n//# sourceMappingURL=Errors.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Logger_1 = require(\"./Logger\");\nvar logger = new Logger_1.ConsoleLogger('Hub');\nvar AMPLIFY_SYMBOL = ((typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') ?\n    Symbol.for('amplify_default') : '@@amplify_default');\nfunction isLegacyCallback(callback) {\n    return callback.onHubCapsule !== undefined;\n}\nvar HubClass = /** @class */ (function () {\n    function HubClass(name) {\n        this.listeners = [];\n        this.patterns = [];\n        this.protectedChannels = ['core', 'auth', 'api', 'analytics', 'interactions', 'pubsub', 'storage', 'xr'];\n        this.name = name;\n    }\n    // Note - Need to pass channel as a reference for removal to work and not anonymous function\n    HubClass.prototype.remove = function (channel, listener) {\n        if (channel instanceof RegExp) {\n            var pattern_1 = this.patterns.find(function (_a) {\n                var pattern = _a.pattern;\n                return pattern.source === channel.source;\n            });\n            if (!pattern_1) {\n                logger.warn(\"No listeners for \" + channel);\n                return;\n            }\n            this.patterns = this.patterns.filter(function (x) { return x !== pattern_1; }).slice();\n        }\n        else {\n            var holder = this.listeners[channel];\n            if (!holder) {\n                logger.warn(\"No listeners for \" + channel);\n                return;\n            }\n            this.listeners[channel] = holder.filter(function (_a) {\n                var callback = _a.callback;\n                return callback !== listener;\n            }).slice();\n        }\n    };\n    HubClass.prototype.dispatch = function (channel, payload, source, ampSymbol) {\n        if (source === void 0) { source = ''; }\n        if (this.protectedChannels.indexOf(channel) > -1) {\n            var hasAccess = ampSymbol === AMPLIFY_SYMBOL;\n            if (!hasAccess) {\n                logger.warn(\"WARNING: \" + channel + \" is protected and dispatching on it can have unintended consequences\");\n            }\n        }\n        var capsule = {\n            channel: channel,\n            payload: __assign({}, payload),\n            source: source,\n            patternInfo: []\n        };\n        try {\n            this._toListeners(capsule);\n        }\n        catch (e) {\n            logger.error(e);\n        }\n    };\n    HubClass.prototype.listen = function (channel, callback, listenerName) {\n        if (listenerName === void 0) { listenerName = 'noname'; }\n        var cb;\n        // Check for legacy onHubCapsule callback for backwards compatability\n        if (isLegacyCallback(callback)) {\n            logger.warn(\"WARNING onHubCapsule is Deprecated. Please pass in a callback.\");\n            cb = callback.onHubCapsule.bind(callback);\n        }\n        else if (typeof callback !== 'function') {\n            throw new Error('No callback supplied to Hub');\n        }\n        else {\n            cb = callback;\n        }\n        if (channel instanceof RegExp) {\n            this.patterns.push({\n                pattern: channel,\n                callback: cb\n            });\n        }\n        else {\n            var holder = this.listeners[channel];\n            if (!holder) {\n                holder = [];\n                this.listeners[channel] = holder;\n            }\n            holder.push({\n                name: listenerName,\n                callback: cb\n            });\n        }\n    };\n    HubClass.prototype._toListeners = function (capsule) {\n        var channel = capsule.channel, payload = capsule.payload;\n        var holder = this.listeners[channel];\n        if (holder) {\n            holder.forEach(function (listener) {\n                logger.debug(\"Dispatching to \" + channel + \" with \", payload);\n                try {\n                    listener.callback(capsule);\n                }\n                catch (e) {\n                    logger.error(e);\n                }\n            });\n        }\n        if (this.patterns.length > 0) {\n            if (!payload.message) {\n                logger.warn(\"Cannot perform pattern matching without a message key\");\n                return;\n            }\n            var payloadStr_1 = payload.message;\n            this.patterns.forEach(function (pattern) {\n                var match = payloadStr_1.match(pattern.pattern);\n                if (match) {\n                    var groups = match.slice(1);\n                    var dispatchingCapsule = __assign({}, capsule, { patternInfo: groups });\n                    try {\n                        pattern.callback(dispatchingCapsule);\n                    }\n                    catch (e) {\n                        logger.error(e);\n                    }\n                }\n            });\n        }\n    };\n    return HubClass;\n}());\nexports.HubClass = HubClass;\n/*We export a __default__ instance of HubClass to use it as a\npsuedo Singleton for the main messaging bus, however you can still create\nyour own instance of HubClass() for a separate \"private bus\" of events.*/\nvar Hub = new HubClass('__default__');\nexports.default = Hub;\n//# sourceMappingURL=Hub.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar I18n_1 = require(\"./I18n\");\nvar Logger_1 = require(\"../Logger\");\nvar Amplify_1 = require(\"../Amplify\");\nvar logger = new Logger_1.ConsoleLogger('I18n');\nvar _config = null;\nvar _i18n = null;\n/**\n * Export I18n APIs\n */\nvar I18n = /** @class */ (function () {\n    function I18n() {\n    }\n    /**\n     * @static\n     * @method\n     * Configure I18n part\n     * @param {Object} config - Configuration of the I18n\n     */\n    I18n.configure = function (config) {\n        logger.debug('configure I18n');\n        if (!config) {\n            return _config;\n        }\n        _config = Object.assign({}, _config, config.I18n || config);\n        I18n.createInstance();\n        return _config;\n    };\n    I18n.getModuleName = function () {\n        return 'I18n';\n    };\n    /**\n     * @static\n     * @method\n     * Create an instance of I18n for the library\n     */\n    I18n.createInstance = function () {\n        logger.debug('create I18n instance');\n        if (_i18n) {\n            return;\n        }\n        _i18n = new I18n_1.I18n(_config);\n    };\n    /**\n     * @static @method\n     * Explicitly setting language\n     * @param {String} lang\n     */\n    I18n.setLanguage = function (lang) {\n        I18n.checkConfig();\n        return _i18n.setLanguage(lang);\n    };\n    /**\n     * @static @method\n     * Get value\n     * @param {String} key\n     * @param {String} defVal - Default value\n     */\n    I18n.get = function (key, defVal) {\n        if (!I18n.checkConfig()) {\n            return (typeof defVal === 'undefined') ? key : defVal;\n        }\n        return _i18n.get(key, defVal);\n    };\n    /**\n     * @static\n     * @method\n     * Add vocabularies for one language\n     * @param {String} langurage - Language of the dictionary\n     * @param {Object} vocabularies - Object that has key-value as dictionary entry\n     */\n    I18n.putVocabulariesForLanguage = function (language, vocabularies) {\n        I18n.checkConfig();\n        return _i18n.putVocabulariesForLanguage(language, vocabularies);\n    };\n    /**\n     * @static\n     * @method\n     * Add vocabularies for one language\n     * @param {Object} vocabularies - Object that has language as key,\n     *                                vocabularies of each language as value\n     */\n    I18n.putVocabularies = function (vocabularies) {\n        I18n.checkConfig();\n        return _i18n.putVocabularies(vocabularies);\n    };\n    I18n.checkConfig = function () {\n        if (!_i18n) {\n            _i18n = new I18n_1.I18n(_config);\n        }\n        return true;\n    };\n    return I18n;\n}());\nAmplify_1.default.register(I18n);\nexports.default = I18n;\n//# sourceMappingURL=index.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Logger_1 = require(\"../Logger\");\nvar logger = new Logger_1.ConsoleLogger('I18n');\n/**\n * Language transition class\n */\nvar I18n = /** @class */ (function () {\n    /**\n     * @constructor\n     * Initialize with configurations\n     * @param {Object} options\n     */\n    function I18n(options) {\n        /**\n         * @private\n         */\n        this._options = null;\n        /**\n         * @private\n         */\n        this._lang = null;\n        /**\n         * @private\n         */\n        this._dict = {};\n        this._options = Object.assign({}, options);\n        this._lang = this._options.language;\n        if (!this._lang && typeof window !== 'undefined' && window && window.navigator) {\n            this._lang = window.navigator.language;\n        }\n        logger.debug(this._lang);\n    }\n    /**\n     * @method\n     * Explicitly setting language\n     * @param {String} lang\n     */\n    I18n.prototype.setLanguage = function (lang) {\n        this._lang = lang;\n    };\n    /**\n     * @method\n     * Get value\n     * @param {String} key\n     * @param {String} defVal - Default value\n     */\n    I18n.prototype.get = function (key, defVal) {\n        if (defVal === void 0) { defVal = undefined; }\n        if (!this._lang) {\n            return (typeof defVal !== 'undefined') ? defVal : key;\n        }\n        var lang = this._lang;\n        var val = this.getByLanguage(key, lang);\n        if (val) {\n            return val;\n        }\n        if (lang.indexOf('-') > 0) {\n            val = this.getByLanguage(key, lang.split('-')[0]);\n        }\n        if (val) {\n            return val;\n        }\n        return (typeof defVal !== 'undefined') ? defVal : key;\n    };\n    /**\n     * @method\n     * Get value according to specified language\n     * @param {String} key\n     * @param {String} language - Specified langurage to be used\n     * @param {String} defVal - Default value\n     */\n    I18n.prototype.getByLanguage = function (key, language, defVal) {\n        if (defVal === void 0) { defVal = null; }\n        if (!language) {\n            return defVal;\n        }\n        var lang_dict = this._dict[language];\n        if (!lang_dict) {\n            return defVal;\n        }\n        return lang_dict[key];\n    };\n    /**\n     * @method\n     * Add vocabularies for one language\n     * @param {String} langurage - Language of the dictionary\n     * @param {Object} vocabularies - Object that has key-value as dictionary entry\n     */\n    I18n.prototype.putVocabulariesForLanguage = function (language, vocabularies) {\n        var lang_dict = this._dict[language];\n        if (!lang_dict) {\n            lang_dict = this._dict[language] = {};\n        }\n        Object.assign(lang_dict, vocabularies);\n    };\n    /**\n     * @method\n     * Add vocabularies for one language\n     * @param {Object} vocabularies - Object that has language as key,\n     *                                vocabularies of each language as value\n     */\n    I18n.prototype.putVocabularies = function (vocabularies) {\n        var _this = this;\n        Object.keys(vocabularies).map(function (key) {\n            _this.putVocabulariesForLanguage(key, vocabularies[key]);\n        });\n    };\n    return I18n;\n}());\nexports.I18n = I18n;\n//# sourceMappingURL=I18n.js.map","import { getLogger } from 'aurelia-logging';\nimport { Container } from 'aurelia-dependency-injection';\nimport { History } from 'aurelia-history';\nimport { RouteRecognizer } from 'aurelia-route-recognizer';\nimport { EventAggregator } from 'aurelia-event-aggregator';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\n\n/**\r\n * Class used to represent an instruction during a navigation.\r\n */\r\nvar NavigationInstruction = /** @class */ (function () {\r\n    function NavigationInstruction(init) {\r\n        /**\r\n         * Current built viewport plan of this nav instruction\r\n         */\r\n        this.plan = null;\r\n        this.options = {};\r\n        Object.assign(this, init);\r\n        this.params = this.params || {};\r\n        this.viewPortInstructions = {};\r\n        var ancestorParams = [];\r\n        var current = this;\r\n        do {\r\n            var currentParams = Object.assign({}, current.params);\r\n            if (current.config && current.config.hasChildRouter) {\r\n                // remove the param for the injected child route segment\r\n                delete currentParams[current.getWildCardName()];\r\n            }\r\n            ancestorParams.unshift(currentParams);\r\n            current = current.parentInstruction;\r\n        } while (current);\r\n        var allParams = Object.assign.apply(Object, [{}, this.queryParams].concat(ancestorParams));\r\n        this.lifecycleArgs = [allParams, this.config, this];\r\n    }\r\n    /**\r\n     * Gets an array containing this instruction and all child instructions for the current navigation.\r\n     */\r\n    NavigationInstruction.prototype.getAllInstructions = function () {\r\n        var instructions = [this];\r\n        var viewPortInstructions = this.viewPortInstructions;\r\n        for (var key in viewPortInstructions) {\r\n            var childInstruction = viewPortInstructions[key].childNavigationInstruction;\r\n            if (childInstruction) {\r\n                instructions.push.apply(instructions, childInstruction.getAllInstructions());\r\n            }\r\n        }\r\n        return instructions;\r\n    };\r\n    /**\r\n     * Gets an array containing the instruction and all child instructions for the previous navigation.\r\n     * Previous instructions are no longer available after navigation completes.\r\n     */\r\n    NavigationInstruction.prototype.getAllPreviousInstructions = function () {\r\n        return this.getAllInstructions().map(function (c) { return c.previousInstruction; }).filter(function (c) { return c; });\r\n    };\r\n    NavigationInstruction.prototype.addViewPortInstruction = function (nameOrInitOptions, strategy, moduleId, component) {\r\n        var viewPortInstruction;\r\n        var viewPortName = typeof nameOrInitOptions === 'string' ? nameOrInitOptions : nameOrInitOptions.name;\r\n        var lifecycleArgs = this.lifecycleArgs;\r\n        var config = Object.assign({}, lifecycleArgs[1], { currentViewPort: viewPortName });\r\n        if (typeof nameOrInitOptions === 'string') {\r\n            viewPortInstruction = {\r\n                name: nameOrInitOptions,\r\n                strategy: strategy,\r\n                moduleId: moduleId,\r\n                component: component,\r\n                childRouter: component.childRouter,\r\n                lifecycleArgs: [lifecycleArgs[0], config, lifecycleArgs[2]]\r\n            };\r\n        }\r\n        else {\r\n            viewPortInstruction = {\r\n                name: viewPortName,\r\n                strategy: nameOrInitOptions.strategy,\r\n                component: nameOrInitOptions.component,\r\n                moduleId: nameOrInitOptions.moduleId,\r\n                childRouter: nameOrInitOptions.component.childRouter,\r\n                lifecycleArgs: [lifecycleArgs[0], config, lifecycleArgs[2]]\r\n            };\r\n        }\r\n        return this.viewPortInstructions[viewPortName] = viewPortInstruction;\r\n    };\r\n    /**\r\n     * Gets the name of the route pattern's wildcard parameter, if applicable.\r\n     */\r\n    NavigationInstruction.prototype.getWildCardName = function () {\r\n        // todo: potential issue, or at least unsafe typings\r\n        var configRoute = this.config.route;\r\n        var wildcardIndex = configRoute.lastIndexOf('*');\r\n        return configRoute.substr(wildcardIndex + 1);\r\n    };\r\n    /**\r\n     * Gets the path and query string created by filling the route\r\n     * pattern's wildcard parameter with the matching param.\r\n     */\r\n    NavigationInstruction.prototype.getWildcardPath = function () {\r\n        var wildcardName = this.getWildCardName();\r\n        var path = this.params[wildcardName] || '';\r\n        var queryString = this.queryString;\r\n        if (queryString) {\r\n            path += '?' + queryString;\r\n        }\r\n        return path;\r\n    };\r\n    /**\r\n     * Gets the instruction's base URL, accounting for wildcard route parameters.\r\n     */\r\n    NavigationInstruction.prototype.getBaseUrl = function () {\r\n        var _this = this;\r\n        var $encodeURI = encodeURI;\r\n        var fragment = decodeURI(this.fragment);\r\n        if (fragment === '') {\r\n            var nonEmptyRoute = this.router.routes.find(function (route) {\r\n                return route.name === _this.config.name &&\r\n                    route.route !== '';\r\n            });\r\n            if (nonEmptyRoute) {\r\n                fragment = nonEmptyRoute.route;\r\n            }\r\n        }\r\n        if (!this.params) {\r\n            return $encodeURI(fragment);\r\n        }\r\n        var wildcardName = this.getWildCardName();\r\n        var path = this.params[wildcardName] || '';\r\n        if (!path) {\r\n            return $encodeURI(fragment);\r\n        }\r\n        return $encodeURI(fragment.substr(0, fragment.lastIndexOf(path)));\r\n    };\r\n    /**\r\n     * Finalize a viewport instruction\r\n     * @internal\r\n     */\r\n    NavigationInstruction.prototype._commitChanges = function (waitToSwap) {\r\n        var _this = this;\r\n        var router = this.router;\r\n        router.currentInstruction = this;\r\n        var previousInstruction = this.previousInstruction;\r\n        if (previousInstruction) {\r\n            previousInstruction.config.navModel.isActive = false;\r\n        }\r\n        this.config.navModel.isActive = true;\r\n        router.refreshNavigation();\r\n        var loads = [];\r\n        var delaySwaps = [];\r\n        var viewPortInstructions = this.viewPortInstructions;\r\n        var _loop_1 = function (viewPortName) {\r\n            var viewPortInstruction = viewPortInstructions[viewPortName];\r\n            var viewPort = router.viewPorts[viewPortName];\r\n            if (!viewPort) {\r\n                throw new Error(\"There was no router-view found in the view for \" + viewPortInstruction.moduleId + \".\");\r\n            }\r\n            var childNavInstruction = viewPortInstruction.childNavigationInstruction;\r\n            if (viewPortInstruction.strategy === \"replace\" /* Replace */) {\r\n                if (childNavInstruction && childNavInstruction.parentCatchHandler) {\r\n                    loads.push(childNavInstruction._commitChanges(waitToSwap));\r\n                }\r\n                else {\r\n                    if (waitToSwap) {\r\n                        delaySwaps.push({ viewPort: viewPort, viewPortInstruction: viewPortInstruction });\r\n                    }\r\n                    loads.push(viewPort\r\n                        .process(viewPortInstruction, waitToSwap)\r\n                        .then(function () { return childNavInstruction\r\n                        ? childNavInstruction._commitChanges(waitToSwap)\r\n                        : Promise.resolve(); }));\r\n                }\r\n            }\r\n            else {\r\n                if (childNavInstruction) {\r\n                    loads.push(childNavInstruction._commitChanges(waitToSwap));\r\n                }\r\n            }\r\n        };\r\n        for (var viewPortName in viewPortInstructions) {\r\n            _loop_1(viewPortName);\r\n        }\r\n        return Promise\r\n            .all(loads)\r\n            .then(function () {\r\n            delaySwaps.forEach(function (x) { return x.viewPort.swap(x.viewPortInstruction); });\r\n            return null;\r\n        })\r\n            .then(function () { return prune(_this); });\r\n    };\r\n    /**@internal */\r\n    NavigationInstruction.prototype._updateTitle = function () {\r\n        var router = this.router;\r\n        var title = this._buildTitle(router.titleSeparator);\r\n        if (title) {\r\n            router.history.setTitle(title);\r\n        }\r\n    };\r\n    /**@internal */\r\n    NavigationInstruction.prototype._buildTitle = function (separator) {\r\n        if (separator === void 0) { separator = ' | '; }\r\n        var title = '';\r\n        var childTitles = [];\r\n        var navModelTitle = this.config.navModel.title;\r\n        var instructionRouter = this.router;\r\n        var viewPortInstructions = this.viewPortInstructions;\r\n        if (navModelTitle) {\r\n            title = instructionRouter.transformTitle(navModelTitle);\r\n        }\r\n        for (var viewPortName in viewPortInstructions) {\r\n            var viewPortInstruction = viewPortInstructions[viewPortName];\r\n            var child_nav_instruction = viewPortInstruction.childNavigationInstruction;\r\n            if (child_nav_instruction) {\r\n                var childTitle = child_nav_instruction._buildTitle(separator);\r\n                if (childTitle) {\r\n                    childTitles.push(childTitle);\r\n                }\r\n            }\r\n        }\r\n        if (childTitles.length) {\r\n            title = childTitles.join(separator) + (title ? separator : '') + title;\r\n        }\r\n        if (instructionRouter.title) {\r\n            title += (title ? separator : '') + instructionRouter.transformTitle(instructionRouter.title);\r\n        }\r\n        return title;\r\n    };\r\n    return NavigationInstruction;\r\n}());\r\nvar prune = function (instruction) {\r\n    instruction.previousInstruction = null;\r\n    instruction.plan = null;\r\n};\n\n/**\r\n* Class for storing and interacting with a route's navigation settings.\r\n*/\r\nvar NavModel = /** @class */ (function () {\r\n    function NavModel(router, relativeHref) {\r\n        /**\r\n        * True if this nav item is currently active.\r\n        */\r\n        this.isActive = false;\r\n        /**\r\n        * The title.\r\n        */\r\n        this.title = null;\r\n        /**\r\n        * This nav item's absolute href.\r\n        */\r\n        this.href = null;\r\n        /**\r\n        * This nav item's relative href.\r\n        */\r\n        this.relativeHref = null;\r\n        /**\r\n        * Data attached to the route at configuration time.\r\n        */\r\n        this.settings = {};\r\n        /**\r\n        * The route config.\r\n        */\r\n        this.config = null;\r\n        this.router = router;\r\n        this.relativeHref = relativeHref;\r\n    }\r\n    /**\r\n    * Sets the route's title and updates document.title.\r\n    *  If the a navigation is in progress, the change will be applied\r\n    *  to document.title when the navigation completes.\r\n    *\r\n    * @param title The new title.\r\n    */\r\n    NavModel.prototype.setTitle = function (title) {\r\n        this.title = title;\r\n        if (this.isActive) {\r\n            this.router.updateTitle();\r\n        }\r\n    };\r\n    return NavModel;\r\n}());\n\nfunction _normalizeAbsolutePath(path, hasPushState, absolute) {\r\n    if (absolute === void 0) { absolute = false; }\r\n    if (!hasPushState && path[0] !== '#') {\r\n        path = '#' + path;\r\n    }\r\n    if (hasPushState && absolute) {\r\n        path = path.substring(1, path.length);\r\n    }\r\n    return path;\r\n}\r\nfunction _createRootedPath(fragment, baseUrl, hasPushState, absolute) {\r\n    if (isAbsoluteUrl.test(fragment)) {\r\n        return fragment;\r\n    }\r\n    var path = '';\r\n    if (baseUrl.length && baseUrl[0] !== '/') {\r\n        path += '/';\r\n    }\r\n    path += baseUrl;\r\n    if ((!path.length || path[path.length - 1] !== '/') && fragment[0] !== '/') {\r\n        path += '/';\r\n    }\r\n    if (path.length && path[path.length - 1] === '/' && fragment[0] === '/') {\r\n        path = path.substring(0, path.length - 1);\r\n    }\r\n    return _normalizeAbsolutePath(path + fragment, hasPushState, absolute);\r\n}\r\nfunction _resolveUrl(fragment, baseUrl, hasPushState) {\r\n    if (isRootedPath.test(fragment)) {\r\n        return _normalizeAbsolutePath(fragment, hasPushState);\r\n    }\r\n    return _createRootedPath(fragment, baseUrl, hasPushState);\r\n}\r\nfunction _ensureArrayWithSingleRoutePerConfig(config) {\r\n    var routeConfigs = [];\r\n    if (Array.isArray(config.route)) {\r\n        for (var i = 0, ii = config.route.length; i < ii; ++i) {\r\n            var current = Object.assign({}, config);\r\n            current.route = config.route[i];\r\n            routeConfigs.push(current);\r\n        }\r\n    }\r\n    else {\r\n        routeConfigs.push(Object.assign({}, config));\r\n    }\r\n    return routeConfigs;\r\n}\r\nvar isRootedPath = /^#?\\//;\r\nvar isAbsoluteUrl = /^([a-z][a-z0-9+\\-.]*:)?\\/\\//i;\n\n/**\r\n * Class used to configure a [[Router]] instance.\r\n *\r\n * @constructor\r\n */\r\nvar RouterConfiguration = /** @class */ (function () {\r\n    function RouterConfiguration() {\r\n        this.instructions = [];\r\n        this.options = {};\r\n        this.pipelineSteps = [];\r\n    }\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s navigation pipeline.\r\n     *\r\n     * @param name The name of the pipeline slot to insert the step into.\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addPipelineStep = function (name, step) {\r\n        if (step === null || step === undefined) {\r\n            throw new Error('Pipeline step cannot be null or undefined.');\r\n        }\r\n        this.pipelineSteps.push({ name: name, step: step });\r\n        return this;\r\n    };\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s authorize pipeline slot.\r\n     *\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addAuthorizeStep = function (step) {\r\n        return this.addPipelineStep(\"authorize\" /* Authorize */, step);\r\n    };\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s preActivate pipeline slot.\r\n     *\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addPreActivateStep = function (step) {\r\n        return this.addPipelineStep(\"preActivate\" /* PreActivate */, step);\r\n    };\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s preRender pipeline slot.\r\n     *\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addPreRenderStep = function (step) {\r\n        return this.addPipelineStep(\"preRender\" /* PreRender */, step);\r\n    };\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s postRender pipeline slot.\r\n     *\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addPostRenderStep = function (step) {\r\n        return this.addPipelineStep(\"postRender\" /* PostRender */, step);\r\n    };\r\n    /**\r\n     * Configures a route that will be used if there is no previous location available on navigation cancellation.\r\n     *\r\n     * @param fragment The URL fragment to use as the navigation destination.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.fallbackRoute = function (fragment) {\r\n        this._fallbackRoute = fragment;\r\n        return this;\r\n    };\r\n    /**\r\n     * Maps one or more routes to be registered with the router.\r\n     *\r\n     * @param route The [[RouteConfig]] to map, or an array of [[RouteConfig]] to map.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.map = function (route) {\r\n        var _this = this;\r\n        if (Array.isArray(route)) {\r\n            route.forEach(function (r) { return _this.map(r); });\r\n            return this;\r\n        }\r\n        return this.mapRoute(route);\r\n    };\r\n    /**\r\n     * Configures defaults to use for any view ports.\r\n     *\r\n     * @param viewPortConfig a view port configuration object to use as a\r\n     *  default, of the form { viewPortName: { moduleId } }.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.useViewPortDefaults = function (viewPortConfig) {\r\n        this.viewPortDefaults = viewPortConfig;\r\n        return this;\r\n    };\r\n    /**\r\n     * Maps a single route to be registered with the router.\r\n     *\r\n     * @param route The [[RouteConfig]] to map.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.mapRoute = function (config) {\r\n        this.instructions.push(function (router) {\r\n            var routeConfigs = _ensureArrayWithSingleRoutePerConfig(config);\r\n            var navModel;\r\n            for (var i = 0, ii = routeConfigs.length; i < ii; ++i) {\r\n                var routeConfig = routeConfigs[i];\r\n                routeConfig.settings = routeConfig.settings || {};\r\n                if (!navModel) {\r\n                    navModel = router.createNavModel(routeConfig);\r\n                }\r\n                router.addRoute(routeConfig, navModel);\r\n            }\r\n        });\r\n        return this;\r\n    };\r\n    /**\r\n     * Registers an unknown route handler to be run when the URL fragment doesn't match any registered routes.\r\n     *\r\n     * @param config A string containing a moduleId to load, or a [[RouteConfig]], or a function that takes the\r\n     *  [[NavigationInstruction]] and selects a moduleId to load.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.mapUnknownRoutes = function (config) {\r\n        this.unknownRouteConfig = config;\r\n        return this;\r\n    };\r\n    /**\r\n     * Applies the current configuration to the specified [[Router]].\r\n     *\r\n     * @param router The [[Router]] to apply the configuration to.\r\n     */\r\n    RouterConfiguration.prototype.exportToRouter = function (router) {\r\n        var instructions = this.instructions;\r\n        for (var i = 0, ii = instructions.length; i < ii; ++i) {\r\n            instructions[i](router);\r\n        }\r\n        var _a = this, title = _a.title, titleSeparator = _a.titleSeparator, unknownRouteConfig = _a.unknownRouteConfig, _fallbackRoute = _a._fallbackRoute, viewPortDefaults = _a.viewPortDefaults;\r\n        if (title) {\r\n            router.title = title;\r\n        }\r\n        if (titleSeparator) {\r\n            router.titleSeparator = titleSeparator;\r\n        }\r\n        if (unknownRouteConfig) {\r\n            router.handleUnknownRoutes(unknownRouteConfig);\r\n        }\r\n        if (_fallbackRoute) {\r\n            router.fallbackRoute = _fallbackRoute;\r\n        }\r\n        if (viewPortDefaults) {\r\n            router.useViewPortDefaults(viewPortDefaults);\r\n        }\r\n        Object.assign(router.options, this.options);\r\n        var pipelineSteps = this.pipelineSteps;\r\n        var pipelineStepCount = pipelineSteps.length;\r\n        if (pipelineStepCount) {\r\n            if (!router.isRoot) {\r\n                throw new Error('Pipeline steps can only be added to the root router');\r\n            }\r\n            var pipelineProvider = router.pipelineProvider;\r\n            for (var i = 0, ii = pipelineStepCount; i < ii; ++i) {\r\n                var _b = pipelineSteps[i], name_1 = _b.name, step = _b.step;\r\n                pipelineProvider.addStep(name_1, step);\r\n            }\r\n        }\r\n    };\r\n    return RouterConfiguration;\r\n}());\n\n/**\r\n * The primary class responsible for handling routing and navigation.\r\n */\r\nvar Router = /** @class */ (function () {\r\n    /**\r\n     * @param container The [[Container]] to use when child routers.\r\n     * @param history The [[History]] implementation to delegate navigation requests to.\r\n     */\r\n    function Router(container, history) {\r\n        var _this = this;\r\n        /**\r\n         * The parent router, or null if this instance is not a child router.\r\n         */\r\n        this.parent = null;\r\n        this.options = {};\r\n        /**\r\n         * The defaults used when a viewport lacks specified content\r\n         */\r\n        this.viewPortDefaults = {};\r\n        /**\r\n         * Extension point to transform the document title before it is built and displayed.\r\n         * By default, child routers delegate to the parent router, and the app router\r\n         * returns the title unchanged.\r\n         */\r\n        this.transformTitle = function (title) {\r\n            if (_this.parent) {\r\n                return _this.parent.transformTitle(title);\r\n            }\r\n            return title;\r\n        };\r\n        this.container = container;\r\n        this.history = history;\r\n        this.reset();\r\n    }\r\n    /**\r\n     * Fully resets the router's internal state. Primarily used internally by the framework when multiple calls to setRoot are made.\r\n     * Use with caution (actually, avoid using this). Do not use this to simply change your navigation model.\r\n     */\r\n    Router.prototype.reset = function () {\r\n        var _this = this;\r\n        this.viewPorts = {};\r\n        this.routes = [];\r\n        this.baseUrl = '';\r\n        this.isConfigured = false;\r\n        this.isNavigating = false;\r\n        this.isExplicitNavigation = false;\r\n        this.isExplicitNavigationBack = false;\r\n        this.isNavigatingFirst = false;\r\n        this.isNavigatingNew = false;\r\n        this.isNavigatingRefresh = false;\r\n        this.isNavigatingForward = false;\r\n        this.isNavigatingBack = false;\r\n        this.couldDeactivate = false;\r\n        this.navigation = [];\r\n        this.currentInstruction = null;\r\n        this.viewPortDefaults = {};\r\n        this._fallbackOrder = 100;\r\n        this._recognizer = new RouteRecognizer();\r\n        this._childRecognizer = new RouteRecognizer();\r\n        this._configuredPromise = new Promise(function (resolve) {\r\n            _this._resolveConfiguredPromise = resolve;\r\n        });\r\n    };\r\n    Object.defineProperty(Router.prototype, \"isRoot\", {\r\n        /**\r\n         * Gets a value indicating whether or not this [[Router]] is the root in the router tree. I.e., it has no parent.\r\n         */\r\n        get: function () {\r\n            return !this.parent;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Registers a viewPort to be used as a rendering target for activated routes.\r\n     *\r\n     * @param viewPort The viewPort.\r\n     * @param name The name of the viewPort. 'default' if unspecified.\r\n     */\r\n    Router.prototype.registerViewPort = function (viewPort, name) {\r\n        name = name || 'default';\r\n        this.viewPorts[name] = viewPort;\r\n    };\r\n    /**\r\n     * Returns a Promise that resolves when the router is configured.\r\n     */\r\n    Router.prototype.ensureConfigured = function () {\r\n        return this._configuredPromise;\r\n    };\r\n    /**\r\n     * Configures the router.\r\n     *\r\n     * @param callbackOrConfig The [[RouterConfiguration]] or a callback that takes a [[RouterConfiguration]].\r\n     */\r\n    Router.prototype.configure = function (callbackOrConfig) {\r\n        var _this = this;\r\n        this.isConfigured = true;\r\n        var result = callbackOrConfig;\r\n        var config;\r\n        if (typeof callbackOrConfig === 'function') {\r\n            config = new RouterConfiguration();\r\n            result = callbackOrConfig(config);\r\n        }\r\n        return Promise\r\n            .resolve(result)\r\n            .then(function (c) {\r\n            if (c && c.exportToRouter) {\r\n                config = c;\r\n            }\r\n            config.exportToRouter(_this);\r\n            _this.isConfigured = true;\r\n            _this._resolveConfiguredPromise();\r\n        });\r\n    };\r\n    /**\r\n     * Navigates to a new location.\r\n     *\r\n     * @param fragment The URL fragment to use as the navigation destination.\r\n     * @param options The navigation options.\r\n     */\r\n    Router.prototype.navigate = function (fragment, options) {\r\n        if (!this.isConfigured && this.parent) {\r\n            return this.parent.navigate(fragment, options);\r\n        }\r\n        this.isExplicitNavigation = true;\r\n        return this.history.navigate(_resolveUrl(fragment, this.baseUrl, this.history._hasPushState), options);\r\n    };\r\n    /**\r\n     * Navigates to a new location corresponding to the route and params specified. Equivallent to [[Router.generate]] followed\r\n     * by [[Router.navigate]].\r\n     *\r\n     * @param route The name of the route to use when generating the navigation location.\r\n     * @param params The route parameters to be used when populating the route pattern.\r\n     * @param options The navigation options.\r\n     */\r\n    Router.prototype.navigateToRoute = function (route, params, options) {\r\n        var path = this.generate(route, params);\r\n        return this.navigate(path, options);\r\n    };\r\n    /**\r\n     * Navigates back to the most recent location in history.\r\n     */\r\n    Router.prototype.navigateBack = function () {\r\n        this.isExplicitNavigationBack = true;\r\n        this.history.navigateBack();\r\n    };\r\n    /**\r\n     * Creates a child router of the current router.\r\n     *\r\n     * @param container The [[Container]] to provide to the child router. Uses the current [[Router]]'s [[Container]] if unspecified.\r\n     * @returns {Router} The new child Router.\r\n     */\r\n    Router.prototype.createChild = function (container) {\r\n        var childRouter = new Router(container || this.container.createChild(), this.history);\r\n        childRouter.parent = this;\r\n        return childRouter;\r\n    };\r\n    /**\r\n     * Generates a URL fragment matching the specified route pattern.\r\n     *\r\n     * @param name The name of the route whose pattern should be used to generate the fragment.\r\n     * @param params The route params to be used to populate the route pattern.\r\n     * @param options If options.absolute = true, then absolute url will be generated; otherwise, it will be relative url.\r\n     * @returns {string} A string containing the generated URL fragment.\r\n     */\r\n    Router.prototype.generate = function (nameOrRoute, params, options) {\r\n        if (params === void 0) { params = {}; }\r\n        if (options === void 0) { options = {}; }\r\n        // A child recognizer generates routes for potential child routes. Any potential child route is added\r\n        // to the childRoute property of params for the childRouter to recognize. When generating routes, we\r\n        // use the childRecognizer when childRoute params are available to generate a child router enabled route.\r\n        var recognizer = 'childRoute' in params ? this._childRecognizer : this._recognizer;\r\n        var hasRoute = recognizer.hasRoute(nameOrRoute);\r\n        if (!hasRoute) {\r\n            if (this.parent) {\r\n                return this.parent.generate(nameOrRoute, params, options);\r\n            }\r\n            throw new Error(\"A route with name '\" + nameOrRoute + \"' could not be found. Check that `name: '\" + nameOrRoute + \"'` was specified in the route's config.\");\r\n        }\r\n        var path = recognizer.generate(nameOrRoute, params);\r\n        var rootedPath = _createRootedPath(path, this.baseUrl, this.history._hasPushState, options.absolute);\r\n        return options.absolute ? \"\" + this.history.getAbsoluteRoot() + rootedPath : rootedPath;\r\n    };\r\n    /**\r\n     * Creates a [[NavModel]] for the specified route config.\r\n     *\r\n     * @param config The route config.\r\n     */\r\n    Router.prototype.createNavModel = function (config) {\r\n        var navModel = new NavModel(this, 'href' in config\r\n            ? config.href\r\n            // potential error when config.route is a string[] ?\r\n            : config.route);\r\n        navModel.title = config.title;\r\n        navModel.order = config.nav;\r\n        navModel.href = config.href;\r\n        navModel.settings = config.settings;\r\n        navModel.config = config;\r\n        return navModel;\r\n    };\r\n    /**\r\n     * Registers a new route with the router.\r\n     *\r\n     * @param config The [[RouteConfig]].\r\n     * @param navModel The [[NavModel]] to use for the route. May be omitted for single-pattern routes.\r\n     */\r\n    Router.prototype.addRoute = function (config, navModel) {\r\n        if (Array.isArray(config.route)) {\r\n            var routeConfigs = _ensureArrayWithSingleRoutePerConfig(config);\r\n            // the following is wrong. todo: fix this after TS refactoring release\r\n            routeConfigs.forEach(this.addRoute.bind(this));\r\n            return;\r\n        }\r\n        validateRouteConfig(config);\r\n        if (!('viewPorts' in config) && !config.navigationStrategy) {\r\n            config.viewPorts = {\r\n                'default': {\r\n                    moduleId: config.moduleId,\r\n                    view: config.view\r\n                }\r\n            };\r\n        }\r\n        if (!navModel) {\r\n            navModel = this.createNavModel(config);\r\n        }\r\n        this.routes.push(config);\r\n        var path = config.route;\r\n        if (path.charAt(0) === '/') {\r\n            path = path.substr(1);\r\n        }\r\n        var caseSensitive = config.caseSensitive === true;\r\n        var state = this._recognizer.add({\r\n            path: path,\r\n            handler: config,\r\n            caseSensitive: caseSensitive\r\n        });\r\n        if (path) {\r\n            var settings = config.settings;\r\n            delete config.settings;\r\n            var withChild = JSON.parse(JSON.stringify(config));\r\n            config.settings = settings;\r\n            withChild.route = path + \"/*childRoute\";\r\n            withChild.hasChildRouter = true;\r\n            this._childRecognizer.add({\r\n                path: withChild.route,\r\n                handler: withChild,\r\n                caseSensitive: caseSensitive\r\n            });\r\n            withChild.navModel = navModel;\r\n            withChild.settings = config.settings;\r\n            withChild.navigationStrategy = config.navigationStrategy;\r\n        }\r\n        config.navModel = navModel;\r\n        var navigation = this.navigation;\r\n        if ((navModel.order || navModel.order === 0) && navigation.indexOf(navModel) === -1) {\r\n            if ((!navModel.href && navModel.href !== '') && (state.types.dynamics || state.types.stars)) {\r\n                throw new Error('Invalid route config for \"' + config.route + '\" : dynamic routes must specify an \"href:\" to be included in the navigation model.');\r\n            }\r\n            if (typeof navModel.order !== 'number') {\r\n                navModel.order = ++this._fallbackOrder;\r\n            }\r\n            navigation.push(navModel);\r\n            // this is a potential error / inconsistency between browsers\r\n            //\r\n            // MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort\r\n            // If compareFunction(a, b) returns 0, leave a and b unchanged with respect to each other,\r\n            // but sorted with respect to all different elements.\r\n            // Note: the ECMAscript standard does not guarantee this behaviour,\r\n            // and thus not all browsers (e.g. Mozilla versions dating back to at least 2003) respect this.\r\n            navigation.sort(function (a, b) { return a.order - b.order; });\r\n        }\r\n    };\r\n    /**\r\n     * Gets a value indicating whether or not this [[Router]] or one of its ancestors has a route registered with the specified name.\r\n     *\r\n     * @param name The name of the route to check.\r\n     */\r\n    Router.prototype.hasRoute = function (name) {\r\n        return !!(this._recognizer.hasRoute(name) || this.parent && this.parent.hasRoute(name));\r\n    };\r\n    /**\r\n     * Gets a value indicating whether or not this [[Router]] has a route registered with the specified name.\r\n     *\r\n     * @param name The name of the route to check.\r\n     */\r\n    Router.prototype.hasOwnRoute = function (name) {\r\n        return this._recognizer.hasRoute(name);\r\n    };\r\n    /**\r\n     * Register a handler to use when the incoming URL fragment doesn't match any registered routes.\r\n     *\r\n     * @param config The moduleId, or a function that selects the moduleId, or a [[RouteConfig]].\r\n     */\r\n    Router.prototype.handleUnknownRoutes = function (config) {\r\n        var _this = this;\r\n        if (!config) {\r\n            throw new Error('Invalid unknown route handler');\r\n        }\r\n        this.catchAllHandler = function (instruction) {\r\n            return _this\r\n                ._createRouteConfig(config, instruction)\r\n                .then(function (c) {\r\n                instruction.config = c;\r\n                return instruction;\r\n            });\r\n        };\r\n    };\r\n    /**\r\n     * Updates the document title using the current navigation instruction.\r\n     */\r\n    Router.prototype.updateTitle = function () {\r\n        var parentRouter = this.parent;\r\n        if (parentRouter) {\r\n            return parentRouter.updateTitle();\r\n        }\r\n        var currentInstruction = this.currentInstruction;\r\n        if (currentInstruction) {\r\n            currentInstruction._updateTitle();\r\n        }\r\n        return undefined;\r\n    };\r\n    /**\r\n     * Updates the navigation routes with hrefs relative to the current location.\r\n     * Note: This method will likely move to a plugin in a future release.\r\n     */\r\n    Router.prototype.refreshNavigation = function () {\r\n        var nav = this.navigation;\r\n        for (var i = 0, length_1 = nav.length; i < length_1; i++) {\r\n            var current = nav[i];\r\n            if (!current.config.href) {\r\n                current.href = _createRootedPath(current.relativeHref, this.baseUrl, this.history._hasPushState);\r\n            }\r\n            else {\r\n                current.href = _normalizeAbsolutePath(current.config.href, this.history._hasPushState);\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * Sets the default configuration for the view ports. This specifies how to\r\n     *  populate a view port for which no module is specified. The default is\r\n     *  an empty view/view-model pair.\r\n     */\r\n    Router.prototype.useViewPortDefaults = function ($viewPortDefaults) {\r\n        // a workaround to have strong typings while not requiring to expose interface ViewPortInstruction\r\n        var viewPortDefaults = $viewPortDefaults;\r\n        for (var viewPortName in viewPortDefaults) {\r\n            var viewPortConfig = viewPortDefaults[viewPortName];\r\n            this.viewPortDefaults[viewPortName] = {\r\n                moduleId: viewPortConfig.moduleId\r\n            };\r\n        }\r\n    };\r\n    /**@internal */\r\n    Router.prototype._refreshBaseUrl = function () {\r\n        var parentRouter = this.parent;\r\n        if (parentRouter) {\r\n            this.baseUrl = generateBaseUrl(parentRouter, parentRouter.currentInstruction);\r\n        }\r\n    };\r\n    /**@internal */\r\n    Router.prototype._createNavigationInstruction = function (url, parentInstruction) {\r\n        if (url === void 0) { url = ''; }\r\n        if (parentInstruction === void 0) { parentInstruction = null; }\r\n        var fragment = url;\r\n        var queryString = '';\r\n        var queryIndex = url.indexOf('?');\r\n        if (queryIndex !== -1) {\r\n            fragment = url.substr(0, queryIndex);\r\n            queryString = url.substr(queryIndex + 1);\r\n        }\r\n        var urlRecognizationResults = this._recognizer.recognize(url);\r\n        if (!urlRecognizationResults || !urlRecognizationResults.length) {\r\n            urlRecognizationResults = this._childRecognizer.recognize(url);\r\n        }\r\n        var instructionInit = {\r\n            fragment: fragment,\r\n            queryString: queryString,\r\n            config: null,\r\n            parentInstruction: parentInstruction,\r\n            previousInstruction: this.currentInstruction,\r\n            router: this,\r\n            options: {\r\n                compareQueryParams: this.options.compareQueryParams\r\n            }\r\n        };\r\n        var result;\r\n        if (urlRecognizationResults && urlRecognizationResults.length) {\r\n            var first = urlRecognizationResults[0];\r\n            var instruction = new NavigationInstruction(Object.assign({}, instructionInit, {\r\n                params: first.params,\r\n                queryParams: first.queryParams || urlRecognizationResults.queryParams,\r\n                config: first.config || first.handler\r\n            }));\r\n            if (typeof first.handler === 'function') {\r\n                result = evaluateNavigationStrategy(instruction, first.handler, first);\r\n            }\r\n            else if (first.handler && typeof first.handler.navigationStrategy === 'function') {\r\n                result = evaluateNavigationStrategy(instruction, first.handler.navigationStrategy, first.handler);\r\n            }\r\n            else {\r\n                result = Promise.resolve(instruction);\r\n            }\r\n        }\r\n        else if (this.catchAllHandler) {\r\n            var instruction = new NavigationInstruction(Object.assign({}, instructionInit, {\r\n                params: { path: fragment },\r\n                queryParams: urlRecognizationResults ? urlRecognizationResults.queryParams : {},\r\n                config: null // config will be created by the catchAllHandler\r\n            }));\r\n            result = evaluateNavigationStrategy(instruction, this.catchAllHandler);\r\n        }\r\n        else if (this.parent) {\r\n            var router = this._parentCatchAllHandler(this.parent);\r\n            if (router) {\r\n                var newParentInstruction = this._findParentInstructionFromRouter(router, parentInstruction);\r\n                var instruction = new NavigationInstruction(Object.assign({}, instructionInit, {\r\n                    params: { path: fragment },\r\n                    queryParams: urlRecognizationResults ? urlRecognizationResults.queryParams : {},\r\n                    router: router,\r\n                    parentInstruction: newParentInstruction,\r\n                    parentCatchHandler: true,\r\n                    config: null // config will be created by the chained parent catchAllHandler\r\n                }));\r\n                result = evaluateNavigationStrategy(instruction, router.catchAllHandler);\r\n            }\r\n        }\r\n        if (result && parentInstruction) {\r\n            this.baseUrl = generateBaseUrl(this.parent, parentInstruction);\r\n        }\r\n        return result || Promise.reject(new Error(\"Route not found: \" + url));\r\n    };\r\n    /**@internal */\r\n    Router.prototype._findParentInstructionFromRouter = function (router, instruction) {\r\n        if (instruction.router === router) {\r\n            instruction.fragment = router.baseUrl; // need to change the fragment in case of a redirect instead of moduleId\r\n            return instruction;\r\n        }\r\n        else if (instruction.parentInstruction) {\r\n            return this._findParentInstructionFromRouter(router, instruction.parentInstruction);\r\n        }\r\n        return undefined;\r\n    };\r\n    /**@internal */\r\n    Router.prototype._parentCatchAllHandler = function (router) {\r\n        if (router.catchAllHandler) {\r\n            return router;\r\n        }\r\n        else if (router.parent) {\r\n            return this._parentCatchAllHandler(router.parent);\r\n        }\r\n        return false;\r\n    };\r\n    /**\r\n     * @internal\r\n     */\r\n    Router.prototype._createRouteConfig = function (config, instruction) {\r\n        var _this = this;\r\n        return Promise\r\n            .resolve(config)\r\n            .then(function (c) {\r\n            if (typeof c === 'string') {\r\n                return { moduleId: c };\r\n            }\r\n            else if (typeof c === 'function') {\r\n                return c(instruction);\r\n            }\r\n            return c;\r\n        })\r\n            // typing here could be either RouteConfig or RedirectConfig\r\n            // but temporarily treat both as RouteConfig\r\n            // todo: improve typings precision\r\n            .then(function (c) { return typeof c === 'string' ? { moduleId: c } : c; })\r\n            .then(function (c) {\r\n            c.route = instruction.params.path;\r\n            validateRouteConfig(c);\r\n            if (!c.navModel) {\r\n                c.navModel = _this.createNavModel(c);\r\n            }\r\n            return c;\r\n        });\r\n    };\r\n    return Router;\r\n}());\r\n/* @internal exported for unit testing */\r\nvar generateBaseUrl = function (router, instruction) {\r\n    return \"\" + (router.baseUrl || '') + (instruction.getBaseUrl() || '');\r\n};\r\n/* @internal exported for unit testing */\r\nvar validateRouteConfig = function (config) {\r\n    if (typeof config !== 'object') {\r\n        throw new Error('Invalid Route Config');\r\n    }\r\n    if (typeof config.route !== 'string') {\r\n        var name_1 = config.name || '(no name)';\r\n        throw new Error('Invalid Route Config for \"' + name_1 + '\": You must specify a \"route:\" pattern.');\r\n    }\r\n    if (!('redirect' in config || config.moduleId || config.navigationStrategy || config.viewPorts)) {\r\n        throw new Error('Invalid Route Config for \"' + config.route + '\": You must specify a \"moduleId:\", \"redirect:\", \"navigationStrategy:\", or \"viewPorts:\".');\r\n    }\r\n};\r\n/* @internal exported for unit testing */\r\nvar evaluateNavigationStrategy = function (instruction, evaluator, context) {\r\n    return Promise\r\n        .resolve(evaluator.call(context, instruction))\r\n        .then(function () {\r\n        if (!('viewPorts' in instruction.config)) {\r\n            instruction.config.viewPorts = {\r\n                'default': {\r\n                    moduleId: instruction.config.moduleId\r\n                }\r\n            };\r\n        }\r\n        return instruction;\r\n    });\r\n};\n\n/**@internal exported for unit testing */\r\nvar createNextFn = function (instruction, steps) {\r\n    var index = -1;\r\n    var next = function () {\r\n        index++;\r\n        if (index < steps.length) {\r\n            var currentStep = steps[index];\r\n            try {\r\n                return currentStep(instruction, next);\r\n            }\r\n            catch (e) {\r\n                return next.reject(e);\r\n            }\r\n        }\r\n        else {\r\n            return next.complete();\r\n        }\r\n    };\r\n    next.complete = createCompletionHandler(next, \"completed\" /* Completed */);\r\n    next.cancel = createCompletionHandler(next, \"canceled\" /* Canceled */);\r\n    next.reject = createCompletionHandler(next, \"rejected\" /* Rejected */);\r\n    return next;\r\n};\r\n/**@internal exported for unit testing */\r\nvar createCompletionHandler = function (next, status) {\r\n    return function (output) { return Promise\r\n        .resolve({\r\n        status: status,\r\n        output: output,\r\n        completed: status === \"completed\" /* Completed */\r\n    }); };\r\n};\n\n/**\r\n * The class responsible for managing and processing the navigation pipeline.\r\n */\r\nvar Pipeline = /** @class */ (function () {\r\n    function Pipeline() {\r\n        /**\r\n         * The pipeline steps. And steps added via addStep will be converted to a function\r\n         * The actualy running functions with correct step contexts of this pipeline\r\n         */\r\n        this.steps = [];\r\n    }\r\n    /**\r\n     * Adds a step to the pipeline.\r\n     *\r\n     * @param step The pipeline step.\r\n     */\r\n    Pipeline.prototype.addStep = function (step) {\r\n        var run;\r\n        if (typeof step === 'function') {\r\n            run = step;\r\n        }\r\n        else if (typeof step.getSteps === 'function') {\r\n            // getSteps is to enable support open slots\r\n            // where devs can add multiple steps into the same slot name\r\n            var steps = step.getSteps();\r\n            for (var i = 0, l = steps.length; i < l; i++) {\r\n                this.addStep(steps[i]);\r\n            }\r\n            return this;\r\n        }\r\n        else {\r\n            run = step.run.bind(step);\r\n        }\r\n        this.steps.push(run);\r\n        return this;\r\n    };\r\n    /**\r\n     * Runs the pipeline.\r\n     *\r\n     * @param instruction The navigation instruction to process.\r\n     */\r\n    Pipeline.prototype.run = function (instruction) {\r\n        var nextFn = createNextFn(instruction, this.steps);\r\n        return nextFn();\r\n    };\r\n    return Pipeline;\r\n}());\n\n/**\r\n* Determines if the provided object is a navigation command.\r\n* A navigation command is anything with a navigate method.\r\n*\r\n* @param obj The object to check.\r\n*/\r\nfunction isNavigationCommand(obj) {\r\n    return obj && typeof obj.navigate === 'function';\r\n}\r\n/**\r\n* Used during the activation lifecycle to cause a redirect.\r\n*/\r\nvar Redirect = /** @class */ (function () {\r\n    /**\r\n     * @param url The URL fragment to use as the navigation destination.\r\n     * @param options The navigation options.\r\n     */\r\n    function Redirect(url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        this.url = url;\r\n        this.options = Object.assign({ trigger: true, replace: true }, options);\r\n        this.shouldContinueProcessing = false;\r\n    }\r\n    /**\r\n     * Called by the activation system to set the child router.\r\n     *\r\n     * @param router The router.\r\n     */\r\n    Redirect.prototype.setRouter = function (router) {\r\n        this.router = router;\r\n    };\r\n    /**\r\n     * Called by the navigation pipeline to navigate.\r\n     *\r\n     * @param appRouter The router to be redirected.\r\n     */\r\n    Redirect.prototype.navigate = function (appRouter) {\r\n        var navigatingRouter = this.options.useAppRouter ? appRouter : (this.router || appRouter);\r\n        navigatingRouter.navigate(this.url, this.options);\r\n    };\r\n    return Redirect;\r\n}());\r\n/**\r\n * Used during the activation lifecycle to cause a redirect to a named route.\r\n */\r\nvar RedirectToRoute = /** @class */ (function () {\r\n    /**\r\n     * @param route The name of the route.\r\n     * @param params The parameters to be sent to the activation method.\r\n     * @param options The options to use for navigation.\r\n     */\r\n    function RedirectToRoute(route, params, options) {\r\n        if (params === void 0) { params = {}; }\r\n        if (options === void 0) { options = {}; }\r\n        this.route = route;\r\n        this.params = params;\r\n        this.options = Object.assign({ trigger: true, replace: true }, options);\r\n        this.shouldContinueProcessing = false;\r\n    }\r\n    /**\r\n     * Called by the activation system to set the child router.\r\n     *\r\n     * @param router The router.\r\n     */\r\n    RedirectToRoute.prototype.setRouter = function (router) {\r\n        this.router = router;\r\n    };\r\n    /**\r\n     * Called by the navigation pipeline to navigate.\r\n     *\r\n     * @param appRouter The router to be redirected.\r\n     */\r\n    RedirectToRoute.prototype.navigate = function (appRouter) {\r\n        var navigatingRouter = this.options.useAppRouter ? appRouter : (this.router || appRouter);\r\n        navigatingRouter.navigateToRoute(this.route, this.params, this.options);\r\n    };\r\n    return RedirectToRoute;\r\n}());\n\n/**\r\n * @internal exported for unit testing\r\n */\r\nfunction _buildNavigationPlan(instruction, forceLifecycleMinimum) {\r\n    var config = instruction.config;\r\n    if ('redirect' in config) {\r\n        return buildRedirectPlan(instruction);\r\n    }\r\n    var prevInstruction = instruction.previousInstruction;\r\n    var defaultViewPortConfigs = instruction.router.viewPortDefaults;\r\n    if (prevInstruction) {\r\n        return buildTransitionPlans(instruction, prevInstruction, defaultViewPortConfigs, forceLifecycleMinimum);\r\n    }\r\n    // first navigation, only need to prepare a few information for each viewport plan\r\n    var viewPortPlans = {};\r\n    var viewPortConfigs = config.viewPorts;\r\n    for (var viewPortName in viewPortConfigs) {\r\n        var viewPortConfig = viewPortConfigs[viewPortName];\r\n        if (viewPortConfig.moduleId === null && viewPortName in defaultViewPortConfigs) {\r\n            viewPortConfig = defaultViewPortConfigs[viewPortName];\r\n        }\r\n        viewPortPlans[viewPortName] = {\r\n            name: viewPortName,\r\n            strategy: \"replace\" /* Replace */,\r\n            config: viewPortConfig\r\n        };\r\n    }\r\n    return Promise.resolve(viewPortPlans);\r\n}\r\n/**\r\n * Build redirect plan based on config of a navigation instruction\r\n * @internal exported for unit testing\r\n */\r\nvar buildRedirectPlan = function (instruction) {\r\n    var config = instruction.config;\r\n    var router = instruction.router;\r\n    return router\r\n        ._createNavigationInstruction(config.redirect)\r\n        .then(function (redirectInstruction) {\r\n        var params = {};\r\n        var originalInstructionParams = instruction.params;\r\n        var redirectInstructionParams = redirectInstruction.params;\r\n        for (var key in redirectInstructionParams) {\r\n            // If the param on the redirect points to another param, e.g. { route: first/:this, redirect: second/:this }\r\n            var val = redirectInstructionParams[key];\r\n            if (typeof val === 'string' && val[0] === ':') {\r\n                val = val.slice(1);\r\n                // And if that param is found on the original instruction then use it\r\n                if (val in originalInstructionParams) {\r\n                    params[key] = originalInstructionParams[val];\r\n                }\r\n            }\r\n            else {\r\n                params[key] = redirectInstructionParams[key];\r\n            }\r\n        }\r\n        var redirectLocation = router.generate(redirectInstruction.config, params, instruction.options);\r\n        // Special handling for child routes\r\n        for (var key in originalInstructionParams) {\r\n            redirectLocation = redirectLocation.replace(\":\" + key, originalInstructionParams[key]);\r\n        }\r\n        var queryString = instruction.queryString;\r\n        if (queryString) {\r\n            redirectLocation += '?' + queryString;\r\n        }\r\n        return Promise.resolve(new Redirect(redirectLocation));\r\n    });\r\n};\r\n/**\r\n * @param viewPortPlans the Plan record that holds information about built plans\r\n * @internal exported for unit testing\r\n */\r\nvar buildTransitionPlans = function (currentInstruction, previousInstruction, defaultViewPortConfigs, forceLifecycleMinimum) {\r\n    var viewPortPlans = {};\r\n    var newInstructionConfig = currentInstruction.config;\r\n    var hasNewParams = hasDifferentParameterValues(previousInstruction, currentInstruction);\r\n    var pending = [];\r\n    var previousViewPortInstructions = previousInstruction.viewPortInstructions;\r\n    var _loop_1 = function (viewPortName) {\r\n        var prevViewPortInstruction = previousViewPortInstructions[viewPortName];\r\n        var prevViewPortComponent = prevViewPortInstruction.component;\r\n        var newInstructionViewPortConfigs = newInstructionConfig.viewPorts;\r\n        // if this is invoked on a viewport without any changes, based on new url,\r\n        // newViewPortConfig will be the existing viewport instruction\r\n        var nextViewPortConfig = viewPortName in newInstructionViewPortConfigs\r\n            ? newInstructionViewPortConfigs[viewPortName]\r\n            : prevViewPortInstruction;\r\n        if (nextViewPortConfig.moduleId === null && viewPortName in defaultViewPortConfigs) {\r\n            nextViewPortConfig = defaultViewPortConfigs[viewPortName];\r\n        }\r\n        var viewPortActivationStrategy = determineActivationStrategy(currentInstruction, prevViewPortInstruction, nextViewPortConfig, hasNewParams, forceLifecycleMinimum);\r\n        var viewPortPlan = viewPortPlans[viewPortName] = {\r\n            name: viewPortName,\r\n            // ViewPortInstruction can quack like a RouteConfig\r\n            config: nextViewPortConfig,\r\n            prevComponent: prevViewPortComponent,\r\n            prevModuleId: prevViewPortInstruction.moduleId,\r\n            strategy: viewPortActivationStrategy\r\n        };\r\n        // recursively build nav plans for all existing child routers/viewports of this viewport\r\n        // this is possible because existing child viewports and routers already have necessary information\r\n        // to process the wildcard path from parent instruction\r\n        if (viewPortActivationStrategy !== \"replace\" /* Replace */ && prevViewPortInstruction.childRouter) {\r\n            var path = currentInstruction.getWildcardPath();\r\n            var task = prevViewPortInstruction\r\n                .childRouter\r\n                ._createNavigationInstruction(path, currentInstruction)\r\n                .then(function (childInstruction) {\r\n                viewPortPlan.childNavigationInstruction = childInstruction;\r\n                return _buildNavigationPlan(childInstruction, \r\n                // is it safe to assume viewPortPlan has not been changed from previous assignment?\r\n                // if so, can just use local variable viewPortPlanStrategy\r\n                // there could be user code modifying viewport plan during _createNavigationInstruction?\r\n                viewPortPlan.strategy === \"invoke-lifecycle\" /* InvokeLifecycle */)\r\n                    .then(function (childPlan) {\r\n                    if (childPlan instanceof Redirect) {\r\n                        return Promise.reject(childPlan);\r\n                    }\r\n                    childInstruction.plan = childPlan;\r\n                    // for bluebird ?\r\n                    return null;\r\n                });\r\n            });\r\n            pending.push(task);\r\n        }\r\n    };\r\n    for (var viewPortName in previousViewPortInstructions) {\r\n        _loop_1(viewPortName);\r\n    }\r\n    return Promise.all(pending).then(function () { return viewPortPlans; });\r\n};\r\n/**\r\n * @param newViewPortConfig if this is invoked on a viewport without any changes, based on new url, newViewPortConfig will be the existing viewport instruction\r\n * @internal exported for unit testing\r\n */\r\nvar determineActivationStrategy = function (currentNavInstruction, prevViewPortInstruction, newViewPortConfig, \r\n// indicates whether there is difference between old and new url params\r\nhasNewParams, forceLifecycleMinimum) {\r\n    var newInstructionConfig = currentNavInstruction.config;\r\n    var prevViewPortViewModel = prevViewPortInstruction.component.viewModel;\r\n    var viewPortPlanStrategy;\r\n    if (prevViewPortInstruction.moduleId !== newViewPortConfig.moduleId) {\r\n        viewPortPlanStrategy = \"replace\" /* Replace */;\r\n    }\r\n    else if ('determineActivationStrategy' in prevViewPortViewModel) {\r\n        viewPortPlanStrategy = prevViewPortViewModel.determineActivationStrategy.apply(prevViewPortViewModel, currentNavInstruction.lifecycleArgs);\r\n    }\r\n    else if (newInstructionConfig.activationStrategy) {\r\n        viewPortPlanStrategy = newInstructionConfig.activationStrategy;\r\n    }\r\n    else if (hasNewParams || forceLifecycleMinimum) {\r\n        viewPortPlanStrategy = \"invoke-lifecycle\" /* InvokeLifecycle */;\r\n    }\r\n    else {\r\n        viewPortPlanStrategy = \"no-change\" /* NoChange */;\r\n    }\r\n    return viewPortPlanStrategy;\r\n};\r\n/**@internal exported for unit testing */\r\nvar hasDifferentParameterValues = function (prev, next) {\r\n    var prevParams = prev.params;\r\n    var nextParams = next.params;\r\n    var nextWildCardName = next.config.hasChildRouter ? next.getWildCardName() : null;\r\n    for (var key in nextParams) {\r\n        if (key === nextWildCardName) {\r\n            continue;\r\n        }\r\n        if (prevParams[key] !== nextParams[key]) {\r\n            return true;\r\n        }\r\n    }\r\n    for (var key in prevParams) {\r\n        if (key === nextWildCardName) {\r\n            continue;\r\n        }\r\n        if (prevParams[key] !== nextParams[key]) {\r\n            return true;\r\n        }\r\n    }\r\n    if (!next.options.compareQueryParams) {\r\n        return false;\r\n    }\r\n    var prevQueryParams = prev.queryParams;\r\n    var nextQueryParams = next.queryParams;\r\n    for (var key in nextQueryParams) {\r\n        if (prevQueryParams[key] !== nextQueryParams[key]) {\r\n            return true;\r\n        }\r\n    }\r\n    for (var key in prevQueryParams) {\r\n        if (prevQueryParams[key] !== nextQueryParams[key]) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n};\n\n/**\r\n * Transform a navigation instruction into viewport plan record object,\r\n * or a redirect request if user viewmodel demands\r\n */\r\nvar BuildNavigationPlanStep = /** @class */ (function () {\r\n    function BuildNavigationPlanStep() {\r\n    }\r\n    BuildNavigationPlanStep.prototype.run = function (navigationInstruction, next) {\r\n        return _buildNavigationPlan(navigationInstruction)\r\n            .then(function (plan) {\r\n            if (plan instanceof Redirect) {\r\n                return next.cancel(plan);\r\n            }\r\n            navigationInstruction.plan = plan;\r\n            return next();\r\n        })\r\n            .catch(next.cancel);\r\n    };\r\n    return BuildNavigationPlanStep;\r\n}());\n\n/**\r\n * @internal Exported for unit testing\r\n */\r\nvar loadNewRoute = function (routeLoader, navigationInstruction) {\r\n    var loadingPlans = determineLoadingPlans(navigationInstruction);\r\n    var loadPromises = loadingPlans.map(function (loadingPlan) { return loadRoute(routeLoader, loadingPlan.navigationInstruction, loadingPlan.viewPortPlan); });\r\n    return Promise.all(loadPromises);\r\n};\r\n/**\r\n * @internal Exported for unit testing\r\n */\r\nvar determineLoadingPlans = function (navigationInstruction, loadingPlans) {\r\n    if (loadingPlans === void 0) { loadingPlans = []; }\r\n    var viewPortPlans = navigationInstruction.plan;\r\n    for (var viewPortName in viewPortPlans) {\r\n        var viewPortPlan = viewPortPlans[viewPortName];\r\n        var childNavInstruction = viewPortPlan.childNavigationInstruction;\r\n        if (viewPortPlan.strategy === \"replace\" /* Replace */) {\r\n            loadingPlans.push({ viewPortPlan: viewPortPlan, navigationInstruction: navigationInstruction });\r\n            if (childNavInstruction) {\r\n                determineLoadingPlans(childNavInstruction, loadingPlans);\r\n            }\r\n        }\r\n        else {\r\n            var viewPortInstruction = navigationInstruction.addViewPortInstruction({\r\n                name: viewPortName,\r\n                strategy: viewPortPlan.strategy,\r\n                moduleId: viewPortPlan.prevModuleId,\r\n                component: viewPortPlan.prevComponent\r\n            });\r\n            if (childNavInstruction) {\r\n                viewPortInstruction.childNavigationInstruction = childNavInstruction;\r\n                determineLoadingPlans(childNavInstruction, loadingPlans);\r\n            }\r\n        }\r\n    }\r\n    return loadingPlans;\r\n};\r\n/**\r\n * @internal Exported for unit testing\r\n */\r\nvar loadRoute = function (routeLoader, navigationInstruction, viewPortPlan) {\r\n    var planConfig = viewPortPlan.config;\r\n    var moduleId = planConfig ? planConfig.moduleId : null;\r\n    return loadComponent(routeLoader, navigationInstruction, planConfig)\r\n        .then(function (component) {\r\n        var viewPortInstruction = navigationInstruction.addViewPortInstruction({\r\n            name: viewPortPlan.name,\r\n            strategy: viewPortPlan.strategy,\r\n            moduleId: moduleId,\r\n            component: component\r\n        });\r\n        var childRouter = component.childRouter;\r\n        if (childRouter) {\r\n            var path = navigationInstruction.getWildcardPath();\r\n            return childRouter\r\n                ._createNavigationInstruction(path, navigationInstruction)\r\n                .then(function (childInstruction) {\r\n                viewPortPlan.childNavigationInstruction = childInstruction;\r\n                return _buildNavigationPlan(childInstruction)\r\n                    .then(function (childPlan) {\r\n                    if (childPlan instanceof Redirect) {\r\n                        return Promise.reject(childPlan);\r\n                    }\r\n                    childInstruction.plan = childPlan;\r\n                    viewPortInstruction.childNavigationInstruction = childInstruction;\r\n                    return loadNewRoute(routeLoader, childInstruction);\r\n                });\r\n            });\r\n        }\r\n        // ts complains without this, though they are same\r\n        return void 0;\r\n    });\r\n};\r\n/**\r\n * Load a routed-component based on navigation instruction and route config\r\n * @internal exported for unit testing only\r\n */\r\nvar loadComponent = function (routeLoader, navigationInstruction, config) {\r\n    var router = navigationInstruction.router;\r\n    var lifecycleArgs = navigationInstruction.lifecycleArgs;\r\n    return Promise.resolve()\r\n        .then(function () { return routeLoader.loadRoute(router, config, navigationInstruction); })\r\n        .then(\r\n    /**\r\n     * @param component an object carrying information about loaded route\r\n     * typically contains information about view model, childContainer, view and router\r\n     */\r\n    function (component) {\r\n        var viewModel = component.viewModel, childContainer = component.childContainer;\r\n        component.router = router;\r\n        component.config = config;\r\n        if ('configureRouter' in viewModel) {\r\n            var childRouter_1 = childContainer.getChildRouter();\r\n            component.childRouter = childRouter_1;\r\n            return childRouter_1\r\n                .configure(function (c) { return viewModel.configureRouter(c, childRouter_1, lifecycleArgs[0], lifecycleArgs[1], lifecycleArgs[2]); })\r\n                .then(function () { return component; });\r\n        }\r\n        return component;\r\n    });\r\n};\n\n/**\r\n * Abstract class that is responsible for loading view / view model from a route config\r\n * The default implementation can be found in `aurelia-templating-router`\r\n */\r\nvar RouteLoader = /** @class */ (function () {\r\n    function RouteLoader() {\r\n    }\r\n    /**\r\n     * Load a route config based on its viewmodel / view configuration\r\n     */\r\n    // return typing: return typings used to be never\r\n    // as it was a throw. Changing it to Promise<any> should not cause any issues\r\n    RouteLoader.prototype.loadRoute = function (router, config, navigationInstruction) {\r\n        throw new Error('Route loaders must implement \"loadRoute(router, config, navigationInstruction)\".');\r\n    };\r\n    return RouteLoader;\r\n}());\n\n/**\r\n * A pipeline step responsible for loading a route config of a navigation instruction\r\n */\r\nvar LoadRouteStep = /** @class */ (function () {\r\n    function LoadRouteStep(routeLoader) {\r\n        this.routeLoader = routeLoader;\r\n    }\r\n    /**@internal */\r\n    LoadRouteStep.inject = function () { return [RouteLoader]; };\r\n    /**\r\n     * Run the internal to load route config of a navigation instruction to prepare for next steps in the pipeline\r\n     */\r\n    LoadRouteStep.prototype.run = function (navigationInstruction, next) {\r\n        return loadNewRoute(this.routeLoader, navigationInstruction)\r\n            .then(next, next.cancel);\r\n    };\r\n    return LoadRouteStep;\r\n}());\n\n/**\r\n * A pipeline step for instructing a piepline to commit changes on a navigation instruction\r\n */\r\nvar CommitChangesStep = /** @class */ (function () {\r\n    function CommitChangesStep() {\r\n    }\r\n    CommitChangesStep.prototype.run = function (navigationInstruction, next) {\r\n        return navigationInstruction\r\n            ._commitChanges(/*wait to swap?*/ true)\r\n            .then(function () {\r\n            navigationInstruction._updateTitle();\r\n            return next();\r\n        });\r\n    };\r\n    return CommitChangesStep;\r\n}());\n\n/**\r\n * An optional interface describing the available activation strategies.\r\n * @internal Used internally.\r\n */\r\nvar InternalActivationStrategy;\r\n(function (InternalActivationStrategy) {\r\n    /**\r\n     * Reuse the existing view model, without invoking Router lifecycle hooks.\r\n     */\r\n    InternalActivationStrategy[\"NoChange\"] = \"no-change\";\r\n    /**\r\n     * Reuse the existing view model, invoking Router lifecycle hooks.\r\n     */\r\n    InternalActivationStrategy[\"InvokeLifecycle\"] = \"invoke-lifecycle\";\r\n    /**\r\n     * Replace the existing view model, invoking Router lifecycle hooks.\r\n     */\r\n    InternalActivationStrategy[\"Replace\"] = \"replace\";\r\n})(InternalActivationStrategy || (InternalActivationStrategy = {}));\r\n/**\r\n * The strategy to use when activating modules during navigation.\r\n */\r\n// kept for compat reason\r\nvar activationStrategy = {\r\n    noChange: \"no-change\" /* NoChange */,\r\n    invokeLifecycle: \"invoke-lifecycle\" /* InvokeLifecycle */,\r\n    replace: \"replace\" /* Replace */\r\n};\n\n/**\r\n * Recursively find list of deactivate-able view models\r\n * and invoke the either 'canDeactivate' or 'deactivate' on each\r\n * @internal exported for unit testing\r\n */\r\nvar processDeactivatable = function (navigationInstruction, callbackName, next, ignoreResult) {\r\n    var plan = navigationInstruction.plan;\r\n    var infos = findDeactivatable(plan, callbackName);\r\n    var i = infos.length; // query from inside out\r\n    function inspect(val) {\r\n        if (ignoreResult || shouldContinue(val)) {\r\n            return iterate();\r\n        }\r\n        return next.cancel(val);\r\n    }\r\n    function iterate() {\r\n        if (i--) {\r\n            try {\r\n                var viewModel = infos[i];\r\n                var result = viewModel[callbackName](navigationInstruction);\r\n                return processPotential(result, inspect, next.cancel);\r\n            }\r\n            catch (error) {\r\n                return next.cancel(error);\r\n            }\r\n        }\r\n        navigationInstruction.router.couldDeactivate = true;\r\n        return next();\r\n    }\r\n    return iterate();\r\n};\r\n/**\r\n * Recursively find and returns a list of deactivate-able view models\r\n * @internal exported for unit testing\r\n */\r\nvar findDeactivatable = function (plan, callbackName, list) {\r\n    if (list === void 0) { list = []; }\r\n    for (var viewPortName in plan) {\r\n        var viewPortPlan = plan[viewPortName];\r\n        var prevComponent = viewPortPlan.prevComponent;\r\n        if ((viewPortPlan.strategy === activationStrategy.invokeLifecycle || viewPortPlan.strategy === activationStrategy.replace)\r\n            && prevComponent) {\r\n            var viewModel = prevComponent.viewModel;\r\n            if (callbackName in viewModel) {\r\n                list.push(viewModel);\r\n            }\r\n        }\r\n        if (viewPortPlan.strategy === activationStrategy.replace && prevComponent) {\r\n            addPreviousDeactivatable(prevComponent, callbackName, list);\r\n        }\r\n        else if (viewPortPlan.childNavigationInstruction) {\r\n            findDeactivatable(viewPortPlan.childNavigationInstruction.plan, callbackName, list);\r\n        }\r\n    }\r\n    return list;\r\n};\r\n/**\r\n * @internal exported for unit testing\r\n */\r\nvar addPreviousDeactivatable = function (component, callbackName, list) {\r\n    var childRouter = component.childRouter;\r\n    if (childRouter && childRouter.currentInstruction) {\r\n        var viewPortInstructions = childRouter.currentInstruction.viewPortInstructions;\r\n        for (var viewPortName in viewPortInstructions) {\r\n            var viewPortInstruction = viewPortInstructions[viewPortName];\r\n            var prevComponent = viewPortInstruction.component;\r\n            var prevViewModel = prevComponent.viewModel;\r\n            if (callbackName in prevViewModel) {\r\n                list.push(prevViewModel);\r\n            }\r\n            addPreviousDeactivatable(prevComponent, callbackName, list);\r\n        }\r\n    }\r\n};\r\n/**\r\n * @internal exported for unit testing\r\n */\r\nvar processActivatable = function (navigationInstruction, callbackName, next, ignoreResult) {\r\n    var infos = findActivatable(navigationInstruction, callbackName);\r\n    var length = infos.length;\r\n    var i = -1; // query from top down\r\n    function inspect(val, router) {\r\n        if (ignoreResult || shouldContinue(val, router)) {\r\n            return iterate();\r\n        }\r\n        return next.cancel(val);\r\n    }\r\n    function iterate() {\r\n        var _a;\r\n        i++;\r\n        if (i < length) {\r\n            try {\r\n                var current_1 = infos[i];\r\n                var result = (_a = current_1.viewModel)[callbackName].apply(_a, current_1.lifecycleArgs);\r\n                return processPotential(result, function (val) { return inspect(val, current_1.router); }, next.cancel);\r\n            }\r\n            catch (error) {\r\n                return next.cancel(error);\r\n            }\r\n        }\r\n        return next();\r\n    }\r\n    return iterate();\r\n};\r\n/**\r\n * Find list of activatable view model and add to list (3rd parameter)\r\n * @internal exported for unit testing\r\n */\r\nvar findActivatable = function (navigationInstruction, callbackName, list, router) {\r\n    if (list === void 0) { list = []; }\r\n    var plan = navigationInstruction.plan;\r\n    Object\r\n        .keys(plan)\r\n        .forEach(function (viewPortName) {\r\n        var viewPortPlan = plan[viewPortName];\r\n        var viewPortInstruction = navigationInstruction.viewPortInstructions[viewPortName];\r\n        var viewPortComponent = viewPortInstruction.component;\r\n        var viewModel = viewPortComponent.viewModel;\r\n        if ((viewPortPlan.strategy === activationStrategy.invokeLifecycle\r\n            || viewPortPlan.strategy === activationStrategy.replace)\r\n            && callbackName in viewModel) {\r\n            list.push({\r\n                viewModel: viewModel,\r\n                lifecycleArgs: viewPortInstruction.lifecycleArgs,\r\n                router: router\r\n            });\r\n        }\r\n        var childNavInstruction = viewPortPlan.childNavigationInstruction;\r\n        if (childNavInstruction) {\r\n            findActivatable(childNavInstruction, callbackName, list, viewPortComponent.childRouter || router);\r\n        }\r\n    });\r\n    return list;\r\n};\r\nvar shouldContinue = function (output, router) {\r\n    if (output instanceof Error) {\r\n        return false;\r\n    }\r\n    if (isNavigationCommand(output)) {\r\n        if (typeof output.setRouter === 'function') {\r\n            output.setRouter(router);\r\n        }\r\n        return !!output.shouldContinueProcessing;\r\n    }\r\n    if (output === undefined) {\r\n        return true;\r\n    }\r\n    return output;\r\n};\r\n/**\r\n * wraps a subscription, allowing unsubscribe calls even if\r\n * the first value comes synchronously\r\n */\r\nvar SafeSubscription = /** @class */ (function () {\r\n    function SafeSubscription(subscriptionFunc) {\r\n        this._subscribed = true;\r\n        this._subscription = subscriptionFunc(this);\r\n        if (!this._subscribed) {\r\n            this.unsubscribe();\r\n        }\r\n    }\r\n    Object.defineProperty(SafeSubscription.prototype, \"subscribed\", {\r\n        get: function () {\r\n            return this._subscribed;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    SafeSubscription.prototype.unsubscribe = function () {\r\n        if (this._subscribed && this._subscription) {\r\n            this._subscription.unsubscribe();\r\n        }\r\n        this._subscribed = false;\r\n    };\r\n    return SafeSubscription;\r\n}());\r\n/**\r\n * A function to process return value from `activate`/`canActivate` steps\r\n * Supports observable/promise\r\n *\r\n * For observable, resolve at first next() or on complete()\r\n */\r\nvar processPotential = function (obj, resolve, reject) {\r\n    // if promise like\r\n    if (obj && typeof obj.then === 'function') {\r\n        return Promise.resolve(obj).then(resolve).catch(reject);\r\n    }\r\n    // if observable\r\n    if (obj && typeof obj.subscribe === 'function') {\r\n        var obs_1 = obj;\r\n        return new SafeSubscription(function (sub) { return obs_1.subscribe({\r\n            next: function () {\r\n                if (sub.subscribed) {\r\n                    sub.unsubscribe();\r\n                    resolve(obj);\r\n                }\r\n            },\r\n            error: function (error) {\r\n                if (sub.subscribed) {\r\n                    sub.unsubscribe();\r\n                    reject(error);\r\n                }\r\n            },\r\n            complete: function () {\r\n                if (sub.subscribed) {\r\n                    sub.unsubscribe();\r\n                    resolve(obj);\r\n                }\r\n            }\r\n        }); });\r\n    }\r\n    // else just resolve\r\n    try {\r\n        return resolve(obj);\r\n    }\r\n    catch (error) {\r\n        return reject(error);\r\n    }\r\n};\n\n/**\r\n * A pipeline step responsible for finding and activating method `canDeactivate` on a view model of a route\r\n */\r\nvar CanDeactivatePreviousStep = /** @class */ (function () {\r\n    function CanDeactivatePreviousStep() {\r\n    }\r\n    CanDeactivatePreviousStep.prototype.run = function (navigationInstruction, next) {\r\n        return processDeactivatable(navigationInstruction, 'canDeactivate', next);\r\n    };\r\n    return CanDeactivatePreviousStep;\r\n}());\r\n/**\r\n * A pipeline step responsible for finding and activating method `canActivate` on a view model of a route\r\n */\r\nvar CanActivateNextStep = /** @class */ (function () {\r\n    function CanActivateNextStep() {\r\n    }\r\n    CanActivateNextStep.prototype.run = function (navigationInstruction, next) {\r\n        return processActivatable(navigationInstruction, 'canActivate', next);\r\n    };\r\n    return CanActivateNextStep;\r\n}());\r\n/**\r\n * A pipeline step responsible for finding and activating method `deactivate` on a view model of a route\r\n */\r\nvar DeactivatePreviousStep = /** @class */ (function () {\r\n    function DeactivatePreviousStep() {\r\n    }\r\n    DeactivatePreviousStep.prototype.run = function (navigationInstruction, next) {\r\n        return processDeactivatable(navigationInstruction, 'deactivate', next, true);\r\n    };\r\n    return DeactivatePreviousStep;\r\n}());\r\n/**\r\n * A pipeline step responsible for finding and activating method `activate` on a view model of a route\r\n */\r\nvar ActivateNextStep = /** @class */ (function () {\r\n    function ActivateNextStep() {\r\n    }\r\n    ActivateNextStep.prototype.run = function (navigationInstruction, next) {\r\n        return processActivatable(navigationInstruction, 'activate', next, true);\r\n    };\r\n    return ActivateNextStep;\r\n}());\n\n/**\r\n * A multi-slots Pipeline Placeholder Step for hooking into a pipeline execution\r\n */\r\nvar PipelineSlot = /** @class */ (function () {\r\n    function PipelineSlot(container, name, alias) {\r\n        this.steps = [];\r\n        this.container = container;\r\n        this.slotName = name;\r\n        this.slotAlias = alias;\r\n    }\r\n    PipelineSlot.prototype.getSteps = function () {\r\n        var _this = this;\r\n        return this.steps.map(function (x) { return _this.container.get(x); });\r\n    };\r\n    return PipelineSlot;\r\n}());\r\n/**\r\n * Class responsible for creating the navigation pipeline.\r\n */\r\nvar PipelineProvider = /** @class */ (function () {\r\n    function PipelineProvider(container) {\r\n        this.container = container;\r\n        this.steps = [\r\n            BuildNavigationPlanStep,\r\n            CanDeactivatePreviousStep,\r\n            LoadRouteStep,\r\n            createPipelineSlot(container, \"authorize\" /* Authorize */),\r\n            CanActivateNextStep,\r\n            createPipelineSlot(container, \"preActivate\" /* PreActivate */, 'modelbind'),\r\n            // NOTE: app state changes start below - point of no return\r\n            DeactivatePreviousStep,\r\n            ActivateNextStep,\r\n            createPipelineSlot(container, \"preRender\" /* PreRender */, 'precommit'),\r\n            CommitChangesStep,\r\n            createPipelineSlot(container, \"postRender\" /* PostRender */, 'postcomplete')\r\n        ];\r\n    }\r\n    /**@internal */\r\n    PipelineProvider.inject = function () { return [Container]; };\r\n    /**\r\n     * Create the navigation pipeline.\r\n     */\r\n    PipelineProvider.prototype.createPipeline = function (useCanDeactivateStep) {\r\n        var _this = this;\r\n        if (useCanDeactivateStep === void 0) { useCanDeactivateStep = true; }\r\n        var pipeline = new Pipeline();\r\n        this.steps.forEach(function (step) {\r\n            if (useCanDeactivateStep || step !== CanDeactivatePreviousStep) {\r\n                pipeline.addStep(_this.container.get(step));\r\n            }\r\n        });\r\n        return pipeline;\r\n    };\r\n    /**@internal */\r\n    PipelineProvider.prototype._findStep = function (name) {\r\n        // Steps that are not PipelineSlots are constructor functions, and they will automatically fail. Probably.\r\n        return this.steps.find(function (x) { return x.slotName === name || x.slotAlias === name; });\r\n    };\r\n    /**\r\n     * Adds a step into the pipeline at a known slot location.\r\n     */\r\n    PipelineProvider.prototype.addStep = function (name, step) {\r\n        var found = this._findStep(name);\r\n        if (found) {\r\n            var slotSteps = found.steps;\r\n            // prevent duplicates\r\n            if (!slotSteps.includes(step)) {\r\n                slotSteps.push(step);\r\n            }\r\n        }\r\n        else {\r\n            throw new Error(\"Invalid pipeline slot name: \" + name + \".\");\r\n        }\r\n    };\r\n    /**\r\n     * Removes a step from a slot in the pipeline\r\n     */\r\n    PipelineProvider.prototype.removeStep = function (name, step) {\r\n        var slot = this._findStep(name);\r\n        if (slot) {\r\n            var slotSteps = slot.steps;\r\n            slotSteps.splice(slotSteps.indexOf(step), 1);\r\n        }\r\n    };\r\n    /**\r\n     * Clears all steps from a slot in the pipeline\r\n     * @internal\r\n     */\r\n    PipelineProvider.prototype._clearSteps = function (name) {\r\n        if (name === void 0) { name = ''; }\r\n        var slot = this._findStep(name);\r\n        if (slot) {\r\n            slot.steps = [];\r\n        }\r\n    };\r\n    /**\r\n     * Resets all pipeline slots\r\n     */\r\n    PipelineProvider.prototype.reset = function () {\r\n        this._clearSteps(\"authorize\" /* Authorize */);\r\n        this._clearSteps(\"preActivate\" /* PreActivate */);\r\n        this._clearSteps(\"preRender\" /* PreRender */);\r\n        this._clearSteps(\"postRender\" /* PostRender */);\r\n    };\r\n    return PipelineProvider;\r\n}());\r\n/**@internal */\r\nvar createPipelineSlot = function (container, name, alias) {\r\n    return new PipelineSlot(container, name, alias);\r\n};\n\nvar logger = getLogger('app-router');\r\n/**\r\n * The main application router.\r\n */\r\nvar AppRouter = /** @class */ (function (_super) {\r\n    __extends(AppRouter, _super);\r\n    function AppRouter(container, history, pipelineProvider, events) {\r\n        var _this = _super.call(this, container, history) || this;\r\n        _this.pipelineProvider = pipelineProvider;\r\n        _this.events = events;\r\n        return _this;\r\n    }\r\n    /**@internal */\r\n    AppRouter.inject = function () { return [Container, History, PipelineProvider, EventAggregator]; };\r\n    /**\r\n     * Fully resets the router's internal state. Primarily used internally by the framework when multiple calls to setRoot are made.\r\n     * Use with caution (actually, avoid using this). Do not use this to simply change your navigation model.\r\n     */\r\n    AppRouter.prototype.reset = function () {\r\n        _super.prototype.reset.call(this);\r\n        this.maxInstructionCount = 10;\r\n        if (!this._queue) {\r\n            this._queue = [];\r\n        }\r\n        else {\r\n            this._queue.length = 0;\r\n        }\r\n    };\r\n    /**\r\n     * Loads the specified URL.\r\n     *\r\n     * @param url The URL fragment to load.\r\n     */\r\n    AppRouter.prototype.loadUrl = function (url) {\r\n        var _this = this;\r\n        return this\r\n            ._createNavigationInstruction(url)\r\n            .then(function (instruction) { return _this._queueInstruction(instruction); })\r\n            .catch(function (error) {\r\n            logger.error(error);\r\n            restorePreviousLocation(_this);\r\n        });\r\n    };\r\n    /**\r\n     * Registers a viewPort to be used as a rendering target for activated routes.\r\n     *\r\n     * @param viewPort The viewPort. This is typically a <router-view/> element in Aurelia default impl\r\n     * @param name The name of the viewPort. 'default' if unspecified.\r\n     */\r\n    AppRouter.prototype.registerViewPort = function (viewPort, name) {\r\n        var _this = this;\r\n        // having strong typing without changing public API\r\n        var $viewPort = viewPort;\r\n        _super.prototype.registerViewPort.call(this, $viewPort, name);\r\n        // beside adding viewport to the registry of this instance\r\n        // AppRouter also configure routing/history to start routing functionality\r\n        // There are situation where there are more than 1 <router-view/> element at root view\r\n        // in that case, still only activate once via the following guard\r\n        if (!this.isActive) {\r\n            var viewModel_1 = this._findViewModel($viewPort);\r\n            if ('configureRouter' in viewModel_1) {\r\n                // If there are more than one <router-view/> element at root view\r\n                // use this flag to guard against configure method being invoked multiple times\r\n                // this flag is set inside method configure\r\n                if (!this.isConfigured) {\r\n                    // replace the real resolve with a noop to guarantee that any action in base class Router\r\n                    // won't resolve the configurePromise prematurely\r\n                    var resolveConfiguredPromise_1 = this._resolveConfiguredPromise;\r\n                    this._resolveConfiguredPromise = function () { };\r\n                    return this\r\n                        .configure(function (config) {\r\n                        return Promise\r\n                            .resolve(viewModel_1.configureRouter(config, _this))\r\n                            // an issue with configure interface. Should be fixed there\r\n                            // todo: fix this via configure interface in router\r\n                            .then(function () { return config; });\r\n                    })\r\n                        .then(function () {\r\n                        _this.activate();\r\n                        resolveConfiguredPromise_1();\r\n                    });\r\n                }\r\n            }\r\n            else {\r\n                this.activate();\r\n            }\r\n        }\r\n        // when a viewport is added dynamically to a root view that is already activated\r\n        // just process the navigation instruction\r\n        else {\r\n            this._dequeueInstruction();\r\n        }\r\n        return Promise.resolve();\r\n    };\r\n    /**\r\n     * Activates the router. This instructs the router to begin listening for history changes and processing instructions.\r\n     *\r\n     * @params options The set of options to activate the router with.\r\n     */\r\n    AppRouter.prototype.activate = function (options) {\r\n        if (this.isActive) {\r\n            return;\r\n        }\r\n        this.isActive = true;\r\n        // route handler property is responsible for handling url change\r\n        // the interface of aurelia-history isn't clear on this perspective\r\n        this.options = Object.assign({ routeHandler: this.loadUrl.bind(this) }, this.options, options);\r\n        this.history.activate(this.options);\r\n        this._dequeueInstruction();\r\n    };\r\n    /**\r\n     * Deactivates the router.\r\n     */\r\n    AppRouter.prototype.deactivate = function () {\r\n        this.isActive = false;\r\n        this.history.deactivate();\r\n    };\r\n    /**@internal */\r\n    AppRouter.prototype._queueInstruction = function (instruction) {\r\n        var _this = this;\r\n        return new Promise(function (resolve) {\r\n            instruction.resolve = resolve;\r\n            _this._queue.unshift(instruction);\r\n            _this._dequeueInstruction();\r\n        });\r\n    };\r\n    /**@internal */\r\n    AppRouter.prototype._dequeueInstruction = function (instructionCount) {\r\n        var _this = this;\r\n        if (instructionCount === void 0) { instructionCount = 0; }\r\n        return Promise.resolve().then(function () {\r\n            if (_this.isNavigating && !instructionCount) {\r\n                // ts complains about inconsistent returns without void 0\r\n                return void 0;\r\n            }\r\n            var instruction = _this._queue.shift();\r\n            _this._queue.length = 0;\r\n            if (!instruction) {\r\n                // ts complains about inconsistent returns without void 0\r\n                return void 0;\r\n            }\r\n            _this.isNavigating = true;\r\n            var navtracker = _this.history.getState('NavigationTracker');\r\n            var currentNavTracker = _this.currentNavigationTracker;\r\n            if (!navtracker && !currentNavTracker) {\r\n                _this.isNavigatingFirst = true;\r\n                _this.isNavigatingNew = true;\r\n            }\r\n            else if (!navtracker) {\r\n                _this.isNavigatingNew = true;\r\n            }\r\n            else if (!currentNavTracker) {\r\n                _this.isNavigatingRefresh = true;\r\n            }\r\n            else if (currentNavTracker < navtracker) {\r\n                _this.isNavigatingForward = true;\r\n            }\r\n            else if (currentNavTracker > navtracker) {\r\n                _this.isNavigatingBack = true;\r\n            }\r\n            if (!navtracker) {\r\n                navtracker = Date.now();\r\n                _this.history.setState('NavigationTracker', navtracker);\r\n            }\r\n            _this.currentNavigationTracker = navtracker;\r\n            instruction.previousInstruction = _this.currentInstruction;\r\n            var maxInstructionCount = _this.maxInstructionCount;\r\n            if (!instructionCount) {\r\n                _this.events.publish(\"router:navigation:processing\" /* Processing */, { instruction: instruction });\r\n            }\r\n            else if (instructionCount === maxInstructionCount - 1) {\r\n                logger.error(instructionCount + 1 + \" navigation instructions have been attempted without success. Restoring last known good location.\");\r\n                restorePreviousLocation(_this);\r\n                return _this._dequeueInstruction(instructionCount + 1);\r\n            }\r\n            else if (instructionCount > maxInstructionCount) {\r\n                throw new Error('Maximum navigation attempts exceeded. Giving up.');\r\n            }\r\n            var pipeline = _this.pipelineProvider.createPipeline(!_this.couldDeactivate);\r\n            return pipeline\r\n                .run(instruction)\r\n                .then(function (result) { return processResult(instruction, result, instructionCount, _this); })\r\n                .catch(function (error) {\r\n                return { output: error instanceof Error ? error : new Error(error) };\r\n            })\r\n                .then(function (result) { return resolveInstruction(instruction, result, !!instructionCount, _this); });\r\n        });\r\n    };\r\n    /**@internal */\r\n    AppRouter.prototype._findViewModel = function (viewPort) {\r\n        if (this.container.viewModel) {\r\n            return this.container.viewModel;\r\n        }\r\n        if (viewPort.container) {\r\n            var container = viewPort.container;\r\n            while (container) {\r\n                if (container.viewModel) {\r\n                    this.container.viewModel = container.viewModel;\r\n                    return container.viewModel;\r\n                }\r\n                container = container.parent;\r\n            }\r\n        }\r\n        return undefined;\r\n    };\r\n    return AppRouter;\r\n}(Router));\r\nvar processResult = function (instruction, result, instructionCount, router) {\r\n    if (!(result && 'completed' in result && 'output' in result)) {\r\n        result = result || {};\r\n        result.output = new Error(\"Expected router pipeline to return a navigation result, but got [\" + JSON.stringify(result) + \"] instead.\");\r\n    }\r\n    var finalResult = null;\r\n    var navigationCommandResult = null;\r\n    if (isNavigationCommand(result.output)) {\r\n        navigationCommandResult = result.output.navigate(router);\r\n    }\r\n    else {\r\n        finalResult = result;\r\n        if (!result.completed) {\r\n            if (result.output instanceof Error) {\r\n                logger.error(result.output.toString());\r\n            }\r\n            restorePreviousLocation(router);\r\n        }\r\n    }\r\n    return Promise.resolve(navigationCommandResult)\r\n        .then(function (_) { return router._dequeueInstruction(instructionCount + 1); })\r\n        .then(function (innerResult) { return finalResult || innerResult || result; });\r\n};\r\nvar resolveInstruction = function (instruction, result, isInnerInstruction, router) {\r\n    instruction.resolve(result);\r\n    var eventAggregator = router.events;\r\n    var eventArgs = { instruction: instruction, result: result };\r\n    if (!isInnerInstruction) {\r\n        router.isNavigating = false;\r\n        router.isExplicitNavigation = false;\r\n        router.isExplicitNavigationBack = false;\r\n        router.isNavigatingFirst = false;\r\n        router.isNavigatingNew = false;\r\n        router.isNavigatingRefresh = false;\r\n        router.isNavigatingForward = false;\r\n        router.isNavigatingBack = false;\r\n        router.couldDeactivate = false;\r\n        var eventName = void 0;\r\n        if (result.output instanceof Error) {\r\n            eventName = \"router:navigation:error\" /* Error */;\r\n        }\r\n        else if (!result.completed) {\r\n            eventName = \"router:navigation:canceled\" /* Canceled */;\r\n        }\r\n        else {\r\n            var queryString = instruction.queryString ? ('?' + instruction.queryString) : '';\r\n            router.history.previousLocation = instruction.fragment + queryString;\r\n            eventName = \"router:navigation:success\" /* Success */;\r\n        }\r\n        eventAggregator.publish(eventName, eventArgs);\r\n        eventAggregator.publish(\"router:navigation:complete\" /* Complete */, eventArgs);\r\n    }\r\n    else {\r\n        eventAggregator.publish(\"router:navigation:child:complete\" /* ChildComplete */, eventArgs);\r\n    }\r\n    return result;\r\n};\r\nvar restorePreviousLocation = function (router) {\r\n    var previousLocation = router.history.previousLocation;\r\n    if (previousLocation) {\r\n        router.navigate(previousLocation, { trigger: false, replace: true });\r\n    }\r\n    else if (router.fallbackRoute) {\r\n        router.navigate(router.fallbackRoute, { trigger: true, replace: true });\r\n    }\r\n    else {\r\n        logger.error('Router navigation failed, and no previous location or fallbackRoute could be restored.');\r\n    }\r\n};\n\n/**\r\n* The status of a Pipeline.\r\n*/\r\nvar PipelineStatus;\r\n(function (PipelineStatus) {\r\n    PipelineStatus[\"Completed\"] = \"completed\";\r\n    PipelineStatus[\"Canceled\"] = \"canceled\";\r\n    PipelineStatus[\"Rejected\"] = \"rejected\";\r\n    PipelineStatus[\"Running\"] = \"running\";\r\n})(PipelineStatus || (PipelineStatus = {}));\n\n/**\r\n * A list of known router events used by the Aurelia router\r\n * to signal the pipeline has come to a certain state\r\n */\r\n// const enum is preserved in tsconfig\r\nvar RouterEvent;\r\n(function (RouterEvent) {\r\n    RouterEvent[\"Processing\"] = \"router:navigation:processing\";\r\n    RouterEvent[\"Error\"] = \"router:navigation:error\";\r\n    RouterEvent[\"Canceled\"] = \"router:navigation:canceled\";\r\n    RouterEvent[\"Complete\"] = \"router:navigation:complete\";\r\n    RouterEvent[\"Success\"] = \"router:navigation:success\";\r\n    RouterEvent[\"ChildComplete\"] = \"router:navigation:child:complete\";\r\n})(RouterEvent || (RouterEvent = {}));\n\n/**\r\n * Available pipeline slot names to insert interceptor into router pipeline\r\n */\r\n// const enum is preserved in tsconfig\r\nvar PipelineSlotName;\r\n(function (PipelineSlotName) {\r\n    /**\r\n     * Authorization slot. Invoked early in the pipeline,\r\n     * before `canActivate` hook of incoming route\r\n     */\r\n    PipelineSlotName[\"Authorize\"] = \"authorize\";\r\n    /**\r\n     * Pre-activation slot. Invoked early in the pipeline,\r\n     * Invoked timing:\r\n     *   - after Authorization slot\r\n     *   - after canActivate hook on new view model\r\n     *   - before deactivate hook on old view model\r\n     *   - before activate hook on new view model\r\n     */\r\n    PipelineSlotName[\"PreActivate\"] = \"preActivate\";\r\n    /**\r\n     * Pre-render slot. Invoked later in the pipeline\r\n     * Invokcation timing:\r\n     *   - after activate hook on new view model\r\n     *   - before commit step on new navigation instruction\r\n     */\r\n    PipelineSlotName[\"PreRender\"] = \"preRender\";\r\n    /**\r\n     * Post-render slot. Invoked last in the pipeline\r\n     */\r\n    PipelineSlotName[\"PostRender\"] = \"postRender\";\r\n})(PipelineSlotName || (PipelineSlotName = {}));\n\nexport { ActivateNextStep, AppRouter, BuildNavigationPlanStep, CanActivateNextStep, CanDeactivatePreviousStep, CommitChangesStep, DeactivatePreviousStep, LoadRouteStep, NavModel, NavigationInstruction, Pipeline, PipelineProvider, PipelineSlotName, PipelineStatus, Redirect, RedirectToRoute, RouteLoader, Router, RouterConfiguration, RouterEvent, activationStrategy, isNavigationCommand };\n//# sourceMappingURL=aurelia-router.js.map\n","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\n            t[p[i]] = s[p[i]];\n    return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Logger_1 = require(\"./Logger\");\nvar Facet_1 = require(\"./Facet\");\nvar logger = new Logger_1.ConsoleLogger('Signer'), url = require('url'), crypto = Facet_1.AWS['util'].crypto;\nvar DEFAULT_ALGORITHM = 'AWS4-HMAC-SHA256';\nvar IOT_SERVICE_NAME = 'iotdevicegateway';\nvar encrypt = function (key, src, encoding) {\n    return crypto.lib.createHmac('sha256', key).update(src, 'utf8').digest(encoding);\n};\nvar hash = function (src) {\n    var arg = src || '';\n    return crypto.createHash('sha256').update(arg, 'utf8').digest('hex');\n};\n/**\n * @private\n * RFC 3986 compliant version of encodeURIComponent\n */\nvar escape_RFC3986 = function (component) {\n    return component.replace(/[!'()*]/g, function (c) {\n        return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n    });\n};\n/**\n * @private\n * Create canonical query string\n *\n*/\nvar canonical_query = function (query) {\n    if (!query || query.length === 0) {\n        return '';\n    }\n    return query.split('&')\n        .map(function (e) {\n        var key_val = e.split('=');\n        if (key_val.length === 1) {\n            return e;\n        }\n        else {\n            var reencoded_val = escape_RFC3986(key_val[1]);\n            return key_val[0] + '=' + reencoded_val;\n        }\n    }).sort(function (a, b) { return a < b ? -1 : 1; }).join('&');\n};\n/**\n* @private\n* Create canonical headers\n*\n<pre>\nCanonicalHeaders =\n    CanonicalHeadersEntry0 + CanonicalHeadersEntry1 + ... + CanonicalHeadersEntryN\nCanonicalHeadersEntry =\n    Lowercase(HeaderName) + ':' + Trimall(HeaderValue) + '\\n'\n</pre>\n*/\nvar canonical_headers = function (headers) {\n    if (!headers || Object.keys(headers).length === 0) {\n        return '';\n    }\n    return Object.keys(headers)\n        .map(function (key) {\n        return {\n            key: key.toLowerCase(),\n            value: headers[key] ? headers[key].trim().replace(/\\s+/g, ' ') : ''\n        };\n    })\n        .sort(function (a, b) {\n        return a.key < b.key ? -1 : 1;\n    })\n        .map(function (item) {\n        return item.key + ':' + item.value;\n    })\n        .join('\\n') + '\\n';\n};\n/**\n* List of header keys included in the canonical headers.\n* @access private\n*/\nvar signed_headers = function (headers) {\n    return Object.keys(headers)\n        .map(function (key) { return key.toLowerCase(); })\n        .sort()\n        .join(';');\n};\n/**\n* @private\n* Create canonical request\n* Refer to\n* {@link http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html|Create a Canonical Request}\n*\n<pre>\nCanonicalRequest =\n    HTTPRequestMethod + '\\n' +\n    CanonicalURI + '\\n' +\n    CanonicalQueryString + '\\n' +\n    CanonicalHeaders + '\\n' +\n    SignedHeaders + '\\n' +\n    HexEncode(Hash(RequestPayload))\n</pre>\n*/\nvar canonical_request = function (request) {\n    var url_info = url.parse(request.url);\n    return [\n        request.method || '/',\n        encodeURIComponent(url_info.pathname).replace(/%2F/ig, '/'),\n        canonical_query(url_info.query),\n        canonical_headers(request.headers),\n        signed_headers(request.headers),\n        hash(request.data)\n    ].join('\\n');\n};\nvar parse_service_info = function (request) {\n    var url_info = url.parse(request.url), host = url_info.host;\n    var matched = host.match(/([^\\.]+)\\.(?:([^\\.]*)\\.)?amazonaws\\.com$/);\n    var parsed = (matched || []).slice(1, 3);\n    if (parsed[1] === 'es') { // Elastic Search\n        parsed = parsed.reverse();\n    }\n    return {\n        service: request.service || parsed[0],\n        region: request.region || parsed[1]\n    };\n};\nvar credential_scope = function (d_str, region, service) {\n    return [\n        d_str,\n        region,\n        service,\n        'aws4_request',\n    ].join('/');\n};\n/**\n* @private\n* Create a string to sign\n* Refer to\n* {@link http://docs.aws.amazon.com/general/latest/gr/sigv4-create-string-to-sign.html|Create String to Sign}\n*\n<pre>\nStringToSign =\n    Algorithm + \\n +\n    RequestDateTime + \\n +\n    CredentialScope + \\n +\n    HashedCanonicalRequest\n</pre>\n*/\nvar string_to_sign = function (algorithm, canonical_request, dt_str, scope) {\n    return [\n        algorithm,\n        dt_str,\n        scope,\n        hash(canonical_request)\n    ].join('\\n');\n};\n/**\n* @private\n* Create signing key\n* Refer to\n* {@link http://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html|Calculate Signature}\n*\n<pre>\nkSecret = your secret access key\nkDate = HMAC(\"AWS4\" + kSecret, Date)\nkRegion = HMAC(kDate, Region)\nkService = HMAC(kRegion, Service)\nkSigning = HMAC(kService, \"aws4_request\")\n</pre>\n*/\nvar get_signing_key = function (secret_key, d_str, service_info) {\n    logger.debug(service_info);\n    var k = ('AWS4' + secret_key), k_date = encrypt(k, d_str), k_region = encrypt(k_date, service_info.region), k_service = encrypt(k_region, service_info.service), k_signing = encrypt(k_service, 'aws4_request');\n    return k_signing;\n};\nvar get_signature = function (signing_key, str_to_sign) {\n    return encrypt(signing_key, str_to_sign, 'hex');\n};\n/**\n* @private\n* Create authorization header\n* Refer to\n* {@link http://docs.aws.amazon.com/general/latest/gr/sigv4-add-signature-to-request.html|Add the Signing Information}\n*/\nvar get_authorization_header = function (algorithm, access_key, scope, signed_headers, signature) {\n    return [\n        algorithm + ' ' + 'Credential=' + access_key + '/' + scope,\n        'SignedHeaders=' + signed_headers,\n        'Signature=' + signature\n    ].join(', ');\n};\n/**\n* Sign a HTTP request, add 'Authorization' header to request param\n* @method sign\n* @memberof Signer\n* @static\n*\n* @param {object} request - HTTP request object\n<pre>\nrequest: {\n    method: GET | POST | PUT ...\n    url: ...,\n    headers: {\n        header1: ...\n    },\n    data: data\n}\n</pre>\n* @param {object} access_info - AWS access credential info\n<pre>\naccess_info: {\n    access_key: ...,\n    secret_key: ...,\n    session_token: ...\n}\n</pre>\n* @param {object} [service_info] - AWS service type and region, optional,\n*                                  if not provided then parse out from url\n<pre>\nservice_info: {\n    service: ...,\n    region: ...\n}\n</pre>\n*\n* @returns {object} Signed HTTP request\n*/\nvar sign = function (request, access_info, service_info) {\n    if (service_info === void 0) { service_info = null; }\n    request.headers = request.headers || {};\n    // datetime string and date string\n    var dt = new Date(), dt_str = dt.toISOString().replace(/[:\\-]|\\.\\d{3}/g, ''), d_str = dt_str.substr(0, 8);\n    var url_info = url.parse(request.url);\n    request.headers['host'] = url_info.host;\n    request.headers['x-amz-date'] = dt_str;\n    if (access_info.session_token) {\n        request.headers['X-Amz-Security-Token'] = access_info.session_token;\n    }\n    // Task 1: Create a Canonical Request\n    var request_str = canonical_request(request);\n    logger.debug(request_str);\n    // Task 2: Create a String to Sign\n    var serviceInfo = service_info || parse_service_info(request), scope = credential_scope(d_str, serviceInfo.region, serviceInfo.service), str_to_sign = string_to_sign(DEFAULT_ALGORITHM, request_str, dt_str, scope);\n    // Task 3: Calculate the Signature\n    var signing_key = get_signing_key(access_info.secret_key, d_str, serviceInfo), signature = get_signature(signing_key, str_to_sign);\n    // Task 4: Adding the Signing information to the Request\n    var authorization_header = get_authorization_header(DEFAULT_ALGORITHM, access_info.access_key, scope, signed_headers(request.headers), signature);\n    request.headers['Authorization'] = authorization_header;\n    return request;\n};\nvar signUrl = function (urlToSign, accessInfo, serviceInfo, expiration) {\n    var now = new Date().toISOString().replace(/[:\\-]|\\.\\d{3}/g, '');\n    var today = now.substr(0, 8);\n    // Intentionally discarding search\n    var _a = url.parse(urlToSign, true, true), search = _a.search, parsedUrl = __rest(_a, [\"search\"]);\n    var host = parsedUrl.host;\n    var signedHeaders = { host: host };\n    var _b = serviceInfo || parse_service_info({ url: url.format(parsedUrl) }), region = _b.region, service = _b.service;\n    var credentialScope = credential_scope(today, region, service);\n    // IoT service does not allow the session token in the canonical request\n    // https://docs.aws.amazon.com/general/latest/gr/sigv4-add-signature-to-request.html\n    var sessionTokenRequired = accessInfo.session_token && service !== IOT_SERVICE_NAME;\n    var queryParams = __assign({ 'X-Amz-Algorithm': DEFAULT_ALGORITHM, 'X-Amz-Credential': [accessInfo.access_key, credentialScope].join('/'), 'X-Amz-Date': now.substr(0, 16) }, (sessionTokenRequired ? { 'X-Amz-Security-Token': \"\" + accessInfo.session_token } : {}), (expiration ? { 'X-Amz-Expires': \"\" + expiration } : {}), { 'X-Amz-SignedHeaders': Object.keys(signedHeaders).join(',') });\n    var canonicalRequest = canonical_request({\n        method: 'GET',\n        url: url.format(__assign({}, parsedUrl, { query: __assign({}, parsedUrl.query, queryParams) })),\n        headers: signedHeaders,\n    });\n    var stringToSign = string_to_sign(DEFAULT_ALGORITHM, canonicalRequest, now, credentialScope);\n    var signing_key = get_signing_key(accessInfo.secret_key, today, { region: region, service: service });\n    var signature = get_signature(signing_key, stringToSign);\n    var additionalQueryParams = __assign({ 'X-Amz-Signature': signature }, (accessInfo.session_token && { 'X-Amz-Security-Token': accessInfo.session_token }));\n    var result = url.format({\n        protocol: parsedUrl.protocol,\n        slashes: true,\n        hostname: parsedUrl.hostname,\n        pathname: parsedUrl.pathname,\n        query: __assign({}, parsedUrl.query, queryParams, additionalQueryParams)\n    });\n    return result;\n};\n/**\n* AWS request signer.\n* Refer to {@link http://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html|Signature Version 4}\n*\n* @class Signer\n*/\nvar Signer = /** @class */ (function () {\n    function Signer() {\n    }\n    Signer.sign = sign;\n    Signer.signUrl = signUrl;\n    return Signer;\n}());\nexports.default = Signer;\n//# sourceMappingURL=Signer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Logger_1 = require(\"./Logger\");\nvar logger = new Logger_1.ConsoleLogger('Parser');\nvar Parser = /** @class */ (function () {\n    function Parser() {\n    }\n    Parser.parseMobilehubConfig = function (config) {\n        var amplifyConfig = {};\n        // Analytics\n        if (config['aws_mobile_analytics_app_id']) {\n            var Analytics = {\n                AWSPinpoint: {\n                    appId: config['aws_mobile_analytics_app_id'],\n                    region: config['aws_mobile_analytics_app_region']\n                }\n            };\n            amplifyConfig.Analytics = Analytics;\n        }\n        // Auth\n        if (config['aws_cognito_identity_pool_id'] || config['aws_user_pools_id']) {\n            var Auth = {\n                userPoolId: config['aws_user_pools_id'],\n                userPoolWebClientId: config['aws_user_pools_web_client_id'],\n                region: config['aws_cognito_region'],\n                identityPoolId: config['aws_cognito_identity_pool_id'],\n                mandatorySignIn: config['aws_mandatory_sign_in'] === 'enable' ? true : false\n            };\n            amplifyConfig.Auth = Auth;\n        }\n        // Storage\n        var storageConfig;\n        if (config['aws_user_files_s3_bucket']) {\n            storageConfig = {\n                AWSS3: {\n                    bucket: config['aws_user_files_s3_bucket'],\n                    region: config['aws_user_files_s3_bucket_region']\n                }\n            };\n        }\n        else {\n            storageConfig = config ? config.Storage || config : {};\n        }\n        amplifyConfig.Analytics = Object.assign({}, amplifyConfig.Analytics, config.Analytics);\n        amplifyConfig.Auth = Object.assign({}, amplifyConfig.Auth, config.Auth);\n        amplifyConfig.Storage = Object.assign({}, storageConfig);\n        logger.debug('parse config', config, 'to amplifyconfig', amplifyConfig);\n        return amplifyConfig;\n    };\n    return Parser;\n}());\nexports.default = Parser;\n//# sourceMappingURL=Parser.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar Logger_1 = require(\"../Logger\");\nvar JS_1 = require(\"../JS\");\nvar logger = new Logger_1.ConsoleLogger('CognitoCredentials');\nvar waitForInit = new Promise(function (res, rej) {\n    if (!JS_1.default.browserOrNode().isBrowser) {\n        logger.debug('not in the browser, directly resolved');\n        return res();\n    }\n    var ga = window['gapi'] && window['gapi'].auth2 ? window['gapi'].auth2 : null;\n    if (ga) {\n        logger.debug('google api already loaded');\n        return res();\n    }\n    else {\n        setTimeout(function () {\n            return res();\n        }, 2000);\n    }\n});\nvar GoogleOAuth = /** @class */ (function () {\n    function GoogleOAuth() {\n        this.initialized = false;\n        this.refreshGoogleToken = this.refreshGoogleToken.bind(this);\n        this._refreshGoogleTokenImpl = this._refreshGoogleTokenImpl.bind(this);\n    }\n    GoogleOAuth.prototype.refreshGoogleToken = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!!this.initialized) return [3 /*break*/, 2];\n                        logger.debug('need to wait for the Google SDK loaded');\n                        return [4 /*yield*/, waitForInit];\n                    case 1:\n                        _a.sent();\n                        this.initialized = true;\n                        logger.debug('finish waiting');\n                        _a.label = 2;\n                    case 2: return [2 /*return*/, this._refreshGoogleTokenImpl()];\n                }\n            });\n        });\n    };\n    GoogleOAuth.prototype._refreshGoogleTokenImpl = function () {\n        var ga = null;\n        if (JS_1.default.browserOrNode().isBrowser)\n            ga = window['gapi'] && window['gapi'].auth2 ? window['gapi'].auth2 : null;\n        if (!ga) {\n            logger.debug('no gapi auth2 available');\n            return Promise.reject('no gapi auth2 available');\n        }\n        return new Promise(function (res, rej) {\n            ga.getAuthInstance().then(function (googleAuth) {\n                if (!googleAuth) {\n                    console.log('google Auth undefiend');\n                    rej('google Auth undefiend');\n                }\n                var googleUser = googleAuth.currentUser.get();\n                // refresh the token\n                if (googleUser.isSignedIn()) {\n                    logger.debug('refreshing the google access token');\n                    googleUser.reloadAuthResponse()\n                        .then(function (authResponse) {\n                        var id_token = authResponse.id_token, expires_at = authResponse.expires_at;\n                        var profile = googleUser.getBasicProfile();\n                        var user = {\n                            email: profile.getEmail(),\n                            name: profile.getName()\n                        };\n                        res({ token: id_token, expires_at: expires_at });\n                    });\n                }\n                else {\n                    rej('User is not signed in with Google');\n                }\n            }).catch(function (err) {\n                logger.debug('Failed to refresh google token', err);\n                rej('Failed to refresh google token');\n            });\n        });\n    };\n    return GoogleOAuth;\n}());\nexports.default = GoogleOAuth;\n//# sourceMappingURL=GoogleOAuth.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar Logger_1 = require(\"../Logger\");\nvar JS_1 = require(\"../JS\");\nvar logger = new Logger_1.ConsoleLogger('CognitoCredentials');\nvar waitForInit = new Promise(function (res, rej) {\n    if (!JS_1.default.browserOrNode().isBrowser) {\n        logger.debug('not in the browser, directly resolved');\n        return res();\n    }\n    var fb = window['FB'];\n    if (fb) {\n        logger.debug('FB SDK already loaded');\n        return res();\n    }\n    else {\n        setTimeout(function () {\n            return res();\n        }, 2000);\n    }\n});\nvar FacebookOAuth = /** @class */ (function () {\n    function FacebookOAuth() {\n        this.initialized = false;\n        this.refreshFacebookToken = this.refreshFacebookToken.bind(this);\n        this._refreshFacebookTokenImpl = this._refreshFacebookTokenImpl.bind(this);\n    }\n    FacebookOAuth.prototype.refreshFacebookToken = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!!this.initialized) return [3 /*break*/, 2];\n                        logger.debug('need to wait for the Facebook SDK loaded');\n                        return [4 /*yield*/, waitForInit];\n                    case 1:\n                        _a.sent();\n                        this.initialized = true;\n                        logger.debug('finish waiting');\n                        _a.label = 2;\n                    case 2: return [2 /*return*/, this._refreshFacebookTokenImpl()];\n                }\n            });\n        });\n    };\n    FacebookOAuth.prototype._refreshFacebookTokenImpl = function () {\n        var fb = null;\n        if (JS_1.default.browserOrNode().isBrowser)\n            fb = window['FB'];\n        if (!fb) {\n            logger.debug('no fb sdk available');\n            return Promise.reject('no fb sdk available');\n        }\n        return new Promise(function (res, rej) {\n            fb.getLoginStatus(function (fbResponse) {\n                if (!fbResponse || !fbResponse.authResponse) {\n                    logger.debug('no response from facebook when refreshing the jwt token');\n                    rej('no response from facebook when refreshing the jwt token');\n                }\n                var response = fbResponse.authResponse;\n                var accessToken = response.accessToken, expiresIn = response.expiresIn;\n                var date = new Date();\n                var expires_at = expiresIn * 1000 + date.getTime();\n                if (!accessToken) {\n                    logger.debug('the jwtToken is undefined');\n                    rej('the jwtToken is undefined');\n                }\n                res({ token: accessToken, expires_at: expires_at });\n            }, { scope: 'public_profile,email' });\n        });\n    };\n    return FacebookOAuth;\n}());\nexports.default = FacebookOAuth;\n//# sourceMappingURL=FacebookOAuth.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar JS_1 = require(\"../JS\");\nvar StorageHelper_1 = require(\"../StorageHelper\");\nvar Linking = {};\nexports.Linking = Linking;\nvar AppState = {\n    addEventListener: function (action, handler) {\n        return;\n    }\n};\nexports.AppState = AppState;\n// if not in react native, just use local storage\nvar AsyncStorage = JS_1.default.browserOrNode().isBrowser ? new StorageHelper_1.default().getStorage() : undefined;\nexports.AsyncStorage = AsyncStorage;\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Logger_1 = require(\"./Logger\");\nvar StorageHelper_1 = require(\"./StorageHelper\");\nvar Facet_1 = require(\"./Facet\");\nvar JS_1 = require(\"./JS\");\nvar OAuthHelper_1 = require(\"./OAuthHelper\");\nvar Amplify_1 = require(\"./Amplify\");\nvar logger = new Logger_1.ConsoleLogger('Credentials');\nvar Credentials = /** @class */ (function () {\n    function Credentials(config) {\n        this._gettingCredPromise = null;\n        this._refreshHandlers = {};\n        this.configure(config);\n        this._refreshHandlers['google'] = OAuthHelper_1.GoogleOAuth.refreshGoogleToken;\n        this._refreshHandlers['facebook'] = OAuthHelper_1.FacebookOAuth.refreshFacebookToken;\n    }\n    Credentials.prototype.getCredSource = function () {\n        return this._credentials_source;\n    };\n    Credentials.prototype.configure = function (config) {\n        if (!config)\n            return this._config || {};\n        this._config = Object.assign({}, this._config, config);\n        var refreshHandlers = this._config.refreshHandlers;\n        // If the developer has provided an object of refresh handlers,\n        // then we can merge the provided handlers with the current handlers.\n        if (refreshHandlers) {\n            this._refreshHandlers = __assign({}, this._refreshHandlers, refreshHandlers);\n        }\n        this._storage = this._config.storage;\n        if (!this._storage) {\n            this._storage = new StorageHelper_1.default().getStorage();\n        }\n        this._storageSync = Promise.resolve();\n        if (typeof this._storage['sync'] === 'function') {\n            this._storageSync = this._storage['sync']();\n        }\n        return this._config;\n    };\n    Credentials.prototype.get = function () {\n        logger.debug('getting credentials');\n        return this._pickupCredentials();\n    };\n    Credentials.prototype._pickupCredentials = function () {\n        logger.debug('picking up credentials');\n        if (!this._gettingCredPromise || !this._gettingCredPromise.isPending()) {\n            logger.debug('getting new cred promise');\n            if (Facet_1.AWS.config && Facet_1.AWS.config.credentials && Facet_1.AWS.config.credentials instanceof Facet_1.AWS.Credentials) {\n                this._gettingCredPromise = JS_1.default.makeQuerablePromise(this._setCredentialsFromAWS());\n            }\n            else {\n                this._gettingCredPromise = JS_1.default.makeQuerablePromise(this._keepAlive());\n            }\n        }\n        else {\n            logger.debug('getting old cred promise');\n        }\n        return this._gettingCredPromise;\n    };\n    Credentials.prototype._keepAlive = function () {\n        logger.debug('checking if credentials exists and not expired');\n        var cred = this._credentials;\n        if (cred && !this._isExpired(cred)) {\n            logger.debug('credentials not changed and not expired, directly return');\n            return Promise.resolve(cred);\n        }\n        logger.debug('need to get a new credential or refresh the existing one');\n        if (Amplify_1.default.Auth && typeof Amplify_1.default.Auth.currentUserCredentials === 'function') {\n            return Amplify_1.default.Auth.currentUserCredentials();\n        }\n        else {\n            return Promise.reject('No Auth module registered in Amplify');\n        }\n    };\n    Credentials.prototype.refreshFederatedToken = function (federatedInfo) {\n        var _this = this;\n        logger.debug('Getting federated credentials');\n        var provider = federatedInfo.provider, user = federatedInfo.user;\n        var token = federatedInfo.token;\n        var expires_at = federatedInfo.expires_at;\n        var identity_id = federatedInfo.identity_id;\n        var that = this;\n        logger.debug('checking if federated jwt token expired');\n        if (expires_at > new Date().getTime()) {\n            // if not expired\n            logger.debug('token not expired');\n            return this._setCredentialsFromFederation({ provider: provider, token: token, user: user, identity_id: identity_id, expires_at: expires_at });\n        }\n        else {\n            // if refresh handler exists\n            if (that._refreshHandlers[provider] && typeof that._refreshHandlers[provider] === 'function') {\n                logger.debug('getting refreshed jwt token from federation provider');\n                return that._refreshHandlers[provider]().then(function (data) {\n                    logger.debug('refresh federated token sucessfully', data);\n                    token = data.token;\n                    identity_id = data.identity_id;\n                    expires_at = data.expires_at;\n                    return that._setCredentialsFromFederation({ provider: provider, token: token, user: user, identity_id: identity_id, expires_at: expires_at });\n                }).catch(function (e) {\n                    logger.debug('refresh federated token failed', e);\n                    _this.clear();\n                    return Promise.reject('refreshing federation token failed: ' + e);\n                });\n            }\n            else {\n                logger.debug('no refresh handler for provider:', provider);\n                this.clear();\n                return Promise.reject('no refresh handler for provider');\n            }\n        }\n    };\n    Credentials.prototype._isExpired = function (credentials) {\n        if (!credentials) {\n            logger.debug('no credentials for expiration check');\n            return true;\n        }\n        logger.debug('is this credentials expired?', credentials);\n        var ts = new Date().getTime();\n        var delta = 10 * 60 * 1000; // 10 minutes\n        var expired = credentials.expired, expireTime = credentials.expireTime;\n        if (!expired && expireTime > ts + delta) {\n            return false;\n        }\n        return true;\n    };\n    Credentials.prototype._setCredentialsForGuest = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var attempted, _a, identityPoolId, region, mandatorySignIn, identityId, e_1, credentials, that;\n            var _this = this;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        attempted = false;\n                        logger.debug('setting credentials for guest');\n                        _a = this._config, identityPoolId = _a.identityPoolId, region = _a.region, mandatorySignIn = _a.mandatorySignIn;\n                        if (mandatorySignIn) {\n                            return [2 /*return*/, Promise.reject('cannot get guest credentials when mandatory signin enabled')];\n                        }\n                        if (!identityPoolId) {\n                            logger.debug('No Cognito Federated Identity pool provided');\n                            return [2 /*return*/, Promise.reject('No Cognito Federated Identity pool provided')];\n                        }\n                        identityId = undefined;\n                        _b.label = 1;\n                    case 1:\n                        _b.trys.push([1, 3, , 4]);\n                        return [4 /*yield*/, this._storageSync];\n                    case 2:\n                        _b.sent();\n                        identityId = this._storage.getItem('CognitoIdentityId-' + identityPoolId);\n                        return [3 /*break*/, 4];\n                    case 3:\n                        e_1 = _b.sent();\n                        logger.debug('Failed to get the cached identityId', e_1);\n                        return [3 /*break*/, 4];\n                    case 4:\n                        credentials = new Facet_1.AWS.CognitoIdentityCredentials({\n                            IdentityPoolId: identityPoolId,\n                            IdentityId: identityId ? identityId : undefined\n                        }, {\n                            region: region\n                        });\n                        that = this;\n                        return [2 /*return*/, this._loadCredentials(credentials, 'guest', false, null)\n                                .then(function (res) {\n                                return res;\n                            })\n                                .catch(function (e) { return __awaiter(_this, void 0, void 0, function () {\n                                var newCredentials;\n                                return __generator(this, function (_a) {\n                                    // If identity id is deleted in the console, we make one attempt to recreate it\n                                    // and remove existing id from cache. \n                                    if (e.code === 'ResourceNotFoundException' &&\n                                        e.message === \"Identity '\" + identityId + \"' not found.\"\n                                        && !attempted) {\n                                        attempted = true;\n                                        logger.debug('Failed to load guest credentials');\n                                        this._storage.removeItem('CognitoIdentityId-' + identityPoolId);\n                                        credentials.clearCachedId();\n                                        newCredentials = new Facet_1.AWS.CognitoIdentityCredentials({\n                                            IdentityPoolId: identityPoolId,\n                                            IdentityId: undefined\n                                        }, {\n                                            region: region\n                                        });\n                                        return [2 /*return*/, this._loadCredentials(newCredentials, 'guest', false, null)];\n                                    }\n                                    else {\n                                        return [2 /*return*/, e];\n                                    }\n                                    return [2 /*return*/];\n                                });\n                            }); })];\n                }\n            });\n        });\n    };\n    Credentials.prototype._setCredentialsFromAWS = function () {\n        var credentials = Facet_1.AWS.config.credentials;\n        logger.debug('setting credentials from aws');\n        var that = this;\n        if (credentials instanceof Facet_1.AWS.Credentials) {\n            return Promise.resolve(credentials);\n        }\n        else {\n            logger.debug('AWS.config.credentials is not an instance of AWS Credentials');\n            return Promise.reject('AWS.config.credentials is not an instance of AWS Credentials');\n        }\n    };\n    Credentials.prototype._setCredentialsFromFederation = function (params) {\n        var provider = params.provider, token = params.token, identity_id = params.identity_id, user = params.user, expires_at = params.expires_at;\n        var domains = {\n            'google': 'accounts.google.com',\n            'facebook': 'graph.facebook.com',\n            'amazon': 'www.amazon.com',\n            'developer': 'cognito-identity.amazonaws.com'\n        };\n        // Use custom provider url instead of the predefined ones\n        var domain = domains[provider] || provider;\n        if (!domain) {\n            return Promise.reject('You must specify a federated provider');\n        }\n        var logins = {};\n        logins[domain] = token;\n        var _a = this._config, identityPoolId = _a.identityPoolId, region = _a.region;\n        if (!identityPoolId) {\n            logger.debug('No Cognito Federated Identity pool provided');\n            return Promise.reject('No Cognito Federated Identity pool provided');\n        }\n        var credentials = new Facet_1.AWS.CognitoIdentityCredentials({\n            IdentityPoolId: identityPoolId,\n            IdentityId: identity_id,\n            Logins: logins\n        }, {\n            region: region\n        });\n        return this._loadCredentials(credentials, 'federated', true, params);\n    };\n    Credentials.prototype._setCredentialsFromSession = function (session) {\n        logger.debug('set credentials from session');\n        var idToken = session.getIdToken().getJwtToken();\n        var _a = this._config, region = _a.region, userPoolId = _a.userPoolId, identityPoolId = _a.identityPoolId;\n        if (!identityPoolId) {\n            logger.debug('No Cognito Federated Identity pool provided');\n            return Promise.reject('No Cognito Federated Identity pool provided');\n        }\n        var key = 'cognito-idp.' + region + '.amazonaws.com/' + userPoolId;\n        var logins = {};\n        logins[key] = idToken;\n        var credentials = new Facet_1.AWS.CognitoIdentityCredentials({\n            IdentityPoolId: identityPoolId,\n            Logins: logins\n        }, {\n            region: region\n        });\n        var that = this;\n        return this._loadCredentials(credentials, 'userPool', true, null);\n    };\n    Credentials.prototype._loadCredentials = function (credentials, source, authenticated, info) {\n        var _this = this;\n        var that = this;\n        var identityPoolId = this._config.identityPoolId;\n        return new Promise(function (res, rej) {\n            credentials.get(function (err) { return __awaiter(_this, void 0, void 0, function () {\n                var user, provider, token, expires_at, identity_id, e_2;\n                return __generator(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            if (err) {\n                                logger.debug('Failed to load credentials', credentials);\n                                rej(err);\n                                return [2 /*return*/];\n                            }\n                            logger.debug('Load credentials successfully', credentials);\n                            that._credentials = credentials;\n                            that._credentials.authenticated = authenticated;\n                            that._credentials_source = source;\n                            if (source === 'federated') {\n                                user = Object.assign({ id: this._credentials.identityId }, info.user);\n                                provider = info.provider, token = info.token, expires_at = info.expires_at, identity_id = info.identity_id;\n                                try {\n                                    this._storage.setItem('aws-amplify-federatedInfo', JSON.stringify({\n                                        provider: provider,\n                                        token: token,\n                                        user: user,\n                                        expires_at: expires_at,\n                                        identity_id: identity_id\n                                    }));\n                                }\n                                catch (e) {\n                                    logger.debug('Failed to put federated info into auth storage', e);\n                                }\n                                // the Cache module no longer stores federated info\n                                // this is just for backward compatibility\n                                if (Amplify_1.default.Cache && typeof Amplify_1.default.Cache.setItem === 'function') {\n                                    Amplify_1.default.Cache.setItem('federatedInfo', {\n                                        provider: provider,\n                                        token: token,\n                                        user: user,\n                                        expires_at: expires_at,\n                                        identity_id: identity_id\n                                    }, { priority: 1 });\n                                }\n                                else {\n                                    logger.debug('No Cache module registered in Amplify');\n                                }\n                            }\n                            if (!(source === 'guest')) return [3 /*break*/, 4];\n                            _a.label = 1;\n                        case 1:\n                            _a.trys.push([1, 3, , 4]);\n                            return [4 /*yield*/, this._storageSync];\n                        case 2:\n                            _a.sent();\n                            this._storage.setItem('CognitoIdentityId-' + identityPoolId, credentials.identityId);\n                            return [3 /*break*/, 4];\n                        case 3:\n                            e_2 = _a.sent();\n                            logger.debug('Failed to cache identityId', e_2);\n                            return [3 /*break*/, 4];\n                        case 4:\n                            res(that._credentials);\n                            return [2 /*return*/];\n                    }\n                });\n            }); });\n        });\n    };\n    Credentials.prototype.set = function (params, source) {\n        if (source === 'session') {\n            return this._setCredentialsFromSession(params);\n        }\n        else if (source === 'federation') {\n            return this._setCredentialsFromFederation(params);\n        }\n        else if (source === 'guest') {\n            return this._setCredentialsForGuest();\n        }\n        else {\n            logger.debug('no source specified for setting credentials');\n            return Promise.reject('invalid source');\n        }\n    };\n    Credentials.prototype.clear = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var _a, identityPoolId, region, credentials;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        _a = this._config, identityPoolId = _a.identityPoolId, region = _a.region;\n                        if (identityPoolId) {\n                            credentials = new Facet_1.AWS.CognitoIdentityCredentials({\n                                IdentityPoolId: identityPoolId\n                            }, {\n                                region: region\n                            });\n                            credentials.clearCachedId();\n                        }\n                        this._credentials = null;\n                        this._credentials_source = null;\n                        this._storage.removeItem('aws-amplify-federatedInfo');\n                        if (!(Amplify_1.default.Cache && typeof Amplify_1.default.Cache.setItem === 'function')) return [3 /*break*/, 2];\n                        return [4 /*yield*/, Amplify_1.default.Cache.removeItem('federatedInfo')];\n                    case 1:\n                        _b.sent();\n                        return [3 /*break*/, 3];\n                    case 2:\n                        logger.debug('No Cache module registered in Amplify');\n                        _b.label = 3;\n                    case 3: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    /**\n     * Compact version of credentials\n     * @param {Object} credentials\n     * @return {Object} - Credentials\n     */\n    Credentials.prototype.shear = function (credentials) {\n        return {\n            accessKeyId: credentials.accessKeyId,\n            sessionToken: credentials.sessionToken,\n            secretAccessKey: credentials.secretAccessKey,\n            identityId: credentials.identityId,\n            authenticated: credentials.authenticated\n        };\n    };\n    return Credentials;\n}());\nexports.Credentials = Credentials;\nvar instance = new Credentials(null);\nexports.default = instance;\n//# sourceMappingURL=Credentials.js.map","\"use strict\";\n/**\n * Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ServiceWorker_1 = require(\"./ServiceWorker\");\nexports.default = ServiceWorker_1.default;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar Logger_1 = require(\"../Logger\");\nvar JS_1 = require(\"../JS\");\nvar Amplify_1 = require(\"../Amplify\");\n/**\n * Provides a means to registering a service worker in the browser\n * and communicating with it via postMessage events.\n * https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/\n *\n * postMessage events are currently not supported in all browsers. See:\n * https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API\n *\n * At the minmum this class will register the service worker and listen\n * and attempt to dispatch messages on state change and record analytics\n * events based on the service worker lifecycle.\n */\nvar ServiceWorkerClass = /** @class */ (function () {\n    function ServiceWorkerClass() {\n        // The AWS Amplify logger\n        this._logger = new Logger_1.ConsoleLogger('ServiceWorker');\n    }\n    Object.defineProperty(ServiceWorkerClass.prototype, \"serviceWorker\", {\n        /**\n         * Get the currently active service worker\n         */\n        get: function () {\n            return this._serviceWorker;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Register the service-worker.js file in the browser\n     * Make sure the service-worker.js is part of the build\n     * for example with Angular, modify the angular-cli.json file\n     * and add to \"assets\" array \"service-worker.js\"\n     * @param {string} - (optional) Service worker file. Defaults to \"/service-worker.js\"\n     * @param {string} - (optional) The service worker scope. Defaults to \"/\"\n     *  - API Doc: https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register\n     * @returns {Promise}\n     *\t- resolve(ServiceWorkerRegistration)\n     *\t- reject(Error)\n     **/\n    ServiceWorkerClass.prototype.register = function (filePath, scope) {\n        var _this = this;\n        if (filePath === void 0) { filePath = '/service-worker.js'; }\n        if (scope === void 0) { scope = '/'; }\n        this._logger.debug(\"registering \" + filePath);\n        this._logger.debug(\"registering service worker with scope \" + scope);\n        return new Promise(function (resolve, reject) {\n            if (navigator && 'serviceWorker' in navigator) {\n                navigator.serviceWorker.register(filePath, {\n                    'scope': scope\n                }).then(function (registration) {\n                    if (registration.installing) {\n                        _this._serviceWorker = registration.installing;\n                    }\n                    else if (registration.waiting) {\n                        _this._serviceWorker = registration.waiting;\n                    }\n                    else if (registration.active) {\n                        _this._serviceWorker = registration.active;\n                    }\n                    _this._registration = registration;\n                    _this._setupListeners();\n                    _this._logger.debug(\"Service Worker Registration Success: \" + registration);\n                    return resolve(registration);\n                }).catch(function (error) {\n                    _this._logger.debug(\"Service Worker Registration Failed \" + error);\n                    return reject(error);\n                });\n            }\n            else {\n                return reject(new Error('Service Worker not available'));\n            }\n        });\n    };\n    /**\n     * Enable web push notifications. If not subscribed, a new subscription will\n     * be created and registered.\n     * \tTest Push Server: https://web-push-codelab.glitch.me/\n     * \tPush Server Libraries: https://github.com/web-push-libs/\n     * \tAPI Doc: https://developers.google.com/web/fundamentals/codelabs/push-notifications/\n     * @param publicKey\n     * @returns {Promise}\n     * \t- resolve(PushSubscription)\n     *  - reject(Error)\n     */\n    ServiceWorkerClass.prototype.enablePush = function (publicKey) {\n        var _this = this;\n        if (!this._registration)\n            throw new Error('Service Worker not registered');\n        this._publicKey = publicKey;\n        return new Promise(function (resolve, reject) {\n            if (JS_1.default.browserOrNode().isBrowser) {\n                _this._registration.pushManager.getSubscription()\n                    .then(function (subscription) {\n                    if (subscription) {\n                        _this._subscription = subscription;\n                        _this._logger.debug(\"User is subscribed to push: \" + JSON.stringify(subscription));\n                        resolve(subscription);\n                    }\n                    else {\n                        _this._logger.debug(\"User is NOT subscribed to push\");\n                        return _this._registration.pushManager.subscribe({\n                            'userVisibleOnly': true,\n                            'applicationServerKey': _this._urlB64ToUint8Array(publicKey)\n                        }).then(function (subscription) {\n                            _this._subscription = subscription;\n                            _this._logger.debug(\"User subscribed: \" + JSON.stringify(subscription));\n                            resolve(subscription);\n                        }).catch(function (error) {\n                            _this._logger.error(error);\n                        });\n                    }\n                });\n            }\n            else {\n                return reject(new Error('Service Worker not available'));\n            }\n        });\n    };\n    /**\n     * Convert a base64 encoded string to a Uint8 array for the push server key\n     * @param base64String\n     */\n    ServiceWorkerClass.prototype._urlB64ToUint8Array = function (base64String) {\n        var padding = '='.repeat((4 - base64String.length % 4) % 4);\n        var base64 = (base64String + padding)\n            .replace(/\\-/g, '+')\n            .replace(/_/g, '/');\n        var rawData = window.atob(base64);\n        var outputArray = new Uint8Array(rawData.length);\n        for (var i = 0; i < rawData.length; ++i) {\n            outputArray[i] = rawData.charCodeAt(i);\n        }\n        return outputArray;\n    };\n    /**\n     * Send a message to the service worker. The service worker needs\n     * to implement `self.addEventListener('message') to handle the\n     * message. This ***currently*** does not work in Safari or IE.\n     * @param {object | string} - An arbitrary JSON object or string message to send to the service worker\n      *\t- see: https://developer.mozilla.org/en-US/docs/Web/API/Transferable\n     * @returns {Promise}\n     **/\n    ServiceWorkerClass.prototype.send = function (message) {\n        if (this._serviceWorker) {\n            this._serviceWorker.postMessage(typeof message === 'object' ? JSON.stringify(message) : message);\n        }\n    };\n    /**\n     * Listen for service worker state change and message events\n     * https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/state\n     **/\n    ServiceWorkerClass.prototype._setupListeners = function () {\n        var _this = this;\n        this._serviceWorker.addEventListener('statechange', function (event) {\n            var currentState = _this._serviceWorker.state;\n            _this._logger.debug(\"ServiceWorker statechange: \" + currentState);\n            if (Amplify_1.default.Analytics && typeof Amplify_1.default.Analytics.record === 'function') {\n                Amplify_1.default.Analytics.record({\n                    name: 'ServiceWorker',\n                    attributes: {\n                        'state': currentState\n                    }\n                });\n            }\n        });\n        this._serviceWorker.addEventListener('message', function (event) {\n            _this._logger.debug(\"ServiceWorker message event: \" + event);\n        });\n    };\n    return ServiceWorkerClass;\n}());\nexports.default = ServiceWorkerClass;\n//# sourceMappingURL=ServiceWorker.js.map","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['mobileanalytics'] = {};\nAWS.MobileAnalytics = Service.defineService('mobileanalytics', ['2014-06-05']);\nObject.defineProperty(apiLoader.services['mobileanalytics'], '2014-06-05', {\n  get: function get() {\n    var model = require('../apis/mobileanalytics-2014-06-05.min.json');\n    return model;\n  },\n  enumerable: true,\n  configurable: true\n});\n\nmodule.exports = AWS.MobileAnalytics;\n","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar analytics_1 = require(\"@aws-amplify/analytics\");\nexports.Analytics = analytics_1.default;\nexports.AnalyticsClass = analytics_1.AnalyticsClass;\nexports.AWSPinpointProvider = analytics_1.AWSPinpointProvider;\nexports.AWSKinesisProvider = analytics_1.AWSKinesisProvider;\nexports.AmazonPersonalizeProvider = analytics_1.AmazonPersonalizeProvider;\nvar auth_1 = require(\"@aws-amplify/auth\");\nexports.Auth = auth_1.default;\nexports.AuthClass = auth_1.AuthClass;\nvar storage_1 = require(\"@aws-amplify/storage\");\nexports.Storage = storage_1.default;\nexports.StorageClass = storage_1.StorageClass;\nvar api_1 = require(\"@aws-amplify/api\");\nexports.API = api_1.default;\nexports.APIClass = api_1.APIClass;\nexports.graphqlOperation = api_1.graphqlOperation;\nvar pubsub_1 = require(\"@aws-amplify/pubsub\");\nexports.PubSub = pubsub_1.default;\nexports.PubSubClass = pubsub_1.PubSubClass;\nvar cache_1 = require(\"@aws-amplify/cache\");\nexports.Cache = cache_1.default;\nvar interactions_1 = require(\"@aws-amplify/interactions\");\nexports.Interactions = interactions_1.default;\nexports.InteractionsClass = interactions_1.InteractionsClass;\nvar UI = require(\"@aws-amplify/ui\");\nexports.UI = UI;\nvar xr_1 = require(\"@aws-amplify/xr\");\nexports.XR = xr_1.default;\nexports.XRClass = xr_1.XRClass;\nvar core_1 = require(\"@aws-amplify/core\");\nexports.Logger = core_1.ConsoleLogger;\nexports.Hub = core_1.Hub;\nexports.JS = core_1.JS;\nexports.ClientDevice = core_1.ClientDevice;\nexports.Signer = core_1.Signer;\nexports.I18n = core_1.I18n;\nexports.ServiceWorker = core_1.ServiceWorker;\nexports.default = core_1.default;\ncore_1.default.Auth = auth_1.default;\ncore_1.default.Analytics = analytics_1.default;\ncore_1.default.API = api_1.default;\ncore_1.default.Storage = storage_1.default;\ncore_1.default.I18n = core_1.I18n;\ncore_1.default.Cache = cache_1.default;\ncore_1.default.PubSub = pubsub_1.default;\ncore_1.default.Logger = core_1.ConsoleLogger;\ncore_1.default.ServiceWorker = core_1.ServiceWorker;\ncore_1.default.Interactions = interactions_1.default;\ncore_1.default.UI = UI;\ncore_1.default.XR = xr_1.default;\n//# sourceMappingURL=index.js.map","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['pinpoint'] = {};\nAWS.Pinpoint = Service.defineService('pinpoint', ['2016-12-01']);\nObject.defineProperty(apiLoader.services['pinpoint'], '2016-12-01', {\n  get: function get() {\n    var model = require('../apis/pinpoint-2016-12-01.min.json');\n    return model;\n  },\n  enumerable: true,\n  configurable: true\n});\n\nmodule.exports = AWS.Pinpoint;\n","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Utils_1 = require(\"./Utils\");\nvar StorageCache_1 = require(\"./StorageCache\");\nvar core_1 = require(\"@aws-amplify/core\");\nvar logger = new core_1.ConsoleLogger('Cache');\n/**\n * Customized storage based on the SessionStorage or LocalStorage with LRU implemented\n */\nvar BrowserStorageCache = /** @class */ (function (_super) {\n    __extends(BrowserStorageCache, _super);\n    /**\n     * initialize the cache\n     * @param config - the configuration of the cache\n     */\n    function BrowserStorageCache(config) {\n        var _this = this;\n        var cacheConfig = config ? Object.assign({}, Utils_1.defaultConfig, config) : Utils_1.defaultConfig;\n        _this = _super.call(this, cacheConfig) || this;\n        _this.config.storage = cacheConfig.storage;\n        _this.getItem = _this.getItem.bind(_this);\n        _this.setItem = _this.setItem.bind(_this);\n        _this.removeItem = _this.removeItem.bind(_this);\n        return _this;\n    }\n    /**\n     * decrease current size of the cache\n     *\n     * @private\n     * @param amount - the amount of the cache size which needs to be decreased\n     */\n    BrowserStorageCache.prototype._decreaseCurSizeInBytes = function (amount) {\n        var curSize = this.getCacheCurSize();\n        this.config.storage.setItem(this.cacheCurSizeKey, (curSize - amount).toString());\n    };\n    /**\n     * increase current size of the cache\n     *\n     * @private\n     * @param amount - the amount of the cache szie which need to be increased\n     */\n    BrowserStorageCache.prototype._increaseCurSizeInBytes = function (amount) {\n        var curSize = this.getCacheCurSize();\n        this.config.storage.setItem(this.cacheCurSizeKey, (curSize + amount).toString());\n    };\n    /**\n     * update the visited time if item has been visited\n     *\n     * @private\n     * @param item - the item which need to be refreshed\n     * @param prefixedKey - the key of the item\n     *\n     * @return the refreshed item\n     */\n    BrowserStorageCache.prototype._refreshItem = function (item, prefixedKey) {\n        item.visitedTime = Utils_1.getCurrTime();\n        this.config.storage.setItem(prefixedKey, JSON.stringify(item));\n        return item;\n    };\n    /**\n     * check wether item is expired\n     *\n     * @private\n     * @param key - the key of the item\n     *\n     * @return true if the item is expired.\n     */\n    BrowserStorageCache.prototype._isExpired = function (key) {\n        var text = this.config.storage.getItem(key);\n        var item = JSON.parse(text);\n        if (Utils_1.getCurrTime() >= item.expires) {\n            return true;\n        }\n        return false;\n    };\n    /**\n     * delete item from cache\n     *\n     * @private\n     * @param prefixedKey - the key of the item\n     * @param size - optional, the byte size of the item\n     */\n    BrowserStorageCache.prototype._removeItem = function (prefixedKey, size) {\n        var itemSize = size ? size : JSON.parse(this.config.storage.getItem(prefixedKey)).byteSize;\n        this._decreaseCurSizeInBytes(itemSize);\n        // remove the cache item\n        this.config.storage.removeItem(prefixedKey);\n    };\n    /**\n     * put item into cache\n     *\n     * @private\n     * @param prefixedKey - the key of the item\n     * @param itemData - the value of the item\n     * @param itemSizeInBytes - the byte size of the item\n     */\n    BrowserStorageCache.prototype._setItem = function (prefixedKey, item) {\n        // update the cache size\n        this._increaseCurSizeInBytes(item.byteSize);\n        try {\n            this.config.storage.setItem(prefixedKey, JSON.stringify(item));\n        }\n        catch (setItemErr) {\n            // if failed, we need to rollback the cache size\n            this._decreaseCurSizeInBytes(item.byteSize);\n            logger.error(\"Failed to set item \" + setItemErr);\n        }\n    };\n    /**\n     * total space needed when poping out items\n     *\n     * @private\n     * @param itemSize\n     *\n     * @return total space needed\n     */\n    BrowserStorageCache.prototype._sizeToPop = function (itemSize) {\n        var spaceItemNeed = this.getCacheCurSize() + itemSize - this.config.capacityInBytes;\n        var cacheThresholdSpace = (1 - this.config.warningThreshold) * this.config.capacityInBytes;\n        return spaceItemNeed > cacheThresholdSpace ? spaceItemNeed : cacheThresholdSpace;\n    };\n    /**\n     * see whether cache is full\n     *\n     * @private\n     * @param itemSize\n     *\n     * @return true if cache is full\n     */\n    BrowserStorageCache.prototype._isCacheFull = function (itemSize) {\n        return itemSize + this.getCacheCurSize() > this.config.capacityInBytes;\n    };\n    /**\n     * scan the storage and find out all the keys owned by this cache\n     * also clean the expired keys while scanning\n     *\n     * @private\n     *\n     * @return array of keys\n     */\n    BrowserStorageCache.prototype._findValidKeys = function () {\n        var keys = [];\n        var keyInCache = [];\n        // get all keys in Storage\n        for (var i = 0; i < this.config.storage.length; i += 1) {\n            keyInCache.push(this.config.storage.key(i));\n        }\n        // find those items which belong to our cache and also clean those expired items\n        for (var i = 0; i < keyInCache.length; i += 1) {\n            var key = keyInCache[i];\n            if (key.indexOf(this.config.keyPrefix) === 0 && key !== this.cacheCurSizeKey) {\n                if (this._isExpired(key)) {\n                    this._removeItem(key);\n                }\n                else {\n                    keys.push(key);\n                }\n            }\n        }\n        return keys;\n    };\n    /**\n     * get all the items we have, sort them by their priority,\n     * if priority is same, sort them by their last visited time\n     * pop out items from the low priority (5 is the lowest)\n     *\n     * @private\n     * @param keys - all the keys in this cache\n     * @param sizeToPop - the total size of the items which needed to be poped out\n     */\n    BrowserStorageCache.prototype._popOutItems = function (keys, sizeToPop) {\n        var items = [];\n        var remainedSize = sizeToPop;\n        // get the items from Storage\n        for (var i = 0; i < keys.length; i += 1) {\n            var val = this.config.storage.getItem(keys[i]);\n            if (val != null) {\n                var item = JSON.parse(val);\n                items.push(item);\n            }\n        }\n        // first compare priority\n        // then compare visited time\n        items.sort(function (a, b) {\n            if (a.priority > b.priority) {\n                return -1;\n            }\n            else if (a.priority < b.priority) {\n                return 1;\n            }\n            else {\n                if (a.visitedTime < b.visitedTime) {\n                    return -1;\n                }\n                else\n                    return 1;\n            }\n        });\n        for (var i = 0; i < items.length; i += 1) {\n            // pop out items until we have enough room for new item\n            this._removeItem(items[i].key, items[i].byteSize);\n            remainedSize -= items[i].byteSize;\n            if (remainedSize <= 0) {\n                return;\n            }\n        }\n    };\n    /**\n     * Set item into cache. You can put number, string, boolean or object.\n     * The cache will first check whether has the same key.\n     * If it has, it will delete the old item and then put the new item in\n     * The cache will pop out items if it is full\n     * You can specify the cache item options. The cache will abort and output a warning:\n     * If the key is invalid\n     * If the size of the item exceeds itemMaxSize.\n     * If the value is undefined\n     * If incorrect cache item configuration\n     * If error happened with browser storage\n     *\n     * @param key - the key of the item\n     * @param value - the value of the item\n     * @param {Object} [options] - optional, the specified meta-data\n     */\n    BrowserStorageCache.prototype.setItem = function (key, value, options) {\n        logger.log(\"Set item: key is \" + key + \", value is \" + value + \" with options: \" + options);\n        var prefixedKey = this.config.keyPrefix + key;\n        // invalid keys\n        if (prefixedKey === this.config.keyPrefix || prefixedKey === this.cacheCurSizeKey) {\n            logger.warn(\"Invalid key: should not be empty or 'CurSize'\");\n            return;\n        }\n        if (typeof value === 'undefined') {\n            logger.warn(\"The value of item should not be undefined!\");\n            return;\n        }\n        var cacheItemOptions = {\n            priority: options && options.priority !== undefined ? options.priority : this.config.defaultPriority,\n            expires: options && options.expires !== undefined ? options.expires : this.config.defaultTTL + Utils_1.getCurrTime()\n        };\n        if (cacheItemOptions.priority < 1 || cacheItemOptions.priority > 5) {\n            logger.warn(\"Invalid parameter: priority due to out or range. It should be within 1 and 5.\");\n            return;\n        }\n        var item = this.fillCacheItem(prefixedKey, value, cacheItemOptions);\n        // check wether this item is too big;\n        if (item.byteSize > this.config.itemMaxSize) {\n            logger.warn(\"Item with key: \" + key + \" you are trying to put into is too big!\");\n            return;\n        }\n        try {\n            // first look into the storage, if it exists, delete it.\n            var val = this.config.storage.getItem(prefixedKey);\n            if (val) {\n                this._removeItem(prefixedKey, JSON.parse(val).byteSize);\n            }\n            // check whether the cache is full\n            if (this._isCacheFull(item.byteSize)) {\n                var validKeys = this._findValidKeys();\n                // check again and then pop out items\n                if (this._isCacheFull(item.byteSize)) {\n                    var sizeToPop = this._sizeToPop(item.byteSize);\n                    this._popOutItems(validKeys, sizeToPop);\n                }\n            }\n            // put item in the cache\n            // may failed due to storage full\n            this._setItem(prefixedKey, item);\n        }\n        catch (e) {\n            logger.warn(\"setItem failed! \" + e);\n        }\n    };\n    /**\n     * Get item from cache. It will return null if item doesn’t exist or it has been expired.\n     * If you specified callback function in the options,\n     * then the function will be executed if no such item in the cache\n     * and finally put the return value into cache.\n     * Please make sure the callback function will return the value you want to put into the cache.\n     * The cache will abort output a warning:\n     * If the key is invalid\n     * If error happened with browser storage\n     *\n     * @param key - the key of the item\n     * @param {Object} [options] - the options of callback function\n     *\n     * @return - return the value of the item\n     */\n    BrowserStorageCache.prototype.getItem = function (key, options) {\n        logger.log(\"Get item: key is \" + key + \" with options \" + options);\n        var ret = null;\n        var prefixedKey = this.config.keyPrefix + key;\n        if (prefixedKey === this.config.keyPrefix || prefixedKey === this.cacheCurSizeKey) {\n            logger.warn(\"Invalid key: should not be empty or 'CurSize'\");\n            return null;\n        }\n        try {\n            ret = this.config.storage.getItem(prefixedKey);\n            if (ret != null) {\n                if (this._isExpired(prefixedKey)) {\n                    // if expired, remove that item and return null\n                    this._removeItem(prefixedKey, JSON.parse(ret).byteSize);\n                    ret = null;\n                }\n                else {\n                    // if not expired, great, return the value and refresh it\n                    var item = JSON.parse(ret);\n                    item = this._refreshItem(item, prefixedKey);\n                    return item.data;\n                }\n            }\n            if (options && options.callback !== undefined) {\n                var val = options.callback();\n                if (val !== null) {\n                    this.setItem(key, val, options);\n                }\n                return val;\n            }\n            return null;\n        }\n        catch (e) {\n            logger.warn(\"getItem failed! \" + e);\n            return null;\n        }\n    };\n    /**\n     * remove item from the cache\n     * The cache will abort output a warning:\n     * If error happened with browser storage\n     * @param key - the key of the item\n     */\n    BrowserStorageCache.prototype.removeItem = function (key) {\n        logger.log(\"Remove item: key is \" + key);\n        var prefixedKey = this.config.keyPrefix + key;\n        if (prefixedKey === this.config.keyPrefix || prefixedKey === this.cacheCurSizeKey) {\n            return;\n        }\n        try {\n            var val = this.config.storage.getItem(prefixedKey);\n            if (val) {\n                this._removeItem(prefixedKey, JSON.parse(val).byteSize);\n            }\n        }\n        catch (e) {\n            logger.warn(\"removeItem failed! \" + e);\n        }\n    };\n    /**\n     * clear the entire cache\n     * The cache will abort output a warning:\n     * If error happened with browser storage\n     */\n    BrowserStorageCache.prototype.clear = function () {\n        logger.log(\"Clear Cache\");\n        var keysToRemove = [];\n        for (var i = 0; i < this.config.storage.length; i += 1) {\n            var key = this.config.storage.key(i);\n            if (key.indexOf(this.config.keyPrefix) === 0) {\n                keysToRemove.push(key);\n            }\n        }\n        try {\n            for (var i = 0; i < keysToRemove.length; i += 1) {\n                this.config.storage.removeItem(keysToRemove[i]);\n            }\n        }\n        catch (e) {\n            logger.warn(\"clear failed! \" + e);\n        }\n    };\n    /**\n     * Return all the keys in the cache.\n     *\n     * @return - all keys in the cache\n     */\n    BrowserStorageCache.prototype.getAllKeys = function () {\n        var keys = [];\n        for (var i = 0; i < this.config.storage.length; i += 1) {\n            var key = this.config.storage.key(i);\n            if (key.indexOf(this.config.keyPrefix) === 0 && key !== this.cacheCurSizeKey) {\n                keys.push(key.substring(this.config.keyPrefix.length));\n            }\n        }\n        return keys;\n    };\n    /**\n     * return the current size of the cache\n     *\n     * @return - current size of the cache\n     */\n    BrowserStorageCache.prototype.getCacheCurSize = function () {\n        var ret = this.config.storage.getItem(this.cacheCurSizeKey);\n        if (!ret) {\n            this.config.storage.setItem(this.cacheCurSizeKey, '0');\n            ret = '0';\n        }\n        return Number(ret);\n    };\n    /**\n     * Return a new instance of cache with customized configuration.\n     * @param config - the customized configuration\n     *\n     * @return - new instance of Cache\n     */\n    BrowserStorageCache.prototype.createInstance = function (config) {\n        if (!config.keyPrefix || config.keyPrefix === Utils_1.defaultConfig.keyPrefix) {\n            logger.error('invalid keyPrefix, setting keyPrefix with timeStamp');\n            config.keyPrefix = Utils_1.getCurrTime.toString();\n        }\n        return new BrowserStorageCache(config);\n    };\n    return BrowserStorageCache;\n}(StorageCache_1.default));\nexports.BrowserStorageCache = BrowserStorageCache;\nvar instance = new BrowserStorageCache();\nexports.default = instance;\n//# sourceMappingURL=BrowserStorageCache.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@aws-amplify/core\");\n/**\n* Default cache config\n*/\nexports.defaultConfig = {\n    keyPrefix: 'aws-amplify-cache',\n    capacityInBytes: 1048576,\n    itemMaxSize: 210000,\n    defaultTTL: 259200000,\n    defaultPriority: 5,\n    warningThreshold: 0.8,\n    // the storage helper will check if localStorage exists,\n    // if not, will use a in-memory object instead\n    storage: new core_1.StorageHelper().getStorage()\n};\n/**\n * return the byte size of the string\n * @param str\n */\nfunction getByteLength(str) {\n    var ret = 0;\n    ret = str.length;\n    for (var i = str.length; i >= 0; i -= 1) {\n        var charCode = str.charCodeAt(i);\n        if (charCode > 0x7f && charCode <= 0x7ff) {\n            ret += 1;\n        }\n        else if (charCode > 0x7ff && charCode <= 0xffff) {\n            ret += 2;\n        }\n        // trail surrogate\n        if (charCode >= 0xDC00 && charCode <= 0xDFFF) {\n            i -= 1;\n        }\n    }\n    return ret;\n}\nexports.getByteLength = getByteLength;\n/**\n * get current time\n */\nfunction getCurrTime() {\n    var currTime = new Date();\n    return currTime.getTime();\n}\nexports.getCurrTime = getCurrTime;\n/**\n * check if passed value is an integer\n */\nfunction isInteger(value) {\n    if (Number.isInteger) {\n        return Number.isInteger(value);\n    }\n    return _isInteger(value);\n}\nexports.isInteger = isInteger;\nfunction _isInteger(value) {\n    return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n}\n/**\n * provide an object as the in-memory cache\n */\nvar store = {};\nvar CacheObject = /** @class */ (function () {\n    function CacheObject() {\n    }\n    CacheObject.clear = function () {\n        store = {};\n    };\n    CacheObject.getItem = function (key) {\n        return store[key] || null;\n    };\n    CacheObject.setItem = function (key, value) {\n        store[key] = value;\n    };\n    CacheObject.removeItem = function (key) {\n        delete store[key];\n    };\n    return CacheObject;\n}());\nexports.CacheObject = CacheObject;\n//# sourceMappingURL=CacheUtils.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar DoubleLinkedNode = /** @class */ (function () {\n    function DoubleLinkedNode(keyVal) {\n        this.key = keyVal ? keyVal : '';\n        this.prevNode = null;\n        this.nextNode = null;\n    }\n    return DoubleLinkedNode;\n}());\n/**\n * double linked list plus a hash table inside\n * each key in the cache stored as a node in the list\n * recently visited node will be rotated to the head\n * so the Last Recently Visited node will be at the tail\n *\n * @member head - dummy head of the linked list\n * @member tail - dummy tail of the linked list\n * @member hashtable - the hashtable which maps cache key to list node\n * @member length - length of the list\n */\nvar CacheList = /** @class */ (function () {\n    /**\n     * initialization\n     */\n    function CacheList() {\n        this.head = new DoubleLinkedNode();\n        this.tail = new DoubleLinkedNode();\n        this.hashtable = {};\n        this.length = 0;\n        this.head.nextNode = this.tail;\n        this.tail.prevNode = this.head;\n    }\n    /**\n     * insert node to the head of the list\n     *\n     * @param node\n     */\n    CacheList.prototype.insertNodeToHead = function (node) {\n        var tmp = this.head.nextNode;\n        this.head.nextNode = node;\n        node.nextNode = tmp;\n        node.prevNode = this.head;\n        tmp.prevNode = node;\n        this.length = this.length + 1;\n    };\n    /**\n     * remove node\n     *\n     * @param node\n     */\n    CacheList.prototype.removeNode = function (node) {\n        node.prevNode.nextNode = node.nextNode;\n        node.nextNode.prevNode = node.prevNode;\n        node.prevNode = null;\n        node.nextNode = null;\n        this.length = this.length - 1;\n    };\n    /**\n     * @return true if list is empty\n     */\n    CacheList.prototype.isEmpty = function () {\n        return this.length === 0;\n    };\n    /**\n     * refresh node so it is rotated to the head\n     *\n     * @param key - key of the node\n     */\n    CacheList.prototype.refresh = function (key) {\n        var node = this.hashtable[key];\n        this.removeNode(node);\n        this.insertNodeToHead(node);\n    };\n    /**\n     * insert new node to the head and add it in the hashtable\n     *\n     * @param key - the key of the node\n     */\n    CacheList.prototype.insertItem = function (key) {\n        var node = new DoubleLinkedNode(key);\n        this.hashtable[key] = node;\n        this.insertNodeToHead(node);\n    };\n    /**\n     * @return the LAST Recently Visited key\n     */\n    CacheList.prototype.getLastItem = function () {\n        return this.tail.prevNode.key;\n    };\n    /**\n     * remove the cache key from the list and hashtable\n     * @param key - the key of the node\n     */\n    CacheList.prototype.removeItem = function (key) {\n        var removedItem = this.hashtable[key];\n        this.removeNode(removedItem);\n        delete this.hashtable[key];\n    };\n    /**\n     * @return length of the list\n     */\n    CacheList.prototype.getSize = function () {\n        return this.length;\n    };\n    /**\n     * @return true if the key is in the hashtable\n     * @param key\n     */\n    CacheList.prototype.containsKey = function (key) {\n        return key in this.hashtable;\n    };\n    /**\n     * clean up the list and hashtable\n     */\n    CacheList.prototype.clearList = function () {\n        for (var _i = 0, _a = Object.keys(this.hashtable); _i < _a.length; _i++) {\n            var key = _a[_i];\n            if (this.hashtable.hasOwnProperty(key)) {\n                delete this.hashtable[key];\n            }\n        }\n        this.head.nextNode = this.tail;\n        this.tail.prevNode = this.head;\n        this.length = 0;\n    };\n    /**\n     * @return all keys in the hashtable\n     */\n    CacheList.prototype.getKeys = function () {\n        return Object.keys(this.hashtable);\n    };\n    /**\n     * mainly for test\n     *\n     * @param key\n     * @return true if key is the head node\n     */\n    CacheList.prototype.isHeadNode = function (key) {\n        var node = this.hashtable[key];\n        return (node.prevNode === this.head);\n    };\n    /**\n     * mainly for test\n     *\n     * @param key\n     * @return true if key is the tail node\n     */\n    CacheList.prototype.isTailNode = function (key) {\n        var node = this.hashtable[key];\n        return (node.nextNode === this.tail);\n    };\n    return CacheList;\n}());\nexports.default = CacheList;\n//# sourceMappingURL=CacheList.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Utils_1 = require(\"./Utils\");\nvar StorageCache_1 = require(\"./StorageCache\");\nvar core_1 = require(\"@aws-amplify/core\");\nvar logger = new core_1.ConsoleLogger('InMemoryCache');\n/**\n * Customized in-memory cache with LRU implemented\n * @member cacheObj - object which store items\n * @member cacheList - list of keys in the cache with LRU\n * @member curSizeInBytes - current size of the cache\n * @member maxPriority - max of the priority\n * @member cacheSizeLimit - the limit of cache size\n */\nvar InMemoryCache = /** @class */ (function (_super) {\n    __extends(InMemoryCache, _super);\n    /**\n     * initialize the cache\n     *\n     * @param config - the configuration of the cache\n     */\n    function InMemoryCache(config) {\n        var _this = this;\n        var cacheConfig = config ? Object.assign({}, Utils_1.defaultConfig, config) : Utils_1.defaultConfig;\n        _this = _super.call(this, cacheConfig) || this;\n        logger.debug('now we start!');\n        _this.cacheList = [];\n        _this.curSizeInBytes = 0;\n        _this.maxPriority = 5;\n        _this.getItem = _this.getItem.bind(_this);\n        _this.setItem = _this.setItem.bind(_this);\n        _this.removeItem = _this.removeItem.bind(_this);\n        // initialize list for every priority\n        for (var i = 0; i < _this.maxPriority; i += 1) {\n            _this.cacheList[i] = new Utils_1.CacheList();\n        }\n        return _this;\n    }\n    /**\n     * decrease current size of the cache\n     *\n     * @param amount - the amount of the cache size which needs to be decreased\n     */\n    InMemoryCache.prototype._decreaseCurSizeInBytes = function (amount) {\n        this.curSizeInBytes -= amount;\n    };\n    /**\n     * increase current size of the cache\n     *\n     * @param amount - the amount of the cache szie which need to be increased\n     */\n    InMemoryCache.prototype._increaseCurSizeInBytes = function (amount) {\n        this.curSizeInBytes += amount;\n    };\n    /**\n     * check whether item is expired\n     *\n     * @param key - the key of the item\n     *\n     * @return true if the item is expired.\n     */\n    InMemoryCache.prototype._isExpired = function (key) {\n        var text = Utils_1.CacheObject.getItem(key);\n        var item = JSON.parse(text);\n        if (Utils_1.getCurrTime() >= item.expires) {\n            return true;\n        }\n        return false;\n    };\n    /**\n     * delete item from cache\n     *\n     * @param prefixedKey - the key of the item\n     * @param listIdx - indicates which cache list the key belongs to\n     */\n    InMemoryCache.prototype._removeItem = function (prefixedKey, listIdx) {\n        // delete the key from the list\n        this.cacheList[listIdx].removeItem(prefixedKey);\n        // decrease the current size of the cache\n        this._decreaseCurSizeInBytes(JSON.parse(Utils_1.CacheObject.getItem(prefixedKey)).byteSize);\n        // finally remove the item from memory\n        Utils_1.CacheObject.removeItem(prefixedKey);\n    };\n    /**\n     * put item into cache\n     *\n     * @param prefixedKey - the key of the item\n     * @param itemData - the value of the item\n     * @param itemSizeInBytes - the byte size of the item\n     * @param listIdx - indicates which cache list the key belongs to\n     */\n    InMemoryCache.prototype._setItem = function (prefixedKey, item, listIdx) {\n        // insert the key into the list\n        this.cacheList[listIdx].insertItem(prefixedKey);\n        // increase the current size of the cache\n        this._increaseCurSizeInBytes(item.byteSize);\n        // finally add the item into memory\n        Utils_1.CacheObject.setItem(prefixedKey, JSON.stringify(item));\n    };\n    /**\n     * see whether cache is full\n     *\n     * @param itemSize\n     *\n     * @return true if cache is full\n     */\n    InMemoryCache.prototype._isCacheFull = function (itemSize) {\n        return this.curSizeInBytes + itemSize > this.config.capacityInBytes;\n    };\n    /**\n     * check whether the cache contains the key\n     *\n     * @param key\n     */\n    InMemoryCache.prototype.containsKey = function (key) {\n        var prefixedKey = this.config.keyPrefix + key;\n        for (var i = 0; i < this.maxPriority; i += 1) {\n            if (this.cacheList[i].containsKey(prefixedKey)) {\n                return i + 1;\n            }\n        }\n        return -1;\n    };\n    /**\n     * * Set item into cache. You can put number, string, boolean or object.\n     * The cache will first check whether has the same key.\n     * If it has, it will delete the old item and then put the new item in\n     * The cache will pop out items if it is full\n     * You can specify the cache item options. The cache will abort and output a warning:\n     * If the key is invalid\n     * If the size of the item exceeds itemMaxSize.\n     * If the value is undefined\n     * If incorrect cache item configuration\n     * If error happened with browser storage\n     *\n     * @param key - the key of the item\n     * @param value - the value of the item\n     * @param options - optional, the specified meta-data\n     *\n     * @throws if the item is too big which exceeds the limit of single item size\n     * @throws if the key is invalid\n     */\n    InMemoryCache.prototype.setItem = function (key, value, options) {\n        var prefixedKey = this.config.keyPrefix + key;\n        // invalid keys\n        if (prefixedKey === this.config.keyPrefix || prefixedKey === this.cacheCurSizeKey) {\n            logger.warn(\"Invalid key: should not be empty or 'CurSize'\");\n            return;\n        }\n        if ((typeof value) === 'undefined') {\n            logger.warn(\"The value of item should not be undefined!\");\n            return;\n        }\n        var cacheItemOptions = {\n            priority: options && options.priority !== undefined ? options.priority : this.config.defaultPriority,\n            expires: options && options.expires !== undefined ?\n                options.expires : (this.config.defaultTTL + Utils_1.getCurrTime())\n        };\n        if (cacheItemOptions.priority < 1 || cacheItemOptions.priority > 5) {\n            logger.warn(\"Invalid parameter: priority due to out or range. It should be within 1 and 5.\");\n            return;\n        }\n        var item = this.fillCacheItem(prefixedKey, value, cacheItemOptions);\n        // check wether this item is too big;\n        if (item.byteSize > this.config.itemMaxSize) {\n            logger.warn(\"Item with key: \" + key + \" you are trying to put into is too big!\");\n            return;\n        }\n        // if key already in the cache, then delete it.\n        var presentKeyPrio = this.containsKey(key);\n        if (presentKeyPrio !== -1) {\n            this._removeItem(prefixedKey, presentKeyPrio - 1);\n        }\n        // pop out items in the cache when cache is full based on LRU\n        // first start from lowest priority cache list\n        var cacheListIdx = this.maxPriority - 1;\n        while (this._isCacheFull(item.byteSize) && cacheListIdx >= 0) {\n            if (!this.cacheList[cacheListIdx].isEmpty()) {\n                var popedItemKey = this.cacheList[cacheListIdx].getLastItem();\n                this._removeItem(popedItemKey, cacheListIdx);\n            }\n            else {\n                cacheListIdx -= 1;\n            }\n        }\n        this._setItem(prefixedKey, item, Number(item.priority) - 1);\n    };\n    /**\n     * Get item from cache. It will return null if item doesn’t exist or it has been expired.\n     * If you specified callback function in the options,\n     * then the function will be executed if no such item in the cache\n     * and finally put the return value into cache.\n     * Please make sure the callback function will return the value you want to put into the cache.\n     * The cache will abort output a warning:\n     * If the key is invalid\n     *\n     * @param key - the key of the item\n     * @param options - the options of callback function\n     */\n    InMemoryCache.prototype.getItem = function (key, options) {\n        var ret = null;\n        var prefixedKey = this.config.keyPrefix + key;\n        if (prefixedKey === this.config.keyPrefix || prefixedKey === this.cacheCurSizeKey) {\n            logger.warn(\"Invalid key: should not be empty or 'CurSize'\");\n            return null;\n        }\n        // check whether it's in the cachelist\n        var presentKeyPrio = this.containsKey(key);\n        if (presentKeyPrio !== -1) {\n            if (this._isExpired(prefixedKey)) {\n                // if expired, remove that item and return null\n                this._removeItem(prefixedKey, presentKeyPrio - 1);\n            }\n            else {\n                // if not expired, great, return the value and refresh it\n                ret = Utils_1.CacheObject.getItem(prefixedKey);\n                var item = JSON.parse(ret);\n                this.cacheList[item.priority - 1].refresh(prefixedKey);\n                return item.data;\n            }\n        }\n        if (options && options.callback !== undefined) {\n            var val = options.callback();\n            if (val !== null) {\n                this.setItem(key, val, options);\n            }\n            return val;\n        }\n        return null;\n    };\n    /**\n     * remove item from the cache\n     *\n     * @param key - the key of the item\n     */\n    InMemoryCache.prototype.removeItem = function (key) {\n        var prefixedKey = this.config.keyPrefix + key;\n        // check if the key is in the cache\n        var presentKeyPrio = this.containsKey(key);\n        if (presentKeyPrio !== -1) {\n            this._removeItem(prefixedKey, presentKeyPrio - 1);\n        }\n    };\n    /**\n     * clear the entire cache\n     */\n    InMemoryCache.prototype.clear = function () {\n        for (var i = 0; i < this.maxPriority; i += 1) {\n            for (var _i = 0, _a = this.cacheList[i].getKeys(); _i < _a.length; _i++) {\n                var key = _a[_i];\n                this._removeItem(key, i);\n            }\n        }\n    };\n    /**\n     * Return all the keys in the cache.\n     */\n    InMemoryCache.prototype.getAllKeys = function () {\n        var keys = [];\n        for (var i = 0; i < this.maxPriority; i += 1) {\n            for (var _i = 0, _a = this.cacheList[i].getKeys(); _i < _a.length; _i++) {\n                var key = _a[_i];\n                keys.push(key.substring(this.config.keyPrefix.length));\n            }\n        }\n        return keys;\n    };\n    /**\n     * return the current size of the cache\n     *\n     * @return the current size of the cache\n     */\n    InMemoryCache.prototype.getCacheCurSize = function () {\n        return this.curSizeInBytes;\n    };\n    /**\n     * Return a new instance of cache with customized configuration.\n     * @param config - the customized configuration\n     */\n    InMemoryCache.prototype.createInstance = function (config) {\n        return new InMemoryCache(config);\n    };\n    return InMemoryCache;\n}(StorageCache_1.default));\nexports.InMemoryCache = InMemoryCache;\nvar instance = new InMemoryCache();\nexports.default = instance;\n//# sourceMappingURL=InMemoryCache.js.map","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n  var i = buf && offset || 0;\n  var b = buf || [];\n\n  options = options || {};\n  var node = options.node || _nodeId;\n  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n  // node and clockseq need to be initialized to random values if they're not\n  // specified.  We do this lazily to minimize issues related to insufficient\n  // system entropy.  See #189\n  if (node == null || clockseq == null) {\n    var seedBytes = rng();\n    if (node == null) {\n      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n      node = _nodeId = [\n        seedBytes[0] | 0x01,\n        seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n      ];\n    }\n    if (clockseq == null) {\n      // Per 4.2.2, randomize (14 bit) clockseq\n      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n    }\n  }\n\n  // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n  // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n  // Time since last uuid creation (in msecs)\n  var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n  // Per 4.2.1.2, Bump clockseq on clock regression\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  }\n\n  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  }\n\n  // Per 4.2.1.2 Throw error if too many uuids are requested\n  if (nsecs >= 10000) {\n    throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n  }\n\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq;\n\n  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n  msecs += 12219292800000;\n\n  // `time_low`\n  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n  b[i++] = tl >>> 24 & 0xff;\n  b[i++] = tl >>> 16 & 0xff;\n  b[i++] = tl >>> 8 & 0xff;\n  b[i++] = tl & 0xff;\n\n  // `time_mid`\n  var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff;\n\n  // `time_high_and_version`\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n  b[i++] = tmh >>> 16 & 0xff;\n\n  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n  b[i++] = clockseq >>> 8 | 0x80;\n\n  // `clock_seq_low`\n  b[i++] = clockseq & 0xff;\n\n  // `node`\n  for (var n = 0; n < 6; ++n) {\n    b[i + n] = node[n];\n  }\n\n  return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n  var i = buf && offset || 0;\n\n  if (typeof(options) == 'string') {\n    buf = options === 'binary' ? new Array(16) : null;\n    options = null;\n  }\n  options = options || {};\n\n  var rnds = options.random || (options.rng || rng)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = (rnds[6] & 0x0f) | 0x40;\n  rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    for (var ii = 0; ii < 16; ++ii) {\n      buf[i + ii] = rnds[ii];\n    }\n  }\n\n  return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar PageViewTracker_1 = require(\"./PageViewTracker\");\nexports.PageViewTracker = PageViewTracker_1.default;\nvar EventTracker_1 = require(\"./EventTracker\");\nexports.EventTracker = EventTracker_1.default;\nvar SessionTracker_1 = require(\"./SessionTracker\");\nexports.SessionTracker = SessionTracker_1.default;\n//# sourceMappingURL=index.js.map","export class ScreenViewUtility{\n    disableView: boolean;\n    viewName: string;\n    constructor(){\n        this.disableView = false;\n        this.viewName = \"\";\n    }\n\n}","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar MethodEmbed_1 = require(\"../utils/MethodEmbed\");\nvar core_1 = require(\"@aws-amplify/core\");\nvar logger = new core_1.ConsoleLogger('PageViewTracker');\nvar PREV_URL_KEY = 'aws-amplify-analytics-prevUrl';\nvar getUrl = function () {\n    if (!core_1.JS.browserOrNode().isBrowser)\n        return '';\n    else\n        return window.location.origin + window.location.pathname;\n};\nvar defaultOpts = {\n    enable: false,\n    provider: 'AWSPinpoint',\n    getUrl: getUrl\n};\nvar PageViewTracker = /** @class */ (function () {\n    function PageViewTracker(tracker, opts) {\n        logger.debug('initialize pageview tracker with opts', opts);\n        this._config = Object.assign({}, defaultOpts, opts);\n        this._tracker = tracker;\n        this._hasEnabled = false;\n        this._trackFunc = this._trackFunc.bind(this);\n        if (this._config.type === 'SPA') {\n            this._pageViewTrackSPA();\n        }\n        else {\n            this._pageViewTrackDefault();\n        }\n    }\n    PageViewTracker.prototype.configure = function (opts) {\n        Object.assign(this._config, opts);\n        // if spa, need to remove those listeners if disabled\n        if (this._config.type === 'SPA') {\n            this._pageViewTrackSPA();\n        }\n        return this._config;\n    };\n    PageViewTracker.prototype._isSameUrl = function () {\n        var prevUrl = sessionStorage.getItem(PREV_URL_KEY);\n        var curUrl = this._config.getUrl();\n        if (prevUrl === curUrl) {\n            logger.debug('the url is same');\n            return true;\n        }\n        else\n            return false;\n    };\n    PageViewTracker.prototype._pageViewTrackDefault = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var url, customAttrs, _a, attributes;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        if (!core_1.JS.browserOrNode().isBrowser || !window.addEventListener || !window.sessionStorage) {\n                            logger.debug('not in the supported web enviroment');\n                            return [2 /*return*/];\n                        }\n                        url = this._config.getUrl();\n                        if (!(typeof this._config.attributes === 'function')) return [3 /*break*/, 2];\n                        return [4 /*yield*/, this._config.attributes()];\n                    case 1:\n                        _a = _b.sent();\n                        return [3 /*break*/, 3];\n                    case 2:\n                        _a = this._config.attributes;\n                        _b.label = 3;\n                    case 3:\n                        customAttrs = _a;\n                        attributes = Object.assign({\n                            url: url\n                        }, customAttrs);\n                        if (this._config.enable && !this._isSameUrl()) {\n                            this._tracker({\n                                name: this._config.eventName || 'pageView',\n                                attributes: attributes\n                            }, this._config.provider).catch(function (e) {\n                                logger.debug('Failed to record the page view event', e);\n                            });\n                            sessionStorage.setItem(PREV_URL_KEY, url);\n                        }\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    PageViewTracker.prototype._trackFunc = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var url, customAttrs, _a, attributes;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        if (!core_1.JS.browserOrNode().isBrowser || !window.addEventListener || !history.pushState || !window.sessionStorage) {\n                            logger.debug('not in the supported web enviroment');\n                            return [2 /*return*/];\n                        }\n                        url = this._config.getUrl();\n                        if (!(typeof this._config.attributes === 'function')) return [3 /*break*/, 2];\n                        return [4 /*yield*/, this._config.attributes()];\n                    case 1:\n                        _a = _b.sent();\n                        return [3 /*break*/, 3];\n                    case 2:\n                        _a = this._config.attributes;\n                        _b.label = 3;\n                    case 3:\n                        customAttrs = _a;\n                        attributes = Object.assign({\n                            url: url\n                        }, customAttrs);\n                        if (!this._isSameUrl()) {\n                            this._tracker({\n                                name: this._config.eventName || 'pageView',\n                                attributes: attributes\n                            }, this._config.provider).catch(function (e) {\n                                logger.debug('Failed to record the page view event', e);\n                            });\n                            sessionStorage.setItem(PREV_URL_KEY, url);\n                        }\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    PageViewTracker.prototype._pageViewTrackSPA = function () {\n        if (!core_1.JS.browserOrNode().isBrowser || !window.addEventListener || !history.pushState) {\n            logger.debug('not in the supported web enviroment');\n            return;\n        }\n        if (this._config.enable && !this._hasEnabled) {\n            MethodEmbed_1.default.add(history, 'pushState', this._trackFunc);\n            MethodEmbed_1.default.add(history, 'replaceState', this._trackFunc);\n            window.addEventListener('popstate', this._trackFunc);\n            this._trackFunc();\n            this._hasEnabled = true;\n        }\n        else {\n            MethodEmbed_1.default.remove(history, 'pushState');\n            MethodEmbed_1.default.remove(history, 'replaceState');\n            window.removeEventListener('popstate', this._trackFunc);\n            this._hasEnabled = false;\n        }\n    };\n    return PageViewTracker;\n}());\nexports.default = PageViewTracker;\n//# sourceMappingURL=PageViewTracker.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar lists = [];\nvar MethodEmbed = /** @class */ (function () {\n    function MethodEmbed(context, methodName) {\n        this.context = context;\n        this.methodName = methodName;\n        this._originalMethod = context[methodName].bind(context);\n    }\n    MethodEmbed.add = function (context, methodName, methodOverride) {\n        getInstance(context, methodName).set(methodOverride);\n    };\n    MethodEmbed.remove = function (context, methodName) {\n        getInstance(context, methodName).remove();\n    };\n    MethodEmbed.prototype.set = function (methodOverride) {\n        var _this = this;\n        this.context[this.methodName] = function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return methodOverride(_this._originalMethod.apply(_this, args));\n        };\n    };\n    MethodEmbed.prototype.remove = function () {\n        this.context[this.methodName] = this._originalMethod;\n    };\n    return MethodEmbed;\n}());\nexports.default = MethodEmbed;\nfunction getInstance(context, methodName) {\n    var instance = lists\n        .filter(function (h) { return h.context === context && h.methodName === methodName; })[0];\n    if (!instance) {\n        instance = new MethodEmbed(context, methodName);\n        lists.push(instance);\n    }\n    return instance;\n}\n//# sourceMappingURL=MethodEmbed.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar dom_utils_1 = require(\"../vendor/dom-utils\");\nvar core_1 = require(\"@aws-amplify/core\");\nvar logger = new core_1.ConsoleLogger('EventTracker');\nvar defaultOpts = {\n    enable: false,\n    events: ['click'],\n    selectorPrefix: 'data-amplify-analytics-',\n    provider: 'AWSPinpoint'\n};\nvar EventTracker = /** @class */ (function () {\n    function EventTracker(tracker, opts) {\n        if (!core_1.JS.browserOrNode().isBrowser || !window.addEventListener) {\n            logger.debug('not in the supported web environment');\n            return;\n        }\n        this._config = Object.assign({}, defaultOpts, opts);\n        this._tracker = tracker;\n        this._delegates = {};\n        this._trackFunc = this._trackFunc.bind(this);\n        logger.debug('initialize pageview tracker with opts', this._config);\n        this.configure(this._config);\n    }\n    EventTracker.prototype.configure = function (opts) {\n        var _this = this;\n        Object.assign(this._config, opts);\n        if (!this._config.enable) {\n            Object.keys(this._delegates).forEach(function (key) {\n                if (typeof _this._delegates[key].destroy === 'function')\n                    _this._delegates[key].destroy();\n            });\n            this._delegates = {};\n        }\n        else if (this._config.enable && Object.keys(this._delegates).length === 0) {\n            var selector_1 = '[' + this._config.selectorPrefix + 'on]';\n            this._config.events.forEach(function (evt) {\n                _this._delegates[evt] = dom_utils_1.delegate(document, evt, selector_1, _this._trackFunc, { composed: true, useCapture: true });\n            });\n        }\n        return this._config;\n    };\n    EventTracker.prototype._trackFunc = function (event, element) {\n        return __awaiter(this, void 0, void 0, function () {\n            var customAttrs, events, eventName, attrs, defaultAttrs, _a, attributes;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        customAttrs = {};\n                        events = element\n                            .getAttribute(this._config.selectorPrefix + 'on')\n                            .split(/\\s*,\\s*/);\n                        eventName = element.getAttribute(this._config.selectorPrefix + 'name');\n                        attrs = element.getAttribute(this._config.selectorPrefix + 'attrs');\n                        if (attrs) {\n                            attrs.split(/\\s*,\\s*/)\n                                .forEach(function (attr) {\n                                var tmp = attr.trim().split(/\\s*:\\s*/);\n                                customAttrs[tmp[0]] = tmp[1];\n                            });\n                        }\n                        if (!(typeof this._config.attributes === 'function')) return [3 /*break*/, 2];\n                        return [4 /*yield*/, this._config.attributes()];\n                    case 1:\n                        _a = _b.sent();\n                        return [3 /*break*/, 3];\n                    case 2:\n                        _a = this._config.attributes;\n                        _b.label = 3;\n                    case 3:\n                        defaultAttrs = _a;\n                        attributes = Object.assign({\n                            type: event.type,\n                            target: event.target.localName + \" with id \" + event.target.id\n                        }, defaultAttrs, customAttrs);\n                        logger.debug('events needed to be recorded', events);\n                        logger.debug('attributes needed to be attached', customAttrs);\n                        if (events.indexOf(event.type) < 0) {\n                            logger.debug(\"event \" + event.type + \" is not selected to be recorded\");\n                            return [2 /*return*/];\n                        }\n                        this._tracker({\n                            name: eventName || 'event',\n                            attributes: attributes\n                        }, this._config.provider).catch(function (e) {\n                            logger.debug(\"Failed to record the \" + event.type + \" event', \" + e);\n                        });\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    return EventTracker;\n}());\nexports.default = EventTracker;\n//# sourceMappingURL=EventTracker.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar closest_1 = require(\"./closest\");\nexports.closest = closest_1.default;\nvar delegate_1 = require(\"./delegate\");\nexports.delegate = delegate_1.default;\nvar dispatch_1 = require(\"./dispatch\");\nexports.dispatch = dispatch_1.default;\nvar get_attributes_1 = require(\"./get-attributes\");\nexports.getAttributes = get_attributes_1.default;\nvar matches_1 = require(\"./matches\");\nexports.matches = matches_1.default;\nvar parents_1 = require(\"./parents\");\nexports.parents = parents_1.default;\nvar parse_url_1 = require(\"./parse-url\");\nexports.parseUrl = parse_url_1.default;\n//# sourceMappingURL=index.js.map","\"use strict\";\n/**\n * Copyright (c) 2017, Philip Walton <philip@philipwalton.com>\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar closest_1 = require(\"./closest\");\nvar matches_1 = require(\"./matches\");\n/**\n * Delegates the handling of events for an element matching a selector to an\n * ancestor of the matching element.\n * @param {!Node} ancestor The ancestor element to add the listener to.\n * @param {string} eventType The event type to listen to.\n * @param {string} selector A CSS selector to match against child elements.\n * @param {!Function} callback A function to run any time the event happens.\n * @param {Object=} opts A configuration options object. The available options:\n *     - useCapture<boolean>: If true, bind to the event capture phase.\n *     - deep<boolean>: If true, delegate into shadow trees.\n * @return {Object} The delegate object. It contains a destroy method.\n */\nfunction delegate(ancestor, eventType, selector, callback, opts) {\n    if (opts === void 0) { opts = {}; }\n    // Defines the event listener.\n    var listener = function (event) {\n        var delegateTarget;\n        // If opts.composed is true and the event originated from inside a Shadow\n        // tree, check the composed path nodes.\n        if (opts['composed'] && typeof event['composedPath'] === 'function') {\n            var composedPath = event.composedPath();\n            for (var i = 0, node = void 0; node = composedPath[i]; i++) {\n                if (node.nodeType === 1 && matches_1.default(node, selector)) {\n                    delegateTarget = node;\n                }\n            }\n        }\n        else {\n            // Otherwise check the parents.\n            delegateTarget = closest_1.default(event.target, selector, true);\n        }\n        if (delegateTarget) {\n            callback.call(delegateTarget, event, delegateTarget);\n        }\n    };\n    ancestor.addEventListener(eventType, listener, opts['useCapture']);\n    return {\n        destroy: function () {\n            ancestor.removeEventListener(eventType, listener, opts['useCapture']);\n        },\n    };\n}\nexports.default = delegate;\n//# sourceMappingURL=delegate.js.map","\"use strict\";\n/**\n * Copyright (c) 2017, Philip Walton <philip@philipwalton.com>\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Dispatches an event on the passed element.\n * @param {!Element} element The DOM element to dispatch the event on.\n * @param {string} eventType The type of event to dispatch.\n * @param {Object|string=} eventName A string name of the event constructor\n *     to use. Defaults to 'Event' if nothing is passed or 'CustomEvent' if\n *     a value is set on `initDict.detail`. If eventName is given an object\n *     it is assumed to be initDict and thus reassigned.\n * @param {Object=} initDict The initialization attributes for the\n *     event. A `detail` property can be used here to pass custom data.\n * @return {boolean} The return value of `element.dispatchEvent`, which will\n *     be false if any of the event listeners called `preventDefault`.\n */\nfunction dispatch(element, eventType, evtName, init_dict) {\n    if (evtName === void 0) { evtName = 'Event'; }\n    if (init_dict === void 0) { init_dict = {}; }\n    var event;\n    var isCustom;\n    var initDict = init_dict;\n    var eventName = evtName;\n    // eventName is optional\n    if (typeof eventName === 'object') {\n        initDict = eventName;\n        eventName = 'Event';\n    }\n    initDict['bubbles'] = initDict['bubbles'] || false;\n    initDict['cancelable'] = initDict['cancelable'] || false;\n    initDict['composed'] = initDict['composed'] || false;\n    // If a detail property is passed, this is a custom event.\n    if ('detail' in initDict)\n        isCustom = true;\n    eventName = isCustom ? 'CustomEvent' : eventName;\n    // Tries to create the event using constructors, if that doesn't work,\n    // fallback to `document.createEvent()`.\n    try {\n        event = new window[eventName](eventType, initDict);\n    }\n    catch (err) {\n        event = document.createEvent(eventName);\n        var initMethod = 'init' + (isCustom ? 'Custom' : '') + 'Event';\n        event[initMethod](eventType, initDict['bubbles'], initDict['cancelable'], initDict['detail']);\n    }\n    return element.dispatchEvent(event);\n}\nexports.default = dispatch;\n//# sourceMappingURL=dispatch.js.map","\"use strict\";\n/**\n * Copyright (c) 2017, Philip Walton <philip@philipwalton.com>\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Gets all attributes of an element as a plain JavaScriot object.\n * @param {Element} element The element whose attributes to get.\n * @return {!Object} An object whose keys are the attribute keys and whose\n *     values are the attribute values. If no attributes exist, an empty\n *     object is returned.\n */\nfunction getAttributes(element) {\n    var attrs = {};\n    // Validate input.\n    if (!(element && element.nodeType === 1))\n        return attrs;\n    // Return an empty object if there are no attributes.\n    var map = element.attributes;\n    if (map.length === 0)\n        return {};\n    for (var i = 0, attr = void 0; attr = map[i]; i++) {\n        attrs[attr.name] = attr.value;\n    }\n    return attrs;\n}\nexports.default = getAttributes;\n//# sourceMappingURL=get-attributes.js.map","\"use strict\";\n/**\n * Copyright (c) 2017, Philip Walton <philip@philipwalton.com>\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@aws-amplify/core\");\nvar HTTP_PORT = '80';\nvar HTTPS_PORT = '443';\nvar DEFAULT_PORT = RegExp(':(' + HTTP_PORT + '|' + HTTPS_PORT + ')$');\nvar a = core_1.JS.browserOrNode().isBrowser ? document.createElement('a') : null;\nvar cache = {};\n/**\n * Parses the given url and returns an object mimicing a `Location` object.\n * @param {string} url The url to parse.\n * @return {!Object} An object with the same properties as a `Location`.\n */\nfunction parseUrl(u) {\n    var url = u;\n    // All falsy values (as well as \".\") should map to the current URL.\n    url = (!url || url === '.') ? location.href : url;\n    if (cache[url])\n        return cache[url];\n    a.href = url;\n    // When parsing file relative paths (e.g. `../index.html`), IE will correctly\n    // resolve the `href` property but will keep the `..` in the `path` property.\n    // It will also not include the `host` or `hostname` properties. Furthermore,\n    // IE will sometimes return no protocol or just a colon, especially for things\n    // like relative protocol URLs (e.g. \"//google.com\").\n    // To workaround all of these issues, we reparse with the full URL from the\n    // `href` property.\n    if (url.charAt(0) === '.' || url.charAt(0) === '/')\n        return parseUrl(a.href);\n    // Don't include default ports.\n    var port = (a.port === HTTP_PORT || a.port === HTTPS_PORT) ? '' : a.port;\n    // PhantomJS sets the port to \"0\" when using the file: protocol.\n    port = port === '0' ? '' : port;\n    // Sometimes IE incorrectly includes a port for default ports\n    // (e.g. `:80` or `:443`) even when no port is specified in the URL.\n    // http://bit.ly/1rQNoMg\n    var host = a.host.replace(DEFAULT_PORT, '');\n    // Not all browser support `origin` so we have to build it.\n    var origin = a['origin'] ? a['origin'] : a.protocol + '//' + host;\n    // Sometimes IE doesn't include the leading slash for pathname.\n    // http://bit.ly/1rQNoMg\n    var pathname = a.pathname.charAt(0) === '/' ? a.pathname : '/' + a.pathname;\n    return cache[url] = {\n        hash: a.hash,\n        host: host,\n        hostname: a.hostname,\n        href: a.href,\n        origin: origin,\n        pathname: pathname,\n        port: port,\n        protocol: a.protocol,\n        search: a.search,\n    };\n}\nexports.default = parseUrl;\n//# sourceMappingURL=parse-url.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// the session tracker for web\nvar core_1 = require(\"@aws-amplify/core\");\nvar logger = new core_1.ConsoleLogger('SessionTracker');\nvar defaultOpts = {\n    enable: false,\n    provider: 'AWSPinpoint'\n};\nvar initialEventSent = false;\nvar SessionTracker = /** @class */ (function () {\n    function SessionTracker(tracker, opts) {\n        this._config = Object.assign({}, defaultOpts, opts);\n        this._tracker = tracker;\n        this._hasEnabled = false;\n        this._trackFunc = this._trackFunc.bind(this);\n        this._trackBeforeUnload = this._trackBeforeUnload.bind(this);\n        this.configure(this._config);\n    }\n    SessionTracker.prototype._envCheck = function () {\n        if (!core_1.JS.browserOrNode().isBrowser) {\n            return false;\n        }\n        if (!document || !document.addEventListener) {\n            logger.debug('not in the supported web environment');\n            return false;\n        }\n        if (typeof document.hidden !== 'undefined') {\n            this._hidden = 'hidden';\n            this._visibilityChange = 'visibilitychange';\n        }\n        else if (typeof document['msHidden'] !== 'undefined') {\n            this._hidden = 'msHidden';\n            this._visibilityChange = 'msvisibilitychange';\n        }\n        else if (typeof document['webkitHidden'] !== 'undefined') {\n            this._hidden = 'webkitHidden';\n            this._visibilityChange = 'webkitvisibilitychange';\n        }\n        else {\n            logger.debug('not in the supported web environment');\n            return false;\n        }\n        return true;\n    };\n    SessionTracker.prototype._trackFunc = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var customAttrs, _a, attributes;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        if (!(typeof this._config.attributes === 'function')) return [3 /*break*/, 2];\n                        return [4 /*yield*/, this._config.attributes()];\n                    case 1:\n                        _a = _b.sent();\n                        return [3 /*break*/, 3];\n                    case 2:\n                        _a = this._config.attributes;\n                        _b.label = 3;\n                    case 3:\n                        customAttrs = _a;\n                        attributes = Object.assign({}, customAttrs);\n                        if (document[this._hidden]) {\n                            this._tracker({\n                                name: '_session.stop',\n                                attributes: attributes\n                            }, this._config.provider).catch(function (e) {\n                                logger.debug('record session stop event failed.', e);\n                            });\n                        }\n                        else {\n                            this._tracker({\n                                name: '_session.start',\n                                attributes: attributes\n                            }, this._config.provider).catch(function (e) {\n                                logger.debug('record session start event failed.', e);\n                            });\n                        }\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    SessionTracker.prototype._trackBeforeUnload = function () {\n        var _this = this;\n        // before unload callback cannot be async => https://github.com/aws-amplify/amplify-js/issues/2088\n        var customAttrs = typeof this._config.attributes === 'function' ?\n            Promise.resolve(this._config.attributes()) : Promise.resolve(this._config.attributes);\n        customAttrs.then(function (custom) {\n            var attributes = Object.assign({}, custom);\n            _this._tracker({\n                name: '_session.stop',\n                attributes: attributes,\n                immediate: true\n            }, _this._config.provider).catch(function (e) {\n                logger.debug('record session stop event failed.', e);\n            });\n        });\n    };\n    // to keep configure a synchronized function\n    SessionTracker.prototype._sendInitialEvent = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var customAttrs, _a, attributes;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        if (initialEventSent) {\n                            logger.debug('the start session has been sent when the page is loaded');\n                            return [2 /*return*/];\n                        }\n                        else {\n                            initialEventSent = true;\n                        }\n                        if (!(typeof this._config.attributes === 'function')) return [3 /*break*/, 2];\n                        return [4 /*yield*/, this._config.attributes()];\n                    case 1:\n                        _a = _b.sent();\n                        return [3 /*break*/, 3];\n                    case 2:\n                        _a = this._config.attributes;\n                        _b.label = 3;\n                    case 3:\n                        customAttrs = _a;\n                        attributes = Object.assign({}, customAttrs);\n                        this._tracker({\n                            name: '_session.start',\n                            attributes: attributes\n                        }, this._config.provider).catch(function (e) {\n                            logger.debug('record session start event failed.', e);\n                        });\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    SessionTracker.prototype.configure = function (opts) {\n        if (!this._envCheck()) {\n            return this._config;\n        }\n        Object.assign(this._config, opts);\n        if (this._config.enable && !this._hasEnabled) {\n            // send a start session as soon as it's enabled\n            this._sendInitialEvent();\n            // listen on events\n            document.addEventListener(this._visibilityChange, this._trackFunc, false);\n            window.addEventListener(\"beforeunload\", this._trackBeforeUnload, false);\n            this._hasEnabled = true;\n        }\n        else if (!this._config.enable && this._hasEnabled) {\n            document.removeEventListener(this._visibilityChange, this._trackFunc, false);\n            window.removeEventListener(\"beforeunload\", this._trackBeforeUnload, false);\n            this._hasEnabled = false;\n        }\n        return this._config;\n    };\n    return SessionTracker;\n}());\nexports.default = SessionTracker;\n//# sourceMappingURL=SessionTracker.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar AWSPinpointProvider_1 = require(\"./AWSPinpointProvider\");\nexports.AWSPinpointProvider = AWSPinpointProvider_1.default;\nvar AWSKinesisProvider_1 = require(\"./AWSKinesisProvider\");\nexports.AWSKinesisProvider = AWSKinesisProvider_1.default;\nvar AmazonPersonalizeProvider_1 = require(\"./AmazonPersonalizeProvider\");\nexports.AmazonPersonalizeProvider = AmazonPersonalizeProvider_1.default;\n//# sourceMappingURL=index.js.map","import { autoinject } from \"aurelia-framework\";\nimport { DefaultService } from \"shared-service/default-service\";\nimport { ItemReference, ItemRecord } from \"items/models/item-record\";\nimport { SearchService } from \"shared-service/search-service\";\nimport { GetRecordService } from \"shared-service/get-record-service\";\nimport { SearchResult } from \"shared-models/search-result\";\nimport { SearchRequest } from \"shared-models/search-request\";\nimport { GetRecordRequest } from \"shared-models/get-record-request\";\nimport { ActivityDetailRequest, ActivityDetailResponse } from \"items/models/activity-detail-report\";\n\n@autoinject\nexport class ItemService extends DefaultService{\n    private static readonly RECORD_TYPE = \"product.template\";\n    private static readonly ACTIVITY_DETAIL_RECORD_TYPE = \"vf_activity_detail\";\n\n    constructor(\n        private searchService: SearchService, \n        private getRecordService: GetRecordService ){\n        super(ItemService.name);\n    }\n\n    async getActivityDetailResponse(request: ActivityDetailRequest): Promise<ActivityDetailResponse>{\n        let getRecordsRequest = new GetRecordRequest({\n            recordType: ItemService.ACTIVITY_DETAIL_RECORD_TYPE,\n            additionalFields: request\n        });\n        let getRecordResponse = await this.getRecordService.getRecord(getRecordsRequest, this._convertResponseToActivityDetailReport);\n        return getRecordResponse.record;\n    }\n\n    async searchRecords(searchRequestData: {page?: number, pageSize?: number, filter?: string, fieldFilters?: any[]}): Promise<SearchResult>{\n        let searchRequest = new SearchRequest({\n            recordType: ItemService.RECORD_TYPE,\n            pageSize: searchRequestData.pageSize || 50,\n            page: searchRequestData.page || 1,\n            filter: searchRequestData.filter || \"\",\n            fieldFilters: searchRequestData.fieldFilters || []\n        });\n        return await this.searchService.searchRecords(searchRequest, this._convertResponseToItemReference)\n    }\n\n    async getAllRecords(fieldFilters: any[]=[]): Promise<ItemReference[]>{\n        let allItems = [] as ItemReference[];\n        let page = 1;\n        let pageSize = 5000;\n        let initialSearch = await this.searchRecords({page: page, pageSize: pageSize, fieldFilters: fieldFilters});\n        allItems = allItems.concat(initialSearch.records as ItemReference[]);\n        var totalPageCount = initialSearch.pageCount;\n        if(totalPageCount > 1){\n            while(page < totalPageCount){\n                page++;\n                let nextSearch = await this.searchRecords({page: page, pageSize: pageSize, fieldFilters: fieldFilters});\n                allItems = allItems.concat(nextSearch.records as ItemReference[]);\n            }           \n        }        \n        return allItems;\n    }\n\n    async getRecord(itemId: number): Promise<ItemRecord>{\n        let getRecordRequest = new GetRecordRequest({\n            recordType: ItemService.RECORD_TYPE,\n            recordId: itemId\n        });\n        let getRecordResponse = await this.getRecordService.getRecord(getRecordRequest, this._convertResponseToItem);\n        return getRecordResponse.record;\n    }\n\n    _convertResponseToActivityDetailReport(response: any): ActivityDetailResponse{\n        return new ActivityDetailResponse({           \n           fileDataBase64: response[\"excel_file\"]\n        });\n    }\n\n    _convertResponseToItem(itemResponse): ItemRecord{\n        return new ItemRecord({\n            id: itemResponse[\"id\"],\n            productId: itemResponse[\"product_variant_id\"][0],\n            name: itemResponse[\"name\"],\n            winerySku: itemResponse[\"winery_sku\"],\n            isInventoryItem: itemResponse[\"is_inventory_item\"],\n            isKitItem: itemResponse[\"is_kit_item\"],\n            onHand: itemResponse[\"on_hand\"],\n            available: itemResponse[\"available\"],\n            committed: itemResponse[\"committed\"],\n            backordered: itemResponse[\"backordered\"]\n        });\n    }\n\n    _convertResponseToItemReference(itemRefResponse): ItemReference{\n        return new ItemReference({\n            id: itemRefResponse[\"id\"],\n            productId: itemRefResponse[\"product_variant_id\"][0],\n            name: itemRefResponse[\"name\"],\n            winerySku: itemRefResponse[\"winery_sku\"],\n            isInventoryItem: itemRefResponse[\"is_inventory_item\"],\n            isKitItem: itemRefResponse[\"is_kit_item\"],\n            onHand: itemRefResponse[\"on_hand\"],\n            available: itemRefResponse[\"available\"],\n            committed: itemRefResponse[\"committed\"],\n            backordered: itemRefResponse[\"backordered\"]\n        });\n    }\n}","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@aws-amplify/core\");\nvar Kinesis = require(\"aws-sdk/clients/kinesis\");\nvar logger = new core_1.ConsoleLogger('AWSKineisProvider');\n// events buffer\nvar BUFFER_SIZE = 1000;\nvar FLUSH_SIZE = 100;\nvar FLUSH_INTERVAL = 5 * 1000; // 5s\nvar RESEND_LIMIT = 5;\nvar AWSKinesisProvider = /** @class */ (function () {\n    function AWSKinesisProvider(config) {\n        this._buffer = [];\n        this._config = config ? config : {};\n        this._config.bufferSize = this._config.bufferSize || BUFFER_SIZE;\n        this._config.flushSize = this._config.flushSize || FLUSH_SIZE;\n        this._config.flushInterval = this._config.flushInterval || FLUSH_INTERVAL;\n        this._config.resendLimit = this._config.resendLimit || RESEND_LIMIT;\n        // events batch\n        var that = this;\n        // flush event buffer\n        this._setupTimer();\n    }\n    AWSKinesisProvider.prototype._setupTimer = function () {\n        var _this = this;\n        if (this._timer) {\n            clearInterval(this._timer);\n        }\n        var _a = this._config, flushSize = _a.flushSize, flushInterval = _a.flushInterval;\n        var that = this;\n        this._timer = setInterval(function () {\n            var size = _this._buffer.length < flushSize ? _this._buffer.length : flushSize;\n            var events = [];\n            for (var i = 0; i < size; i += 1) {\n                var params = _this._buffer.shift();\n                events.push(params);\n            }\n            that._sendFromBuffer(events);\n        }, flushInterval);\n    };\n    /**\n     * get the category of the plugin\n     */\n    AWSKinesisProvider.prototype.getCategory = function () {\n        return 'Analytics';\n    };\n    /**\n     * get provider name of the plugin\n     */\n    AWSKinesisProvider.prototype.getProviderName = function () {\n        return 'AWSKinesis';\n    };\n    /**\n     * configure the plugin\n     * @param {Object} config - configuration\n     */\n    AWSKinesisProvider.prototype.configure = function (config) {\n        logger.debug('configure Analytics', config);\n        var conf = config ? config : {};\n        this._config = Object.assign({}, this._config, conf);\n        this._setupTimer();\n        return this._config;\n    };\n    /**\n     * record an event\n     * @param {Object} params - the params of an event\n     */\n    AWSKinesisProvider.prototype.record = function (params) {\n        return __awaiter(this, void 0, void 0, function () {\n            var credentials;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this._getCredentials()];\n                    case 1:\n                        credentials = _a.sent();\n                        if (!credentials)\n                            return [2 /*return*/, Promise.resolve(false)];\n                        Object.assign(params, { config: this._config, credentials: credentials });\n                        return [2 /*return*/, this._putToBuffer(params)];\n                }\n            });\n        });\n    };\n    AWSKinesisProvider.prototype.updateEndpoint = function (params) {\n        logger.debug('updateEndpoint is not implemented in Kinesis provider');\n        return Promise.resolve(true);\n    };\n    /**\n     * @private\n     * @param params - params for the event recording\n     * Put events into buffer\n     */\n    AWSKinesisProvider.prototype._putToBuffer = function (params) {\n        if (this._buffer.length < BUFFER_SIZE) {\n            this._buffer.push(params);\n            return Promise.resolve(true);\n        }\n        else {\n            logger.debug('exceed analytics events buffer size');\n            return Promise.reject(false);\n        }\n    };\n    AWSKinesisProvider.prototype._sendFromBuffer = function (events) {\n        var _this = this;\n        // collapse events by credentials\n        // events = [ {params} ]\n        var eventsGroups = [];\n        var preCred = null;\n        var group = [];\n        for (var i = 0; i < events.length; i += 1) {\n            var cred = events[i].credentials;\n            if (i === 0) {\n                group.push(events[i]);\n                preCred = cred;\n            }\n            else {\n                if (cred.sessionToken === preCred.sessionToken && cred.identityId === preCred.identityId) {\n                    logger.debug('no change for cred, put event in the same group');\n                    group.push(events[i]);\n                }\n                else {\n                    eventsGroups.push(group);\n                    group = [];\n                    group.push(events[i]);\n                    preCred = cred;\n                }\n            }\n        }\n        eventsGroups.push(group);\n        eventsGroups.map(function (evts) {\n            _this._sendEvents(evts);\n        });\n    };\n    AWSKinesisProvider.prototype._sendEvents = function (group) {\n        var _this = this;\n        if (group.length === 0) {\n            // logger.debug('events array is empty, directly return');\n            return;\n        }\n        var _a = group[0], config = _a.config, credentials = _a.credentials;\n        var initClients = this._init(config, credentials);\n        if (!initClients)\n            return false;\n        var records = {};\n        group.map(function (params) {\n            // spit by streamName\n            var evt = params.event;\n            var streamName = evt.streamName;\n            if (records[streamName] === undefined) {\n                records[streamName] = [];\n            }\n            var Data = JSON.stringify(evt.data);\n            var PartitionKey = evt.partitionKey || ('partition-' + credentials.identityId);\n            var record = { Data: Data, PartitionKey: PartitionKey };\n            records[streamName].push(record);\n        });\n        Object.keys(records).map(function (streamName) {\n            logger.debug('putting records to kinesis with records', records[streamName]);\n            _this._kinesis.putRecords({\n                Records: records[streamName],\n                StreamName: streamName\n            }, function (err, data) {\n                if (err)\n                    logger.debug('Failed to upload records to Kinesis', err);\n                else\n                    logger.debug('Upload records to stream', streamName);\n            });\n        });\n    };\n    AWSKinesisProvider.prototype._init = function (config, credentials) {\n        logger.debug('init clients');\n        if (this._kinesis\n            && this._config.credentials\n            && this._config.credentials.sessionToken === credentials.sessionToken\n            && this._config.credentials.identityId === credentials.identityId) {\n            logger.debug('no change for analytics config, directly return from init');\n            return true;\n        }\n        this._config.credentials = credentials;\n        var region = config.region;\n        logger.debug('initialize kinesis with credentials', credentials);\n        this._kinesis = new Kinesis({\n            apiVersion: '2013-12-02',\n            region: region,\n            credentials: credentials\n        });\n        return true;\n    };\n    /**\n     * @private\n     * check if current credentials exists\n     */\n    AWSKinesisProvider.prototype._getCredentials = function () {\n        var that = this;\n        return core_1.Credentials.get()\n            .then(function (credentials) {\n            if (!credentials)\n                return null;\n            logger.debug('set credentials for analytics', that._config.credentials);\n            return core_1.Credentials.shear(credentials);\n        })\n            .catch(function (err) {\n            logger.debug('ensure credentials error', err);\n            return null;\n        });\n    };\n    return AWSKinesisProvider;\n}());\nexports.default = AWSKinesisProvider;\n//# sourceMappingURL=AWSKinesisProvider.js.map","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['kinesis'] = {};\nAWS.Kinesis = Service.defineService('kinesis', ['2013-12-02']);\nObject.defineProperty(apiLoader.services['kinesis'], '2013-12-02', {\n  get: function get() {\n    var model = require('../apis/kinesis-2013-12-02.min.json');\n    model.paginators = require('../apis/kinesis-2013-12-02.paginators.json').pagination;\n    model.waiters = require('../apis/kinesis-2013-12-02.waiters2.json').waiters;\n    return model;\n  },\n  enumerable: true,\n  configurable: true\n});\n\nmodule.exports = AWS.Kinesis;\n","\"use strict\";\n/*\n * Copyright 2019-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@aws-amplify/core\");\nvar PersonalizeEvents = require(\"aws-sdk/clients/personalizeevents\");\nvar AmazonPersonalizeHelper_1 = require(\"./AmazonPersonalizeHelper\");\nvar lodash_1 = require(\"lodash\");\nvar logger = new core_1.ConsoleLogger('AmazonPersonalizeProvider');\n// events buffer\nvar FLUSH_SIZE = 5;\nvar FLUSH_SIZE_THRESHHOLD = 10;\nvar FLUSH_INTERVAL = 5 * 1000; // 5s\nvar IDENTIFY_EVENT = \"Identify\";\nvar AmazonPersonalizeProvider = /** @class */ (function () {\n    function AmazonPersonalizeProvider(config) {\n        this._buffer = [];\n        this._config = config ? config : {};\n        this._config.flushSize = this._config.flushSize > 0\n            && this._config.flushSize <= FLUSH_SIZE_THRESHHOLD ? this._config.flushSize : FLUSH_SIZE;\n        this._config.flushInterval = this._config.flushInterval || FLUSH_INTERVAL;\n        this._sessionManager = new AmazonPersonalizeHelper_1.SessionInfoManager();\n        if (!lodash_1.isEmpty(this._config.trackingId)) {\n            this._sessionInfo = this._sessionManager.retrieveSessionInfo(this._config.trackingId);\n        }\n        this._isBrowser = core_1.JS.browserOrNode().isBrowser;\n        // flush event buffer\n        this._setupTimer();\n    }\n    AmazonPersonalizeProvider.prototype._setupTimer = function () {\n        if (this._timer) {\n            clearInterval(this._timer);\n        }\n        var _a = this._config, flushSize = _a.flushSize, flushInterval = _a.flushInterval;\n        var that = this;\n        this._timer = setInterval(function () {\n            that._sendFromBuffer();\n        }, flushInterval);\n    };\n    /**\n     * Record event\n     * @param eventType      - type of the event action. e.g. \"Click\"\n     * @param properties     - properties of the event\n     * @return Promise\n     */\n    AmazonPersonalizeProvider.prototype.record = function (params) {\n        return __awaiter(this, void 0, void 0, function () {\n            var credentials, _a, eventType, properties, requestParams, isLoaded;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0: return [4 /*yield*/, this._getCredentials()];\n                    case 1:\n                        credentials = _b.sent();\n                        if (!credentials)\n                            return [2 /*return*/, Promise.resolve(false)];\n                        Object.assign(params, { config: this._config, credentials: credentials, sentAt: new Date().getTime() / 1000 });\n                        _a = params.event, eventType = _a.eventType, properties = _a.properties;\n                        if (eventType === IDENTIFY_EVENT) {\n                            this._sessionManager.updateSessionInfo(properties && properties.userId ? properties.userId : \"\", this._sessionInfo);\n                            return [2 /*return*/];\n                        }\n                        else if (!lodash_1.isEmpty(params.event.userId)) {\n                            this._sessionManager.updateSessionInfo(params.event.userId, this._sessionInfo);\n                        }\n                        requestParams = this.generateRequestParams(params, this._sessionInfo);\n                        if (!(eventType === \"MediaAutoTrack\")) return [3 /*break*/, 7];\n                        if (!this._isBrowser) return [3 /*break*/, 5];\n                        if (!!lodash_1.isEmpty(lodash_1.get(requestParams, \"eventData.properties.domElementId\", null))) return [3 /*break*/, 3];\n                        return [4 /*yield*/, this.isElementFullyLoaded(this.loadElement, requestParams.eventData.properties[\"domElementId\"], 500, 5)];\n                    case 2:\n                        isLoaded = _b.sent();\n                        if (isLoaded) {\n                            new AmazonPersonalizeHelper_1.MediaAutoTrack(requestParams, this);\n                        }\n                        else {\n                            logger.debug(\"Cannot find the media element.\");\n                        }\n                        return [3 /*break*/, 4];\n                    case 3:\n                        logger.debug(\"Missing domElementId field in 'properties' for MediaAutoTrack event type.\");\n                        _b.label = 4;\n                    case 4: return [3 /*break*/, 6];\n                    case 5:\n                        logger.debug(\"MediaAutoTrack only for browser\");\n                        _b.label = 6;\n                    case 6: return [2 /*return*/];\n                    case 7: return [2 /*return*/, this.putToBuffer(requestParams)];\n                }\n            });\n        });\n    };\n    AmazonPersonalizeProvider.prototype.loadElement = function (domId) {\n        return new Promise(function (resolve, reject) {\n            if (document.getElementById(domId) && document.getElementById(domId).clientHeight) {\n                return resolve(true);\n            }\n            else {\n                return reject(true);\n            }\n        });\n    };\n    AmazonPersonalizeProvider.prototype.isElementFullyLoaded = function (operation, params, delay, times) {\n        var _this = this;\n        var wait = function (ms) { return new Promise(function (r) { return setTimeout(r, ms); }); };\n        return new Promise(function (resolve, reject) {\n            return operation(params)\n                .then(resolve)\n                .catch(function (reason) {\n                if (times - 1 > 0) {\n                    return wait(delay)\n                        .then(_this.isElementFullyLoaded.bind(null, operation, params, delay, times - 1))\n                        .then(resolve)\n                        .catch(reject);\n                }\n                return reject(reason);\n            });\n        });\n    };\n    /**\n     * get the category of the plugin\n     */\n    AmazonPersonalizeProvider.prototype.getCategory = function () {\n        return 'Analytics';\n    };\n    /**\n     * get provider name of the plugin\n     */\n    AmazonPersonalizeProvider.prototype.getProviderName = function () {\n        return 'AmazonPersonalize';\n    };\n    /**\n     * configure the plugin\n     * @param {Object} config - configuration\n     */\n    AmazonPersonalizeProvider.prototype.configure = function (config) {\n        logger.debug('configure Analytics', config);\n        var conf = config ? config : {};\n        this._config = Object.assign({}, this._config, conf);\n        if (!lodash_1.isEmpty(this._config.trackingId)) {\n            this._sessionInfo = this._sessionManager.retrieveSessionInfo(this._config.trackingId);\n        }\n        this._setupTimer();\n        return this._config;\n    };\n    /**\n     * Generate the requestParams from customer input params and sessionInfo\n     * @private\n     * @param eventData      - customer input for event data\n     * @param api            - api name\n     * @return RequestParams - wrapper object with all information required for make request\n     */\n    AmazonPersonalizeProvider.prototype.generateRequestParams = function (params, sessionInfo) {\n        var requestParams = {};\n        var _a = params.event, eventType = _a.eventType, properties = _a.properties;\n        requestParams.eventData = { \"eventType\": eventType, \"properties\": properties };\n        requestParams.sessionInfo = sessionInfo;\n        requestParams.sentAt = params.sentAt;\n        requestParams.credentials = params.credentials;\n        requestParams.config = params.config;\n        return requestParams;\n    };\n    /**\n     * record an event\n     * @param {Object} params - the params of an event\n     */\n    AmazonPersonalizeProvider.prototype._sendEvents = function (group) {\n        var groupLen = group.length;\n        if (groupLen === 0) {\n            logger.debug('events array is empty, directly return');\n            return;\n        }\n        var _a = group[0], config = _a.config, credentials = _a.credentials, sessionInfo = _a.sessionInfo;\n        var initClients = this._init(config, credentials);\n        if (!initClients)\n            return false;\n        if (groupLen > 0) {\n            var events = [];\n            for (var i = 0; i < groupLen; i += 1) {\n                var params = group.shift();\n                var eventPayload = this._generateSingleRecordPayload(params, sessionInfo);\n                events.push(eventPayload);\n            }\n            var payload = {};\n            payload.trackingId = sessionInfo.trackingId;\n            payload.sessionId = sessionInfo.sessionId;\n            payload.userId = sessionInfo.userId;\n            payload.eventList = events;\n            this._personalize.putEvents(payload, function (err, data) {\n                if (err)\n                    logger.debug('Failed to call putEvents in Personalize', err);\n                else\n                    logger.debug('Put events');\n            });\n        }\n    };\n    /**\n     * Put event into buffer\n     * @private\n     * @param params - params for the event recording\n     */\n    AmazonPersonalizeProvider.prototype.putToBuffer = function (params) {\n        if (this._buffer.length < this._config.flushSize) {\n            this._buffer.push(params);\n        }\n        else {\n            this._buffer.push(params);\n            this._sendFromBuffer();\n        }\n        return Promise.resolve(true);\n    };\n    /**\n     * flush the buffer and batch sending the request\n     * @private\n     * @param eventsParams - the buffer for cache the payload\n     */\n    AmazonPersonalizeProvider.prototype._sendFromBuffer = function () {\n        var _this = this;\n        var size = this._buffer.length;\n        if (size <= 0)\n            return;\n        var eventsGroups = [];\n        var preCred = null;\n        var group = [];\n        for (var i = 0; i < size; i += 1) {\n            var currRequestParams = this._buffer.shift();\n            var cred = currRequestParams.credentials;\n            var sessionInfo = currRequestParams.sessionInfo;\n            if (i === 0) {\n                group.push(currRequestParams);\n                preCred = cred;\n            }\n            else {\n                if (lodash_1.isEqual(sessionInfo, this._sessionInfo)\n                    && cred.sessionToken === preCred.sessionToken\n                    && cred.identityId === preCred.identityId) {\n                    logger.debug('no change for cred, put event in the same group');\n                    group.push(currRequestParams);\n                }\n                else {\n                    eventsGroups.push(group);\n                    group = [];\n                    group.push(currRequestParams);\n                    preCred = cred;\n                    this._sessionInfo = sessionInfo;\n                }\n            }\n        }\n        eventsGroups.push(group);\n        eventsGroups.map(function (group) {\n            _this._sendEvents(group);\n        });\n    };\n    /**\n     * Generate the record payload for single event\n     * @private\n     * @param params - RequestParams\n     */\n    AmazonPersonalizeProvider.prototype._generateSingleRecordPayload = function (params, sessionInfo) {\n        var eventData = params.eventData, sentAt = params.sentAt;\n        var trackPayload = {};\n        trackPayload.sentAt = sentAt;\n        trackPayload.properties = eventData.properties;\n        trackPayload.eventId = this._sessionManager.getTimerKey() + sessionInfo.sessionId;\n        trackPayload.eventType = eventData.eventType;\n        return trackPayload;\n    };\n    /**\n     * Initialize the personalize client\n     * @private\n     * @param params - RequestParams\n     */\n    AmazonPersonalizeProvider.prototype._init = function (config, credentials) {\n        logger.debug('init clients');\n        if (this._personalize\n            && this._config.credentials\n            && this._config.credentials.sessionToken === credentials.sessionToken\n            && this._config.credentials.identityId === credentials.identityId) {\n            logger.debug('no change for analytics config, directly return from init');\n            return true;\n        }\n        this._config.credentials = credentials;\n        var region = config.region;\n        logger.debug('initialize personalize with credentials', credentials);\n        this._personalize = new PersonalizeEvents({\n            apiVersion: '2018-03-22',\n            region: region,\n            credentials: credentials\n        });\n        return true;\n    };\n    /**\n     * check if current credentials exists\n     * @private\n     */\n    AmazonPersonalizeProvider.prototype._getCredentials = function () {\n        var that = this;\n        return core_1.Credentials.get()\n            .then(function (credentials) {\n            if (!credentials)\n                return null;\n            logger.debug('set credentials for analytics', that._config.credentials);\n            return core_1.Credentials.shear(credentials);\n        })\n            .catch(function (err) {\n            logger.debug('ensure credentials error', err);\n            return null;\n        });\n    };\n    return AmazonPersonalizeProvider;\n}());\nexports.default = AmazonPersonalizeProvider;\n//# sourceMappingURL=AmazonPersonalizeProvider.js.map","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['personalizeevents'] = {};\nAWS.PersonalizeEvents = Service.defineService('personalizeevents', ['2018-03-22']);\nObject.defineProperty(apiLoader.services['personalizeevents'], '2018-03-22', {\n  get: function get() {\n    var model = require('../apis/personalize-events-2018-03-22.min.json');\n    model.paginators = require('../apis/personalize-events-2018-03-22.paginators.json').pagination;\n    return model;\n  },\n  enumerable: true,\n  configurable: true\n});\n\nmodule.exports = AWS.PersonalizeEvents;\n","\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./SessionInfoManager\"));\n__export(require(\"./MediaAutoTrack\"));\n//# sourceMappingURL=index.js.map","module.exports = global[\"Promise\"] = require(\"-!.\\\\bluebird.js\");","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\n\n\nimport { relativeToFile } from 'aurelia-path';\nimport { Origin } from 'aurelia-metadata';\n\nexport var TemplateDependency = function TemplateDependency(src, name) {\n  \n\n  this.src = src;\n  this.name = name;\n};\n\nexport var TemplateRegistryEntry = function () {\n  function TemplateRegistryEntry(address) {\n    \n\n    this.templateIsLoaded = false;\n    this.factoryIsReady = false;\n    this.resources = null;\n    this.dependencies = null;\n\n    this.address = address;\n    this.onReady = null;\n    this._template = null;\n    this._factory = null;\n  }\n\n  TemplateRegistryEntry.prototype.addDependency = function addDependency(src, name) {\n    var finalSrc = typeof src === 'string' ? relativeToFile(src, this.address) : Origin.get(src).moduleId;\n\n    this.dependencies.push(new TemplateDependency(finalSrc, name));\n  };\n\n  _createClass(TemplateRegistryEntry, [{\n    key: 'template',\n    get: function get() {\n      return this._template;\n    },\n    set: function set(value) {\n      var address = this.address;\n      var requires = void 0;\n      var current = void 0;\n      var src = void 0;\n      var dependencies = void 0;\n\n      this._template = value;\n      this.templateIsLoaded = true;\n\n      requires = value.content.querySelectorAll('require');\n      dependencies = this.dependencies = new Array(requires.length);\n\n      for (var i = 0, ii = requires.length; i < ii; ++i) {\n        current = requires[i];\n        src = current.getAttribute('from');\n\n        if (!src) {\n          throw new Error('<require> element in ' + address + ' has no \"from\" attribute.');\n        }\n\n        dependencies[i] = new TemplateDependency(relativeToFile(src, address), current.getAttribute('as'));\n\n        if (current.parentNode) {\n          current.parentNode.removeChild(current);\n        }\n      }\n    }\n  }, {\n    key: 'factory',\n    get: function get() {\n      return this._factory;\n    },\n    set: function set(value) {\n      this._factory = value;\n      this.factoryIsReady = true;\n    }\n  }]);\n\n  return TemplateRegistryEntry;\n}();\n\nexport var Loader = function () {\n  function Loader() {\n    \n\n    this.templateRegistry = {};\n  }\n\n  Loader.prototype.map = function map(id, source) {\n    throw new Error('Loaders must implement map(id, source).');\n  };\n\n  Loader.prototype.normalizeSync = function normalizeSync(moduleId, relativeTo) {\n    throw new Error('Loaders must implement normalizeSync(moduleId, relativeTo).');\n  };\n\n  Loader.prototype.normalize = function normalize(moduleId, relativeTo) {\n    throw new Error('Loaders must implement normalize(moduleId: string, relativeTo: string): Promise<string>.');\n  };\n\n  Loader.prototype.loadModule = function loadModule(id) {\n    throw new Error('Loaders must implement loadModule(id).');\n  };\n\n  Loader.prototype.loadAllModules = function loadAllModules(ids) {\n    throw new Error('Loader must implement loadAllModules(ids).');\n  };\n\n  Loader.prototype.loadTemplate = function loadTemplate(url) {\n    throw new Error('Loader must implement loadTemplate(url).');\n  };\n\n  Loader.prototype.loadText = function loadText(url) {\n    throw new Error('Loader must implement loadText(url).');\n  };\n\n  Loader.prototype.applyPluginToUrl = function applyPluginToUrl(url, pluginName) {\n    throw new Error('Loader must implement applyPluginToUrl(url, pluginName).');\n  };\n\n  Loader.prototype.addPlugin = function addPlugin(pluginName, implementation) {\n    throw new Error('Loader must implement addPlugin(pluginName, implementation).');\n  };\n\n  Loader.prototype.getOrCreateTemplateRegistryEntry = function getOrCreateTemplateRegistryEntry(address) {\n    return this.templateRegistry[address] || (this.templateRegistry[address] = new TemplateRegistryEntry(address));\n  };\n\n  return Loader;\n}();","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar lodash_1 = require(\"lodash\");\nvar uuid_1 = require(\"uuid\");\nvar core_1 = require(\"@aws-amplify/core\");\nvar cache_1 = require(\"@aws-amplify/cache\");\nvar PERSONALIZE_CACHE = \"_awsct\";\nvar PERSONALIZE_CACHE_USERID = \"_awsct_uid\";\nvar PERSONALIZE_CACHE_SESSIONID = \"_awsct_sid\";\nvar DEFAULT_CACHE_PREFIX = \"peronslize\";\nvar TIMER_INTERVAL = 30 * 1000;\nvar DELIMITER = \".\";\nvar CACHE_EXPIRY_IN_DAYS = 7;\nvar logger = new core_1.ConsoleLogger('AmazonPersonalizeProvider');\nvar SessionInfoManager = /** @class */ (function () {\n    function SessionInfoManager(prefixKey) {\n        if (prefixKey === void 0) { prefixKey = \"\"; }\n        this._isBrowser = core_1.JS.browserOrNode().isBrowser;\n        this._timerKey = uuid_1.v1().substr(0, 15);\n        this._refreshTimer();\n    }\n    SessionInfoManager.prototype._refreshTimer = function () {\n        if (this._timer) {\n            clearInterval(this._timer);\n        }\n        var that = this;\n        this._timer = setInterval(function () {\n            that._timerKey = uuid_1.v1().substr(0, 15);\n        }, TIMER_INTERVAL);\n    };\n    SessionInfoManager.prototype.storeValue = function (key, value) {\n        var today = new Date();\n        var expire = new Date();\n        expire.setTime(today.getTime() + 3600000 * 24 * CACHE_EXPIRY_IN_DAYS);\n        cache_1.default.setItem(this._getCachePrefix(key), value, { expires: expire.getTime() });\n    };\n    SessionInfoManager.prototype.retrieveValue = function (key) {\n        return cache_1.default.getItem(this._getCachePrefix(key));\n    };\n    SessionInfoManager.prototype._getCachePrefix = function (key) {\n        if (this._isBrowser) {\n            return key + DELIMITER + window.location.host;\n        }\n        return DEFAULT_CACHE_PREFIX;\n    };\n    SessionInfoManager.prototype.getTimerKey = function () {\n        return this._timerKey;\n    };\n    SessionInfoManager.prototype.updateSessionInfo = function (userId, sessionInfo) {\n        var existUserId = sessionInfo.userId;\n        var existSessionId = sessionInfo.sessionId;\n        if (this._isRequireNewSession(userId, existUserId, existSessionId)) {\n            var newSessionId = uuid_1.v1();\n            this.storeValue(PERSONALIZE_CACHE_USERID, userId);\n            this.storeValue(PERSONALIZE_CACHE_SESSIONID, newSessionId);\n            sessionInfo.sessionId = newSessionId;\n        }\n        else if (this._isRequireUpdateSessionInfo(userId, existUserId, existSessionId)) {\n            this.storeValue(PERSONALIZE_CACHE_USERID, userId);\n        }\n        sessionInfo.userId = userId;\n    };\n    SessionInfoManager.prototype._isRequireUpdateSessionInfo = function (userId, cachedSessionUserId, cachedSessionSessionId) {\n        // anonymouse => sign in : hasSession && s_userId == null && curr_userId !=null\n        var isNoCachedSession = lodash_1.isEmpty(cachedSessionSessionId);\n        return !isNoCachedSession && lodash_1.isEmpty(cachedSessionUserId) && !lodash_1.isEmpty(userId);\n    };\n    SessionInfoManager.prototype.retrieveSessionInfo = function (trackingId) {\n        var sessionInfo = {};\n        sessionInfo.trackingId = trackingId;\n        sessionInfo.sessionId = this.retrieveValue(PERSONALIZE_CACHE_SESSIONID);\n        sessionInfo.userId = this.retrieveValue(PERSONALIZE_CACHE_USERID);\n        if (lodash_1.isEmpty(sessionInfo.sessionId)) {\n            sessionInfo.sessionId = uuid_1.v1();\n            this.storeValue(PERSONALIZE_CACHE_SESSIONID, sessionInfo.sessionId);\n        }\n        this.storeValue(PERSONALIZE_CACHE, trackingId);\n        return sessionInfo;\n    };\n    SessionInfoManager.prototype._isRequireNewSession = function (userId, cachedSessionUserId, cachedSessionSessionId) {\n        // new session => 1. no cached session info 2. signOut: s_userId !=null && curr_userId ==null\n        // 3. switch account: s_userId !=null && curr_userId !=null && s_userId != curr_userId\n        var isNoCachedSession = lodash_1.isEmpty(cachedSessionSessionId);\n        var isSignoutCase = lodash_1.isEmpty(userId) && !lodash_1.isEmpty(cachedSessionUserId);\n        var isSwitchUserCase = !lodash_1.isEmpty(userId) && !lodash_1.isEmpty(cachedSessionUserId)\n            && !lodash_1.isEqual(userId, cachedSessionUserId);\n        return isNoCachedSession || isSignoutCase || isSwitchUserCase;\n    };\n    return SessionInfoManager;\n}());\nexports.SessionInfoManager = SessionInfoManager;\n//# sourceMappingURL=SessionInfoManager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar HTML5_MEDIA_EVENT;\n(function (HTML5_MEDIA_EVENT) {\n    HTML5_MEDIA_EVENT[\"PLAY\"] = \"play\";\n    HTML5_MEDIA_EVENT[\"PAUSE\"] = \"pause\";\n    HTML5_MEDIA_EVENT[\"ENDED\"] = \"Ended\";\n})(HTML5_MEDIA_EVENT || (HTML5_MEDIA_EVENT = {}));\nvar MEDIA_TYPE;\n(function (MEDIA_TYPE) {\n    MEDIA_TYPE[\"IFRAME\"] = \"IFRAME\";\n    MEDIA_TYPE[\"VIDEO\"] = \"VIDEO\";\n    MEDIA_TYPE[\"AUDIO\"] = \"AUDIO\";\n})(MEDIA_TYPE || (MEDIA_TYPE = {}));\nvar EVENT_TYPE;\n(function (EVENT_TYPE) {\n    EVENT_TYPE[\"PLAY\"] = \"Play\";\n    EVENT_TYPE[\"ENDED\"] = \"Ended\";\n    EVENT_TYPE[\"PAUSE\"] = \"Pause\";\n    EVENT_TYPE[\"TIME_WATCHED\"] = \"TimeWatched\";\n})(EVENT_TYPE || (EVENT_TYPE = {}));\nvar MediaAutoTrack = /** @class */ (function () {\n    function MediaAutoTrack(params, provider) {\n        var _a;\n        this.eventActionMapping = (_a = {},\n            _a[EVENT_TYPE.ENDED] = this.endedEventAction.bind(this),\n            _a[EVENT_TYPE.PLAY] = this.playEventAction.bind(this),\n            _a[EVENT_TYPE.PAUSE] = this.pauseEventAction.bind(this),\n            _a);\n        var eventData = params.eventData;\n        this._params = params;\n        this._mediaElement = document.getElementById(eventData.properties[\"domElementId\"]);\n        this._started = false;\n        this._provider = provider;\n        var mediaTrackFunMapping = {\n            IFRAME: this._iframeMediaTracker,\n            VIDEO: this._html5MediaTracker,\n            AUDIO: this._html5MediaTracker\n        };\n        mediaTrackFunMapping[this._mediaElement.tagName].bind(this)();\n        this._initYoutubeFrame();\n    }\n    MediaAutoTrack.prototype._initYoutubeFrame = function () {\n        this._youTubeIframeLoader = {\n            src: 'https://www.youtube.com/iframe_api',\n            loading: false,\n            loaded: false,\n            listeners: [],\n            load: function (callback) {\n                var _this = this;\n                this.listeners.push(callback);\n                if (this.loaded) {\n                    setTimeout(function () {\n                        _this.done();\n                    });\n                    return;\n                }\n                if (this.loading) {\n                    return;\n                }\n                this.loading = true;\n                window['onYouTubeIframeAPIReady'] = function () {\n                    _this.loaded = true;\n                    _this.done();\n                };\n                var script = document.createElement('script');\n                script.type = 'text/javascript';\n                script.src = this.src;\n                document.body.appendChild(script);\n            },\n            done: function () {\n                delete window['onYouTubeIframeAPIReady'];\n                while (this.listeners.length) {\n                    this.listeners.pop()(window['YT']);\n                }\n            }\n        };\n    };\n    MediaAutoTrack.prototype._iframeMediaTracker = function () {\n        var that = this;\n        setInterval(function () {\n            if (that._started) {\n                that.recordEvent(MEDIA_TYPE.IFRAME, EVENT_TYPE.TIME_WATCHED);\n            }\n        }, 3 * 1000);\n        this._youTubeIframeLoader.load(function (YT) {\n            that._iframePlayer = new YT.Player(that._mediaElement.id, {\n                events: { 'onStateChange': that._onPlayerStateChange.bind(that) }\n            });\n        });\n    };\n    MediaAutoTrack.prototype._onPlayerStateChange = function (event) {\n        var iframeEventMapping = {\n            0: EVENT_TYPE.ENDED,\n            1: EVENT_TYPE.PLAY,\n            2: EVENT_TYPE.PAUSE\n        };\n        var eventType = iframeEventMapping[event.data];\n        if (eventType) {\n            this.eventActionMapping[eventType](MEDIA_TYPE.IFRAME);\n        }\n    };\n    MediaAutoTrack.prototype._html5MediaTracker = function () {\n        var that = this;\n        setInterval(function () {\n            if (that._started) {\n                that.recordEvent(MEDIA_TYPE.VIDEO, EVENT_TYPE.TIME_WATCHED);\n            }\n        }, 3 * 1000);\n        this._mediaElement.addEventListener(HTML5_MEDIA_EVENT.PLAY, function () {\n            that.eventActionMapping[EVENT_TYPE.PLAY](MEDIA_TYPE.VIDEO);\n        }, false);\n        this._mediaElement.addEventListener(HTML5_MEDIA_EVENT.PAUSE, function () { that.eventActionMapping[EVENT_TYPE.PAUSE](MEDIA_TYPE.VIDEO); }, false);\n        this._mediaElement.addEventListener(HTML5_MEDIA_EVENT.ENDED, function () { that.eventActionMapping[EVENT_TYPE.ENDED](MEDIA_TYPE.VIDEO); }, false);\n    };\n    MediaAutoTrack.prototype.playEventAction = function (mediaType) {\n        this._started = true;\n        this.recordEvent(mediaType, EVENT_TYPE.PLAY);\n    };\n    MediaAutoTrack.prototype.pauseEventAction = function (mediaType) {\n        this._started = false;\n        this.recordEvent(mediaType, EVENT_TYPE.PAUSE);\n    };\n    MediaAutoTrack.prototype.endedEventAction = function (mediaType) {\n        this._started = false;\n        this.recordEvent(mediaType, EVENT_TYPE.ENDED);\n    };\n    MediaAutoTrack.prototype.recordEvent = function (mediaType, eventType) {\n        var newParams = Object.assign({}, this._params);\n        var eventData = newParams.eventData;\n        eventData.eventType = eventType;\n        if (mediaType === MEDIA_TYPE.VIDEO) {\n            eventData.properties.timestamp = this._mediaElement.currentTime;\n            eventData.properties.duration = this._mediaElement.duration;\n        }\n        else {\n            eventData.properties.timestamp = this._financial(this._iframePlayer.getCurrentTime());\n            eventData.properties.duration = this._financial(this._iframePlayer.getDuration());\n        }\n        var percentage = parseFloat(eventData.properties.timestamp) / parseFloat(eventData.properties.duration);\n        eventData.properties.eventValue = Number(percentage.toFixed(4));\n        delete eventData.properties.domElementId;\n        this._provider.putToBuffer(newParams);\n    };\n    MediaAutoTrack.prototype._financial = function (x) {\n        return Number.parseFloat(x).toFixed(4);\n    };\n    return MediaAutoTrack;\n}());\nexports.MediaAutoTrack = MediaAutoTrack;\n//# sourceMappingURL=MediaAutoTrack.js.map","\"use strict\";\n/*\n * Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar types_1 = require(\"./types\");\nvar core_1 = require(\"@aws-amplify/core\");\nvar amazon_cognito_identity_js_1 = require(\"amazon-cognito-identity-js\");\nvar url_1 = require(\"url\");\nvar OAuth_1 = require(\"./OAuth/OAuth\");\nvar urlListener_1 = require(\"./urlListener\");\nvar logger = new core_1.ConsoleLogger('AuthClass');\nvar USER_ADMIN_SCOPE = 'aws.cognito.signin.user.admin';\nvar AMPLIFY_SYMBOL = ((typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') ?\n    Symbol.for('amplify_default') : '@@amplify_default');\nvar dispatchAuthEvent = function (event, data, message) {\n    core_1.Hub.dispatch('auth', { event: event, data: data, message: message }, 'Auth', AMPLIFY_SYMBOL);\n};\nvar CognitoHostedUIIdentityProvider;\n(function (CognitoHostedUIIdentityProvider) {\n    CognitoHostedUIIdentityProvider[\"Cognito\"] = \"COGNITO\";\n    CognitoHostedUIIdentityProvider[\"Google\"] = \"Google\";\n    CognitoHostedUIIdentityProvider[\"Facebook\"] = \"Facebook\";\n    CognitoHostedUIIdentityProvider[\"Amazon\"] = \"LoginWithAmazon\";\n})(CognitoHostedUIIdentityProvider = exports.CognitoHostedUIIdentityProvider || (exports.CognitoHostedUIIdentityProvider = {}));\n/**\n* Provide authentication steps\n*/\nvar AuthClass = /** @class */ (function () {\n    /**\n     * Initialize Auth with AWS configurations\n     * @param {Object} config - Configuration of the Auth\n     */\n    function AuthClass(config) {\n        var _this = this;\n        this.userPool = null;\n        this.user = null;\n        this.configure(config);\n        this.currentUserCredentials = this.currentUserCredentials.bind(this);\n        if (core_1.AWS.config) {\n            core_1.AWS.config.update({ customUserAgent: core_1.Constants.userAgent });\n        }\n        else {\n            logger.warn('No AWS.config');\n        }\n        core_1.Hub.listen('auth', function (_a) {\n            var payload = _a.payload;\n            var event = payload.event;\n            switch (event) {\n                case 'signIn':\n                    _this._storage.setItem('amplify-signin-with-hostedUI', 'false');\n                    break;\n                case 'signOut':\n                    _this._storage.removeItem('amplify-signin-with-hostedUI');\n                    break;\n                case 'cognitoHostedUI':\n                    _this._storage.setItem('amplify-signin-with-hostedUI', 'true');\n                    break;\n            }\n        });\n    }\n    AuthClass.prototype.getModuleName = function () {\n        return 'Auth';\n    };\n    AuthClass.prototype.configure = function (config) {\n        var _this = this;\n        if (!config)\n            return this._config || {};\n        logger.debug('configure Auth');\n        var conf = Object.assign({}, this._config, core_1.Parser.parseMobilehubConfig(config).Auth, config);\n        this._config = conf;\n        var _a = this._config, userPoolId = _a.userPoolId, userPoolWebClientId = _a.userPoolWebClientId, cookieStorage = _a.cookieStorage, oauth = _a.oauth, region = _a.region, identityPoolId = _a.identityPoolId, mandatorySignIn = _a.mandatorySignIn, refreshHandlers = _a.refreshHandlers, identityPoolRegion = _a.identityPoolRegion;\n        if (!this._config.storage) {\n            // backward compatbility\n            if (cookieStorage)\n                this._storage = new amazon_cognito_identity_js_1.CookieStorage(cookieStorage);\n            else {\n                this._storage = new core_1.StorageHelper().getStorage();\n            }\n        }\n        else {\n            if (!this._isValidAuthStorage(this._config.storage)) {\n                logger.error('The storage in the Auth config is not valid!');\n                throw new Error('Empty storage object');\n            }\n            this._storage = this._config.storage;\n        }\n        this._storageSync = Promise.resolve();\n        if (typeof this._storage['sync'] === 'function') {\n            this._storageSync = this._storage['sync']();\n        }\n        if (userPoolId) {\n            var userPoolData = {\n                UserPoolId: userPoolId,\n                ClientId: userPoolWebClientId,\n            };\n            userPoolData.Storage = this._storage;\n            this.userPool = new amazon_cognito_identity_js_1.CognitoUserPool(userPoolData);\n        }\n        core_1.Credentials.configure({\n            mandatorySignIn: mandatorySignIn,\n            region: identityPoolRegion || region,\n            userPoolId: userPoolId,\n            identityPoolId: identityPoolId,\n            refreshHandlers: refreshHandlers,\n            storage: this._storage\n        });\n        // initiailize cognitoauth client if hosted ui options provided\n        // to keep backward compatibility:\n        var cognitoHostedUIConfig = oauth ? (types_1.isCognitoHostedOpts(this._config.oauth)\n            ? oauth : oauth.awsCognito)\n            : undefined;\n        if (cognitoHostedUIConfig) {\n            var cognitoAuthParams = Object.assign({\n                cognitoClientId: userPoolWebClientId,\n                UserPoolId: userPoolId,\n                domain: cognitoHostedUIConfig['domain'],\n                scopes: cognitoHostedUIConfig['scope'],\n                redirectSignIn: cognitoHostedUIConfig['redirectSignIn'],\n                redirectSignOut: cognitoHostedUIConfig['redirectSignOut'],\n                responseType: cognitoHostedUIConfig['responseType'],\n                Storage: this._storage,\n                urlOpener: cognitoHostedUIConfig['urlOpener']\n            }, cognitoHostedUIConfig['options']);\n            this._oAuthHandler = new OAuth_1.default({\n                scopes: cognitoAuthParams.scopes,\n                config: cognitoAuthParams,\n                cognitoClientId: cognitoAuthParams.cognitoClientId\n            });\n            // **NOTE** - Remove this in a future major release as it is a breaking change\n            urlListener_1.default(function (_a) {\n                var url = _a.url;\n                _this._handleAuthResponse(url);\n            });\n        }\n        dispatchAuthEvent('configured', null, \"The Auth category has been configured successfully\");\n        return this._config;\n    };\n    /**\n     * Sign up with username, password and other attrbutes like phone, email\n     * @param {String | object} params - The user attirbutes used for signin\n     * @param {String[]} restOfAttrs - for the backward compatability\n     * @return - A promise resolves callback data if success\n     */\n    AuthClass.prototype.signUp = function (params) {\n        var _this = this;\n        var restOfAttrs = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            restOfAttrs[_i - 1] = arguments[_i];\n        }\n        if (!this.userPool) {\n            return Promise.reject('No userPool');\n        }\n        var username = null;\n        var password = null;\n        var attributes = [];\n        var validationData = null;\n        if (params && typeof params === 'string') {\n            username = params;\n            password = restOfAttrs ? restOfAttrs[0] : null;\n            var email = restOfAttrs ? restOfAttrs[1] : null;\n            var phone_number = restOfAttrs ? restOfAttrs[2] : null;\n            if (email)\n                attributes.push({ Name: 'email', Value: email });\n            if (phone_number)\n                attributes.push({ Name: 'phone_number', Value: phone_number });\n        }\n        else if (params && typeof params === 'object') {\n            username = params['username'];\n            password = params['password'];\n            var attrs_1 = params['attributes'];\n            if (attrs_1) {\n                Object.keys(attrs_1).map(function (key) {\n                    var ele = { Name: key, Value: attrs_1[key] };\n                    attributes.push(ele);\n                });\n            }\n            validationData = params['validationData'] || null;\n        }\n        else {\n            return Promise.reject('The first parameter should either be non-null string or object');\n        }\n        if (!username) {\n            return Promise.reject('Username cannot be empty');\n        }\n        if (!password) {\n            return Promise.reject('Password cannot be empty');\n        }\n        logger.debug('signUp attrs:', attributes);\n        logger.debug('signUp validation data:', validationData);\n        return new Promise(function (resolve, reject) {\n            _this.userPool.signUp(username, password, attributes, validationData, function (err, data) {\n                if (err) {\n                    dispatchAuthEvent('signUp_failure', err, username + \" failed to signup\");\n                    reject(err);\n                }\n                else {\n                    dispatchAuthEvent('signUp', data, username + \" has signed up successfully\");\n                    resolve(data);\n                }\n            });\n        });\n    };\n    /**\n     * Send the verfication code to confirm sign up\n     * @param {String} username - The username to be confirmed\n     * @param {String} code - The verification code\n     * @param {ConfirmSignUpOptions} options - other options for confirm signup\n     * @return - A promise resolves callback data if success\n     */\n    AuthClass.prototype.confirmSignUp = function (username, code, options) {\n        if (!this.userPool) {\n            return Promise.reject('No userPool');\n        }\n        if (!username) {\n            return Promise.reject('Username cannot be empty');\n        }\n        if (!code) {\n            return Promise.reject('Code cannot be empty');\n        }\n        var user = this.createCognitoUser(username);\n        var forceAliasCreation = options && typeof options.forceAliasCreation === 'boolean'\n            ? options.forceAliasCreation : true;\n        return new Promise(function (resolve, reject) {\n            user.confirmRegistration(code, forceAliasCreation, function (err, data) {\n                if (err) {\n                    reject(err);\n                }\n                else {\n                    resolve(data);\n                }\n            });\n        });\n    };\n    /**\n     * Resend the verification code\n     * @param {String} username - The username to be confirmed\n     * @return - A promise resolves data if success\n     */\n    AuthClass.prototype.resendSignUp = function (username) {\n        if (!this.userPool) {\n            return Promise.reject('No userPool');\n        }\n        if (!username) {\n            return Promise.reject('Username cannot be empty');\n        }\n        var user = this.createCognitoUser(username);\n        return new Promise(function (resolve, reject) {\n            user.resendConfirmationCode(function (err, data) {\n                if (err) {\n                    reject(err);\n                }\n                else {\n                    resolve(data);\n                }\n            });\n        });\n    };\n    /**\n     * Sign in\n     * @param {String | SignInOpts} usernameOrSignInOpts - The username to be signed in or the sign in options\n     * @param {String} password - The password of the username\n     * @return - A promise resolves the CognitoUser\n     */\n    AuthClass.prototype.signIn = function (usernameOrSignInOpts, pw) {\n        if (!this.userPool) {\n            return Promise.reject('No userPool');\n        }\n        var username = null;\n        var password = null;\n        var validationData = {};\n        // for backward compatibility\n        if (typeof usernameOrSignInOpts === 'string') {\n            username = usernameOrSignInOpts;\n            password = pw;\n        }\n        else if (types_1.isUsernamePasswordOpts(usernameOrSignInOpts)) {\n            if (typeof pw !== 'undefined') {\n                logger.warn('The password should be defined under the first parameter object!');\n            }\n            username = usernameOrSignInOpts.username;\n            password = usernameOrSignInOpts.password;\n            validationData = usernameOrSignInOpts.validationData;\n        }\n        else {\n            return Promise.reject(new Error('The username should either be a string or one of the sign in types'));\n        }\n        if (!username) {\n            return Promise.reject('Username cannot be empty');\n        }\n        var authDetails = new amazon_cognito_identity_js_1.AuthenticationDetails({\n            Username: username,\n            Password: password,\n            ValidationData: validationData\n        });\n        if (password) {\n            return this.signInWithPassword(authDetails);\n        }\n        else {\n            return this.signInWithoutPassword(authDetails);\n        }\n    };\n    /**\n     * Return an object with the authentication callbacks\n     * @param {CognitoUser} user - the cognito user object\n     * @param {} resolve - function called when resolving the current step\n     * @param {} reject - function called when rejecting the current step\n     * @return - an object with the callback methods for user authentication\n     */\n    AuthClass.prototype.authCallbacks = function (user, resolve, reject) {\n        var _this = this;\n        var that = this;\n        return {\n            onSuccess: function (session) { return __awaiter(_this, void 0, void 0, function () {\n                var cred, e_1, currentUser, e_2;\n                return __generator(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            logger.debug(session);\n                            delete (user['challengeName']);\n                            delete (user['challengeParam']);\n                            _a.label = 1;\n                        case 1:\n                            _a.trys.push([1, 4, 5, 9]);\n                            return [4 /*yield*/, core_1.Credentials.clear()];\n                        case 2:\n                            _a.sent();\n                            return [4 /*yield*/, core_1.Credentials.set(session, 'session')];\n                        case 3:\n                            cred = _a.sent();\n                            logger.debug('succeed to get cognito credentials', cred);\n                            return [3 /*break*/, 9];\n                        case 4:\n                            e_1 = _a.sent();\n                            logger.debug('cannot get cognito credentials', e_1);\n                            return [3 /*break*/, 9];\n                        case 5:\n                            _a.trys.push([5, 7, , 8]);\n                            return [4 /*yield*/, this.currentUserPoolUser()];\n                        case 6:\n                            currentUser = _a.sent();\n                            that.user = currentUser;\n                            dispatchAuthEvent('signIn', currentUser, \"A user \" + user.getUsername() + \" has been signed in\");\n                            resolve(currentUser);\n                            return [3 /*break*/, 8];\n                        case 7:\n                            e_2 = _a.sent();\n                            logger.error('Failed to get the signed in user', e_2);\n                            reject(e_2);\n                            return [3 /*break*/, 8];\n                        case 8: return [7 /*endfinally*/];\n                        case 9: return [2 /*return*/];\n                    }\n                });\n            }); },\n            onFailure: function (err) {\n                logger.debug('signIn failure', err);\n                dispatchAuthEvent('signIn_failure', err, user.getUsername() + \" failed to signin\");\n                reject(err);\n            },\n            customChallenge: function (challengeParam) {\n                logger.debug('signIn custom challenge answer required');\n                user['challengeName'] = 'CUSTOM_CHALLENGE';\n                user['challengeParam'] = challengeParam;\n                resolve(user);\n            },\n            mfaRequired: function (challengeName, challengeParam) {\n                logger.debug('signIn MFA required');\n                user['challengeName'] = challengeName;\n                user['challengeParam'] = challengeParam;\n                resolve(user);\n            },\n            mfaSetup: function (challengeName, challengeParam) {\n                logger.debug('signIn mfa setup', challengeName);\n                user['challengeName'] = challengeName;\n                user['challengeParam'] = challengeParam;\n                resolve(user);\n            },\n            newPasswordRequired: function (userAttributes, requiredAttributes) {\n                logger.debug('signIn new password');\n                user['challengeName'] = 'NEW_PASSWORD_REQUIRED';\n                user['challengeParam'] = {\n                    userAttributes: userAttributes,\n                    requiredAttributes: requiredAttributes\n                };\n                resolve(user);\n            },\n            totpRequired: function (challengeName, challengeParam) {\n                logger.debug('signIn totpRequired');\n                user['challengeName'] = challengeName;\n                user['challengeParam'] = challengeParam;\n                resolve(user);\n            },\n            selectMFAType: function (challengeName, challengeParam) {\n                logger.debug('signIn selectMFAType', challengeName);\n                user['challengeName'] = challengeName;\n                user['challengeParam'] = challengeParam;\n                resolve(user);\n            }\n        };\n    };\n    /**\n     * Sign in with a password\n     * @private\n     * @param {AuthenticationDetails} authDetails - the user sign in data\n     * @return - A promise resolves the CognitoUser object if success or mfa required\n     */\n    AuthClass.prototype.signInWithPassword = function (authDetails) {\n        var _this = this;\n        var user = this.createCognitoUser(authDetails.getUsername());\n        return new Promise(function (resolve, reject) {\n            user.authenticateUser(authDetails, _this.authCallbacks(user, resolve, reject));\n        });\n    };\n    /**\n     * Sign in without a password\n     * @private\n     * @param {AuthenticationDetails} authDetails - the user sign in data\n     * @return - A promise resolves the CognitoUser object if success or mfa required\n     */\n    AuthClass.prototype.signInWithoutPassword = function (authDetails) {\n        var _this = this;\n        var user = this.createCognitoUser(authDetails.getUsername());\n        user.setAuthenticationFlowType('CUSTOM_AUTH');\n        return new Promise(function (resolve, reject) {\n            user.initiateAuth(authDetails, _this.authCallbacks(user, resolve, reject));\n        });\n    };\n    /**\n     * get user current preferred mfa option\n     * this method doesn't work with totp, we need to deprecate it.\n     * @deprecated\n     * @param {CognitoUser} user - the current user\n     * @return - A promise resolves the current preferred mfa option if success\n     */\n    AuthClass.prototype.getMFAOptions = function (user) {\n        return new Promise(function (res, rej) {\n            user.getMFAOptions(function (err, mfaOptions) {\n                if (err) {\n                    logger.debug('get MFA Options failed', err);\n                    rej(err);\n                    return;\n                }\n                logger.debug('get MFA options success', mfaOptions);\n                res(mfaOptions);\n                return;\n            });\n        });\n    };\n    /**\n     * get preferred mfa method\n     * @param {CognitoUser} user - the current cognito user\n     * @param {GetPreferredMFAOpts} params - options for getting the current user preferred MFA\n     */\n    AuthClass.prototype.getPreferredMFA = function (user, params) {\n        var that = this;\n        return new Promise(function (res, rej) {\n            var bypassCache = params ? params.bypassCache : false;\n            user.getUserData(function (err, data) {\n                if (err) {\n                    logger.debug('getting preferred mfa failed', err);\n                    rej(err);\n                    return;\n                }\n                var mfaType = that._getMfaTypeFromUserData(data);\n                if (!mfaType) {\n                    rej('invalid MFA Type');\n                    return;\n                }\n                else {\n                    res(mfaType);\n                    return;\n                }\n            }, { bypassCache: bypassCache });\n        });\n    };\n    AuthClass.prototype._getMfaTypeFromUserData = function (data) {\n        var ret = null;\n        var preferredMFA = data.PreferredMfaSetting;\n        // if the user has used Auth.setPreferredMFA() to setup the mfa type\n        // then the \"PreferredMfaSetting\" would exist in the response\n        if (preferredMFA) {\n            ret = preferredMFA;\n        }\n        else {\n            // if mfaList exists but empty, then its noMFA\n            var mfaList = data.UserMFASettingList;\n            if (!mfaList) {\n                // if SMS was enabled by using Auth.enableSMS(),\n                // the response would contain MFAOptions\n                // as for now Cognito only supports for SMS, so we will say it is 'SMS_MFA'\n                // if it does not exist, then it should be NOMFA\n                var MFAOptions = data.MFAOptions;\n                if (MFAOptions) {\n                    ret = 'SMS_MFA';\n                }\n                else {\n                    ret = 'NOMFA';\n                }\n            }\n            else if (mfaList.length === 0) {\n                ret = 'NOMFA';\n            }\n            else {\n                logger.debug('invalid case for getPreferredMFA', data);\n            }\n        }\n        return ret;\n    };\n    AuthClass.prototype._getUserData = function (user, params) {\n        return new Promise(function (res, rej) {\n            user.getUserData(function (err, data) {\n                if (err) {\n                    logger.debug('getting user data failed', err);\n                    rej(err);\n                    return;\n                }\n                else {\n                    res(data);\n                    return;\n                }\n            }, params);\n        });\n    };\n    /**\n     * set preferred MFA method\n     * @param {CognitoUser} user - the current Cognito user\n     * @param {string} mfaMethod - preferred mfa method\n     * @return - A promise resolve if success\n     */\n    AuthClass.prototype.setPreferredMFA = function (user, mfaMethod) {\n        return __awaiter(this, void 0, void 0, function () {\n            var userData, smsMfaSettings, totpMfaSettings, _a, mfaList, currentMFAType, that;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0: return [4 /*yield*/, this._getUserData(user, { bypassCache: true })];\n                    case 1:\n                        userData = _b.sent();\n                        smsMfaSettings = null;\n                        totpMfaSettings = null;\n                        _a = mfaMethod;\n                        switch (_a) {\n                            case 'TOTP' || 'SOFTWARE_TOKEN_MFA': return [3 /*break*/, 2];\n                            case 'SMS' || 'SMS_MFA': return [3 /*break*/, 3];\n                            case 'NOMFA': return [3 /*break*/, 4];\n                        }\n                        return [3 /*break*/, 6];\n                    case 2:\n                        totpMfaSettings = {\n                            PreferredMfa: true,\n                            Enabled: true\n                        };\n                        return [3 /*break*/, 7];\n                    case 3:\n                        smsMfaSettings = {\n                            PreferredMfa: true,\n                            Enabled: true\n                        };\n                        return [3 /*break*/, 7];\n                    case 4:\n                        mfaList = userData['UserMFASettingList'];\n                        return [4 /*yield*/, this._getMfaTypeFromUserData(userData)];\n                    case 5:\n                        currentMFAType = _b.sent();\n                        if (currentMFAType === 'NOMFA') {\n                            return [2 /*return*/, Promise.resolve('No change for mfa type')];\n                        }\n                        else if (currentMFAType === 'SMS_MFA') {\n                            smsMfaSettings = {\n                                PreferredMfa: false,\n                                Enabled: false\n                            };\n                        }\n                        else if (currentMFAType === 'SOFTWARE_TOKEN_MFA') {\n                            totpMfaSettings = {\n                                PreferredMfa: false,\n                                Enabled: false\n                            };\n                        }\n                        else {\n                            return [2 /*return*/, Promise.reject('invalid MFA type')];\n                        }\n                        // if there is a UserMFASettingList in the response\n                        // we need to disable every mfa type in that list\n                        if (mfaList && mfaList.length !== 0) {\n                            // to disable SMS or TOTP if exists in that list\n                            mfaList.forEach(function (mfaType) {\n                                if (mfaType === 'SMS_MFA') {\n                                    smsMfaSettings = {\n                                        PreferredMfa: false,\n                                        Enabled: false\n                                    };\n                                }\n                                else if (mfaType === 'SOFTWARE_TOKEN_MFA') {\n                                    totpMfaSettings = {\n                                        PreferredMfa: false,\n                                        Enabled: false\n                                    };\n                                }\n                            });\n                        }\n                        return [3 /*break*/, 7];\n                    case 6:\n                        logger.debug('no validmfa method provided');\n                        return [2 /*return*/, Promise.reject('no validmfa method provided')];\n                    case 7:\n                        that = this;\n                        return [2 /*return*/, new Promise(function (res, rej) {\n                                user.setUserMfaPreference(smsMfaSettings, totpMfaSettings, function (err, result) {\n                                    if (err) {\n                                        logger.debug('Set user mfa preference error', err);\n                                        return rej(err);\n                                    }\n                                    logger.debug('Set user mfa success', result);\n                                    logger.debug('Caching the latest user data into local');\n                                    // cache the latest result into user data\n                                    user.getUserData(function (err, data) {\n                                        if (err) {\n                                            logger.debug('getting user data failed', err);\n                                            return rej(err);\n                                        }\n                                        else {\n                                            return res(result);\n                                        }\n                                    }, { bypassCache: true });\n                                });\n                            })];\n                }\n            });\n        });\n    };\n    /**\n     * diable SMS\n     * @deprecated\n     * @param {CognitoUser} user - the current user\n     * @return - A promise resolves is success\n     */\n    AuthClass.prototype.disableSMS = function (user) {\n        return new Promise(function (res, rej) {\n            user.disableMFA(function (err, data) {\n                if (err) {\n                    logger.debug('disable mfa failed', err);\n                    rej(err);\n                    return;\n                }\n                logger.debug('disable mfa succeed', data);\n                res(data);\n                return;\n            });\n        });\n    };\n    /**\n     * enable SMS\n     * @deprecated\n     * @param {CognitoUser} user - the current user\n     * @return - A promise resolves is success\n     */\n    AuthClass.prototype.enableSMS = function (user) {\n        return new Promise(function (res, rej) {\n            user.enableMFA(function (err, data) {\n                if (err) {\n                    logger.debug('enable mfa failed', err);\n                    rej(err);\n                    return;\n                }\n                logger.debug('enable mfa succeed', data);\n                res(data);\n                return;\n            });\n        });\n    };\n    /**\n     * Setup TOTP\n     * @param {CognitoUser} user - the current user\n     * @return - A promise resolves with the secret code if success\n     */\n    AuthClass.prototype.setupTOTP = function (user) {\n        return new Promise(function (res, rej) {\n            user.associateSoftwareToken({\n                onFailure: function (err) {\n                    logger.debug('associateSoftwareToken failed', err);\n                    rej(err);\n                    return;\n                },\n                associateSecretCode: function (secretCode) {\n                    logger.debug('associateSoftwareToken sucess', secretCode);\n                    res(secretCode);\n                    return;\n                }\n            });\n        });\n    };\n    /**\n     * verify TOTP setup\n     * @param {CognitoUser} user - the current user\n     * @param {string} challengeAnswer - challenge answer\n     * @return - A promise resolves is success\n     */\n    AuthClass.prototype.verifyTotpToken = function (user, challengeAnswer) {\n        logger.debug('verfication totp token', user, challengeAnswer);\n        return new Promise(function (res, rej) {\n            user.verifySoftwareToken(challengeAnswer, 'My TOTP device', {\n                onFailure: function (err) {\n                    logger.debug('verifyTotpToken failed', err);\n                    rej(err);\n                    return;\n                },\n                onSuccess: function (data) {\n                    logger.debug('verifyTotpToken success', data);\n                    res(data);\n                    return;\n                }\n            });\n        });\n    };\n    /**\n     * Send MFA code to confirm sign in\n     * @param {Object} user - The CognitoUser object\n     * @param {String} code - The confirmation code\n     */\n    AuthClass.prototype.confirmSignIn = function (user, code, mfaType) {\n        var _this = this;\n        if (!code) {\n            return Promise.reject('Code cannot be empty');\n        }\n        var that = this;\n        return new Promise(function (resolve, reject) {\n            user.sendMFACode(code, {\n                onSuccess: function (session) { return __awaiter(_this, void 0, void 0, function () {\n                    var cred, e_3;\n                    return __generator(this, function (_a) {\n                        switch (_a.label) {\n                            case 0:\n                                logger.debug(session);\n                                _a.label = 1;\n                            case 1:\n                                _a.trys.push([1, 4, 5, 6]);\n                                return [4 /*yield*/, core_1.Credentials.clear()];\n                            case 2:\n                                _a.sent();\n                                return [4 /*yield*/, core_1.Credentials.set(session, 'session')];\n                            case 3:\n                                cred = _a.sent();\n                                logger.debug('succeed to get cognito credentials', cred);\n                                return [3 /*break*/, 6];\n                            case 4:\n                                e_3 = _a.sent();\n                                logger.debug('cannot get cognito credentials', e_3);\n                                return [3 /*break*/, 6];\n                            case 5:\n                                that.user = user;\n                                dispatchAuthEvent('signIn', user, user + \" has signed in\");\n                                resolve(user);\n                                return [7 /*endfinally*/];\n                            case 6: return [2 /*return*/];\n                        }\n                    });\n                }); },\n                onFailure: function (err) {\n                    logger.debug('confirm signIn failure', err);\n                    reject(err);\n                }\n            }, mfaType);\n        });\n    };\n    AuthClass.prototype.completeNewPassword = function (user, password, requiredAttributes) {\n        var _this = this;\n        if (!password) {\n            return Promise.reject('Password cannot be empty');\n        }\n        var that = this;\n        return new Promise(function (resolve, reject) {\n            user.completeNewPasswordChallenge(password, requiredAttributes, {\n                onSuccess: function (session) { return __awaiter(_this, void 0, void 0, function () {\n                    var cred, e_4;\n                    return __generator(this, function (_a) {\n                        switch (_a.label) {\n                            case 0:\n                                logger.debug(session);\n                                _a.label = 1;\n                            case 1:\n                                _a.trys.push([1, 4, 5, 6]);\n                                return [4 /*yield*/, core_1.Credentials.clear()];\n                            case 2:\n                                _a.sent();\n                                return [4 /*yield*/, core_1.Credentials.set(session, 'session')];\n                            case 3:\n                                cred = _a.sent();\n                                logger.debug('succeed to get cognito credentials', cred);\n                                return [3 /*break*/, 6];\n                            case 4:\n                                e_4 = _a.sent();\n                                logger.debug('cannot get cognito credentials', e_4);\n                                return [3 /*break*/, 6];\n                            case 5:\n                                that.user = user;\n                                dispatchAuthEvent('signIn', user, user + \" has signed in\");\n                                resolve(user);\n                                return [7 /*endfinally*/];\n                            case 6: return [2 /*return*/];\n                        }\n                    });\n                }); },\n                onFailure: function (err) {\n                    logger.debug('completeNewPassword failure', err);\n                    dispatchAuthEvent('completeNewPassword_failure', err, _this.user + \" failed to complete the new password flow\");\n                    reject(err);\n                },\n                mfaRequired: function (challengeName, challengeParam) {\n                    logger.debug('signIn MFA required');\n                    user['challengeName'] = challengeName;\n                    user['challengeParam'] = challengeParam;\n                    resolve(user);\n                },\n                mfaSetup: function (challengeName, challengeParam) {\n                    logger.debug('signIn mfa setup', challengeName);\n                    user['challengeName'] = challengeName;\n                    user['challengeParam'] = challengeParam;\n                    resolve(user);\n                }\n            });\n        });\n    };\n    /**\n     * Send the answer to a custom challenge\n     * @param {CognitoUser} user - The CognitoUser object\n     * @param {String} challengeResponses - The confirmation code\n     */\n    AuthClass.prototype.sendCustomChallengeAnswer = function (user, challengeResponses) {\n        var _this = this;\n        if (!this.userPool) {\n            return Promise.reject('No userPool');\n        }\n        if (!challengeResponses) {\n            return Promise.reject('Challenge response cannot be empty');\n        }\n        var that = this;\n        return new Promise(function (resolve, reject) {\n            user.sendCustomChallengeAnswer(challengeResponses, _this.authCallbacks(user, resolve, reject));\n        });\n    };\n    /**\n     * Update an authenticated users' attributes\n     * @param {CognitoUser} - The currently logged in user object\n     * @return {Promise}\n     **/\n    AuthClass.prototype.updateUserAttributes = function (user, attributes) {\n        var attributeList = [];\n        var that = this;\n        return new Promise(function (resolve, reject) {\n            that.userSession(user).then(function (session) {\n                for (var key in attributes) {\n                    if (key !== 'sub' &&\n                        key.indexOf('_verified') < 0) {\n                        var attr = {\n                            'Name': key,\n                            'Value': attributes[key]\n                        };\n                        attributeList.push(attr);\n                    }\n                }\n                user.updateAttributes(attributeList, function (err, result) {\n                    if (err) {\n                        return reject(err);\n                    }\n                    else {\n                        return resolve(result);\n                    }\n                });\n            });\n        });\n    };\n    /**\n     * Return user attributes\n     * @param {Object} user - The CognitoUser object\n     * @return - A promise resolves to user attributes if success\n     */\n    AuthClass.prototype.userAttributes = function (user) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            _this.userSession(user).then(function (session) {\n                user.getUserAttributes(function (err, attributes) {\n                    if (err) {\n                        reject(err);\n                    }\n                    else {\n                        resolve(attributes);\n                    }\n                });\n            });\n        });\n    };\n    AuthClass.prototype.verifiedContact = function (user) {\n        var that = this;\n        return this.userAttributes(user)\n            .then(function (attributes) {\n            var attrs = that.attributesToObject(attributes);\n            var unverified = {};\n            var verified = {};\n            if (attrs['email']) {\n                if (attrs['email_verified']) {\n                    verified['email'] = attrs['email'];\n                }\n                else {\n                    unverified['email'] = attrs['email'];\n                }\n            }\n            if (attrs['phone_number']) {\n                if (attrs['phone_number_verified']) {\n                    verified['phone_number'] = attrs['phone_number'];\n                }\n                else {\n                    unverified['phone_number'] = attrs['phone_number'];\n                }\n            }\n            return {\n                verified: verified,\n                unverified: unverified\n            };\n        });\n    };\n    /**\n     * Get current authenticated user\n     * @return - A promise resolves to current authenticated CognitoUser if success\n     */\n    AuthClass.prototype.currentUserPoolUser = function (params) {\n        var _this = this;\n        if (!this.userPool) {\n            return Promise.reject('No userPool');\n        }\n        var that = this;\n        return new Promise(function (res, rej) {\n            _this._storageSync.then(function () {\n                var user = that.userPool.getCurrentUser();\n                if (!user) {\n                    logger.debug('Failed to get user from user pool');\n                    rej('No current user');\n                    return;\n                }\n                // refresh the session if the session expired.\n                user.getSession(function (err, session) {\n                    if (err) {\n                        logger.debug('Failed to get the user session', err);\n                        rej(err);\n                        return;\n                    }\n                    // get user data from Cognito\n                    var bypassCache = params ? params.bypassCache : false;\n                    // validate the token's scope fisrt before calling this function\n                    var _a = session.getAccessToken().decodePayload().scope, scope = _a === void 0 ? '' : _a;\n                    if (scope.split(' ').includes(USER_ADMIN_SCOPE)) {\n                        user.getUserData(function (err, data) {\n                            if (err) {\n                                logger.debug('getting user data failed', err);\n                                // Make sure the user is still valid\n                                if (err.message === 'User is disabled' || err.message === 'User does not exist.') {\n                                    rej(err);\n                                }\n                                else {\n                                    // the error may also be thrown when lack of permissions to get user info etc\n                                    // in that case we just bypass the error\n                                    res(user);\n                                }\n                                return;\n                            }\n                            var preferredMFA = data.PreferredMfaSetting || 'NOMFA';\n                            var attributeList = [];\n                            for (var i = 0; i < data.UserAttributes.length; i++) {\n                                var attribute = {\n                                    Name: data.UserAttributes[i].Name,\n                                    Value: data.UserAttributes[i].Value,\n                                };\n                                var userAttribute = new amazon_cognito_identity_js_1.CognitoUserAttribute(attribute);\n                                attributeList.push(userAttribute);\n                            }\n                            var attributes = that.attributesToObject(attributeList);\n                            Object.assign(user, { attributes: attributes, preferredMFA: preferredMFA });\n                            return res(user);\n                        }, { bypassCache: bypassCache });\n                    }\n                    else {\n                        logger.debug(\"Unable to get the user data because the \" + USER_ADMIN_SCOPE + \" \" +\n                            \"is not in the scopes of the access token\");\n                        return res(user);\n                    }\n                });\n            }).catch(function (e) {\n                logger.debug('Failed to sync cache info into memory', e);\n                return rej(e);\n            });\n        });\n    };\n    /**\n     * Get current authenticated user\n     * @param {CurrentUserOpts} - options for getting the current user\n     * @return - A promise resolves to current authenticated CognitoUser if success\n     */\n    AuthClass.prototype.currentAuthenticatedUser = function (params) {\n        return __awaiter(this, void 0, void 0, function () {\n            var federatedUser, e_5, user, e_6;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        logger.debug('getting current authenticted user');\n                        federatedUser = null;\n                        _a.label = 1;\n                    case 1:\n                        _a.trys.push([1, 3, , 4]);\n                        return [4 /*yield*/, this._storageSync];\n                    case 2:\n                        _a.sent();\n                        return [3 /*break*/, 4];\n                    case 3:\n                        e_5 = _a.sent();\n                        logger.debug('Failed to sync cache info into memory', e_5);\n                        throw e_5;\n                    case 4:\n                        try {\n                            federatedUser = JSON.parse(this._storage.getItem('aws-amplify-federatedInfo')).user;\n                        }\n                        catch (e) {\n                            logger.debug('cannot load federated user from auth storage');\n                        }\n                        if (!federatedUser) return [3 /*break*/, 5];\n                        this.user = federatedUser;\n                        logger.debug('get current authenticated federated user', this.user);\n                        return [2 /*return*/, this.user];\n                    case 5:\n                        logger.debug('get current authenticated userpool user');\n                        user = null;\n                        _a.label = 6;\n                    case 6:\n                        _a.trys.push([6, 8, , 9]);\n                        return [4 /*yield*/, this.currentUserPoolUser(params)];\n                    case 7:\n                        user = _a.sent();\n                        return [3 /*break*/, 9];\n                    case 8:\n                        e_6 = _a.sent();\n                        if (e_6 === 'No userPool') {\n                            logger.error('Cannot get the current user because the user pool is missing. ' +\n                                'Please make sure the Auth module is configured with a valid Cognito User Pool ID');\n                        }\n                        logger.debug('The user is not authenticated by the error', e_6);\n                        throw ('not authenticated');\n                    case 9:\n                        this.user = user;\n                        return [2 /*return*/, this.user];\n                }\n            });\n        });\n    };\n    /**\n     * Get current user's session\n     * @return - A promise resolves to session object if success\n     */\n    AuthClass.prototype.currentSession = function () {\n        var that = this;\n        logger.debug('Getting current session');\n        if (!this.userPool) {\n            return Promise.reject('No userPool');\n        }\n        return new Promise(function (res, rej) {\n            that.currentUserPoolUser().then(function (user) {\n                that.userSession(user).then(function (session) {\n                    res(session);\n                    return;\n                }).catch(function (e) {\n                    logger.debug('Failed to get the current session', e);\n                    rej(e);\n                    return;\n                });\n            }).catch(function (e) {\n                logger.debug('Failed to get the current user', e);\n                rej(e);\n                return;\n            });\n        });\n    };\n    /**\n     * Get the corresponding user session\n     * @param {Object} user - The CognitoUser object\n     * @return - A promise resolves to the session\n     */\n    AuthClass.prototype.userSession = function (user) {\n        if (!user) {\n            logger.debug('the user is null');\n            return Promise.reject('Failed to get the session because the user is empty');\n        }\n        return new Promise(function (resolve, reject) {\n            logger.debug('Getting the session from this user:', user);\n            user.getSession(function (err, session) {\n                if (err) {\n                    logger.debug('Failed to get the session from user', user);\n                    reject(err);\n                    return;\n                }\n                else {\n                    logger.debug('Succeed to get the user session', session);\n                    resolve(session);\n                    return;\n                }\n            });\n        });\n    };\n    /**\n     * Get  authenticated credentials of current user.\n     * @return - A promise resolves to be current user's credentials\n     */\n    AuthClass.prototype.currentUserCredentials = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var that, e_7, federatedInfo;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        that = this;\n                        logger.debug('Getting current user credentials');\n                        _a.label = 1;\n                    case 1:\n                        _a.trys.push([1, 3, , 4]);\n                        return [4 /*yield*/, this._storageSync];\n                    case 2:\n                        _a.sent();\n                        return [3 /*break*/, 4];\n                    case 3:\n                        e_7 = _a.sent();\n                        logger.debug('Failed to sync cache info into memory', e_7);\n                        throw e_7;\n                    case 4:\n                        federatedInfo = null;\n                        try {\n                            federatedInfo = JSON.parse(this._storage.getItem('aws-amplify-federatedInfo'));\n                        }\n                        catch (e) {\n                            logger.debug('failed to get or parse item aws-amplify-federatedInfo', e);\n                        }\n                        if (federatedInfo) {\n                            // refresh the jwt token here if necessary\n                            return [2 /*return*/, core_1.Credentials.refreshFederatedToken(federatedInfo)];\n                        }\n                        else {\n                            return [2 /*return*/, this.currentSession()\n                                    .then(function (session) {\n                                    logger.debug('getting session success', session);\n                                    return core_1.Credentials.set(session, 'session');\n                                }).catch(function (error) {\n                                    logger.debug('getting session failed', error);\n                                    return core_1.Credentials.set(null, 'guest');\n                                })];\n                        }\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    AuthClass.prototype.currentCredentials = function () {\n        logger.debug('getting current credntials');\n        return core_1.Credentials.get();\n    };\n    /**\n     * Initiate an attribute confirmation request\n     * @param {Object} user - The CognitoUser\n     * @param {Object} attr - The attributes to be verified\n     * @return - A promise resolves to callback data if success\n     */\n    AuthClass.prototype.verifyUserAttribute = function (user, attr) {\n        return new Promise(function (resolve, reject) {\n            user.getAttributeVerificationCode(attr, {\n                onSuccess: function () { return resolve(); },\n                onFailure: function (err) { return reject(err); }\n            });\n        });\n    };\n    /**\n     * Confirm an attribute using a confirmation code\n     * @param {Object} user - The CognitoUser\n     * @param {Object} attr - The attribute to be verified\n     * @param {String} code - The confirmation code\n     * @return - A promise resolves to callback data if success\n     */\n    AuthClass.prototype.verifyUserAttributeSubmit = function (user, attr, code) {\n        if (!code) {\n            return Promise.reject('Code cannot be empty');\n        }\n        return new Promise(function (resolve, reject) {\n            user.verifyAttribute(attr, code, {\n                onSuccess: function (data) {\n                    resolve(data);\n                    return;\n                },\n                onFailure: function (err) {\n                    reject(err);\n                    return;\n                }\n            });\n        });\n    };\n    AuthClass.prototype.verifyCurrentUserAttribute = function (attr) {\n        var that = this;\n        return that.currentUserPoolUser()\n            .then(function (user) { return that.verifyUserAttribute(user, attr); });\n    };\n    /**\n     * Confirm current user's attribute using a confirmation code\n     * @param {Object} attr - The attribute to be verified\n     * @param {String} code - The confirmation code\n     * @return - A promise resolves to callback data if success\n     */\n    AuthClass.prototype.verifyCurrentUserAttributeSubmit = function (attr, code) {\n        var that = this;\n        return that.currentUserPoolUser()\n            .then(function (user) { return that.verifyUserAttributeSubmit(user, attr, code); });\n    };\n    AuthClass.prototype.cognitoIdentitySignOut = function (opts, user) {\n        return __awaiter(this, void 0, void 0, function () {\n            var e_8, isSignedInHostedUI;\n            var _this = this;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        _a.trys.push([0, 2, , 3]);\n                        return [4 /*yield*/, this._storageSync];\n                    case 1:\n                        _a.sent();\n                        return [3 /*break*/, 3];\n                    case 2:\n                        e_8 = _a.sent();\n                        logger.debug('Failed to sync cache info into memory', e_8);\n                        throw e_8;\n                    case 3:\n                        isSignedInHostedUI = this._oAuthHandler\n                            && this._storage.getItem('amplify-signin-with-hostedUI') === 'true';\n                        return [2 /*return*/, new Promise(function (res, rej) {\n                                if (opts && opts.global) {\n                                    logger.debug('user global sign out', user);\n                                    // in order to use global signout\n                                    // we must validate the user as an authenticated user by using getSession\n                                    user.getSession(function (err, result) {\n                                        if (err) {\n                                            logger.debug('failed to get the user session', err);\n                                            return rej(err);\n                                        }\n                                        user.globalSignOut({\n                                            onSuccess: function (data) {\n                                                logger.debug('global sign out success');\n                                                if (isSignedInHostedUI) {\n                                                    return res(_this._oAuthHandler.signOut());\n                                                }\n                                                else {\n                                                    return res();\n                                                }\n                                            },\n                                            onFailure: function (err) {\n                                                logger.debug('global sign out failed', err);\n                                                return rej(err);\n                                            }\n                                        });\n                                    });\n                                }\n                                else {\n                                    logger.debug('user sign out', user);\n                                    user.signOut();\n                                    if (isSignedInHostedUI) {\n                                        return res(_this._oAuthHandler.signOut());\n                                    }\n                                    else {\n                                        return res();\n                                    }\n                                }\n                            })];\n                }\n            });\n        });\n    };\n    /**\n     * Sign out method\n     * @\n     * @return - A promise resolved if success\n     */\n    AuthClass.prototype.signOut = function (opts) {\n        return __awaiter(this, void 0, void 0, function () {\n            var e_9, user;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        _a.trys.push([0, 2, , 3]);\n                        return [4 /*yield*/, this.cleanCachedItems()];\n                    case 1:\n                        _a.sent();\n                        return [3 /*break*/, 3];\n                    case 2:\n                        e_9 = _a.sent();\n                        logger.debug('failed to clear cached items');\n                        return [3 /*break*/, 3];\n                    case 3:\n                        if (!this.userPool) return [3 /*break*/, 7];\n                        user = this.userPool.getCurrentUser();\n                        if (!user) return [3 /*break*/, 5];\n                        return [4 /*yield*/, this.cognitoIdentitySignOut(opts, user)];\n                    case 4:\n                        _a.sent();\n                        return [3 /*break*/, 6];\n                    case 5:\n                        logger.debug('no current Cognito user');\n                        _a.label = 6;\n                    case 6: return [3 /*break*/, 8];\n                    case 7:\n                        logger.debug('no Congito User pool');\n                        _a.label = 8;\n                    case 8:\n                        /**\n                         * Note for future refactor - no reliable way to get username with\n                         * Cognito User Pools vs Identity when federating with Social Providers\n                         * This is why we need a well structured session object that can be inspected\n                         * and information passed back in the message below for Hub dispatch\n                        */\n                        dispatchAuthEvent('signOut', this.user, \"A user has been signed out\");\n                        this.user = null;\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    AuthClass.prototype.cleanCachedItems = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: \n                    // clear cognito cached item\n                    return [4 /*yield*/, core_1.Credentials.clear()];\n                    case 1:\n                        // clear cognito cached item\n                        _a.sent();\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    /**\n     * Change a password for an authenticated user\n     * @param {Object} user - The CognitoUser object\n     * @param {String} oldPassword - the current password\n     * @param {String} newPassword - the requested new password\n     * @return - A promise resolves if success\n     */\n    AuthClass.prototype.changePassword = function (user, oldPassword, newPassword) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            _this.userSession(user).then(function (session) {\n                user.changePassword(oldPassword, newPassword, function (err, data) {\n                    if (err) {\n                        logger.debug('change password failure', err);\n                        return reject(err);\n                    }\n                    else {\n                        return resolve(data);\n                    }\n                });\n            });\n        });\n    };\n    /**\n     * Initiate a forgot password request\n     * @param {String} username - the username to change password\n     * @return - A promise resolves if success\n     */\n    AuthClass.prototype.forgotPassword = function (username) {\n        if (!this.userPool) {\n            return Promise.reject('No userPool');\n        }\n        if (!username) {\n            return Promise.reject('Username cannot be empty');\n        }\n        var user = this.createCognitoUser(username);\n        return new Promise(function (resolve, reject) {\n            user.forgotPassword({\n                onSuccess: function () {\n                    resolve();\n                    return;\n                },\n                onFailure: function (err) {\n                    logger.debug('forgot password failure', err);\n                    reject(err);\n                    return;\n                },\n                inputVerificationCode: function (data) {\n                    resolve(data);\n                    return;\n                }\n            });\n        });\n    };\n    /**\n     * Confirm a new password using a confirmation Code\n     * @param {String} username - The username\n     * @param {String} code - The confirmation code\n     * @param {String} password - The new password\n     * @return - A promise that resolves if success\n     */\n    AuthClass.prototype.forgotPasswordSubmit = function (username, code, password) {\n        if (!this.userPool) {\n            return Promise.reject('No userPool');\n        }\n        if (!username) {\n            return Promise.reject('Username cannot be empty');\n        }\n        if (!code) {\n            return Promise.reject('Code cannot be empty');\n        }\n        if (!password) {\n            return Promise.reject('Password cannot be empty');\n        }\n        var user = this.createCognitoUser(username);\n        return new Promise(function (resolve, reject) {\n            user.confirmPassword(code, password, {\n                onSuccess: function () {\n                    resolve();\n                    return;\n                },\n                onFailure: function (err) {\n                    reject(err);\n                    return;\n                }\n            });\n        });\n    };\n    /**\n     * Get user information\n     * @async\n     * @return {Object }- current User's information\n     */\n    AuthClass.prototype.currentUserInfo = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var source, user, attributes, userAttrs, credentials, e_10, info, err_1, user;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        source = core_1.Credentials.getCredSource();\n                        if (!(!source || source === 'aws' || source === 'userPool')) return [3 /*break*/, 9];\n                        return [4 /*yield*/, this.currentUserPoolUser()\n                                .catch(function (err) { return logger.debug(err); })];\n                    case 1:\n                        user = _a.sent();\n                        if (!user) {\n                            return [2 /*return*/, null];\n                        }\n                        _a.label = 2;\n                    case 2:\n                        _a.trys.push([2, 8, , 9]);\n                        return [4 /*yield*/, this.userAttributes(user)];\n                    case 3:\n                        attributes = _a.sent();\n                        userAttrs = this.attributesToObject(attributes);\n                        credentials = null;\n                        _a.label = 4;\n                    case 4:\n                        _a.trys.push([4, 6, , 7]);\n                        return [4 /*yield*/, this.currentCredentials()];\n                    case 5:\n                        credentials = _a.sent();\n                        return [3 /*break*/, 7];\n                    case 6:\n                        e_10 = _a.sent();\n                        logger.debug('Failed to retrieve credentials while getting current user info', e_10);\n                        return [3 /*break*/, 7];\n                    case 7:\n                        info = {\n                            'id': credentials ? credentials.identityId : undefined,\n                            'username': user.getUsername(),\n                            'attributes': userAttrs\n                        };\n                        return [2 /*return*/, info];\n                    case 8:\n                        err_1 = _a.sent();\n                        logger.debug('currentUserInfo error', err_1);\n                        return [2 /*return*/, {}];\n                    case 9:\n                        if (source === 'federated') {\n                            user = this.user;\n                            return [2 /*return*/, user ? user : {}];\n                        }\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    AuthClass.prototype.federatedSignIn = function (providerOrOptions, response, user) {\n        return __awaiter(this, void 0, void 0, function () {\n            var options, provider, client_id, redirect_uri, provider, loggedInUser, e_11, token, identity_id, expires_at, credentials, currentUser;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!this._config.identityPoolId && !this._config.userPoolId) {\n                            throw new Error(\"Federation requires either a User Pool or Identity Pool in config\");\n                        }\n                        // Ensure backwards compatability\n                        if (typeof providerOrOptions === 'undefined') {\n                            if (this._config.identityPoolId && !this._config.userPoolId) {\n                                throw new Error(\"Federation with Identity Pools requires tokens passed as arguments\");\n                            }\n                        }\n                        if (!(types_1.isFederatedSignInOptions(providerOrOptions)\n                            || types_1.isFederatedSignInOptionsCustom(providerOrOptions)\n                            || typeof providerOrOptions === 'undefined')) return [3 /*break*/, 1];\n                        options = providerOrOptions || { provider: CognitoHostedUIIdentityProvider.Cognito };\n                        provider = types_1.isFederatedSignInOptions(options)\n                            ? options.provider\n                            : options.customProvider;\n                        if (this._config.userPoolId) {\n                            client_id = types_1.isCognitoHostedOpts(this._config.oauth)\n                                ? this._config.userPoolWebClientId\n                                : this._config.oauth.clientID;\n                            redirect_uri = types_1.isCognitoHostedOpts(this._config.oauth)\n                                ? this._config.oauth.redirectSignIn\n                                : this._config.oauth.redirectUri;\n                            this._oAuthHandler.oauthSignIn(this._config.oauth.responseType, this._config.oauth.domain, redirect_uri, client_id, provider);\n                        }\n                        return [3 /*break*/, 8];\n                    case 1:\n                        provider = providerOrOptions;\n                        _a.label = 2;\n                    case 2:\n                        _a.trys.push([2, 4, , 5]);\n                        return [4 /*yield*/, this.currentAuthenticatedUser()];\n                    case 3:\n                        loggedInUser = _a.sent();\n                        logger.warn(\"There is already a signed in user: \" + loggedInUser + \" in your app.\\n                You should not call Auth.federatedSignIn method again as it may cause unexpected behavior.\");\n                        return [3 /*break*/, 5];\n                    case 4:\n                        e_11 = _a.sent();\n                        return [3 /*break*/, 5];\n                    case 5:\n                        token = response.token, identity_id = response.identity_id, expires_at = response.expires_at;\n                        return [4 /*yield*/, core_1.Credentials.set({ provider: provider, token: token, identity_id: identity_id, user: user, expires_at: expires_at }, 'federation')];\n                    case 6:\n                        credentials = _a.sent();\n                        return [4 /*yield*/, this.currentAuthenticatedUser()];\n                    case 7:\n                        currentUser = _a.sent();\n                        dispatchAuthEvent('signIn', currentUser, \"A user \" + currentUser.username + \" has been signed in\");\n                        logger.debug('federated sign in credentials', credentials);\n                        return [2 /*return*/, credentials];\n                    case 8: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    /**\n     * Used to complete the OAuth flow with or without the Cognito Hosted UI\n     * @param {String} URL - optional parameter for customers to pass in the response URL\n     */\n    AuthClass.prototype._handleAuthResponse = function (URL) {\n        return __awaiter(this, void 0, void 0, function () {\n            var currentUrl, hasCodeOrError, hasTokenOrError, _a, accessToken, idToken, refreshToken, session, credentials, currentUser, err_2;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        if (!this._config.userPoolId) {\n                            throw new Error(\"OAuth responses require a User Pool defined in config\");\n                        }\n                        dispatchAuthEvent('parsingCallbackUrl', { url: URL }, \"The callback url is being parsed\");\n                        currentUrl = URL || (core_1.JS.browserOrNode().isBrowser ? window.location.href : null);\n                        hasCodeOrError = !!(url_1.parse(currentUrl).query || '')\n                            .split('&')\n                            .map(function (entry) { return entry.split('='); })\n                            .find(function (_a) {\n                            var k = _a[0];\n                            return k === 'code' || k === 'error';\n                        });\n                        hasTokenOrError = !!(url_1.parse(currentUrl).hash || '#')\n                            .substr(1)\n                            .split('&')\n                            .map(function (entry) { return entry.split('='); })\n                            .find(function (_a) {\n                            var k = _a[0];\n                            return k === 'access_token' || k === 'error';\n                        });\n                        if (!(hasCodeOrError || hasTokenOrError)) return [3 /*break*/, 6];\n                        _b.label = 1;\n                    case 1:\n                        _b.trys.push([1, 5, , 6]);\n                        return [4 /*yield*/, this._oAuthHandler.handleAuthResponse(currentUrl)];\n                    case 2:\n                        _a = _b.sent(), accessToken = _a.accessToken, idToken = _a.idToken, refreshToken = _a.refreshToken;\n                        session = new amazon_cognito_identity_js_1.CognitoUserSession({\n                            IdToken: new amazon_cognito_identity_js_1.CognitoIdToken({ IdToken: idToken }),\n                            RefreshToken: new amazon_cognito_identity_js_1.CognitoRefreshToken({ RefreshToken: refreshToken }),\n                            AccessToken: new amazon_cognito_identity_js_1.CognitoAccessToken({ AccessToken: accessToken })\n                        });\n                        credentials = void 0;\n                        if (!this._config.identityPoolId) return [3 /*break*/, 4];\n                        return [4 /*yield*/, core_1.Credentials.set(session, 'session')];\n                    case 3:\n                        credentials = _b.sent();\n                        logger.debug('AWS credentials', credentials);\n                        _b.label = 4;\n                    case 4:\n                        currentUser = this.createCognitoUser(session.getIdToken().decodePayload()['cognito:username']);\n                        dispatchAuthEvent('signIn', currentUser, \"A user \" + currentUser.getUsername() + \" has been signed in\");\n                        dispatchAuthEvent('cognitoHostedUI', currentUser, \"A user \" + currentUser.getUsername() + \" has been signed in via Cognito Hosted UI\");\n                        // This calls cacheTokens() in Cognito SDK\n                        currentUser.setSignInUserSession(session);\n                        //#endregion\n                        if (window && typeof window.history !== 'undefined') {\n                            window.history.replaceState({}, null, this._config.oauth.redirectSignIn);\n                        }\n                        return [2 /*return*/, credentials];\n                    case 5:\n                        err_2 = _b.sent();\n                        logger.debug(\"Error in cognito hosted auth response\", err_2);\n                        dispatchAuthEvent('signIn_failure', err_2, \"The OAuth response flow failed\");\n                        dispatchAuthEvent('cognitoHostedUI_failure', err_2, \"A failure occurred when returning to the Cognito Hosted UI\");\n                        throw err_2;\n                    case 6: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    /**\n     * Compact version of credentials\n     * @param {Object} credentials\n     * @return {Object} - Credentials\n     */\n    AuthClass.prototype.essentialCredentials = function (credentials) {\n        return {\n            accessKeyId: credentials.accessKeyId,\n            sessionToken: credentials.sessionToken,\n            secretAccessKey: credentials.secretAccessKey,\n            identityId: credentials.identityId,\n            authenticated: credentials.authenticated\n        };\n    };\n    AuthClass.prototype.attributesToObject = function (attributes) {\n        var obj = {};\n        if (attributes) {\n            attributes.map(function (attribute) {\n                if (attribute.Value === 'true') {\n                    obj[attribute.Name] = true;\n                }\n                else if (attribute.Value === 'false') {\n                    obj[attribute.Name] = false;\n                }\n                else {\n                    obj[attribute.Name] = attribute.Value;\n                }\n            });\n        }\n        return obj;\n    };\n    AuthClass.prototype.createCognitoUser = function (username) {\n        var userData = {\n            Username: username,\n            Pool: this.userPool,\n        };\n        userData.Storage = this._storage;\n        var authenticationFlowType = this._config.authenticationFlowType;\n        var user = new amazon_cognito_identity_js_1.CognitoUser(userData);\n        if (authenticationFlowType) {\n            user.setAuthenticationFlowType(authenticationFlowType);\n        }\n        return user;\n    };\n    AuthClass.prototype._isValidAuthStorage = function (obj) {\n        // We need to check if the obj has the functions of Storage\n        return !!obj &&\n            typeof obj.getItem === 'function' &&\n            typeof obj.setItem === 'function' &&\n            typeof obj.removeItem === 'function' &&\n            typeof obj.clear === 'function';\n    };\n    return AuthClass;\n}());\nexports.default = AuthClass;\n//# sourceMappingURL=Auth.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./Auth\"));\n//# sourceMappingURL=index.js.map",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t    // Shortcuts\n\t    var C = CryptoJS;\n\t    var C_lib = C.lib;\n\t    var Base = C_lib.Base;\n\t    var C_enc = C.enc;\n\t    var Utf8 = C_enc.Utf8;\n\t    var C_algo = C.algo;\n\n\t    /**\n\t     * HMAC algorithm.\n\t     */\n\t    var HMAC = C_algo.HMAC = Base.extend({\n\t        /**\n\t         * Initializes a newly created HMAC.\n\t         *\n\t         * @param {Hasher} hasher The hash algorithm to use.\n\t         * @param {WordArray|string} key The secret key.\n\t         *\n\t         * @example\n\t         *\n\t         *     var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t         */\n\t        init: function (hasher, key) {\n\t            // Init hasher\n\t            hasher = this._hasher = new hasher.init();\n\n\t            // Convert string to WordArray, else assume WordArray already\n\t            if (typeof key == 'string') {\n\t                key = Utf8.parse(key);\n\t            }\n\n\t            // Shortcuts\n\t            var hasherBlockSize = hasher.blockSize;\n\t            var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t            // Allow arbitrary length keys\n\t            if (key.sigBytes > hasherBlockSizeBytes) {\n\t                key = hasher.finalize(key);\n\t            }\n\n\t            // Clamp excess bits\n\t            key.clamp();\n\n\t            // Clone key for inner and outer pads\n\t            var oKey = this._oKey = key.clone();\n\t            var iKey = this._iKey = key.clone();\n\n\t            // Shortcuts\n\t            var oKeyWords = oKey.words;\n\t            var iKeyWords = iKey.words;\n\n\t            // XOR keys with pad constants\n\t            for (var i = 0; i < hasherBlockSize; i++) {\n\t                oKeyWords[i] ^= 0x5c5c5c5c;\n\t                iKeyWords[i] ^= 0x36363636;\n\t            }\n\t            oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t            // Set initial values\n\t            this.reset();\n\t        },\n\n\t        /**\n\t         * Resets this HMAC to its initial state.\n\t         *\n\t         * @example\n\t         *\n\t         *     hmacHasher.reset();\n\t         */\n\t        reset: function () {\n\t            // Shortcut\n\t            var hasher = this._hasher;\n\n\t            // Reset\n\t            hasher.reset();\n\t            hasher.update(this._iKey);\n\t        },\n\n\t        /**\n\t         * Updates this HMAC with a message.\n\t         *\n\t         * @param {WordArray|string} messageUpdate The message to append.\n\t         *\n\t         * @return {HMAC} This HMAC instance.\n\t         *\n\t         * @example\n\t         *\n\t         *     hmacHasher.update('message');\n\t         *     hmacHasher.update(wordArray);\n\t         */\n\t        update: function (messageUpdate) {\n\t            this._hasher.update(messageUpdate);\n\n\t            // Chainable\n\t            return this;\n\t        },\n\n\t        /**\n\t         * Finalizes the HMAC computation.\n\t         * Note that the finalize operation is effectively a destructive, read-once operation.\n\t         *\n\t         * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t         *\n\t         * @return {WordArray} The HMAC.\n\t         *\n\t         * @example\n\t         *\n\t         *     var hmac = hmacHasher.finalize();\n\t         *     var hmac = hmacHasher.finalize('message');\n\t         *     var hmac = hmacHasher.finalize(wordArray);\n\t         */\n\t        finalize: function (messageUpdate) {\n\t            // Shortcut\n\t            var hasher = this._hasher;\n\n\t            // Compute HMAC\n\t            var innerHash = hasher.finalize(messageUpdate);\n\t            hasher.reset();\n\t            var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t            return hmac;\n\t        }\n\t    });\n\t}());\n\n\n}));","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar url_1 = require(\"url\"); // Used for OAuth parsing of Cognito Hosted UI\nvar urlOpener_1 = require(\"./urlOpener\");\nvar oAuthStorage = require(\"./oauthStorage\");\nvar Auth_1 = require(\"../types/Auth\");\nvar core_1 = require(\"@aws-amplify/core\");\nvar SHA256 = require(\"crypto-js/sha256\");\nvar Base64 = require(\"crypto-js/enc-base64\");\nvar AMPLIFY_SYMBOL = ((typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') ?\n    Symbol.for('amplify_default') : '@@amplify_default');\nvar dispatchAuthEvent = function (event, data, message) {\n    core_1.Hub.dispatch('auth', { event: event, data: data, message: message }, 'Auth', AMPLIFY_SYMBOL);\n};\nvar logger = new core_1.ConsoleLogger('OAuth');\nvar OAuth = /** @class */ (function () {\n    function OAuth(_a) {\n        var config = _a.config, cognitoClientId = _a.cognitoClientId, _b = _a.scopes, scopes = _b === void 0 ? [] : _b;\n        this._urlOpener = config.urlOpener || urlOpener_1.launchUri;\n        this._config = config;\n        this._cognitoClientId = cognitoClientId;\n        this._scopes = scopes;\n    }\n    OAuth.prototype.oauthSignIn = function (responseType, domain, redirectSignIn, clientId, provider) {\n        if (responseType === void 0) { responseType = 'code'; }\n        if (provider === void 0) { provider = Auth_1.CognitoHostedUIIdentityProvider.Cognito; }\n        var state = this._generateState(32);\n        oAuthStorage.setState(state);\n        var pkce_key = this._generateRandom(128);\n        oAuthStorage.setPKCE(pkce_key);\n        var code_challenge = this._generateChallenge(pkce_key);\n        var code_challenge_method = 'S256';\n        var queryString = Object.entries(__assign({ redirect_uri: redirectSignIn, response_type: responseType, client_id: clientId, identity_provider: provider, scopes: this._scopes, state: state }, (responseType === 'code' ? { code_challenge: code_challenge } : {}), (responseType === 'code' ? { code_challenge_method: code_challenge_method } : {}))).map(function (_a) {\n            var k = _a[0], v = _a[1];\n            return encodeURIComponent(k) + \"=\" + encodeURIComponent(v);\n        }).join('&');\n        var URL = \"https://\" + domain + \"/oauth2/authorize?\" + queryString;\n        logger.debug(\"Redirecting to \" + URL);\n        this._urlOpener(URL, redirectSignIn);\n    };\n    OAuth.prototype._handleCodeFlow = function (currentUrl) {\n        return __awaiter(this, void 0, void 0, function () {\n            var code, oAuthTokenEndpoint, client_id, redirect_uri, code_verifier, oAuthTokenBody, body, _a, access_token, refresh_token, id_token, error;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        code = (url_1.parse(currentUrl).query || '')\n                            .split('&')\n                            .map(function (pairings) { return pairings.split('='); })\n                            .reduce(function (accum, _a) {\n                            var k = _a[0], v = _a[1];\n                            var _b;\n                            return (__assign({}, accum, (_b = {}, _b[k] = v, _b)));\n                        }, { code: undefined }).code;\n                        if (!code) {\n                            return [2 /*return*/];\n                        }\n                        oAuthTokenEndpoint = 'https://' + this._config.domain + '/oauth2/token';\n                        dispatchAuthEvent('codeFlow', {}, \"Retrieving tokens from \" + oAuthTokenEndpoint);\n                        client_id = Auth_1.isCognitoHostedOpts(this._config)\n                            ? this._cognitoClientId\n                            : this._config.clientID;\n                        redirect_uri = Auth_1.isCognitoHostedOpts(this._config)\n                            ? this._config.redirectSignIn\n                            : this._config.redirectUri;\n                        code_verifier = oAuthStorage.getPKCE();\n                        oAuthTokenBody = __assign({ grant_type: 'authorization_code', code: code,\n                            client_id: client_id,\n                            redirect_uri: redirect_uri }, (code_verifier ? { code_verifier: code_verifier } : {}));\n                        logger.debug(\"Calling token endpoint: \" + oAuthTokenEndpoint + \" with\", oAuthTokenBody);\n                        body = Object.entries(oAuthTokenBody)\n                            .map(function (_a) {\n                            var k = _a[0], v = _a[1];\n                            return encodeURIComponent(k) + \"=\" + encodeURIComponent(v);\n                        })\n                            .join('&');\n                        return [4 /*yield*/, fetch(oAuthTokenEndpoint, {\n                                method: 'POST',\n                                headers: {\n                                    'Content-Type': 'application/x-www-form-urlencoded'\n                                },\n                                body: typeof URLSearchParams !== 'undefined' ? new URLSearchParams(body) : body\n                            })];\n                    case 1: return [4 /*yield*/, (_b.sent()).json()];\n                    case 2:\n                        _a = _b.sent(), access_token = _a.access_token, refresh_token = _a.refresh_token, id_token = _a.id_token, error = _a.error;\n                        if (error) {\n                            throw new Error(error);\n                        }\n                        return [2 /*return*/, {\n                                accessToken: access_token,\n                                refreshToken: refresh_token,\n                                idToken: id_token\n                            }];\n                }\n            });\n        });\n    };\n    OAuth.prototype._handleImplicitFlow = function (currentUrl) {\n        return __awaiter(this, void 0, void 0, function () {\n            var _a, id_token, access_token;\n            return __generator(this, function (_b) {\n                _a = url_1.parse(currentUrl).hash\n                    .substr(1) // Remove # from returned code\n                    .split('&')\n                    .map(function (pairings) { return pairings.split('='); })\n                    .reduce(function (accum, _a) {\n                    var k = _a[0], v = _a[1];\n                    var _b;\n                    return (__assign({}, accum, (_b = {}, _b[k] = v, _b)));\n                }, {\n                    id_token: undefined, access_token: undefined\n                }), id_token = _a.id_token, access_token = _a.access_token;\n                dispatchAuthEvent('implicitFlow', {}, \"Got tokens from \" + currentUrl);\n                logger.debug(\"Retrieving implicit tokens from \" + currentUrl + \" with\");\n                return [2 /*return*/, {\n                        accessToken: access_token,\n                        idToken: id_token,\n                        refreshToken: null\n                    }];\n            });\n        });\n    };\n    OAuth.prototype.handleAuthResponse = function (currentUrl) {\n        return __awaiter(this, void 0, void 0, function () {\n            var urlParams, error, error_description;\n            return __generator(this, function (_a) {\n                urlParams = currentUrl ? __assign({}, (url_1.parse(currentUrl).hash || '#').substr(1)\n                    .split('&')\n                    .map(function (entry) { return entry.split('='); })\n                    .reduce(function (acc, _a) {\n                    var k = _a[0], v = _a[1];\n                    return (acc[k] = v, acc);\n                }, {}), (url_1.parse(currentUrl).query || '')\n                    .split('&')\n                    .map(function (entry) { return entry.split('='); })\n                    .reduce(function (acc, _a) {\n                    var k = _a[0], v = _a[1];\n                    return (acc[k] = v, acc);\n                }, {})) : {};\n                error = urlParams.error, error_description = urlParams.error_description;\n                if (error) {\n                    throw new Error(error_description);\n                }\n                this._validateState(urlParams);\n                logger.debug(\"Starting \" + this._config.responseType + \" flow with \" + currentUrl);\n                if (this._config.responseType === 'code') {\n                    return [2 /*return*/, this._handleCodeFlow(currentUrl)];\n                }\n                else {\n                    return [2 /*return*/, this._handleImplicitFlow(currentUrl)];\n                }\n                return [2 /*return*/];\n            });\n        });\n    };\n    OAuth.prototype._validateState = function (urlParams) {\n        if (!urlParams) {\n            return;\n        }\n        var savedState = oAuthStorage.getState();\n        var returnedState = urlParams.state;\n        // This is because savedState only exists if the flow was initiated by Amplify\n        if (savedState && savedState !== returnedState) {\n            throw new Error('Invalid state in OAuth flow');\n        }\n    };\n    OAuth.prototype.signOut = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var oAuthLogoutEndpoint, client_id, signout_uri;\n            return __generator(this, function (_a) {\n                oAuthLogoutEndpoint = 'https://' + this._config.domain + '/logout?';\n                client_id = Auth_1.isCognitoHostedOpts(this._config)\n                    ? this._cognitoClientId\n                    : this._config.oauth.clientID;\n                signout_uri = Auth_1.isCognitoHostedOpts(this._config)\n                    ? this._config.redirectSignOut\n                    : this._config.returnTo;\n                oAuthLogoutEndpoint += Object.entries({\n                    client_id: client_id,\n                    logout_uri: encodeURIComponent(signout_uri)\n                }).map(function (_a) {\n                    var k = _a[0], v = _a[1];\n                    return k + \"=\" + v;\n                }).join('&');\n                dispatchAuthEvent('oAuthSignOut', { oAuth: 'signOut' }, \"Signing out from \" + oAuthLogoutEndpoint);\n                logger.debug(\"Signing out from \" + oAuthLogoutEndpoint);\n                return [2 /*return*/, this._urlOpener(oAuthLogoutEndpoint)];\n            });\n        });\n    };\n    OAuth.prototype._generateState = function (length) {\n        var result = '';\n        var i = length;\n        var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n        for (; i > 0; --i)\n            result += chars[Math.round(Math.random() * (chars.length - 1))];\n        return result;\n    };\n    OAuth.prototype._generateChallenge = function (code) {\n        return this._base64URL(SHA256(code));\n    };\n    OAuth.prototype._base64URL = function (string) {\n        return string.toString(Base64).replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n    };\n    OAuth.prototype._generateRandom = function (size) {\n        var CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';\n        var buffer = new Uint8Array(size);\n        if (typeof window !== 'undefined' && !!(window.crypto)) {\n            window.crypto.getRandomValues(buffer);\n        }\n        else {\n            for (var i = 0; i < size; i += 1) {\n                buffer[i] = (Math.random() * CHARSET.length) | 0;\n            }\n        }\n        return this._bufferToString(buffer);\n    };\n    OAuth.prototype._bufferToString = function (buffer) {\n        var CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n        var state = [];\n        for (var i = 0; i < buffer.byteLength; i += 1) {\n            var index = buffer[i] % CHARSET.length;\n            state.push(CHARSET[index]);\n        }\n        return state.join('');\n    };\n    return OAuth;\n}());\nexports.default = OAuth;\n//# sourceMappingURL=OAuth.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar SELF = '_self';\nexports.launchUri = function (url) {\n    var windowProxy = window.open(url, SELF);\n    if (windowProxy) {\n        return Promise.resolve(windowProxy);\n    }\n    else {\n        return Promise.reject();\n    }\n};\n//# sourceMappingURL=urlOpener.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.setState = function (state) {\n    window.sessionStorage.setItem('oauth_state', state);\n};\nexports.getState = function () {\n    var oauth_state = window.sessionStorage.getItem('oauth_state');\n    window.sessionStorage.removeItem('oauth_state');\n    return oauth_state;\n};\nexports.setPKCE = function (private_key) {\n    window.sessionStorage.setItem('ouath_pkce_key', private_key);\n};\nexports.getPKCE = function () {\n    var ouath_pkce_key = window.sessionStorage.getItem('ouath_pkce_key');\n    window.sessionStorage.removeItem('ouath_pkce_key');\n    return ouath_pkce_key;\n};\nexports.clearAll = function () {\n    window.sessionStorage.removeItem('ouath_pkce_key');\n    window.sessionStorage.removeItem('oauth_state');\n};\n//# sourceMappingURL=oauthStorage.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar core_1 = require(\"@aws-amplify/core\");\nexports.default = (function (callback) {\n    if (core_1.JS.browserOrNode().isBrowser && window.location) {\n        var url = window.location.href;\n        callback({ url: url });\n    }\n    else if (core_1.JS.browserOrNode().isNode) {\n        // continue building on ssr\n        (function () { }); // noop\n    }\n    else {\n        throw new Error('Not supported');\n    }\n});\n//# sourceMappingURL=urlListener.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Storage_1 = require(\"./Storage\");\nexports.StorageClass = Storage_1.default;\nvar core_1 = require(\"@aws-amplify/core\");\nvar logger = new core_1.ConsoleLogger('Storage');\nvar _instance = null;\nif (!_instance) {\n    logger.debug('Create Storage Instance');\n    _instance = new Storage_1.default();\n    _instance.vault = new Storage_1.default();\n    var old_configure_1 = _instance.configure;\n    _instance.configure = function (options) {\n        logger.debug('storage configure called');\n        var vaultConfig = __assign({}, old_configure_1.call(_instance, options));\n        // set level private for each provider for the vault\n        Object.keys(vaultConfig).forEach(function (providerName) {\n            if (typeof vaultConfig[providerName] !== 'string') {\n                vaultConfig[providerName] = __assign({}, vaultConfig[providerName], { level: \"private\" });\n            }\n        });\n        logger.debug('storage vault configure called');\n        _instance.vault.configure(vaultConfig);\n    };\n}\nvar Storage = _instance;\ncore_1.default.register(Storage);\nexports.default = Storage;\n__export(require(\"./Providers\"));\n//# sourceMappingURL=index.js.map",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\t    /*\n\t     * Local polyfil of Object.create\n\t     */\n\t    var create = Object.create || (function () {\n\t        function F() {};\n\n\t        return function (obj) {\n\t            var subtype;\n\n\t            F.prototype = obj;\n\n\t            subtype = new F();\n\n\t            F.prototype = null;\n\n\t            return subtype;\n\t        };\n\t    }())\n\n\t    /**\n\t     * CryptoJS namespace.\n\t     */\n\t    var C = {};\n\n\t    /**\n\t     * Library namespace.\n\t     */\n\t    var C_lib = C.lib = {};\n\n\t    /**\n\t     * Base object for prototypal inheritance.\n\t     */\n\t    var Base = C_lib.Base = (function () {\n\n\n\t        return {\n\t            /**\n\t             * Creates a new object that inherits from this object.\n\t             *\n\t             * @param {Object} overrides Properties to copy into the new object.\n\t             *\n\t             * @return {Object} The new object.\n\t             *\n\t             * @static\n\t             *\n\t             * @example\n\t             *\n\t             *     var MyType = CryptoJS.lib.Base.extend({\n\t             *         field: 'value',\n\t             *\n\t             *         method: function () {\n\t             *         }\n\t             *     });\n\t             */\n\t            extend: function (overrides) {\n\t                // Spawn\n\t                var subtype = create(this);\n\n\t                // Augment\n\t                if (overrides) {\n\t                    subtype.mixIn(overrides);\n\t                }\n\n\t                // Create default initializer\n\t                if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t                    subtype.init = function () {\n\t                        subtype.$super.init.apply(this, arguments);\n\t                    };\n\t                }\n\n\t                // Initializer's prototype is the subtype object\n\t                subtype.init.prototype = subtype;\n\n\t                // Reference supertype\n\t                subtype.$super = this;\n\n\t                return subtype;\n\t            },\n\n\t            /**\n\t             * Extends this object and runs the init method.\n\t             * Arguments to create() will be passed to init().\n\t             *\n\t             * @return {Object} The new object.\n\t             *\n\t             * @static\n\t             *\n\t             * @example\n\t             *\n\t             *     var instance = MyType.create();\n\t             */\n\t            create: function () {\n\t                var instance = this.extend();\n\t                instance.init.apply(instance, arguments);\n\n\t                return instance;\n\t            },\n\n\t            /**\n\t             * Initializes a newly created object.\n\t             * Override this method to add some logic when your objects are created.\n\t             *\n\t             * @example\n\t             *\n\t             *     var MyType = CryptoJS.lib.Base.extend({\n\t             *         init: function () {\n\t             *             // ...\n\t             *         }\n\t             *     });\n\t             */\n\t            init: function () {\n\t            },\n\n\t            /**\n\t             * Copies properties into this object.\n\t             *\n\t             * @param {Object} properties The properties to mix in.\n\t             *\n\t             * @example\n\t             *\n\t             *     MyType.mixIn({\n\t             *         field: 'value'\n\t             *     });\n\t             */\n\t            mixIn: function (properties) {\n\t                for (var propertyName in properties) {\n\t                    if (properties.hasOwnProperty(propertyName)) {\n\t                        this[propertyName] = properties[propertyName];\n\t                    }\n\t                }\n\n\t                // IE won't copy toString using the loop above\n\t                if (properties.hasOwnProperty('toString')) {\n\t                    this.toString = properties.toString;\n\t                }\n\t            },\n\n\t            /**\n\t             * Creates a copy of this object.\n\t             *\n\t             * @return {Object} The clone.\n\t             *\n\t             * @example\n\t             *\n\t             *     var clone = instance.clone();\n\t             */\n\t            clone: function () {\n\t                return this.init.prototype.extend(this);\n\t            }\n\t        };\n\t    }());\n\n\t    /**\n\t     * An array of 32-bit words.\n\t     *\n\t     * @property {Array} words The array of 32-bit words.\n\t     * @property {number} sigBytes The number of significant bytes in this word array.\n\t     */\n\t    var WordArray = C_lib.WordArray = Base.extend({\n\t        /**\n\t         * Initializes a newly created word array.\n\t         *\n\t         * @param {Array} words (Optional) An array of 32-bit words.\n\t         * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.lib.WordArray.create();\n\t         *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t         *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t         */\n\t        init: function (words, sigBytes) {\n\t            words = this.words = words || [];\n\n\t            if (sigBytes != undefined) {\n\t                this.sigBytes = sigBytes;\n\t            } else {\n\t                this.sigBytes = words.length * 4;\n\t            }\n\t        },\n\n\t        /**\n\t         * Converts this word array to a string.\n\t         *\n\t         * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t         *\n\t         * @return {string} The stringified word array.\n\t         *\n\t         * @example\n\t         *\n\t         *     var string = wordArray + '';\n\t         *     var string = wordArray.toString();\n\t         *     var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t         */\n\t        toString: function (encoder) {\n\t            return (encoder || Hex).stringify(this);\n\t        },\n\n\t        /**\n\t         * Concatenates a word array to this word array.\n\t         *\n\t         * @param {WordArray} wordArray The word array to append.\n\t         *\n\t         * @return {WordArray} This word array.\n\t         *\n\t         * @example\n\t         *\n\t         *     wordArray1.concat(wordArray2);\n\t         */\n\t        concat: function (wordArray) {\n\t            // Shortcuts\n\t            var thisWords = this.words;\n\t            var thatWords = wordArray.words;\n\t            var thisSigBytes = this.sigBytes;\n\t            var thatSigBytes = wordArray.sigBytes;\n\n\t            // Clamp excess bits\n\t            this.clamp();\n\n\t            // Concat\n\t            if (thisSigBytes % 4) {\n\t                // Copy one byte at a time\n\t                for (var i = 0; i < thatSigBytes; i++) {\n\t                    var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t                    thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t                }\n\t            } else {\n\t                // Copy one word at a time\n\t                for (var i = 0; i < thatSigBytes; i += 4) {\n\t                    thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];\n\t                }\n\t            }\n\t            this.sigBytes += thatSigBytes;\n\n\t            // Chainable\n\t            return this;\n\t        },\n\n\t        /**\n\t         * Removes insignificant bits.\n\t         *\n\t         * @example\n\t         *\n\t         *     wordArray.clamp();\n\t         */\n\t        clamp: function () {\n\t            // Shortcuts\n\t            var words = this.words;\n\t            var sigBytes = this.sigBytes;\n\n\t            // Clamp\n\t            words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t            words.length = Math.ceil(sigBytes / 4);\n\t        },\n\n\t        /**\n\t         * Creates a copy of this word array.\n\t         *\n\t         * @return {WordArray} The clone.\n\t         *\n\t         * @example\n\t         *\n\t         *     var clone = wordArray.clone();\n\t         */\n\t        clone: function () {\n\t            var clone = Base.clone.call(this);\n\t            clone.words = this.words.slice(0);\n\n\t            return clone;\n\t        },\n\n\t        /**\n\t         * Creates a word array filled with random bytes.\n\t         *\n\t         * @param {number} nBytes The number of random bytes to generate.\n\t         *\n\t         * @return {WordArray} The random word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.lib.WordArray.random(16);\n\t         */\n\t        random: function (nBytes) {\n\t            var words = [];\n\n\t            var r = (function (m_w) {\n\t                var m_w = m_w;\n\t                var m_z = 0x3ade68b1;\n\t                var mask = 0xffffffff;\n\n\t                return function () {\n\t                    m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask;\n\t                    m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask;\n\t                    var result = ((m_z << 0x10) + m_w) & mask;\n\t                    result /= 0x100000000;\n\t                    result += 0.5;\n\t                    return result * (Math.random() > .5 ? 1 : -1);\n\t                }\n\t            });\n\n\t            for (var i = 0, rcache; i < nBytes; i += 4) {\n\t                var _r = r((rcache || Math.random()) * 0x100000000);\n\n\t                rcache = _r() * 0x3ade67b7;\n\t                words.push((_r() * 0x100000000) | 0);\n\t            }\n\n\t            return new WordArray.init(words, nBytes);\n\t        }\n\t    });\n\n\t    /**\n\t     * Encoder namespace.\n\t     */\n\t    var C_enc = C.enc = {};\n\n\t    /**\n\t     * Hex encoding strategy.\n\t     */\n\t    var Hex = C_enc.Hex = {\n\t        /**\n\t         * Converts a word array to a hex string.\n\t         *\n\t         * @param {WordArray} wordArray The word array.\n\t         *\n\t         * @return {string} The hex string.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t         */\n\t        stringify: function (wordArray) {\n\t            // Shortcuts\n\t            var words = wordArray.words;\n\t            var sigBytes = wordArray.sigBytes;\n\n\t            // Convert\n\t            var hexChars = [];\n\t            for (var i = 0; i < sigBytes; i++) {\n\t                var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t                hexChars.push((bite >>> 4).toString(16));\n\t                hexChars.push((bite & 0x0f).toString(16));\n\t            }\n\n\t            return hexChars.join('');\n\t        },\n\n\t        /**\n\t         * Converts a hex string to a word array.\n\t         *\n\t         * @param {string} hexStr The hex string.\n\t         *\n\t         * @return {WordArray} The word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t         */\n\t        parse: function (hexStr) {\n\t            // Shortcut\n\t            var hexStrLength = hexStr.length;\n\n\t            // Convert\n\t            var words = [];\n\t            for (var i = 0; i < hexStrLength; i += 2) {\n\t                words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t            }\n\n\t            return new WordArray.init(words, hexStrLength / 2);\n\t        }\n\t    };\n\n\t    /**\n\t     * Latin1 encoding strategy.\n\t     */\n\t    var Latin1 = C_enc.Latin1 = {\n\t        /**\n\t         * Converts a word array to a Latin1 string.\n\t         *\n\t         * @param {WordArray} wordArray The word array.\n\t         *\n\t         * @return {string} The Latin1 string.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t         */\n\t        stringify: function (wordArray) {\n\t            // Shortcuts\n\t            var words = wordArray.words;\n\t            var sigBytes = wordArray.sigBytes;\n\n\t            // Convert\n\t            var latin1Chars = [];\n\t            for (var i = 0; i < sigBytes; i++) {\n\t                var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t                latin1Chars.push(String.fromCharCode(bite));\n\t            }\n\n\t            return latin1Chars.join('');\n\t        },\n\n\t        /**\n\t         * Converts a Latin1 string to a word array.\n\t         *\n\t         * @param {string} latin1Str The Latin1 string.\n\t         *\n\t         * @return {WordArray} The word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t         */\n\t        parse: function (latin1Str) {\n\t            // Shortcut\n\t            var latin1StrLength = latin1Str.length;\n\n\t            // Convert\n\t            var words = [];\n\t            for (var i = 0; i < latin1StrLength; i++) {\n\t                words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t            }\n\n\t            return new WordArray.init(words, latin1StrLength);\n\t        }\n\t    };\n\n\t    /**\n\t     * UTF-8 encoding strategy.\n\t     */\n\t    var Utf8 = C_enc.Utf8 = {\n\t        /**\n\t         * Converts a word array to a UTF-8 string.\n\t         *\n\t         * @param {WordArray} wordArray The word array.\n\t         *\n\t         * @return {string} The UTF-8 string.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t         */\n\t        stringify: function (wordArray) {\n\t            try {\n\t                return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t            } catch (e) {\n\t                throw new Error('Malformed UTF-8 data');\n\t            }\n\t        },\n\n\t        /**\n\t         * Converts a UTF-8 string to a word array.\n\t         *\n\t         * @param {string} utf8Str The UTF-8 string.\n\t         *\n\t         * @return {WordArray} The word array.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t         */\n\t        parse: function (utf8Str) {\n\t            return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t        }\n\t    };\n\n\t    /**\n\t     * Abstract buffered block algorithm template.\n\t     *\n\t     * The property blockSize must be implemented in a concrete subtype.\n\t     *\n\t     * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t     */\n\t    var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t        /**\n\t         * Resets this block algorithm's data buffer to its initial state.\n\t         *\n\t         * @example\n\t         *\n\t         *     bufferedBlockAlgorithm.reset();\n\t         */\n\t        reset: function () {\n\t            // Initial values\n\t            this._data = new WordArray.init();\n\t            this._nDataBytes = 0;\n\t        },\n\n\t        /**\n\t         * Adds new data to this block algorithm's buffer.\n\t         *\n\t         * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t         *\n\t         * @example\n\t         *\n\t         *     bufferedBlockAlgorithm._append('data');\n\t         *     bufferedBlockAlgorithm._append(wordArray);\n\t         */\n\t        _append: function (data) {\n\t            // Convert string to WordArray, else assume WordArray already\n\t            if (typeof data == 'string') {\n\t                data = Utf8.parse(data);\n\t            }\n\n\t            // Append\n\t            this._data.concat(data);\n\t            this._nDataBytes += data.sigBytes;\n\t        },\n\n\t        /**\n\t         * Processes available data blocks.\n\t         *\n\t         * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t         *\n\t         * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t         *\n\t         * @return {WordArray} The processed data.\n\t         *\n\t         * @example\n\t         *\n\t         *     var processedData = bufferedBlockAlgorithm._process();\n\t         *     var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t         */\n\t        _process: function (doFlush) {\n\t            // Shortcuts\n\t            var data = this._data;\n\t            var dataWords = data.words;\n\t            var dataSigBytes = data.sigBytes;\n\t            var blockSize = this.blockSize;\n\t            var blockSizeBytes = blockSize * 4;\n\n\t            // Count blocks ready\n\t            var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t            if (doFlush) {\n\t                // Round up to include partial blocks\n\t                nBlocksReady = Math.ceil(nBlocksReady);\n\t            } else {\n\t                // Round down to include only full blocks,\n\t                // less the number of blocks that must remain in the buffer\n\t                nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t            }\n\n\t            // Count words ready\n\t            var nWordsReady = nBlocksReady * blockSize;\n\n\t            // Count bytes ready\n\t            var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t            // Process blocks\n\t            if (nWordsReady) {\n\t                for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t                    // Perform concrete-algorithm logic\n\t                    this._doProcessBlock(dataWords, offset);\n\t                }\n\n\t                // Remove processed words\n\t                var processedWords = dataWords.splice(0, nWordsReady);\n\t                data.sigBytes -= nBytesReady;\n\t            }\n\n\t            // Return processed words\n\t            return new WordArray.init(processedWords, nBytesReady);\n\t        },\n\n\t        /**\n\t         * Creates a copy of this object.\n\t         *\n\t         * @return {Object} The clone.\n\t         *\n\t         * @example\n\t         *\n\t         *     var clone = bufferedBlockAlgorithm.clone();\n\t         */\n\t        clone: function () {\n\t            var clone = Base.clone.call(this);\n\t            clone._data = this._data.clone();\n\n\t            return clone;\n\t        },\n\n\t        _minBufferSize: 0\n\t    });\n\n\t    /**\n\t     * Abstract hasher template.\n\t     *\n\t     * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t     */\n\t    var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t        /**\n\t         * Configuration options.\n\t         */\n\t        cfg: Base.extend(),\n\n\t        /**\n\t         * Initializes a newly created hasher.\n\t         *\n\t         * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t         *\n\t         * @example\n\t         *\n\t         *     var hasher = CryptoJS.algo.SHA256.create();\n\t         */\n\t        init: function (cfg) {\n\t            // Apply config defaults\n\t            this.cfg = this.cfg.extend(cfg);\n\n\t            // Set initial values\n\t            this.reset();\n\t        },\n\n\t        /**\n\t         * Resets this hasher to its initial state.\n\t         *\n\t         * @example\n\t         *\n\t         *     hasher.reset();\n\t         */\n\t        reset: function () {\n\t            // Reset data buffer\n\t            BufferedBlockAlgorithm.reset.call(this);\n\n\t            // Perform concrete-hasher logic\n\t            this._doReset();\n\t        },\n\n\t        /**\n\t         * Updates this hasher with a message.\n\t         *\n\t         * @param {WordArray|string} messageUpdate The message to append.\n\t         *\n\t         * @return {Hasher} This hasher.\n\t         *\n\t         * @example\n\t         *\n\t         *     hasher.update('message');\n\t         *     hasher.update(wordArray);\n\t         */\n\t        update: function (messageUpdate) {\n\t            // Append\n\t            this._append(messageUpdate);\n\n\t            // Update the hash\n\t            this._process();\n\n\t            // Chainable\n\t            return this;\n\t        },\n\n\t        /**\n\t         * Finalizes the hash computation.\n\t         * Note that the finalize operation is effectively a destructive, read-once operation.\n\t         *\n\t         * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t         *\n\t         * @return {WordArray} The hash.\n\t         *\n\t         * @example\n\t         *\n\t         *     var hash = hasher.finalize();\n\t         *     var hash = hasher.finalize('message');\n\t         *     var hash = hasher.finalize(wordArray);\n\t         */\n\t        finalize: function (messageUpdate) {\n\t            // Final message update\n\t            if (messageUpdate) {\n\t                this._append(messageUpdate);\n\t            }\n\n\t            // Perform concrete-hasher logic\n\t            var hash = this._doFinalize();\n\n\t            return hash;\n\t        },\n\n\t        blockSize: 512/32,\n\n\t        /**\n\t         * Creates a shortcut function to a hasher's object interface.\n\t         *\n\t         * @param {Hasher} hasher The hasher to create a helper for.\n\t         *\n\t         * @return {Function} The shortcut function.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t         */\n\t        _createHelper: function (hasher) {\n\t            return function (message, cfg) {\n\t                return new hasher.init(cfg).finalize(message);\n\t            };\n\t        },\n\n\t        /**\n\t         * Creates a shortcut function to the HMAC's object interface.\n\t         *\n\t         * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t         *\n\t         * @return {Function} The shortcut function.\n\t         *\n\t         * @static\n\t         *\n\t         * @example\n\t         *\n\t         *     var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t         */\n\t        _createHmacHelper: function (hasher) {\n\t            return function (message, key) {\n\t                return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t            };\n\t        }\n\t    });\n\n\t    /**\n\t     * Algorithm namespace.\n\t     */\n\t    var C_algo = C.algo = {};\n\n\t    return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@aws-amplify/core\");\nvar AWSS3Provider_1 = require(\"./Providers/AWSS3Provider\");\nvar logger = new core_1.ConsoleLogger('StorageClass');\nvar DEFAULT_PROVIDER = 'AWSS3';\n/**\n * Provide storage methods to use AWS S3\n */\nvar StorageClass = /** @class */ (function () {\n    /**\n     * Initialize Storage\n     * @param {Object} config - Configuration object for storage\n     */\n    function StorageClass() {\n        this._config = {};\n        this._pluggables = [];\n        logger.debug('Storage Options', this._config);\n        this.get = this.get.bind(this);\n        this.put = this.put.bind(this);\n        this.remove = this.remove.bind(this);\n        this.list = this.list.bind(this);\n    }\n    StorageClass.prototype.getModuleName = function () {\n        return 'Storage';\n    };\n    /**\n     * add plugin into Storage category\n     * @param {Object} pluggable - an instance of the plugin\n     */\n    StorageClass.prototype.addPluggable = function (pluggable) {\n        if (pluggable && pluggable.getCategory() === 'Storage') {\n            this._pluggables.push(pluggable);\n            var config = {};\n            config = pluggable.configure(this._config[pluggable.getProviderName()]);\n            return config;\n        }\n    };\n    /**\n     * Get the plugin object\n     * @param providerName - the name of the plugin\n     */\n    StorageClass.prototype.getPluggable = function (providerName) {\n        var pluggable = this._pluggables.find(function (pluggable) { return pluggable.getProviderName() === providerName; });\n        if (pluggable === undefined) {\n            logger.debug('No plugin found with providerName', providerName);\n            return null;\n        }\n        else\n            return pluggable;\n    };\n    /**\n     * Remove the plugin object\n     * @param providerName - the name of the plugin\n     */\n    StorageClass.prototype.removePluggable = function (providerName) {\n        this._pluggables = this._pluggables.filter(function (pluggable) { return pluggable.getProviderName() !== providerName; });\n        return;\n    };\n    /**\n     * Configure Storage\n     * @param {Object} config - Configuration object for storage\n     * @return {Object} - Current configuration\n     */\n    StorageClass.prototype.configure = function (config) {\n        var _this = this;\n        logger.debug('configure Storage');\n        if (!config)\n            return this._config;\n        var amplifyConfig = core_1.Parser.parseMobilehubConfig(config);\n        var _a = amplifyConfig.Storage, bucket = _a.bucket, region = _a.region, level = _a.level, track = _a.track, customPrefix = _a.customPrefix;\n        // Update DEFAULT_PROVIDER with defined attributes bucket, region, level, track, customPrefix if exists \n        // on amplifyConfig.Storage, backwards compatible issue \n        if ((bucket || region || level || track || customPrefix) && !amplifyConfig.Storage[DEFAULT_PROVIDER]) {\n            amplifyConfig.Storage[DEFAULT_PROVIDER] = {};\n        }\n        if (bucket) {\n            amplifyConfig.Storage[DEFAULT_PROVIDER].bucket = bucket;\n            delete amplifyConfig.Storage['bucket'];\n        }\n        if (region) {\n            amplifyConfig.Storage[DEFAULT_PROVIDER].region = region;\n            delete amplifyConfig.Storage['region'];\n        }\n        if (level) {\n            amplifyConfig.Storage[DEFAULT_PROVIDER].level = level;\n            delete amplifyConfig.Storage['level'];\n        }\n        if (track) {\n            amplifyConfig.Storage[DEFAULT_PROVIDER].track = track;\n            delete amplifyConfig.Storage['track'];\n        }\n        if (customPrefix) {\n            amplifyConfig.Storage[DEFAULT_PROVIDER].customPrefix = customPrefix;\n            delete amplifyConfig.Storage['customPrefix'];\n        }\n        // only update new values for each provider\n        Object.keys(amplifyConfig.Storage).forEach(function (providerName) {\n            if (typeof amplifyConfig.Storage[providerName] !== 'string') {\n                _this._config[providerName] = __assign({}, _this._config[providerName], amplifyConfig.Storage[providerName]);\n            }\n        });\n        this._pluggables.forEach(function (pluggable) {\n            pluggable.configure(_this._config[pluggable.getProviderName()]);\n        });\n        if (this._pluggables.length === 0) {\n            this.addPluggable(new AWSS3Provider_1.default());\n        }\n        return this._config;\n    };\n    /**\n    * Get a presigned URL of the file or the object data when download:true\n    *\n    * @param {String} key - key of the object\n    * @param {Object} [config] - { level : private|protected|public, download: true|false }\n    * @return - A promise resolves to either a presigned url or the object\n    */\n    StorageClass.prototype.get = function (key, config) {\n        return __awaiter(this, void 0, void 0, function () {\n            var _a, provider, prov;\n            return __generator(this, function (_b) {\n                _a = (config || {}).provider, provider = _a === void 0 ? DEFAULT_PROVIDER : _a;\n                prov = this._pluggables.find(function (pluggable) { return pluggable.getProviderName() === provider; });\n                if (prov === undefined) {\n                    logger.debug('No plugin found with providerName', provider);\n                    Promise.reject('No plugin found in Storage for the provider');\n                }\n                return [2 /*return*/, prov.get(key, config)];\n            });\n        });\n    };\n    /**\n     * Put a file in storage bucket specified to configure method\n     * @param {String} key - key of the object\n     * @param {Object} object - File to be put in bucket\n     * @param {Object} [config] - { level : private|protected|public, contentType: MIME Types,\n     *  progressCallback: function }\n     * @return - promise resolves to object on success\n     */\n    StorageClass.prototype.put = function (key, object, config) {\n        return __awaiter(this, void 0, void 0, function () {\n            var _a, provider, prov;\n            return __generator(this, function (_b) {\n                _a = (config || {}).provider, provider = _a === void 0 ? DEFAULT_PROVIDER : _a;\n                prov = this._pluggables.find(function (pluggable) { return pluggable.getProviderName() === provider; });\n                if (prov === undefined) {\n                    logger.debug('No plugin found with providerName', provider);\n                    Promise.reject('No plugin found in Storage for the provider');\n                }\n                return [2 /*return*/, prov.put(key, object, config)];\n            });\n        });\n    };\n    /**\n     * Remove the object for specified key\n     * @param {String} key - key of the object\n     * @param {Object} [config] - { level : private|protected|public }\n     * @return - Promise resolves upon successful removal of the object\n     */\n    StorageClass.prototype.remove = function (key, config) {\n        return __awaiter(this, void 0, void 0, function () {\n            var _a, provider, prov;\n            return __generator(this, function (_b) {\n                _a = (config || {}).provider, provider = _a === void 0 ? DEFAULT_PROVIDER : _a;\n                prov = this._pluggables.find(function (pluggable) { return pluggable.getProviderName() === provider; });\n                if (prov === undefined) {\n                    logger.debug('No plugin found with providerName', provider);\n                    Promise.reject('No plugin found in Storage for the provider');\n                }\n                return [2 /*return*/, prov.remove(key, config)];\n            });\n        });\n    };\n    /**\n     * List bucket objects relative to the level and prefix specified\n     * @param {String} path - the path that contains objects\n     * @param {Object} [config] - { level : private|protected|public }\n     * @return - Promise resolves to list of keys for all objects in path\n     */\n    StorageClass.prototype.list = function (path, config) {\n        return __awaiter(this, void 0, void 0, function () {\n            var _a, provider, prov;\n            return __generator(this, function (_b) {\n                _a = (config || {}).provider, provider = _a === void 0 ? DEFAULT_PROVIDER : _a;\n                prov = this._pluggables.find(function (pluggable) { return pluggable.getProviderName() === provider; });\n                if (prov === undefined) {\n                    logger.debug('No plugin found with providerName', provider);\n                    Promise.reject('No plugin found in Storage for the provider');\n                }\n                return [2 /*return*/, prov.list(path, config)];\n            });\n        });\n    };\n    return StorageClass;\n}());\nexports.default = StorageClass;\n//# sourceMappingURL=Storage.js.map","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['s3'] = {};\nAWS.S3 = Service.defineService('s3', ['2006-03-01']);\nrequire('../lib/services/s3');\nObject.defineProperty(apiLoader.services['s3'], '2006-03-01', {\n  get: function get() {\n    var model = require('../apis/s3-2006-03-01.min.json');\n    model.paginators = require('../apis/s3-2006-03-01.paginators.json').pagination;\n    model.waiters = require('../apis/s3-2006-03-01.waiters2.json').waiters;\n    return model;\n  },\n  enumerable: true,\n  configurable: true\n});\n\nmodule.exports = AWS.S3;\n","var AWS = require('../core');\nvar v4Credentials = require('../signers/v4_credentials');\n\n// Pull in managed upload extension\nrequire('../s3/managed_upload');\n\n/**\n * @api private\n */\nvar operationsWith200StatusCodeError = {\n  'completeMultipartUpload': true,\n  'copyObject': true,\n  'uploadPartCopy': true\n};\n\n/**\n * @api private\n */\n var regionRedirectErrorCodes = [\n  'AuthorizationHeaderMalformed', // non-head operations on virtual-hosted global bucket endpoints\n  'BadRequest', // head operations on virtual-hosted global bucket endpoints\n  'PermanentRedirect', // non-head operations on path-style or regional endpoints\n  301 // head operations on path-style or regional endpoints\n ];\n\nAWS.util.update(AWS.S3.prototype, {\n  /**\n   * @api private\n   */\n  getSignatureVersion: function getSignatureVersion(request) {\n    var defaultApiVersion = this.api.signatureVersion;\n    var userDefinedVersion = this._originalConfig ? this._originalConfig.signatureVersion : null;\n    var regionDefinedVersion = this.config.signatureVersion;\n    var isPresigned = request ? request.isPresigned() : false;\n    /*\n      1) User defined version specified:\n        a) always return user defined version\n      2) No user defined version specified:\n        a) default to lowest version the region supports\n        b) If using presigned urls, default to lowest version the region supports\n    */\n    if (userDefinedVersion) {\n      userDefinedVersion = userDefinedVersion === 'v2' ? 's3' : userDefinedVersion;\n      return userDefinedVersion;\n    }\n    if (isPresigned !== true) {\n      defaultApiVersion = 'v4';\n    } else if (regionDefinedVersion) {\n      defaultApiVersion = regionDefinedVersion;\n    }\n    return defaultApiVersion;\n  },\n\n  /**\n   * @api private\n   */\n  getSignerClass: function getSignerClass(request) {\n    var signatureVersion = this.getSignatureVersion(request);\n    return AWS.Signers.RequestSigner.getVersion(signatureVersion);\n  },\n\n  /**\n   * @api private\n   */\n  validateService: function validateService() {\n    var msg;\n    var messages = [];\n\n    // default to us-east-1 when no region is provided\n    if (!this.config.region) this.config.region = 'us-east-1';\n\n    if (!this.config.endpoint && this.config.s3BucketEndpoint) {\n      messages.push('An endpoint must be provided when configuring ' +\n                    '`s3BucketEndpoint` to true.');\n    }\n    if (messages.length === 1) {\n      msg = messages[0];\n    } else if (messages.length > 1) {\n      msg = 'Multiple configuration errors:\\n' + messages.join('\\n');\n    }\n    if (msg) {\n      throw AWS.util.error(new Error(),\n        {name: 'InvalidEndpoint', message: msg});\n    }\n  },\n\n  /**\n   * @api private\n   */\n  shouldDisableBodySigning: function shouldDisableBodySigning(request) {\n    var signerClass = this.getSignerClass();\n    if (this.config.s3DisableBodySigning === true && signerClass === AWS.Signers.V4\n        && request.httpRequest.endpoint.protocol === 'https:') {\n      return true;\n    }\n    return false;\n  },\n\n  /**\n   * @api private\n   */\n  setupRequestListeners: function setupRequestListeners(request) {\n    var prependListener = true;\n    request.addListener('validate', this.validateScheme);\n    request.addListener('validate', this.validateBucketEndpoint);\n    request.addListener('validate', this.correctBucketRegionFromCache);\n    request.addListener('validate', this.validateBucketName, prependListener);\n\n    request.addListener('build', this.addContentType);\n    request.addListener('build', this.populateURI);\n    request.addListener('build', this.computeContentMd5);\n    request.addListener('build', this.computeSseCustomerKeyMd5);\n    request.addListener('afterBuild', this.addExpect100Continue);\n    request.removeListener('validate',\n      AWS.EventListeners.Core.VALIDATE_REGION);\n    request.addListener('extractError', this.extractError);\n    request.onAsync('extractError', this.requestBucketRegion);\n    request.addListener('extractData', this.extractData);\n    request.addListener('extractData', AWS.util.hoistPayloadMember);\n    request.addListener('beforePresign', this.prepareSignedUrl);\n    if (AWS.util.isBrowser()) {\n      request.onAsync('retry', this.reqRegionForNetworkingError);\n    }\n    if (this.shouldDisableBodySigning(request))  {\n      request.removeListener('afterBuild', AWS.EventListeners.Core.COMPUTE_SHA256);\n      request.addListener('afterBuild', this.disableBodySigning);\n    }\n  },\n\n  /**\n   * @api private\n   */\n  validateScheme: function(req) {\n    var params = req.params,\n        scheme = req.httpRequest.endpoint.protocol,\n        sensitive = params.SSECustomerKey || params.CopySourceSSECustomerKey;\n    if (sensitive && scheme !== 'https:') {\n      var msg = 'Cannot send SSE keys over HTTP. Set \\'sslEnabled\\'' +\n        'to \\'true\\' in your configuration';\n      throw AWS.util.error(new Error(),\n        { code: 'ConfigError', message: msg });\n    }\n  },\n\n  /**\n   * @api private\n   */\n  validateBucketEndpoint: function(req) {\n    if (!req.params.Bucket && req.service.config.s3BucketEndpoint) {\n      var msg = 'Cannot send requests to root API with `s3BucketEndpoint` set.';\n      throw AWS.util.error(new Error(),\n        { code: 'ConfigError', message: msg });\n    }\n  },\n\n  /**\n   * @api private\n   */\n  validateBucketName: function validateBucketName(req) {\n    var service = req.service;\n    var signatureVersion = service.getSignatureVersion(req);\n    var bucket = req.params && req.params.Bucket;\n    var key = req.params && req.params.Key;\n    var slashIndex = bucket && bucket.indexOf('/');\n    if (bucket && slashIndex >= 0) {\n      if (typeof key === 'string' && slashIndex > 0) {\n        req.params = AWS.util.copy(req.params);\n        // Need to include trailing slash to match sigv2 behavior\n        var prefix = bucket.substr(slashIndex + 1) || '';\n        req.params.Key = prefix + '/' + key;\n        req.params.Bucket = bucket.substr(0, slashIndex);\n      } else if (signatureVersion === 'v4') {\n        var msg = 'Bucket names cannot contain forward slashes. Bucket: ' + bucket;\n        throw AWS.util.error(new Error(),\n          { code: 'InvalidBucket', message: msg });\n      }\n    }\n  },\n\n  /**\n   * @api private\n   */\n  isValidAccelerateOperation: function isValidAccelerateOperation(operation) {\n    var invalidOperations = [\n      'createBucket',\n      'deleteBucket',\n      'listBuckets'\n    ];\n    return invalidOperations.indexOf(operation) === -1;\n  },\n\n\n  /**\n   * S3 prefers dns-compatible bucket names to be moved from the uri path\n   * to the hostname as a sub-domain.  This is not possible, even for dns-compat\n   * buckets when using SSL and the bucket name contains a dot ('.').  The\n   * ssl wildcard certificate is only 1-level deep.\n   *\n   * @api private\n   */\n  populateURI: function populateURI(req) {\n    var httpRequest = req.httpRequest;\n    var b = req.params.Bucket;\n    var service = req.service;\n    var endpoint = httpRequest.endpoint;\n    if (b) {\n      if (!service.pathStyleBucketName(b)) {\n        if (service.config.useAccelerateEndpoint && service.isValidAccelerateOperation(req.operation)) {\n          if (service.config.useDualstack) {\n            endpoint.hostname = b + '.s3-accelerate.dualstack.amazonaws.com';\n          } else {\n            endpoint.hostname = b + '.s3-accelerate.amazonaws.com';\n          }\n        } else if (!service.config.s3BucketEndpoint) {\n          endpoint.hostname =\n            b + '.' + endpoint.hostname;\n        }\n\n        var port = endpoint.port;\n        if (port !== 80 && port !== 443) {\n          endpoint.host = endpoint.hostname + ':' +\n            endpoint.port;\n        } else {\n          endpoint.host = endpoint.hostname;\n        }\n\n        httpRequest.virtualHostedBucket = b; // needed for signing the request\n        service.removeVirtualHostedBucketFromPath(req);\n      }\n    }\n  },\n\n  /**\n   * Takes the bucket name out of the path if bucket is virtual-hosted\n   *\n   * @api private\n   */\n  removeVirtualHostedBucketFromPath: function removeVirtualHostedBucketFromPath(req) {\n    var httpRequest = req.httpRequest;\n    var bucket = httpRequest.virtualHostedBucket;\n    if (bucket && httpRequest.path) {\n      if (req.params && req.params.Key) {\n        var encodedS3Key = '/' + AWS.util.uriEscapePath(req.params.Key);\n        if (httpRequest.path.indexOf(encodedS3Key) === 0 && (httpRequest.path.length === encodedS3Key.length || httpRequest.path[encodedS3Key.length] === '?')) {\n          //path only contains key or path contains only key and querystring\n          return;\n        }\n      }\n      httpRequest.path = httpRequest.path.replace(new RegExp('/' + bucket), '');\n      if (httpRequest.path[0] !== '/') {\n        httpRequest.path = '/' + httpRequest.path;\n      }\n    }\n  },\n\n  /**\n   * Adds Expect: 100-continue header if payload is greater-or-equal 1MB\n   * @api private\n   */\n  addExpect100Continue: function addExpect100Continue(req) {\n    var len = req.httpRequest.headers['Content-Length'];\n    if (AWS.util.isNode() && (len >= 1024 * 1024 || req.params.Body instanceof AWS.util.stream.Stream)) {\n      req.httpRequest.headers['Expect'] = '100-continue';\n    }\n  },\n\n  /**\n   * Adds a default content type if none is supplied.\n   *\n   * @api private\n   */\n  addContentType: function addContentType(req) {\n    var httpRequest = req.httpRequest;\n    if (httpRequest.method === 'GET' || httpRequest.method === 'HEAD') {\n      // Content-Type is not set in GET/HEAD requests\n      delete httpRequest.headers['Content-Type'];\n      return;\n    }\n\n    if (!httpRequest.headers['Content-Type']) { // always have a Content-Type\n      httpRequest.headers['Content-Type'] = 'application/octet-stream';\n    }\n\n    var contentType = httpRequest.headers['Content-Type'];\n    if (AWS.util.isBrowser()) {\n      if (typeof httpRequest.body === 'string' && !contentType.match(/;\\s*charset=/)) {\n        var charset = '; charset=UTF-8';\n        httpRequest.headers['Content-Type'] += charset;\n      } else {\n        var replaceFn = function(_, prefix, charsetName) {\n          return prefix + charsetName.toUpperCase();\n        };\n\n        httpRequest.headers['Content-Type'] =\n          contentType.replace(/(;\\s*charset=)(.+)$/, replaceFn);\n      }\n    }\n  },\n\n  /**\n   * @api private\n   */\n  computableChecksumOperations: {\n    putBucketCors: true,\n    putBucketLifecycle: true,\n    putBucketLifecycleConfiguration: true,\n    putBucketTagging: true,\n    deleteObjects: true,\n    putBucketReplication: true,\n    putObjectLegalHold: true,\n    putObjectRetention: true,\n    putObjectLockConfiguration: true\n  },\n\n  /**\n   * Checks whether checksums should be computed for the request.\n   * If the request requires checksums to be computed, this will always\n   * return true, otherwise it depends on whether {AWS.Config.computeChecksums}\n   * is set.\n   *\n   * @param req [AWS.Request] the request to check against\n   * @return [Boolean] whether to compute checksums for a request.\n   * @api private\n   */\n  willComputeChecksums: function willComputeChecksums(req) {\n    if (this.computableChecksumOperations[req.operation]) return true;\n    if (!this.config.computeChecksums) return false;\n\n    // TODO: compute checksums for Stream objects\n    if (!AWS.util.Buffer.isBuffer(req.httpRequest.body) &&\n        typeof req.httpRequest.body !== 'string') {\n      return false;\n    }\n\n    var rules = req.service.api.operations[req.operation].input.members;\n\n    // Sha256 signing disabled, and not a presigned url\n    if (req.service.shouldDisableBodySigning(req) && !Object.prototype.hasOwnProperty.call(req.httpRequest.headers, 'presigned-expires')) {\n      if (rules.ContentMD5 && !req.params.ContentMD5) {\n        return true;\n      }\n    }\n\n    // V4 signer uses SHA256 signatures so only compute MD5 if it is required\n    if (req.service.getSignerClass(req) === AWS.Signers.V4) {\n      if (rules.ContentMD5 && !rules.ContentMD5.required) return false;\n    }\n\n    if (rules.ContentMD5 && !req.params.ContentMD5) return true;\n  },\n\n  /**\n   * A listener that computes the Content-MD5 and sets it in the header.\n   * @see AWS.S3.willComputeChecksums\n   * @api private\n   */\n  computeContentMd5: function computeContentMd5(req) {\n    if (req.service.willComputeChecksums(req)) {\n      var md5 = AWS.util.crypto.md5(req.httpRequest.body, 'base64');\n      req.httpRequest.headers['Content-MD5'] = md5;\n    }\n  },\n\n  /**\n   * @api private\n   */\n  computeSseCustomerKeyMd5: function computeSseCustomerKeyMd5(req) {\n    var keys = {\n      SSECustomerKey: 'x-amz-server-side-encryption-customer-key-MD5',\n      CopySourceSSECustomerKey: 'x-amz-copy-source-server-side-encryption-customer-key-MD5'\n    };\n    AWS.util.each(keys, function(key, header) {\n      if (req.params[key]) {\n        var value = AWS.util.crypto.md5(req.params[key], 'base64');\n        req.httpRequest.headers[header] = value;\n      }\n    });\n  },\n\n  /**\n   * Returns true if the bucket name should be left in the URI path for\n   * a request to S3.  This function takes into account the current\n   * endpoint protocol (e.g. http or https).\n   *\n   * @api private\n   */\n  pathStyleBucketName: function pathStyleBucketName(bucketName) {\n    // user can force path style requests via the configuration\n    if (this.config.s3ForcePathStyle) return true;\n    if (this.config.s3BucketEndpoint) return false;\n\n    if (this.dnsCompatibleBucketName(bucketName)) {\n      return (this.config.sslEnabled && bucketName.match(/\\./)) ? true : false;\n    } else {\n      return true; // not dns compatible names must always use path style\n    }\n  },\n\n  /**\n   * Returns true if the bucket name is DNS compatible.  Buckets created\n   * outside of the classic region MUST be DNS compatible.\n   *\n   * @api private\n   */\n  dnsCompatibleBucketName: function dnsCompatibleBucketName(bucketName) {\n    var b = bucketName;\n    var domain = new RegExp(/^[a-z0-9][a-z0-9\\.\\-]{1,61}[a-z0-9]$/);\n    var ipAddress = new RegExp(/(\\d+\\.){3}\\d+/);\n    var dots = new RegExp(/\\.\\./);\n    return (b.match(domain) && !b.match(ipAddress) && !b.match(dots)) ? true : false;\n  },\n\n  /**\n   * @return [Boolean] whether response contains an error\n   * @api private\n   */\n  successfulResponse: function successfulResponse(resp) {\n    var req = resp.request;\n    var httpResponse = resp.httpResponse;\n    if (operationsWith200StatusCodeError[req.operation] &&\n        httpResponse.body.toString().match('<Error>')) {\n      return false;\n    } else {\n      return httpResponse.statusCode < 300;\n    }\n  },\n\n  /**\n   * @return [Boolean] whether the error can be retried\n   * @api private\n   */\n  retryableError: function retryableError(error, request) {\n    if (operationsWith200StatusCodeError[request.operation] &&\n        error.statusCode === 200) {\n      return true;\n    } else if (request._requestRegionForBucket &&\n        request.service.bucketRegionCache[request._requestRegionForBucket]) {\n      return false;\n    } else if (error && error.code === 'RequestTimeout') {\n      return true;\n    } else if (error &&\n        regionRedirectErrorCodes.indexOf(error.code) != -1 &&\n        error.region && error.region != request.httpRequest.region) {\n      request.httpRequest.region = error.region;\n      if (error.statusCode === 301) {\n        request.service.updateReqBucketRegion(request);\n      }\n      return true;\n    } else {\n      var _super = AWS.Service.prototype.retryableError;\n      return _super.call(this, error, request);\n    }\n  },\n\n  /**\n   * Updates httpRequest with region. If region is not provided, then\n   * the httpRequest will be updated based on httpRequest.region\n   *\n   * @api private\n   */\n  updateReqBucketRegion: function updateReqBucketRegion(request, region) {\n    var httpRequest = request.httpRequest;\n    if (typeof region === 'string' && region.length) {\n      httpRequest.region = region;\n    }\n    if (!httpRequest.endpoint.host.match(/s3(?!-accelerate).*\\.amazonaws\\.com$/)) {\n      return;\n    }\n    var service = request.service;\n    var s3Config = service.config;\n    var s3BucketEndpoint = s3Config.s3BucketEndpoint;\n    if (s3BucketEndpoint) {\n      delete s3Config.s3BucketEndpoint;\n    }\n    var newConfig = AWS.util.copy(s3Config);\n    delete newConfig.endpoint;\n    newConfig.region = httpRequest.region;\n\n    httpRequest.endpoint = (new AWS.S3(newConfig)).endpoint;\n    service.populateURI(request);\n    s3Config.s3BucketEndpoint = s3BucketEndpoint;\n    httpRequest.headers.Host = httpRequest.endpoint.host;\n\n    if (request._asm.currentState === 'validate') {\n      request.removeListener('build', service.populateURI);\n      request.addListener('build', service.removeVirtualHostedBucketFromPath);\n    }\n  },\n\n  /**\n   * Provides a specialized parser for getBucketLocation -- all other\n   * operations are parsed by the super class.\n   *\n   * @api private\n   */\n  extractData: function extractData(resp) {\n    var req = resp.request;\n    if (req.operation === 'getBucketLocation') {\n      var match = resp.httpResponse.body.toString().match(/>(.+)<\\/Location/);\n      delete resp.data['_'];\n      if (match) {\n        resp.data.LocationConstraint = match[1];\n      } else {\n        resp.data.LocationConstraint = '';\n      }\n    }\n    var bucket = req.params.Bucket || null;\n    if (req.operation === 'deleteBucket' && typeof bucket === 'string' && !resp.error) {\n      req.service.clearBucketRegionCache(bucket);\n    } else {\n      var headers = resp.httpResponse.headers || {};\n      var region = headers['x-amz-bucket-region'] || null;\n      if (!region && req.operation === 'createBucket' && !resp.error) {\n        var createBucketConfiguration = req.params.CreateBucketConfiguration;\n        if (!createBucketConfiguration) {\n          region = 'us-east-1';\n        } else if (createBucketConfiguration.LocationConstraint === 'EU') {\n          region = 'eu-west-1';\n        } else {\n          region = createBucketConfiguration.LocationConstraint;\n        }\n      }\n      if (region) {\n          if (bucket && region !== req.service.bucketRegionCache[bucket]) {\n            req.service.bucketRegionCache[bucket] = region;\n          }\n      }\n    }\n    req.service.extractRequestIds(resp);\n  },\n\n  /**\n   * Extracts an error object from the http response.\n   *\n   * @api private\n   */\n  extractError: function extractError(resp) {\n    var codes = {\n      304: 'NotModified',\n      403: 'Forbidden',\n      400: 'BadRequest',\n      404: 'NotFound'\n    };\n\n    var req = resp.request;\n    var code = resp.httpResponse.statusCode;\n    var body = resp.httpResponse.body || '';\n\n    var headers = resp.httpResponse.headers || {};\n    var region = headers['x-amz-bucket-region'] || null;\n    var bucket = req.params.Bucket || null;\n    var bucketRegionCache = req.service.bucketRegionCache;\n    if (region && bucket && region !== bucketRegionCache[bucket]) {\n      bucketRegionCache[bucket] = region;\n    }\n\n    var cachedRegion;\n    if (codes[code] && body.length === 0) {\n      if (bucket && !region) {\n        cachedRegion = bucketRegionCache[bucket] || null;\n        if (cachedRegion !== req.httpRequest.region) {\n          region = cachedRegion;\n        }\n      }\n      resp.error = AWS.util.error(new Error(), {\n        code: codes[code],\n        message: null,\n        region: region\n      });\n    } else {\n      var data = new AWS.XML.Parser().parse(body.toString());\n\n      if (data.Region && !region) {\n        region = data.Region;\n        if (bucket && region !== bucketRegionCache[bucket]) {\n          bucketRegionCache[bucket] = region;\n        }\n      } else if (bucket && !region && !data.Region) {\n        cachedRegion = bucketRegionCache[bucket] || null;\n        if (cachedRegion !== req.httpRequest.region) {\n          region = cachedRegion;\n        }\n      }\n\n      resp.error = AWS.util.error(new Error(), {\n        code: data.Code || code,\n        message: data.Message || null,\n        region: region\n      });\n    }\n    req.service.extractRequestIds(resp);\n  },\n\n  /**\n   * If region was not obtained synchronously, then send async request\n   * to get bucket region for errors resulting from wrong region.\n   *\n   * @api private\n   */\n  requestBucketRegion: function requestBucketRegion(resp, done) {\n    var error = resp.error;\n    var req = resp.request;\n    var bucket = req.params.Bucket || null;\n\n    if (!error || !bucket || error.region || req.operation === 'listObjects' ||\n        (AWS.util.isNode() && req.operation === 'headBucket') ||\n        (error.statusCode === 400 && req.operation !== 'headObject') ||\n        regionRedirectErrorCodes.indexOf(error.code) === -1) {\n      return done();\n    }\n    var reqOperation = AWS.util.isNode() ? 'headBucket' : 'listObjects';\n    var reqParams = {Bucket: bucket};\n    if (reqOperation === 'listObjects') reqParams.MaxKeys = 0;\n    var regionReq = req.service[reqOperation](reqParams);\n    regionReq._requestRegionForBucket = bucket;\n    regionReq.send(function() {\n      var region = req.service.bucketRegionCache[bucket] || null;\n      error.region = region;\n      done();\n    });\n  },\n\n   /**\n   * For browser only. If NetworkingError received, will attempt to obtain\n   * the bucket region.\n   *\n   * @api private\n   */\n   reqRegionForNetworkingError: function reqRegionForNetworkingError(resp, done) {\n    if (!AWS.util.isBrowser()) {\n      return done();\n    }\n    var error = resp.error;\n    var request = resp.request;\n    var bucket = request.params.Bucket;\n    if (!error || error.code !== 'NetworkingError' || !bucket ||\n        request.httpRequest.region === 'us-east-1') {\n      return done();\n    }\n    var service = request.service;\n    var bucketRegionCache = service.bucketRegionCache;\n    var cachedRegion = bucketRegionCache[bucket] || null;\n\n    if (cachedRegion && cachedRegion !== request.httpRequest.region) {\n      service.updateReqBucketRegion(request, cachedRegion);\n      done();\n    } else if (!service.dnsCompatibleBucketName(bucket)) {\n      service.updateReqBucketRegion(request, 'us-east-1');\n      if (bucketRegionCache[bucket] !== 'us-east-1') {\n        bucketRegionCache[bucket] = 'us-east-1';\n      }\n      done();\n    } else if (request.httpRequest.virtualHostedBucket) {\n      var getRegionReq = service.listObjects({Bucket: bucket, MaxKeys: 0});\n      service.updateReqBucketRegion(getRegionReq, 'us-east-1');\n      getRegionReq._requestRegionForBucket = bucket;\n\n      getRegionReq.send(function() {\n        var region = service.bucketRegionCache[bucket] || null;\n        if (region && region !== request.httpRequest.region) {\n          service.updateReqBucketRegion(request, region);\n        }\n        done();\n      });\n    } else {\n      // DNS-compatible path-style\n      // (s3ForcePathStyle or bucket name with dot over https)\n      // Cannot obtain region information for this case\n      done();\n    }\n   },\n\n  /**\n   * Cache for bucket region.\n   *\n   * @api private\n   */\n   bucketRegionCache: {},\n\n  /**\n   * Clears bucket region cache.\n   *\n   * @api private\n   */\n   clearBucketRegionCache: function(buckets) {\n    var bucketRegionCache = this.bucketRegionCache;\n    if (!buckets) {\n      buckets = Object.keys(bucketRegionCache);\n    } else if (typeof buckets === 'string') {\n      buckets = [buckets];\n    }\n    for (var i = 0; i < buckets.length; i++) {\n      delete bucketRegionCache[buckets[i]];\n    }\n    return bucketRegionCache;\n   },\n\n   /**\n    * Corrects request region if bucket's cached region is different\n    *\n    * @api private\n    */\n  correctBucketRegionFromCache: function correctBucketRegionFromCache(req) {\n    var bucket = req.params.Bucket || null;\n    if (bucket) {\n      var service = req.service;\n      var requestRegion = req.httpRequest.region;\n      var cachedRegion = service.bucketRegionCache[bucket];\n      if (cachedRegion && cachedRegion !== requestRegion) {\n        service.updateReqBucketRegion(req, cachedRegion);\n      }\n    }\n  },\n\n  /**\n   * Extracts S3 specific request ids from the http response.\n   *\n   * @api private\n   */\n  extractRequestIds: function extractRequestIds(resp) {\n    var extendedRequestId = resp.httpResponse.headers ? resp.httpResponse.headers['x-amz-id-2'] : null;\n    var cfId = resp.httpResponse.headers ? resp.httpResponse.headers['x-amz-cf-id'] : null;\n    resp.extendedRequestId = extendedRequestId;\n    resp.cfId = cfId;\n\n    if (resp.error) {\n      resp.error.requestId = resp.requestId || null;\n      resp.error.extendedRequestId = extendedRequestId;\n      resp.error.cfId = cfId;\n    }\n  },\n\n  /**\n   * Get a pre-signed URL for a given operation name.\n   *\n   * @note You must ensure that you have static or previously resolved\n   *   credentials if you call this method synchronously (with no callback),\n   *   otherwise it may not properly sign the request. If you cannot guarantee\n   *   this (you are using an asynchronous credential provider, i.e., EC2\n   *   IAM roles), you should always call this method with an asynchronous\n   *   callback.\n   * @note Not all operation parameters are supported when using pre-signed\n   *   URLs. Certain parameters, such as `SSECustomerKey`, `ACL`, `Expires`,\n   *   `ContentLength`, or `Tagging` must be provided as headers when sending a\n   *   request. If you are using pre-signed URLs to upload from a browser and\n   *   need to use these fields, see {createPresignedPost}.\n   * @note The default signer allows altering the request by adding corresponding\n   *   headers to set some parameters (e.g. Range) and these added parameters\n   *   won't be signed. You must use signatureVersion v4 to to include these\n   *   parameters in the signed portion of the URL and enforce exact matching\n   *   between headers and signed params in the URL.\n   * @note This operation cannot be used with a promise. See note above regarding\n   *   asynchronous credentials and use with a callback.\n   * @param operation [String] the name of the operation to call\n   * @param params [map] parameters to pass to the operation. See the given\n   *   operation for the expected operation parameters. In addition, you can\n   *   also pass the \"Expires\" parameter to inform S3 how long the URL should\n   *   work for.\n   * @option params Expires [Integer] (900) the number of seconds to expire\n   *   the pre-signed URL operation in. Defaults to 15 minutes.\n   * @param callback [Function] if a callback is provided, this function will\n   *   pass the URL as the second parameter (after the error parameter) to\n   *   the callback function.\n   * @return [String] if called synchronously (with no callback), returns the\n   *   signed URL.\n   * @return [null] nothing is returned if a callback is provided.\n   * @example Pre-signing a getObject operation (synchronously)\n   *   var params = {Bucket: 'bucket', Key: 'key'};\n   *   var url = s3.getSignedUrl('getObject', params);\n   *   console.log('The URL is', url);\n   * @example Pre-signing a putObject (asynchronously)\n   *   var params = {Bucket: 'bucket', Key: 'key'};\n   *   s3.getSignedUrl('putObject', params, function (err, url) {\n   *     console.log('The URL is', url);\n   *   });\n   * @example Pre-signing a putObject operation with a specific payload\n   *   var params = {Bucket: 'bucket', Key: 'key', Body: 'body'};\n   *   var url = s3.getSignedUrl('putObject', params);\n   *   console.log('The URL is', url);\n   * @example Passing in a 1-minute expiry time for a pre-signed URL\n   *   var params = {Bucket: 'bucket', Key: 'key', Expires: 60};\n   *   var url = s3.getSignedUrl('getObject', params);\n   *   console.log('The URL is', url); // expires in 60 seconds\n   */\n  getSignedUrl: function getSignedUrl(operation, params, callback) {\n    params = AWS.util.copy(params || {});\n    var expires = params.Expires || 900;\n\n    if (typeof expires !== 'number') {\n      throw AWS.util.error(new Error(),\n        { code: 'InvalidParameterException', message: 'The expiration must be a number, received ' + typeof expires });\n    }\n\n    delete params.Expires; // we can't validate this\n    var request = this.makeRequest(operation, params);\n\n    if (callback) {\n      AWS.util.defer(function() {\n        request.presign(expires, callback);\n      });\n    } else {\n      return request.presign(expires, callback);\n    }\n  },\n\n\n  /**\n   * Get a pre-signed POST policy to support uploading to S3 directly from an\n   * HTML form.\n   *\n   * @param params [map]\n   * @option params Bucket [String]     The bucket to which the post should be\n   *                                    uploaded\n   * @option params Expires [Integer]   (3600) The number of seconds for which\n   *                                    the presigned policy should be valid.\n   * @option params Conditions [Array]  An array of conditions that must be met\n   *                                    for the presigned policy to allow the\n   *                                    upload. This can include required tags,\n   *                                    the accepted range for content lengths,\n   *                                    etc.\n   * @see http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-HTTPPOSTConstructPolicy.html\n   * @option params Fields [map]        Fields to include in the form. All\n   *                                    values passed in as fields will be\n   *                                    signed as exact match conditions.\n   * @param callback [Function]\n   *\n   * @note All fields passed in when creating presigned post data will be signed\n   *   as exact match conditions. Any fields that will be interpolated by S3\n   *   must be added to the fields hash after signing, and an appropriate\n   *   condition for such fields must be explicitly added to the Conditions\n   *   array passed to this function before signing.\n   *\n   * @example Presiging post data with a known key\n   *   var params = {\n   *     Bucket: 'bucket',\n   *     Fields: {\n   *       key: 'key'\n   *     }\n   *   };\n   *   s3.createPresignedPost(params, function(err, data) {\n   *     if (err) {\n   *       console.error('Presigning post data encountered an error', err);\n   *     } else {\n   *       console.log('The post data is', data);\n   *     }\n   *   });\n   *\n   * @example Presigning post data with an interpolated key\n   *   var params = {\n   *     Bucket: 'bucket',\n   *     Conditions: [\n   *       ['starts-with', '$key', 'path/to/uploads/']\n   *     ]\n   *   };\n   *   s3.createPresignedPost(params, function(err, data) {\n   *     if (err) {\n   *       console.error('Presigning post data encountered an error', err);\n   *     } else {\n   *       data.Fields.key = 'path/to/uploads/${filename}';\n   *       console.log('The post data is', data);\n   *     }\n   *   });\n   *\n   * @note You must ensure that you have static or previously resolved\n   *   credentials if you call this method synchronously (with no callback),\n   *   otherwise it may not properly sign the request. If you cannot guarantee\n   *   this (you are using an asynchronous credential provider, i.e., EC2\n   *   IAM roles), you should always call this method with an asynchronous\n   *   callback.\n   *\n   * @return [map]  If called synchronously (with no callback), returns a hash\n   *                with the url to set as the form action and a hash of fields\n   *                to include in the form.\n   * @return [null] Nothing is returned if a callback is provided.\n   *\n   * @callback callback function (err, data)\n   *  @param err [Error] the error object returned from the policy signer\n   *  @param data [map] The data necessary to construct an HTML form\n   *  @param data.url [String] The URL to use as the action of the form\n   *  @param data.fields [map] A hash of fields that must be included in the\n   *                           form for the upload to succeed. This hash will\n   *                           include the signed POST policy, your access key\n   *                           ID and security token (if present), etc. These\n   *                           may be safely included as input elements of type\n   *                           'hidden.'\n   */\n  createPresignedPost: function createPresignedPost(params, callback) {\n    if (typeof params === 'function' && callback === undefined) {\n      callback = params;\n      params = null;\n    }\n\n    params = AWS.util.copy(params || {});\n    var boundParams = this.config.params || {};\n    var bucket = params.Bucket || boundParams.Bucket,\n      self = this,\n      config = this.config,\n      endpoint = AWS.util.copy(this.endpoint);\n    if (!config.s3BucketEndpoint) {\n      endpoint.pathname = '/' + bucket;\n    }\n\n    function finalizePost() {\n      return {\n        url: AWS.util.urlFormat(endpoint),\n        fields: self.preparePostFields(\n          config.credentials,\n          config.region,\n          bucket,\n          params.Fields,\n          params.Conditions,\n          params.Expires\n        )\n      };\n    }\n\n    if (callback) {\n      config.getCredentials(function (err) {\n        if (err) {\n          callback(err);\n        }\n\n        callback(null, finalizePost());\n      });\n    } else {\n      return finalizePost();\n    }\n  },\n\n  /**\n   * @api private\n   */\n  preparePostFields: function preparePostFields(\n    credentials,\n    region,\n    bucket,\n    fields,\n    conditions,\n    expiresInSeconds\n  ) {\n    var now = this.getSkewCorrectedDate();\n    if (!credentials || !region || !bucket) {\n      throw new Error('Unable to create a POST object policy without a bucket,'\n        + ' region, and credentials');\n    }\n    fields = AWS.util.copy(fields || {});\n    conditions = (conditions || []).slice(0);\n    expiresInSeconds = expiresInSeconds || 3600;\n\n    var signingDate = AWS.util.date.iso8601(now).replace(/[:\\-]|\\.\\d{3}/g, '');\n    var shortDate = signingDate.substr(0, 8);\n    var scope = v4Credentials.createScope(shortDate, region, 's3');\n    var credential = credentials.accessKeyId + '/' + scope;\n\n    fields['bucket'] = bucket;\n    fields['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256';\n    fields['X-Amz-Credential'] = credential;\n    fields['X-Amz-Date'] = signingDate;\n    if (credentials.sessionToken) {\n      fields['X-Amz-Security-Token'] = credentials.sessionToken;\n    }\n    for (var field in fields) {\n      if (fields.hasOwnProperty(field)) {\n        var condition = {};\n        condition[field] = fields[field];\n        conditions.push(condition);\n      }\n    }\n\n    fields.Policy = this.preparePostPolicy(\n      new Date(now.valueOf() + expiresInSeconds * 1000),\n      conditions\n    );\n    fields['X-Amz-Signature'] = AWS.util.crypto.hmac(\n      v4Credentials.getSigningKey(credentials, shortDate, region, 's3', true),\n      fields.Policy,\n      'hex'\n    );\n\n    return fields;\n  },\n\n  /**\n   * @api private\n   */\n  preparePostPolicy: function preparePostPolicy(expiration, conditions) {\n    return AWS.util.base64.encode(JSON.stringify({\n      expiration: AWS.util.date.iso8601(expiration),\n      conditions: conditions\n    }));\n  },\n\n  /**\n   * @api private\n   */\n  prepareSignedUrl: function prepareSignedUrl(request) {\n    request.addListener('validate', request.service.noPresignedContentLength);\n    request.removeListener('build', request.service.addContentType);\n    if (!request.params.Body) {\n      // no Content-MD5/SHA-256 if body is not provided\n      request.removeListener('build', request.service.computeContentMd5);\n    } else {\n      request.addListener('afterBuild', AWS.EventListeners.Core.COMPUTE_SHA256);\n    }\n  },\n\n  /**\n   * @api private\n   * @param request\n   */\n  disableBodySigning: function disableBodySigning(request) {\n    var headers = request.httpRequest.headers;\n    // Add the header to anything that isn't a presigned url, unless that presigned url had a body defined\n    if (!Object.prototype.hasOwnProperty.call(headers, 'presigned-expires')) {\n      headers['X-Amz-Content-Sha256'] = 'UNSIGNED-PAYLOAD';\n    }\n  },\n\n  /**\n   * @api private\n   */\n  noPresignedContentLength: function noPresignedContentLength(request) {\n    if (request.params.ContentLength !== undefined) {\n      throw AWS.util.error(new Error(), {code: 'UnexpectedParameter',\n        message: 'ContentLength is not supported in pre-signed URLs.'});\n    }\n  },\n\n  createBucket: function createBucket(params, callback) {\n    // When creating a bucket *outside* the classic region, the location\n    // constraint must be set for the bucket and it must match the endpoint.\n    // This chunk of code will set the location constraint param based\n    // on the region (when possible), but it will not override a passed-in\n    // location constraint.\n    if (typeof params === 'function' || !params) {\n      callback = callback || params;\n      params = {};\n    }\n    var hostname = this.endpoint.hostname;\n    if (hostname !== this.api.globalEndpoint && !params.CreateBucketConfiguration) {\n      params.CreateBucketConfiguration = { LocationConstraint: this.config.region };\n    }\n    return this.makeRequest('createBucket', params, callback);\n  },\n\n  /**\n   * @see AWS.S3.ManagedUpload\n   * @overload upload(params = {}, [options], [callback])\n   *   Uploads an arbitrarily sized buffer, blob, or stream, using intelligent\n   *   concurrent handling of parts if the payload is large enough. You can\n   *   configure the concurrent queue size by setting `options`. Note that this\n   *   is the only operation for which the SDK can retry requests with stream\n   *   bodies.\n   *\n   *   @param (see AWS.S3.putObject)\n   *   @option (see AWS.S3.ManagedUpload.constructor)\n   *   @return [AWS.S3.ManagedUpload] the managed upload object that can call\n   *     `send()` or track progress.\n   *   @example Uploading a stream object\n   *     var params = {Bucket: 'bucket', Key: 'key', Body: stream};\n   *     s3.upload(params, function(err, data) {\n   *       console.log(err, data);\n   *     });\n   *   @example Uploading a stream with concurrency of 1 and partSize of 10mb\n   *     var params = {Bucket: 'bucket', Key: 'key', Body: stream};\n   *     var options = {partSize: 10 * 1024 * 1024, queueSize: 1};\n   *     s3.upload(params, options, function(err, data) {\n   *       console.log(err, data);\n   *     });\n   * @callback callback function(err, data)\n   *   @param err [Error] an error or null if no error occurred.\n   *   @param data [map] The response data from the successful upload:\n   *   @param data.Location [String] the URL of the uploaded object\n   *   @param data.ETag [String] the ETag of the uploaded object\n   *   @param data.Bucket [String]  the bucket to which the object was uploaded\n   *   @param data.Key [String] the key to which the object was uploaded\n   */\n  upload: function upload(params, options, callback) {\n    if (typeof options === 'function' && callback === undefined) {\n      callback = options;\n      options = null;\n    }\n\n    options = options || {};\n    options = AWS.util.merge(options || {}, {service: this, params: params});\n\n    var uploader = new AWS.S3.ManagedUpload(options);\n    if (typeof callback === 'function') uploader.send(callback);\n    return uploader;\n  }\n});\n","var AWS = require('../core');\nvar byteLength = AWS.util.string.byteLength;\nvar Buffer = AWS.util.Buffer;\n\n/**\n * The managed uploader allows for easy and efficient uploading of buffers,\n * blobs, or streams, using a configurable amount of concurrency to perform\n * multipart uploads where possible. This abstraction also enables uploading\n * streams of unknown size due to the use of multipart uploads.\n *\n * To construct a managed upload object, see the {constructor} function.\n *\n * ## Tracking upload progress\n *\n * The managed upload object can also track progress by attaching an\n * 'httpUploadProgress' listener to the upload manager. This event is similar\n * to {AWS.Request~httpUploadProgress} but groups all concurrent upload progress\n * into a single event. See {AWS.S3.ManagedUpload~httpUploadProgress} for more\n * information.\n *\n * ## Handling Multipart Cleanup\n *\n * By default, this class will automatically clean up any multipart uploads\n * when an individual part upload fails. This behavior can be disabled in order\n * to manually handle failures by setting the `leavePartsOnError` configuration\n * option to `true` when initializing the upload object.\n *\n * @!event httpUploadProgress(progress)\n *   Triggered when the uploader has uploaded more data.\n *   @note The `total` property may not be set if the stream being uploaded has\n *     not yet finished chunking. In this case the `total` will be undefined\n *     until the total stream size is known.\n *   @note This event will not be emitted in Node.js 0.8.x.\n *   @param progress [map] An object containing the `loaded` and `total` bytes\n *     of the request and the `key` of the S3 object. Note that `total` may be undefined until the payload\n *     size is known.\n *   @context (see AWS.Request~send)\n */\nAWS.S3.ManagedUpload = AWS.util.inherit({\n  /**\n   * Creates a managed upload object with a set of configuration options.\n   *\n   * @note A \"Body\" parameter is required to be set prior to calling {send}.\n   * @option options params [map] a map of parameters to pass to the upload\n   *   requests. The \"Body\" parameter is required to be specified either on\n   *   the service or in the params option.\n   * @note ContentMD5 should not be provided when using the managed upload object.\n   *   Instead, setting \"computeChecksums\" to true will enable automatic ContentMD5 generation\n   *   by the managed upload object.\n   * @option options queueSize [Number] (4) the size of the concurrent queue\n   *   manager to upload parts in parallel. Set to 1 for synchronous uploading\n   *   of parts. Note that the uploader will buffer at most queueSize * partSize\n   *   bytes into memory at any given time.\n   * @option options partSize [Number] (5mb) the size in bytes for each\n   *   individual part to be uploaded. Adjust the part size to ensure the number\n   *   of parts does not exceed {maxTotalParts}. See {minPartSize} for the\n   *   minimum allowed part size.\n   * @option options leavePartsOnError [Boolean] (false) whether to abort the\n   *   multipart upload if an error occurs. Set to true if you want to handle\n   *   failures manually.\n   * @option options service [AWS.S3] an optional S3 service object to use for\n   *   requests. This object might have bound parameters used by the uploader.\n   * @option options tags [Array<map>] The tags to apply to the uploaded object.\n   *   Each tag should have a `Key` and `Value` keys.\n   * @example Creating a default uploader for a stream object\n   *   var upload = new AWS.S3.ManagedUpload({\n   *     params: {Bucket: 'bucket', Key: 'key', Body: stream}\n   *   });\n   * @example Creating an uploader with concurrency of 1 and partSize of 10mb\n   *   var upload = new AWS.S3.ManagedUpload({\n   *     partSize: 10 * 1024 * 1024, queueSize: 1,\n   *     params: {Bucket: 'bucket', Key: 'key', Body: stream}\n   *   });\n   * @example Creating an uploader with tags\n   *   var upload = new AWS.S3.ManagedUpload({\n   *     params: {Bucket: 'bucket', Key: 'key', Body: stream},\n   *     tags: [{Key: 'tag1', Value: 'value1'}, {Key: 'tag2', Value: 'value2'}]\n   *   });\n   * @see send\n   */\n  constructor: function ManagedUpload(options) {\n    var self = this;\n    AWS.SequentialExecutor.call(self);\n    self.body = null;\n    self.sliceFn = null;\n    self.callback = null;\n    self.parts = {};\n    self.completeInfo = [];\n    self.fillQueue = function() {\n      self.callback(new Error('Unsupported body payload ' + typeof self.body));\n    };\n\n    self.configure(options);\n  },\n\n  /**\n   * @api private\n   */\n  configure: function configure(options) {\n    options = options || {};\n    this.partSize = this.minPartSize;\n\n    if (options.queueSize) this.queueSize = options.queueSize;\n    if (options.partSize) this.partSize = options.partSize;\n    if (options.leavePartsOnError) this.leavePartsOnError = true;\n    if (options.tags) {\n      if (!Array.isArray(options.tags)) {\n        throw new Error('Tags must be specified as an array; ' +\n          typeof options.tags + ' provided.');\n      }\n      this.tags = options.tags;\n    }\n\n    if (this.partSize < this.minPartSize) {\n      throw new Error('partSize must be greater than ' +\n                      this.minPartSize);\n    }\n\n    this.service = options.service;\n    this.bindServiceObject(options.params);\n    this.validateBody();\n    this.adjustTotalBytes();\n  },\n\n  /**\n   * @api private\n   */\n  leavePartsOnError: false,\n\n  /**\n   * @api private\n   */\n  queueSize: 4,\n\n  /**\n   * @api private\n   */\n  partSize: null,\n\n  /**\n   * @readonly\n   * @return [Number] the minimum number of bytes for an individual part\n   *   upload.\n   */\n  minPartSize: 1024 * 1024 * 5,\n\n  /**\n   * @readonly\n   * @return [Number] the maximum allowed number of parts in a multipart upload.\n   */\n  maxTotalParts: 10000,\n\n  /**\n   * Initiates the managed upload for the payload.\n   *\n   * @callback callback function(err, data)\n   *   @param err [Error] an error or null if no error occurred.\n   *   @param data [map] The response data from the successful upload:\n   *     * `Location` (String) the URL of the uploaded object\n   *     * `ETag` (String) the ETag of the uploaded object\n   *     * `Bucket` (String) the bucket to which the object was uploaded\n   *     * `Key` (String) the key to which the object was uploaded\n   * @example Sending a managed upload object\n   *   var params = {Bucket: 'bucket', Key: 'key', Body: stream};\n   *   var upload = new AWS.S3.ManagedUpload({params: params});\n   *   upload.send(function(err, data) {\n   *     console.log(err, data);\n   *   });\n   */\n  send: function(callback) {\n    var self = this;\n    self.failed = false;\n    self.callback = callback || function(err) { if (err) throw err; };\n\n    var runFill = true;\n    if (self.sliceFn) {\n      self.fillQueue = self.fillBuffer;\n    } else if (AWS.util.isNode()) {\n      var Stream = AWS.util.stream.Stream;\n      if (self.body instanceof Stream) {\n        runFill = false;\n        self.fillQueue = self.fillStream;\n        self.partBuffers = [];\n        self.body.\n          on('error', function(err) { self.cleanup(err); }).\n          on('readable', function() { self.fillQueue(); }).\n          on('end', function() {\n            self.isDoneChunking = true;\n            self.numParts = self.totalPartNumbers;\n            self.fillQueue.call(self);\n\n            if (self.isDoneChunking && self.totalPartNumbers >= 1 && self.doneParts === self.numParts) {\n              self.finishMultiPart();\n            }\n          });\n      }\n    }\n\n    if (runFill) self.fillQueue.call(self);\n  },\n\n  /**\n   * @!method  promise()\n   *   Returns a 'thenable' promise.\n   *\n   *   Two callbacks can be provided to the `then` method on the returned promise.\n   *   The first callback will be called if the promise is fulfilled, and the second\n   *   callback will be called if the promise is rejected.\n   *   @callback fulfilledCallback function(data)\n   *     Called if the promise is fulfilled.\n   *     @param data [map] The response data from the successful upload:\n   *       `Location` (String) the URL of the uploaded object\n   *       `ETag` (String) the ETag of the uploaded object\n   *       `Bucket` (String) the bucket to which the object was uploaded\n   *       `Key` (String) the key to which the object was uploaded\n   *   @callback rejectedCallback function(err)\n   *     Called if the promise is rejected.\n   *     @param err [Error] an error or null if no error occurred.\n   *   @return [Promise] A promise that represents the state of the upload request.\n   *   @example Sending an upload request using promises.\n   *     var upload = s3.upload({Bucket: 'bucket', Key: 'key', Body: stream});\n   *     var promise = upload.promise();\n   *     promise.then(function(data) { ... }, function(err) { ... });\n   */\n\n  /**\n   * Aborts a managed upload, including all concurrent upload requests.\n   * @note By default, calling this function will cleanup a multipart upload\n   *   if one was created. To leave the multipart upload around after aborting\n   *   a request, configure `leavePartsOnError` to `true` in the {constructor}.\n   * @note Calling {abort} in the browser environment will not abort any requests\n   *   that are already in flight. If a multipart upload was created, any parts\n   *   not yet uploaded will not be sent, and the multipart upload will be cleaned up.\n   * @example Aborting an upload\n   *   var params = {\n   *     Bucket: 'bucket', Key: 'key',\n   *     Body: Buffer.alloc(1024 * 1024 * 25) // 25MB payload\n   *   };\n   *   var upload = s3.upload(params);\n   *   upload.send(function (err, data) {\n   *     if (err) console.log(\"Error:\", err.code, err.message);\n   *     else console.log(data);\n   *   });\n   *\n   *   // abort request in 1 second\n   *   setTimeout(upload.abort.bind(upload), 1000);\n   */\n  abort: function() {\n    var self = this;\n    //abort putObject request\n    if (self.isDoneChunking === true && self.totalPartNumbers === 1 && self.singlePart) {\n      self.singlePart.abort();\n    } else {\n      self.cleanup(AWS.util.error(new Error('Request aborted by user'), {\n        code: 'RequestAbortedError', retryable: false\n      }));\n    }\n  },\n\n  /**\n   * @api private\n   */\n  validateBody: function validateBody() {\n    var self = this;\n    self.body = self.service.config.params.Body;\n    if (typeof self.body === 'string') {\n      self.body = AWS.util.buffer.toBuffer(self.body);\n    } else if (!self.body) {\n      throw new Error('params.Body is required');\n    }\n    self.sliceFn = AWS.util.arraySliceFn(self.body);\n  },\n\n  /**\n   * @api private\n   */\n  bindServiceObject: function bindServiceObject(params) {\n    params = params || {};\n    var self = this;\n    // bind parameters to new service object\n    if (!self.service) {\n      self.service = new AWS.S3({params: params});\n    } else {\n      var service = self.service;\n      var config = AWS.util.copy(service.config);\n      config.signatureVersion = service.getSignatureVersion();\n      self.service = new service.constructor.__super__(config);\n      self.service.config.params =\n        AWS.util.merge(self.service.config.params || {}, params);\n    }\n  },\n\n  /**\n   * @api private\n   */\n  adjustTotalBytes: function adjustTotalBytes() {\n    var self = this;\n    try { // try to get totalBytes\n      self.totalBytes = byteLength(self.body);\n    } catch (e) { }\n\n    // try to adjust partSize if we know payload length\n    if (self.totalBytes) {\n      var newPartSize = Math.ceil(self.totalBytes / self.maxTotalParts);\n      if (newPartSize > self.partSize) self.partSize = newPartSize;\n    } else {\n      self.totalBytes = undefined;\n    }\n  },\n\n  /**\n   * @api private\n   */\n  isDoneChunking: false,\n\n  /**\n   * @api private\n   */\n  partPos: 0,\n\n  /**\n   * @api private\n   */\n  totalChunkedBytes: 0,\n\n  /**\n   * @api private\n   */\n  totalUploadedBytes: 0,\n\n  /**\n   * @api private\n   */\n  totalBytes: undefined,\n\n  /**\n   * @api private\n   */\n  numParts: 0,\n\n  /**\n   * @api private\n   */\n  totalPartNumbers: 0,\n\n  /**\n   * @api private\n   */\n  activeParts: 0,\n\n  /**\n   * @api private\n   */\n  doneParts: 0,\n\n  /**\n   * @api private\n   */\n  parts: null,\n\n  /**\n   * @api private\n   */\n  completeInfo: null,\n\n  /**\n   * @api private\n   */\n  failed: false,\n\n  /**\n   * @api private\n   */\n  multipartReq: null,\n\n  /**\n   * @api private\n   */\n  partBuffers: null,\n\n  /**\n   * @api private\n   */\n  partBufferLength: 0,\n\n  /**\n   * @api private\n   */\n  fillBuffer: function fillBuffer() {\n    var self = this;\n    var bodyLen = byteLength(self.body);\n\n    if (bodyLen === 0) {\n      self.isDoneChunking = true;\n      self.numParts = 1;\n      self.nextChunk(self.body);\n      return;\n    }\n\n    while (self.activeParts < self.queueSize && self.partPos < bodyLen) {\n      var endPos = Math.min(self.partPos + self.partSize, bodyLen);\n      var buf = self.sliceFn.call(self.body, self.partPos, endPos);\n      self.partPos += self.partSize;\n\n      if (byteLength(buf) < self.partSize || self.partPos === bodyLen) {\n        self.isDoneChunking = true;\n        self.numParts = self.totalPartNumbers + 1;\n      }\n      self.nextChunk(buf);\n    }\n  },\n\n  /**\n   * @api private\n   */\n  fillStream: function fillStream() {\n    var self = this;\n    if (self.activeParts >= self.queueSize) return;\n\n    var buf = self.body.read(self.partSize - self.partBufferLength) ||\n              self.body.read();\n    if (buf) {\n      self.partBuffers.push(buf);\n      self.partBufferLength += buf.length;\n      self.totalChunkedBytes += buf.length;\n    }\n\n    if (self.partBufferLength >= self.partSize) {\n      // if we have single buffer we avoid copyfull concat\n      var pbuf = self.partBuffers.length === 1 ?\n        self.partBuffers[0] : Buffer.concat(self.partBuffers);\n      self.partBuffers = [];\n      self.partBufferLength = 0;\n\n      // if we have more than partSize, push the rest back on the queue\n      if (pbuf.length > self.partSize) {\n        var rest = pbuf.slice(self.partSize);\n        self.partBuffers.push(rest);\n        self.partBufferLength += rest.length;\n        pbuf = pbuf.slice(0, self.partSize);\n      }\n\n      self.nextChunk(pbuf);\n    }\n\n    if (self.isDoneChunking && !self.isDoneSending) {\n      // if we have single buffer we avoid copyfull concat\n      pbuf = self.partBuffers.length === 1 ?\n          self.partBuffers[0] : Buffer.concat(self.partBuffers);\n      self.partBuffers = [];\n      self.partBufferLength = 0;\n      self.totalBytes = self.totalChunkedBytes;\n      self.isDoneSending = true;\n\n      if (self.numParts === 0 || pbuf.length > 0) {\n        self.numParts++;\n        self.nextChunk(pbuf);\n      }\n    }\n\n    self.body.read(0);\n  },\n\n  /**\n   * @api private\n   */\n  nextChunk: function nextChunk(chunk) {\n    var self = this;\n    if (self.failed) return null;\n\n    var partNumber = ++self.totalPartNumbers;\n    if (self.isDoneChunking && partNumber === 1) {\n      var params = {Body: chunk};\n      if (this.tags) {\n        params.Tagging = this.getTaggingHeader();\n      }\n      var req = self.service.putObject(params);\n      req._managedUpload = self;\n      req.on('httpUploadProgress', self.progress).send(self.finishSinglePart);\n      self.singlePart = req; //save the single part request\n      return null;\n    } else if (self.service.config.params.ContentMD5) {\n      var err = AWS.util.error(new Error('The Content-MD5 you specified is invalid for multi-part uploads.'), {\n        code: 'InvalidDigest', retryable: false\n      });\n\n      self.cleanup(err);\n      return null;\n    }\n\n    if (self.completeInfo[partNumber] && self.completeInfo[partNumber].ETag !== null) {\n      return null; // Already uploaded this part.\n    }\n\n    self.activeParts++;\n    if (!self.service.config.params.UploadId) {\n\n      if (!self.multipartReq) { // create multipart\n        self.multipartReq = self.service.createMultipartUpload();\n        self.multipartReq.on('success', function(resp) {\n          self.service.config.params.UploadId = resp.data.UploadId;\n          self.multipartReq = null;\n        });\n        self.queueChunks(chunk, partNumber);\n        self.multipartReq.on('error', function(err) {\n          self.cleanup(err);\n        });\n        self.multipartReq.send();\n      } else {\n        self.queueChunks(chunk, partNumber);\n      }\n    } else { // multipart is created, just send\n      self.uploadPart(chunk, partNumber);\n    }\n  },\n\n  /**\n   * @api private\n   */\n  getTaggingHeader: function getTaggingHeader() {\n    var kvPairStrings = [];\n    for (var i = 0; i < this.tags.length; i++) {\n      kvPairStrings.push(AWS.util.uriEscape(this.tags[i].Key) + '=' +\n        AWS.util.uriEscape(this.tags[i].Value));\n    }\n\n    return kvPairStrings.join('&');\n  },\n\n  /**\n   * @api private\n   */\n  uploadPart: function uploadPart(chunk, partNumber) {\n    var self = this;\n\n    var partParams = {\n      Body: chunk,\n      ContentLength: AWS.util.string.byteLength(chunk),\n      PartNumber: partNumber\n    };\n\n    var partInfo = {ETag: null, PartNumber: partNumber};\n    self.completeInfo[partNumber] = partInfo;\n\n    var req = self.service.uploadPart(partParams);\n    self.parts[partNumber] = req;\n    req._lastUploadedBytes = 0;\n    req._managedUpload = self;\n    req.on('httpUploadProgress', self.progress);\n    req.send(function(err, data) {\n      delete self.parts[partParams.PartNumber];\n      self.activeParts--;\n\n      if (!err && (!data || !data.ETag)) {\n        var message = 'No access to ETag property on response.';\n        if (AWS.util.isBrowser()) {\n          message += ' Check CORS configuration to expose ETag header.';\n        }\n\n        err = AWS.util.error(new Error(message), {\n          code: 'ETagMissing', retryable: false\n        });\n      }\n      if (err) return self.cleanup(err);\n      //prevent sending part being returned twice (https://github.com/aws/aws-sdk-js/issues/2304)\n      if (self.completeInfo[partNumber] && self.completeInfo[partNumber].ETag !== null) return null;\n      partInfo.ETag = data.ETag;\n      self.doneParts++;\n      if (self.isDoneChunking && self.doneParts === self.numParts) {\n        self.finishMultiPart();\n      } else {\n        self.fillQueue.call(self);\n      }\n    });\n  },\n\n  /**\n   * @api private\n   */\n  queueChunks: function queueChunks(chunk, partNumber) {\n    var self = this;\n    self.multipartReq.on('success', function() {\n      self.uploadPart(chunk, partNumber);\n    });\n  },\n\n  /**\n   * @api private\n   */\n  cleanup: function cleanup(err) {\n    var self = this;\n    if (self.failed) return;\n\n    // clean up stream\n    if (typeof self.body.removeAllListeners === 'function' &&\n        typeof self.body.resume === 'function') {\n      self.body.removeAllListeners('readable');\n      self.body.removeAllListeners('end');\n      self.body.resume();\n    }\n\n    // cleanup multipartReq listeners\n    if (self.multipartReq) {\n      self.multipartReq.removeAllListeners('success');\n      self.multipartReq.removeAllListeners('error');\n      self.multipartReq.removeAllListeners('complete');\n      delete self.multipartReq;\n    }\n\n    if (self.service.config.params.UploadId && !self.leavePartsOnError) {\n      self.service.abortMultipartUpload().send();\n    } else if (self.leavePartsOnError) {\n      self.isDoneChunking = false;\n    }\n\n    AWS.util.each(self.parts, function(partNumber, part) {\n      part.removeAllListeners('complete');\n      part.abort();\n    });\n\n    self.activeParts = 0;\n    self.partPos = 0;\n    self.numParts = 0;\n    self.totalPartNumbers = 0;\n    self.parts = {};\n    self.failed = true;\n    self.callback(err);\n  },\n\n  /**\n   * @api private\n   */\n  finishMultiPart: function finishMultiPart() {\n    var self = this;\n    var completeParams = { MultipartUpload: { Parts: self.completeInfo.slice(1) } };\n    self.service.completeMultipartUpload(completeParams, function(err, data) {\n      if (err) {\n        return self.cleanup(err);\n      }\n\n      if (data && typeof data.Location === 'string') {\n        data.Location = data.Location.replace(/%2F/g, '/');\n      }\n\n      if (Array.isArray(self.tags)) {\n        for (var i = 0; i < self.tags.length; i++) {\n          self.tags[i].Value = String(self.tags[i].Value);\n        }\n        self.service.putObjectTagging(\n          {Tagging: {TagSet: self.tags}},\n          function(e, d) {\n            if (e) {\n              self.callback(e);\n            } else {\n              self.callback(e, data);\n            }\n          }\n        );\n      } else {\n        self.callback(err, data);\n      }\n    });\n  },\n\n  /**\n   * @api private\n   */\n  finishSinglePart: function finishSinglePart(err, data) {\n    var upload = this.request._managedUpload;\n    var httpReq = this.request.httpRequest;\n    var endpoint = httpReq.endpoint;\n    if (err) return upload.callback(err);\n    data.Location =\n      [endpoint.protocol, '//', endpoint.host, httpReq.path].join('');\n    data.key = this.request.params.Key; // will stay undocumented\n    data.Key = this.request.params.Key;\n    data.Bucket = this.request.params.Bucket;\n    upload.callback(err, data);\n  },\n\n  /**\n   * @api private\n   */\n  progress: function progress(info) {\n    var upload = this._managedUpload;\n    if (this.operation === 'putObject') {\n      info.part = 1;\n      info.key = this.params.Key;\n    } else {\n      upload.totalUploadedBytes += info.loaded - this._lastUploadedBytes;\n      this._lastUploadedBytes = info.loaded;\n      info = {\n        loaded: upload.totalUploadedBytes,\n        total: upload.totalBytes,\n        part: this.params.PartNumber,\n        key: this.params.Key\n      };\n    }\n    upload.emit('httpUploadProgress', [info]);\n  }\n});\n\nAWS.util.mixin(AWS.S3.ManagedUpload, AWS.SequentialExecutor);\n\n/**\n * @api private\n */\nAWS.S3.ManagedUpload.addPromisesToClass = function addPromisesToClass(PromiseDependency) {\n  this.prototype.promise = AWS.util.promisifyMethod('send', PromiseDependency);\n};\n\n/**\n * @api private\n */\nAWS.S3.ManagedUpload.deletePromisesFromClass = function deletePromisesFromClass() {\n  delete this.prototype.promise;\n};\n\nAWS.util.addPromises(AWS.S3.ManagedUpload);\n\n/**\n * @api private\n */\nmodule.exports = AWS.S3.ManagedUpload;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar AWSS3Provider_1 = require(\"./AWSS3Provider\");\nexports.AWSS3Provider = AWSS3Provider_1.default;\n//# sourceMappingURL=index.js.map","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar API_1 = require(\"./API\");\nexports.APIClass = API_1.default;\nexports.graphqlOperation = API_1.graphqlOperation;\nvar core_1 = require(\"@aws-amplify/core\");\nvar logger = new core_1.ConsoleLogger('API');\nvar _instance = null;\nif (!_instance) {\n    logger.debug('Create API Instance');\n    _instance = new API_1.default(null);\n}\nvar API = _instance;\ncore_1.default.register(API);\nexports.default = API;\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\n            t[p[i]] = s[p[i]];\n    return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar graphql_1 = require(\"graphql\");\nvar printer_1 = require(\"graphql/language/printer\");\nvar parser_1 = require(\"graphql/language/parser\");\nvar Observable = require(\"zen-observable\");\nvar RestClient_1 = require(\"./RestClient\");\nvar core_1 = require(\"@aws-amplify/core\");\nvar auth_1 = require(\"@aws-amplify/auth\");\nvar cache_1 = require(\"@aws-amplify/cache\");\nvar constants_1 = require(\"@aws-amplify/core/lib/constants\");\nvar uuid_1 = require(\"uuid\");\nvar logger = new core_1.ConsoleLogger('API');\nexports.graphqlOperation = function (query, variables) {\n    if (variables === void 0) { variables = {}; }\n    return ({ query: query, variables: variables });\n};\n/**\n * Export Cloud Logic APIs\n */\nvar APIClass = /** @class */ (function () {\n    /**\n     * Initialize Storage with AWS configuration\n     * @param {Object} options - Configuration object for storage\n     */\n    function APIClass(options) {\n        this._api = null;\n        this._pubSub = core_1.default.PubSub;\n        this.clientIdentifier = uuid_1.v4();\n        this._options = options;\n        logger.debug('API Options', this._options);\n    }\n    APIClass.prototype.getModuleName = function () {\n        return 'API';\n    };\n    /**\n     * Configure API part with aws configurations\n     * @param {Object} config - Configuration of the API\n     * @return {Object} - The current configuration\n     */\n    APIClass.prototype.configure = function (options) {\n        var _a = options || {}, _b = _a.API, API = _b === void 0 ? {} : _b, otherOptions = __rest(_a, [\"API\"]);\n        var opt = __assign({}, otherOptions, API);\n        logger.debug('configure API', { opt: opt });\n        if (opt['aws_project_region']) {\n            if (opt['aws_cloud_logic_custom']) {\n                var custom = opt['aws_cloud_logic_custom'];\n                opt.endpoints = (typeof custom === 'string') ? JSON.parse(custom)\n                    : custom;\n            }\n            opt = Object.assign({}, opt, {\n                region: opt['aws_project_region'],\n                header: {},\n            });\n        }\n        if (!Array.isArray(opt.endpoints)) {\n            opt.endpoints = [];\n        }\n        // Check if endpoints has custom_headers and validate if is a function\n        opt.endpoints.forEach(function (endpoint) {\n            if (typeof endpoint.custom_header !== 'undefined' && typeof endpoint.custom_header !== 'function') {\n                logger.warn('API ' + endpoint.name + ', custom_header should be a function');\n                endpoint.custom_header = undefined;\n            }\n        });\n        if (typeof opt.graphql_headers !== 'undefined' && typeof opt.graphql_headers !== 'function') {\n            logger.warn('graphql_headers should be a function');\n            opt.graphql_headers = undefined;\n        }\n        this._options = Object.assign({}, this._options, opt);\n        this.createInstance();\n        return this._options;\n    };\n    /**\n     * Create an instance of API for the library\n     * @return - A promise of true if Success\n     */\n    APIClass.prototype.createInstance = function () {\n        logger.debug('create API instance');\n        if (this._options) {\n            this._api = new RestClient_1.RestClient(this._options);\n            return true;\n        }\n        else {\n            return Promise.reject('API not configured');\n        }\n    };\n    /**\n     * Make a GET request\n     * @param {string} apiName  - The api name of the request\n     * @param {string} path - The path of the request\n     * @param {json} [init] - Request extra params\n     * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n     */\n    APIClass.prototype.get = function (apiName, path, init) {\n        return __awaiter(this, void 0, void 0, function () {\n            var error_1, endpoint;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!!this._api) return [3 /*break*/, 4];\n                        _a.label = 1;\n                    case 1:\n                        _a.trys.push([1, 3, , 4]);\n                        return [4 /*yield*/, this.createInstance()];\n                    case 2:\n                        _a.sent();\n                        return [3 /*break*/, 4];\n                    case 3:\n                        error_1 = _a.sent();\n                        return [2 /*return*/, Promise.reject(error_1)];\n                    case 4:\n                        endpoint = this._api.endpoint(apiName);\n                        if (endpoint.length === 0) {\n                            return [2 /*return*/, Promise.reject('API ' + apiName + ' does not exist')];\n                        }\n                        return [2 /*return*/, this._api.get(endpoint + path, init)];\n                }\n            });\n        });\n    };\n    /**\n     * Make a POST request\n     * @param {string} apiName  - The api name of the request\n     * @param {string} path - The path of the request\n     * @param {json} [init] - Request extra params\n     * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n     */\n    APIClass.prototype.post = function (apiName, path, init) {\n        return __awaiter(this, void 0, void 0, function () {\n            var error_2, endpoint;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!!this._api) return [3 /*break*/, 4];\n                        _a.label = 1;\n                    case 1:\n                        _a.trys.push([1, 3, , 4]);\n                        return [4 /*yield*/, this.createInstance()];\n                    case 2:\n                        _a.sent();\n                        return [3 /*break*/, 4];\n                    case 3:\n                        error_2 = _a.sent();\n                        return [2 /*return*/, Promise.reject(error_2)];\n                    case 4:\n                        endpoint = this._api.endpoint(apiName);\n                        if (endpoint.length === 0) {\n                            return [2 /*return*/, Promise.reject('API ' + apiName + ' does not exist')];\n                        }\n                        return [2 /*return*/, this._api.post(endpoint + path, init)];\n                }\n            });\n        });\n    };\n    /**\n     * Make a PUT request\n     * @param {string} apiName  - The api name of the request\n     * @param {string} path - The path of the request\n     * @param {json} [init] - Request extra params\n     * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n     */\n    APIClass.prototype.put = function (apiName, path, init) {\n        return __awaiter(this, void 0, void 0, function () {\n            var error_3, endpoint;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!!this._api) return [3 /*break*/, 4];\n                        _a.label = 1;\n                    case 1:\n                        _a.trys.push([1, 3, , 4]);\n                        return [4 /*yield*/, this.createInstance()];\n                    case 2:\n                        _a.sent();\n                        return [3 /*break*/, 4];\n                    case 3:\n                        error_3 = _a.sent();\n                        return [2 /*return*/, Promise.reject(error_3)];\n                    case 4:\n                        endpoint = this._api.endpoint(apiName);\n                        if (endpoint.length === 0) {\n                            return [2 /*return*/, Promise.reject('API ' + apiName + ' does not exist')];\n                        }\n                        return [2 /*return*/, this._api.put(endpoint + path, init)];\n                }\n            });\n        });\n    };\n    /**\n     * Make a PATCH request\n     * @param {string} apiName  - The api name of the request\n     * @param {string} path - The path of the request\n     * @param {json} [init] - Request extra params\n     * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n     */\n    APIClass.prototype.patch = function (apiName, path, init) {\n        return __awaiter(this, void 0, void 0, function () {\n            var error_4, endpoint;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!!this._api) return [3 /*break*/, 4];\n                        _a.label = 1;\n                    case 1:\n                        _a.trys.push([1, 3, , 4]);\n                        return [4 /*yield*/, this.createInstance()];\n                    case 2:\n                        _a.sent();\n                        return [3 /*break*/, 4];\n                    case 3:\n                        error_4 = _a.sent();\n                        return [2 /*return*/, Promise.reject(error_4)];\n                    case 4:\n                        endpoint = this._api.endpoint(apiName);\n                        if (endpoint.length === 0) {\n                            return [2 /*return*/, Promise.reject('API ' + apiName + ' does not exist')];\n                        }\n                        return [2 /*return*/, this._api.patch(endpoint + path, init)];\n                }\n            });\n        });\n    };\n    /**\n     * Make a DEL request\n     * @param {string} apiName  - The api name of the request\n     * @param {string} path - The path of the request\n     * @param {json} [init] - Request extra params\n     * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n     */\n    APIClass.prototype.del = function (apiName, path, init) {\n        return __awaiter(this, void 0, void 0, function () {\n            var error_5, endpoint;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!!this._api) return [3 /*break*/, 4];\n                        _a.label = 1;\n                    case 1:\n                        _a.trys.push([1, 3, , 4]);\n                        return [4 /*yield*/, this.createInstance()];\n                    case 2:\n                        _a.sent();\n                        return [3 /*break*/, 4];\n                    case 3:\n                        error_5 = _a.sent();\n                        return [2 /*return*/, Promise.reject(error_5)];\n                    case 4:\n                        endpoint = this._api.endpoint(apiName);\n                        if (endpoint.length === 0) {\n                            return [2 /*return*/, Promise.reject('API ' + apiName + ' does not exist')];\n                        }\n                        return [2 /*return*/, this._api.del(endpoint + path, init)];\n                }\n            });\n        });\n    };\n    /**\n     * Make a HEAD request\n     * @param {string} apiName  - The api name of the request\n     * @param {string} path - The path of the request\n     * @param {json} [init] - Request extra params\n     * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n     */\n    APIClass.prototype.head = function (apiName, path, init) {\n        return __awaiter(this, void 0, void 0, function () {\n            var error_6, endpoint;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!!this._api) return [3 /*break*/, 4];\n                        _a.label = 1;\n                    case 1:\n                        _a.trys.push([1, 3, , 4]);\n                        return [4 /*yield*/, this.createInstance()];\n                    case 2:\n                        _a.sent();\n                        return [3 /*break*/, 4];\n                    case 3:\n                        error_6 = _a.sent();\n                        return [2 /*return*/, Promise.reject(error_6)];\n                    case 4:\n                        endpoint = this._api.endpoint(apiName);\n                        if (endpoint.length === 0) {\n                            return [2 /*return*/, Promise.reject('API ' + apiName + ' does not exist')];\n                        }\n                        return [2 /*return*/, this._api.head(endpoint + path, init)];\n                }\n            });\n        });\n    };\n    /**\n    * Getting endpoint for API\n    * @param {string} apiName - The name of the api\n    * @return {string} - The endpoint of the api\n    */\n    APIClass.prototype.endpoint = function (apiName) {\n        return __awaiter(this, void 0, void 0, function () {\n            var error_7;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!!this._api) return [3 /*break*/, 4];\n                        _a.label = 1;\n                    case 1:\n                        _a.trys.push([1, 3, , 4]);\n                        return [4 /*yield*/, this.createInstance()];\n                    case 2:\n                        _a.sent();\n                        return [3 /*break*/, 4];\n                    case 3:\n                        error_7 = _a.sent();\n                        return [2 /*return*/, Promise.reject(error_7)];\n                    case 4: return [2 /*return*/, this._api.endpoint(apiName)];\n                }\n            });\n        });\n    };\n    APIClass.prototype._headerBasedAuth = function (defaultAuthenticationType) {\n        return __awaiter(this, void 0, void 0, function () {\n            var _a, aws_appsync_authenticationType, apiKey, authenticationType, headers, _b, credentialsOK, federatedInfo, session;\n            return __generator(this, function (_c) {\n                switch (_c.label) {\n                    case 0:\n                        _a = this._options, aws_appsync_authenticationType = _a.aws_appsync_authenticationType, apiKey = _a.aws_appsync_apiKey;\n                        authenticationType = defaultAuthenticationType || aws_appsync_authenticationType || \"AWS_IAM\";\n                        headers = {};\n                        _b = authenticationType;\n                        switch (_b) {\n                            case 'API_KEY': return [3 /*break*/, 1];\n                            case 'AWS_IAM': return [3 /*break*/, 2];\n                            case 'OPENID_CONNECT': return [3 /*break*/, 4];\n                            case 'AMAZON_COGNITO_USER_POOLS': return [3 /*break*/, 6];\n                        }\n                        return [3 /*break*/, 8];\n                    case 1:\n                        if (!apiKey) {\n                            throw new Error('No api-key configured');\n                        }\n                        headers = {\n                            Authorization: null,\n                            'X-Api-Key': apiKey\n                        };\n                        return [3 /*break*/, 9];\n                    case 2: return [4 /*yield*/, this._ensureCredentials()];\n                    case 3:\n                        credentialsOK = _c.sent();\n                        if (!credentialsOK) {\n                            throw new Error('No credentials');\n                        }\n                        return [3 /*break*/, 9];\n                    case 4: return [4 /*yield*/, cache_1.default.getItem('federatedInfo')];\n                    case 5:\n                        federatedInfo = _c.sent();\n                        if (!federatedInfo || !federatedInfo.token) {\n                            throw new Error('No federated jwt');\n                        }\n                        headers = {\n                            Authorization: federatedInfo.token\n                        };\n                        return [3 /*break*/, 9];\n                    case 6: return [4 /*yield*/, auth_1.default.currentSession()];\n                    case 7:\n                        session = _c.sent();\n                        headers = {\n                            Authorization: session.getAccessToken().getJwtToken()\n                        };\n                        return [3 /*break*/, 9];\n                    case 8:\n                        headers = {\n                            Authorization: null,\n                        };\n                        return [3 /*break*/, 9];\n                    case 9: return [2 /*return*/, headers];\n                }\n            });\n        });\n    };\n    /**\n     * to get the operation type\n     * @param operation\n     */\n    APIClass.prototype.getGraphqlOperationType = function (operation) {\n        var doc = parser_1.parse(operation);\n        var operationType = doc.definitions[0].operation;\n        return operationType;\n    };\n    /**\n     * Executes a GraphQL operation\n     *\n     * @param {GraphQLOptions} GraphQL Options\n     * @returns {Promise<GraphQLResult> | Observable<object>}\n     */\n    APIClass.prototype.graphql = function (_a) {\n        var paramQuery = _a.query, _b = _a.variables, variables = _b === void 0 ? {} : _b, authMode = _a.authMode;\n        var query = typeof paramQuery === 'string' ? parser_1.parse(paramQuery) : parser_1.parse(printer_1.print(paramQuery));\n        var _c = query.definitions.filter(function (def) { return def.kind === 'OperationDefinition'; })[0], operationDef = _c === void 0 ? {} : _c;\n        var operationType = operationDef.operation;\n        switch (operationType) {\n            case 'query':\n            case 'mutation':\n                return this._graphql({ query: query, variables: variables, authMode: authMode });\n            case 'subscription':\n                return this._graphqlSubscribe({ query: query, variables: variables, authMode: authMode });\n        }\n        throw new Error(\"invalid operation type: \" + operationType);\n    };\n    APIClass.prototype._graphql = function (_a, additionalHeaders) {\n        var query = _a.query, variables = _a.variables, authMode = _a.authMode;\n        if (additionalHeaders === void 0) { additionalHeaders = {}; }\n        return __awaiter(this, void 0, void 0, function () {\n            var _b, region, appSyncGraphqlEndpoint, _c, graphql_headers, customGraphqlEndpoint, customEndpointRegion, headers, _d, _e, _f, _g, body, init, endpoint, error, response, err_1, errors;\n            return __generator(this, function (_h) {\n                switch (_h.label) {\n                    case 0:\n                        if (!!this._api) return [3 /*break*/, 2];\n                        return [4 /*yield*/, this.createInstance()];\n                    case 1:\n                        _h.sent();\n                        _h.label = 2;\n                    case 2:\n                        _b = this._options, region = _b.aws_appsync_region, appSyncGraphqlEndpoint = _b.aws_appsync_graphqlEndpoint, _c = _b.graphql_headers, graphql_headers = _c === void 0 ? function () { return ({}); } : _c, customGraphqlEndpoint = _b.graphql_endpoint, customEndpointRegion = _b.graphql_endpoint_iam_region;\n                        _d = [{}];\n                        _e = !customGraphqlEndpoint;\n                        if (!_e) return [3 /*break*/, 4];\n                        return [4 /*yield*/, this._headerBasedAuth(authMode)];\n                    case 3:\n                        _e = (_h.sent());\n                        _h.label = 4;\n                    case 4:\n                        _d = _d.concat([(_e)]);\n                        _f = customGraphqlEndpoint;\n                        if (!_f) return [3 /*break*/, 8];\n                        if (!customEndpointRegion) return [3 /*break*/, 6];\n                        return [4 /*yield*/, this._headerBasedAuth(authMode)];\n                    case 5:\n                        _g = _h.sent();\n                        return [3 /*break*/, 7];\n                    case 6:\n                        _g = { Authorization: null };\n                        _h.label = 7;\n                    case 7:\n                        _f = (_g);\n                        _h.label = 8;\n                    case 8:\n                        _d = _d.concat([(_f),\n                            additionalHeaders]);\n                        return [4 /*yield*/, graphql_headers({ query: query, variables: variables })];\n                    case 9:\n                        headers = __assign.apply(void 0, _d.concat([_h.sent()]));\n                        body = {\n                            query: printer_1.print(query),\n                            variables: variables,\n                        };\n                        init = {\n                            headers: headers,\n                            body: body,\n                            signerServiceInfo: {\n                                service: !customGraphqlEndpoint ? 'appsync' : 'execute-api',\n                                region: !customGraphqlEndpoint ? region : customEndpointRegion\n                            }\n                        };\n                        endpoint = customGraphqlEndpoint || appSyncGraphqlEndpoint;\n                        if (!endpoint) {\n                            error = new graphql_1.GraphQLError('No graphql endpoint provided.');\n                            throw {\n                                data: {},\n                                errors: [error],\n                            };\n                        }\n                        _h.label = 10;\n                    case 10:\n                        _h.trys.push([10, 12, , 13]);\n                        return [4 /*yield*/, this._api.post(endpoint, init)];\n                    case 11:\n                        response = _h.sent();\n                        return [3 /*break*/, 13];\n                    case 12:\n                        err_1 = _h.sent();\n                        response = {\n                            data: {},\n                            errors: [\n                                new graphql_1.GraphQLError(err_1.message)\n                            ]\n                        };\n                        return [3 /*break*/, 13];\n                    case 13:\n                        errors = response.errors;\n                        if (errors && errors.length) {\n                            throw response;\n                        }\n                        return [2 /*return*/, response];\n                }\n            });\n        });\n    };\n    APIClass.prototype._graphqlSubscribe = function (_a) {\n        var _this = this;\n        var query = _a.query, variables = _a.variables, authMode = _a.authMode;\n        if (core_1.default.PubSub && typeof core_1.default.PubSub.subscribe === 'function') {\n            return new Observable(function (observer) {\n                var handle = null;\n                (function () { return __awaiter(_this, void 0, void 0, function () {\n                    var aws_appsync_authenticationType, authenticationType, additionalheaders, subscription, newSubscriptions_1, newTopics, observable, error_8;\n                    return __generator(this, function (_a) {\n                        switch (_a.label) {\n                            case 0:\n                                aws_appsync_authenticationType = this._options.aws_appsync_authenticationType;\n                                authenticationType = authMode || aws_appsync_authenticationType;\n                                additionalheaders = __assign({}, (authenticationType === 'API_KEY' ? {\n                                    'x-amz-subscriber-id': this.clientIdentifier\n                                } : {}));\n                                _a.label = 1;\n                            case 1:\n                                _a.trys.push([1, 3, , 4]);\n                                return [4 /*yield*/, this._graphql({ query: query, variables: variables, authMode: authMode }, additionalheaders)];\n                            case 2:\n                                subscription = (_a.sent()).extensions.subscription;\n                                newSubscriptions_1 = subscription.newSubscriptions;\n                                newTopics = Object.getOwnPropertyNames(newSubscriptions_1).map(function (p) { return newSubscriptions_1[p].topic; });\n                                observable = core_1.default.PubSub.subscribe(newTopics, __assign({}, subscription, { provider: constants_1.INTERNAL_AWS_APPSYNC_PUBSUB_PROVIDER }));\n                                handle = observable.subscribe({\n                                    next: function (data) { return observer.next(data); },\n                                    complete: function () { return observer.complete(); },\n                                    error: function (data) {\n                                        var error = __assign({}, data);\n                                        if (!error.errors) {\n                                            error.errors = [__assign({}, new graphql_1.GraphQLError('Network Error'))];\n                                        }\n                                        observer.error(error);\n                                    }\n                                });\n                                return [3 /*break*/, 4];\n                            case 3:\n                                error_8 = _a.sent();\n                                observer.error(error_8);\n                                return [3 /*break*/, 4];\n                            case 4: return [2 /*return*/];\n                        }\n                    });\n                }); })();\n                return function () {\n                    if (handle) {\n                        handle.unsubscribe();\n                    }\n                };\n            });\n        }\n        else {\n            logger.debug('No pubsub module applied for subscription');\n            throw new Error('No pubsub module applied for subscription');\n        }\n    };\n    /**\n     * @private\n     */\n    APIClass.prototype._ensureCredentials = function () {\n        return core_1.Credentials.get()\n            .then(function (credentials) {\n            if (!credentials)\n                return false;\n            var cred = core_1.Credentials.shear(credentials);\n            logger.debug('set credentials for api', cred);\n            return true;\n        })\n            .catch(function (err) {\n            logger.warn('ensure credentials error', err);\n            return false;\n        });\n    };\n    return APIClass;\n}());\nexports.default = APIClass;\n//# sourceMappingURL=API.js.map","import { IRecordReference, RecordReference } from \"shared-models/record-reference\";\n\nexport interface IItemReference extends IRecordReference{productId?: string, winerySku?: string, isInventoryItem?: boolean, isKitItem?: boolean, onHand?: number, available?: number, backordered?: number, committed?: number};\nexport class ItemReference extends RecordReference{   \n    productId?: string;\n    winerySku?: string;\n    isInventoryItem?: boolean;\n    isKitItem?: boolean;\n    onHand?: number;\n    available?: number;\n    backordered?: number;\n    committed?: number;\n    constructor(data: IItemReference){\n        super(data);\n        this.productId = data.productId || \"\";        \n        this.winerySku = data.winerySku || \"\";        \n        this.isInventoryItem = data.isInventoryItem || false;        \n        this.isKitItem = data.isKitItem || false;        \n        this.onHand = data.onHand || 0;        \n        this.available = data.available || 0;        \n        this.backordered = data.backordered || 0;        \n        this.committed = data.committed || 0;        \n    }\n}\n\nexport interface IItemRecord extends IItemReference{}\nexport class ItemRecord extends ItemReference{\n    constructor(data: IItemRecord){\n        super(data);        \n    }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.print = print;\n\nvar _visitor = require('./visitor');\n\n/**\n * Converts an AST into a string, using one set of reasonable\n * formatting rules.\n */\nfunction print(ast) {\n  return (0, _visitor.visit)(ast, { leave: printDocASTReducer });\n} /**\n   * Copyright (c) 2015-present, Facebook, Inc.\n   *\n   * This source code is licensed under the MIT license found in the\n   * LICENSE file in the root directory of this source tree.\n   */\n\nvar printDocASTReducer = {\n  Name: function Name(node) {\n    return node.value;\n  },\n  Variable: function Variable(node) {\n    return '$' + node.name;\n  },\n\n  // Document\n\n  Document: function Document(node) {\n    return join(node.definitions, '\\n\\n') + '\\n';\n  },\n\n  OperationDefinition: function OperationDefinition(node) {\n    var op = node.operation;\n    var name = node.name;\n    var varDefs = wrap('(', join(node.variableDefinitions, ', '), ')');\n    var directives = join(node.directives, ' ');\n    var selectionSet = node.selectionSet;\n    // Anonymous queries with no directives or variable definitions can use\n    // the query short form.\n    return !name && !directives && !varDefs && op === 'query' ? selectionSet : join([op, join([name, varDefs]), directives, selectionSet], ' ');\n  },\n\n\n  VariableDefinition: function VariableDefinition(_ref) {\n    var variable = _ref.variable,\n        type = _ref.type,\n        defaultValue = _ref.defaultValue;\n    return variable + ': ' + type + wrap(' = ', defaultValue);\n  },\n\n  SelectionSet: function SelectionSet(_ref2) {\n    var selections = _ref2.selections;\n    return block(selections);\n  },\n\n  Field: function Field(_ref3) {\n    var alias = _ref3.alias,\n        name = _ref3.name,\n        args = _ref3.arguments,\n        directives = _ref3.directives,\n        selectionSet = _ref3.selectionSet;\n    return join([wrap('', alias, ': ') + name + wrap('(', join(args, ', '), ')'), join(directives, ' '), selectionSet], ' ');\n  },\n\n  Argument: function Argument(_ref4) {\n    var name = _ref4.name,\n        value = _ref4.value;\n    return name + ': ' + value;\n  },\n\n  // Fragments\n\n  FragmentSpread: function FragmentSpread(_ref5) {\n    var name = _ref5.name,\n        directives = _ref5.directives;\n    return '...' + name + wrap(' ', join(directives, ' '));\n  },\n\n  InlineFragment: function InlineFragment(_ref6) {\n    var typeCondition = _ref6.typeCondition,\n        directives = _ref6.directives,\n        selectionSet = _ref6.selectionSet;\n    return join(['...', wrap('on ', typeCondition), join(directives, ' '), selectionSet], ' ');\n  },\n\n  FragmentDefinition: function FragmentDefinition(_ref7) {\n    var name = _ref7.name,\n        typeCondition = _ref7.typeCondition,\n        variableDefinitions = _ref7.variableDefinitions,\n        directives = _ref7.directives,\n        selectionSet = _ref7.selectionSet;\n    return (\n      // Note: fragment variable definitions are experimental and may be changed\n      // or removed in the future.\n      'fragment ' + name + wrap('(', join(variableDefinitions, ', '), ')') + ' ' + ('on ' + typeCondition + ' ' + wrap('', join(directives, ' '), ' ')) + selectionSet\n    );\n  },\n\n  // Value\n\n  IntValue: function IntValue(_ref8) {\n    var value = _ref8.value;\n    return value;\n  },\n  FloatValue: function FloatValue(_ref9) {\n    var value = _ref9.value;\n    return value;\n  },\n  StringValue: function StringValue(_ref10, key) {\n    var value = _ref10.value,\n        isBlockString = _ref10.block;\n    return isBlockString ? printBlockString(value, key === 'description') : JSON.stringify(value);\n  },\n  BooleanValue: function BooleanValue(_ref11) {\n    var value = _ref11.value;\n    return value ? 'true' : 'false';\n  },\n  NullValue: function NullValue() {\n    return 'null';\n  },\n  EnumValue: function EnumValue(_ref12) {\n    var value = _ref12.value;\n    return value;\n  },\n  ListValue: function ListValue(_ref13) {\n    var values = _ref13.values;\n    return '[' + join(values, ', ') + ']';\n  },\n  ObjectValue: function ObjectValue(_ref14) {\n    var fields = _ref14.fields;\n    return '{' + join(fields, ', ') + '}';\n  },\n  ObjectField: function ObjectField(_ref15) {\n    var name = _ref15.name,\n        value = _ref15.value;\n    return name + ': ' + value;\n  },\n\n  // Directive\n\n  Directive: function Directive(_ref16) {\n    var name = _ref16.name,\n        args = _ref16.arguments;\n    return '@' + name + wrap('(', join(args, ', '), ')');\n  },\n\n  // Type\n\n  NamedType: function NamedType(_ref17) {\n    var name = _ref17.name;\n    return name;\n  },\n  ListType: function ListType(_ref18) {\n    var type = _ref18.type;\n    return '[' + type + ']';\n  },\n  NonNullType: function NonNullType(_ref19) {\n    var type = _ref19.type;\n    return type + '!';\n  },\n\n  // Type System Definitions\n\n  SchemaDefinition: function SchemaDefinition(_ref20) {\n    var directives = _ref20.directives,\n        operationTypes = _ref20.operationTypes;\n    return join(['schema', join(directives, ' '), block(operationTypes)], ' ');\n  },\n\n  OperationTypeDefinition: function OperationTypeDefinition(_ref21) {\n    var operation = _ref21.operation,\n        type = _ref21.type;\n    return operation + ': ' + type;\n  },\n\n  ScalarTypeDefinition: addDescription(function (_ref22) {\n    var name = _ref22.name,\n        directives = _ref22.directives;\n    return join(['scalar', name, join(directives, ' ')], ' ');\n  }),\n\n  ObjectTypeDefinition: addDescription(function (_ref23) {\n    var name = _ref23.name,\n        interfaces = _ref23.interfaces,\n        directives = _ref23.directives,\n        fields = _ref23.fields;\n    return join(['type', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n  }),\n\n  FieldDefinition: addDescription(function (_ref24) {\n    var name = _ref24.name,\n        args = _ref24.arguments,\n        type = _ref24.type,\n        directives = _ref24.directives;\n    return name + wrap('(', join(args, ', '), ')') + ': ' + type + wrap(' ', join(directives, ' '));\n  }),\n\n  InputValueDefinition: addDescription(function (_ref25) {\n    var name = _ref25.name,\n        type = _ref25.type,\n        defaultValue = _ref25.defaultValue,\n        directives = _ref25.directives;\n    return join([name + ': ' + type, wrap('= ', defaultValue), join(directives, ' ')], ' ');\n  }),\n\n  InterfaceTypeDefinition: addDescription(function (_ref26) {\n    var name = _ref26.name,\n        directives = _ref26.directives,\n        fields = _ref26.fields;\n    return join(['interface', name, join(directives, ' '), block(fields)], ' ');\n  }),\n\n  UnionTypeDefinition: addDescription(function (_ref27) {\n    var name = _ref27.name,\n        directives = _ref27.directives,\n        types = _ref27.types;\n    return join(['union', name, join(directives, ' '), types && types.length !== 0 ? '= ' + join(types, ' | ') : ''], ' ');\n  }),\n\n  EnumTypeDefinition: addDescription(function (_ref28) {\n    var name = _ref28.name,\n        directives = _ref28.directives,\n        values = _ref28.values;\n    return join(['enum', name, join(directives, ' '), block(values)], ' ');\n  }),\n\n  EnumValueDefinition: addDescription(function (_ref29) {\n    var name = _ref29.name,\n        directives = _ref29.directives;\n    return join([name, join(directives, ' ')], ' ');\n  }),\n\n  InputObjectTypeDefinition: addDescription(function (_ref30) {\n    var name = _ref30.name,\n        directives = _ref30.directives,\n        fields = _ref30.fields;\n    return join(['input', name, join(directives, ' '), block(fields)], ' ');\n  }),\n\n  ScalarTypeExtension: function ScalarTypeExtension(_ref31) {\n    var name = _ref31.name,\n        directives = _ref31.directives;\n    return join(['extend scalar', name, join(directives, ' ')], ' ');\n  },\n\n  ObjectTypeExtension: function ObjectTypeExtension(_ref32) {\n    var name = _ref32.name,\n        interfaces = _ref32.interfaces,\n        directives = _ref32.directives,\n        fields = _ref32.fields;\n    return join(['extend type', name, wrap('implements ', join(interfaces, ' & ')), join(directives, ' '), block(fields)], ' ');\n  },\n\n  InterfaceTypeExtension: function InterfaceTypeExtension(_ref33) {\n    var name = _ref33.name,\n        directives = _ref33.directives,\n        fields = _ref33.fields;\n    return join(['extend interface', name, join(directives, ' '), block(fields)], ' ');\n  },\n\n  UnionTypeExtension: function UnionTypeExtension(_ref34) {\n    var name = _ref34.name,\n        directives = _ref34.directives,\n        types = _ref34.types;\n    return join(['extend union', name, join(directives, ' '), types && types.length !== 0 ? '= ' + join(types, ' | ') : ''], ' ');\n  },\n\n  EnumTypeExtension: function EnumTypeExtension(_ref35) {\n    var name = _ref35.name,\n        directives = _ref35.directives,\n        values = _ref35.values;\n    return join(['extend enum', name, join(directives, ' '), block(values)], ' ');\n  },\n\n  InputObjectTypeExtension: function InputObjectTypeExtension(_ref36) {\n    var name = _ref36.name,\n        directives = _ref36.directives,\n        fields = _ref36.fields;\n    return join(['extend input', name, join(directives, ' '), block(fields)], ' ');\n  },\n\n  DirectiveDefinition: addDescription(function (_ref37) {\n    var name = _ref37.name,\n        args = _ref37.arguments,\n        locations = _ref37.locations;\n    return 'directive @' + name + wrap('(', join(args, ', '), ')') + ' on ' + join(locations, ' | ');\n  })\n};\n\nfunction addDescription(cb) {\n  return function (node) {\n    return join([node.description, cb(node)], '\\n');\n  };\n}\n\n/**\n * Given maybeArray, print an empty string if it is null or empty, otherwise\n * print all items together separated by separator if provided\n */\nfunction join(maybeArray, separator) {\n  return maybeArray ? maybeArray.filter(function (x) {\n    return x;\n  }).join(separator || '') : '';\n}\n\n/**\n * Given array, print each item on its own line, wrapped in an\n * indented \"{ }\" block.\n */\nfunction block(array) {\n  return array && array.length !== 0 ? '{\\n' + indent(join(array, '\\n')) + '\\n}' : '';\n}\n\n/**\n * If maybeString is not null or empty, then wrap with start and end, otherwise\n * print an empty string.\n */\nfunction wrap(start, maybeString, end) {\n  return maybeString ? start + maybeString + (end || '') : '';\n}\n\nfunction indent(maybeString) {\n  return maybeString && '  ' + maybeString.replace(/\\n/g, '\\n  ');\n}\n\n/**\n * Print a block string in the indented block form by adding a leading and\n * trailing blank line. However, if a block string starts with whitespace and is\n * a single-line, adding a leading blank line would strip that whitespace.\n */\nfunction printBlockString(value, isDescription) {\n  var escaped = value.replace(/\"\"\"/g, '\\\\\"\"\"');\n  return (value[0] === ' ' || value[0] === '\\t') && value.indexOf('\\n') === -1 ? '\"\"\"' + escaped.replace(/\"$/, '\"\\n') + '\"\"\"' : '\"\"\"\\n' + (isDescription ? escaped : indent(escaped)) + '\\n\"\"\"';\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.visit = visit;\nexports.visitInParallel = visitInParallel;\nexports.visitWithTypeInfo = visitWithTypeInfo;\nexports.getVisitFn = getVisitFn;\n\n\n/**\n * A visitor is comprised of visit functions, which are called on each node\n * during the visitor's traversal.\n */\n\n\n/**\n * A visitor is provided to visit, it contains the collection of\n * relevant functions to be called during the visitor's traversal.\n */\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar QueryDocumentKeys = exports.QueryDocumentKeys = {\n  Name: [],\n\n  Document: ['definitions'],\n  OperationDefinition: ['name', 'variableDefinitions', 'directives', 'selectionSet'],\n  VariableDefinition: ['variable', 'type', 'defaultValue'],\n  Variable: ['name'],\n  SelectionSet: ['selections'],\n  Field: ['alias', 'name', 'arguments', 'directives', 'selectionSet'],\n  Argument: ['name', 'value'],\n\n  FragmentSpread: ['name', 'directives'],\n  InlineFragment: ['typeCondition', 'directives', 'selectionSet'],\n  FragmentDefinition: ['name',\n  // Note: fragment variable definitions are experimental and may be changed\n  // or removed in the future.\n  'variableDefinitions', 'typeCondition', 'directives', 'selectionSet'],\n\n  IntValue: [],\n  FloatValue: [],\n  StringValue: [],\n  BooleanValue: [],\n  NullValue: [],\n  EnumValue: [],\n  ListValue: ['values'],\n  ObjectValue: ['fields'],\n  ObjectField: ['name', 'value'],\n\n  Directive: ['name', 'arguments'],\n\n  NamedType: ['name'],\n  ListType: ['type'],\n  NonNullType: ['type'],\n\n  SchemaDefinition: ['directives', 'operationTypes'],\n  OperationTypeDefinition: ['type'],\n\n  ScalarTypeDefinition: ['description', 'name', 'directives'],\n  ObjectTypeDefinition: ['description', 'name', 'interfaces', 'directives', 'fields'],\n  FieldDefinition: ['description', 'name', 'arguments', 'type', 'directives'],\n  InputValueDefinition: ['description', 'name', 'type', 'defaultValue', 'directives'],\n  InterfaceTypeDefinition: ['description', 'name', 'directives', 'fields'],\n  UnionTypeDefinition: ['description', 'name', 'directives', 'types'],\n  EnumTypeDefinition: ['description', 'name', 'directives', 'values'],\n  EnumValueDefinition: ['description', 'name', 'directives'],\n  InputObjectTypeDefinition: ['description', 'name', 'directives', 'fields'],\n\n  ScalarTypeExtension: ['name', 'directives'],\n  ObjectTypeExtension: ['name', 'interfaces', 'directives', 'fields'],\n  InterfaceTypeExtension: ['name', 'directives', 'fields'],\n  UnionTypeExtension: ['name', 'directives', 'types'],\n  EnumTypeExtension: ['name', 'directives', 'values'],\n  InputObjectTypeExtension: ['name', 'directives', 'fields'],\n\n  DirectiveDefinition: ['description', 'name', 'arguments', 'locations']\n};\n\n/**\n * A KeyMap describes each the traversable properties of each kind of node.\n */\nvar BREAK = exports.BREAK = {};\n\n/**\n * visit() will walk through an AST using a depth first traversal, calling\n * the visitor's enter function at each node in the traversal, and calling the\n * leave function after visiting that node and all of its child nodes.\n *\n * By returning different values from the enter and leave functions, the\n * behavior of the visitor can be altered, including skipping over a sub-tree of\n * the AST (by returning false), editing the AST by returning a value or null\n * to remove the value, or to stop the whole traversal by returning BREAK.\n *\n * When using visit() to edit an AST, the original AST will not be modified, and\n * a new version of the AST with the changes applied will be returned from the\n * visit function.\n *\n *     const editedAST = visit(ast, {\n *       enter(node, key, parent, path, ancestors) {\n *         // @return\n *         //   undefined: no action\n *         //   false: skip visiting this node\n *         //   visitor.BREAK: stop visiting altogether\n *         //   null: delete this node\n *         //   any value: replace this node with the returned value\n *       },\n *       leave(node, key, parent, path, ancestors) {\n *         // @return\n *         //   undefined: no action\n *         //   false: no action\n *         //   visitor.BREAK: stop visiting altogether\n *         //   null: delete this node\n *         //   any value: replace this node with the returned value\n *       }\n *     });\n *\n * Alternatively to providing enter() and leave() functions, a visitor can\n * instead provide functions named the same as the kinds of AST nodes, or\n * enter/leave visitors at a named key, leading to four permutations of\n * visitor API:\n *\n * 1) Named visitors triggered when entering a node a specific kind.\n *\n *     visit(ast, {\n *       Kind(node) {\n *         // enter the \"Kind\" node\n *       }\n *     })\n *\n * 2) Named visitors that trigger upon entering and leaving a node of\n *    a specific kind.\n *\n *     visit(ast, {\n *       Kind: {\n *         enter(node) {\n *           // enter the \"Kind\" node\n *         }\n *         leave(node) {\n *           // leave the \"Kind\" node\n *         }\n *       }\n *     })\n *\n * 3) Generic visitors that trigger upon entering and leaving any node.\n *\n *     visit(ast, {\n *       enter(node) {\n *         // enter any node\n *       },\n *       leave(node) {\n *         // leave any node\n *       }\n *     })\n *\n * 4) Parallel visitors for entering and leaving nodes of a specific kind.\n *\n *     visit(ast, {\n *       enter: {\n *         Kind(node) {\n *           // enter the \"Kind\" node\n *         }\n *       },\n *       leave: {\n *         Kind(node) {\n *           // leave the \"Kind\" node\n *         }\n *       }\n *     })\n */\nfunction visit(root, visitor) {\n  var visitorKeys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : QueryDocumentKeys;\n\n  /* eslint-disable no-undef-init */\n  var stack = undefined;\n  var inArray = Array.isArray(root);\n  var keys = [root];\n  var index = -1;\n  var edits = [];\n  var node = undefined;\n  var key = undefined;\n  var parent = undefined;\n  var path = [];\n  var ancestors = [];\n  var newRoot = root;\n  /* eslint-enable no-undef-init */\n\n  do {\n    index++;\n    var isLeaving = index === keys.length;\n    var isEdited = isLeaving && edits.length !== 0;\n    if (isLeaving) {\n      key = ancestors.length === 0 ? undefined : path[path.length - 1];\n      node = parent;\n      parent = ancestors.pop();\n      if (isEdited) {\n        if (inArray) {\n          node = node.slice();\n        } else {\n          var clone = {};\n          for (var k in node) {\n            if (node.hasOwnProperty(k)) {\n              clone[k] = node[k];\n            }\n          }\n          node = clone;\n        }\n        var editOffset = 0;\n        for (var ii = 0; ii < edits.length; ii++) {\n          var editKey = edits[ii][0];\n          var editValue = edits[ii][1];\n          if (inArray) {\n            editKey -= editOffset;\n          }\n          if (inArray && editValue === null) {\n            node.splice(editKey, 1);\n            editOffset++;\n          } else {\n            node[editKey] = editValue;\n          }\n        }\n      }\n      index = stack.index;\n      keys = stack.keys;\n      edits = stack.edits;\n      inArray = stack.inArray;\n      stack = stack.prev;\n    } else {\n      key = parent ? inArray ? index : keys[index] : undefined;\n      node = parent ? parent[key] : newRoot;\n      if (node === null || node === undefined) {\n        continue;\n      }\n      if (parent) {\n        path.push(key);\n      }\n    }\n\n    var result = void 0;\n    if (!Array.isArray(node)) {\n      if (!isNode(node)) {\n        throw new Error('Invalid AST Node: ' + JSON.stringify(node));\n      }\n      var visitFn = getVisitFn(visitor, node.kind, isLeaving);\n      if (visitFn) {\n        result = visitFn.call(visitor, node, key, parent, path, ancestors);\n\n        if (result === BREAK) {\n          break;\n        }\n\n        if (result === false) {\n          if (!isLeaving) {\n            path.pop();\n            continue;\n          }\n        } else if (result !== undefined) {\n          edits.push([key, result]);\n          if (!isLeaving) {\n            if (isNode(result)) {\n              node = result;\n            } else {\n              path.pop();\n              continue;\n            }\n          }\n        }\n      }\n    }\n\n    if (result === undefined && isEdited) {\n      edits.push([key, node]);\n    }\n\n    if (isLeaving) {\n      path.pop();\n    } else {\n      stack = { inArray: inArray, index: index, keys: keys, edits: edits, prev: stack };\n      inArray = Array.isArray(node);\n      keys = inArray ? node : visitorKeys[node.kind] || [];\n      index = -1;\n      edits = [];\n      if (parent) {\n        ancestors.push(parent);\n      }\n      parent = node;\n    }\n  } while (stack !== undefined);\n\n  if (edits.length !== 0) {\n    newRoot = edits[edits.length - 1][1];\n  }\n\n  return newRoot;\n}\n\nfunction isNode(maybeNode) {\n  return Boolean(maybeNode && typeof maybeNode.kind === 'string');\n}\n\n/**\n * Creates a new visitor instance which delegates to many visitors to run in\n * parallel. Each visitor will be visited for each node before moving on.\n *\n * If a prior visitor edits a node, no following visitors will see that node.\n */\nfunction visitInParallel(visitors) {\n  var skipping = new Array(visitors.length);\n\n  return {\n    enter: function enter(node) {\n      for (var i = 0; i < visitors.length; i++) {\n        if (!skipping[i]) {\n          var fn = getVisitFn(visitors[i], node.kind, /* isLeaving */false);\n          if (fn) {\n            var result = fn.apply(visitors[i], arguments);\n            if (result === false) {\n              skipping[i] = node;\n            } else if (result === BREAK) {\n              skipping[i] = BREAK;\n            } else if (result !== undefined) {\n              return result;\n            }\n          }\n        }\n      }\n    },\n    leave: function leave(node) {\n      for (var i = 0; i < visitors.length; i++) {\n        if (!skipping[i]) {\n          var fn = getVisitFn(visitors[i], node.kind, /* isLeaving */true);\n          if (fn) {\n            var result = fn.apply(visitors[i], arguments);\n            if (result === BREAK) {\n              skipping[i] = BREAK;\n            } else if (result !== undefined && result !== false) {\n              return result;\n            }\n          }\n        } else if (skipping[i] === node) {\n          skipping[i] = null;\n        }\n      }\n    }\n  };\n}\n\n/**\n * Creates a new visitor instance which maintains a provided TypeInfo instance\n * along with visiting visitor.\n */\nfunction visitWithTypeInfo(typeInfo, visitor) {\n  return {\n    enter: function enter(node) {\n      typeInfo.enter(node);\n      var fn = getVisitFn(visitor, node.kind, /* isLeaving */false);\n      if (fn) {\n        var result = fn.apply(visitor, arguments);\n        if (result !== undefined) {\n          typeInfo.leave(node);\n          if (isNode(result)) {\n            typeInfo.enter(result);\n          }\n        }\n        return result;\n      }\n    },\n    leave: function leave(node) {\n      var fn = getVisitFn(visitor, node.kind, /* isLeaving */true);\n      var result = void 0;\n      if (fn) {\n        result = fn.apply(visitor, arguments);\n      }\n      typeInfo.leave(node);\n      return result;\n    }\n  };\n}\n\n/**\n * Given a visitor instance, if it is leaving or not, and a node kind, return\n * the function the visitor runtime should call.\n */\nfunction getVisitFn(visitor, kind, isLeaving) {\n  var kindVisitor = visitor[kind];\n  if (kindVisitor) {\n    if (!isLeaving && typeof kindVisitor === 'function') {\n      // { Kind() {} }\n      return kindVisitor;\n    }\n    var kindSpecificVisitor = isLeaving ? kindVisitor.leave : kindVisitor.enter;\n    if (typeof kindSpecificVisitor === 'function') {\n      // { Kind: { enter() {}, leave() {} } }\n      return kindSpecificVisitor;\n    }\n  } else {\n    var specificVisitor = isLeaving ? visitor.leave : visitor.enter;\n    if (specificVisitor) {\n      if (typeof specificVisitor === 'function') {\n        // { enter() {}, leave() {} }\n        return specificVisitor;\n      }\n      var specificKindVisitor = specificVisitor[kind];\n      if (typeof specificKindVisitor === 'function') {\n        // { enter: { Kind() {} }, leave: { Kind() {} } }\n        return specificKindVisitor;\n      }\n    }\n  }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.parse = parse;\nexports.parseValue = parseValue;\nexports.parseType = parseType;\nexports.parseConstValue = parseConstValue;\nexports.parseTypeReference = parseTypeReference;\nexports.parseNamedType = parseNamedType;\n\nvar _source = require('./source');\n\nvar _error = require('../error');\n\nvar _lexer = require('./lexer');\n\nvar _kinds = require('./kinds');\n\nvar _directiveLocation = require('./directiveLocation');\n\n/**\n * Given a GraphQL source, parses it into a Document.\n * Throws GraphQLError if a syntax error is encountered.\n */\n\n\n/**\n * Configuration options to control parser behavior\n */\nfunction parse(source, options) {\n  var sourceObj = typeof source === 'string' ? new _source.Source(source) : source;\n  if (!(sourceObj instanceof _source.Source)) {\n    throw new TypeError('Must provide Source. Received: ' + String(sourceObj));\n  }\n  var lexer = (0, _lexer.createLexer)(sourceObj, options || {});\n  return parseDocument(lexer);\n}\n\n/**\n * Given a string containing a GraphQL value (ex. `[42]`), parse the AST for\n * that value.\n * Throws GraphQLError if a syntax error is encountered.\n *\n * This is useful within tools that operate upon GraphQL Values directly and\n * in isolation of complete GraphQL documents.\n *\n * Consider providing the results to the utility function: valueFromAST().\n */\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction parseValue(source, options) {\n  var sourceObj = typeof source === 'string' ? new _source.Source(source) : source;\n  var lexer = (0, _lexer.createLexer)(sourceObj, options || {});\n  expect(lexer, _lexer.TokenKind.SOF);\n  var value = parseValueLiteral(lexer, false);\n  expect(lexer, _lexer.TokenKind.EOF);\n  return value;\n}\n\n/**\n * Given a string containing a GraphQL Type (ex. `[Int!]`), parse the AST for\n * that type.\n * Throws GraphQLError if a syntax error is encountered.\n *\n * This is useful within tools that operate upon GraphQL Types directly and\n * in isolation of complete GraphQL documents.\n *\n * Consider providing the results to the utility function: typeFromAST().\n */\nfunction parseType(source, options) {\n  var sourceObj = typeof source === 'string' ? new _source.Source(source) : source;\n  var lexer = (0, _lexer.createLexer)(sourceObj, options || {});\n  expect(lexer, _lexer.TokenKind.SOF);\n  var type = parseTypeReference(lexer);\n  expect(lexer, _lexer.TokenKind.EOF);\n  return type;\n}\n\n/**\n * Converts a name lex token into a name parse node.\n */\nfunction parseName(lexer) {\n  var token = expect(lexer, _lexer.TokenKind.NAME);\n  return {\n    kind: _kinds.Kind.NAME,\n    value: token.value,\n    loc: loc(lexer, token)\n  };\n}\n\n// Implements the parsing rules in the Document section.\n\n/**\n * Document : Definition+\n */\nfunction parseDocument(lexer) {\n  var start = lexer.token;\n  expect(lexer, _lexer.TokenKind.SOF);\n  var definitions = [];\n  do {\n    definitions.push(parseDefinition(lexer));\n  } while (!skip(lexer, _lexer.TokenKind.EOF));\n\n  return {\n    kind: _kinds.Kind.DOCUMENT,\n    definitions: definitions,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * Definition :\n *   - ExecutableDefinition\n *   - TypeSystemDefinition\n */\nfunction parseDefinition(lexer) {\n  if (peek(lexer, _lexer.TokenKind.NAME)) {\n    switch (lexer.token.value) {\n      case 'query':\n      case 'mutation':\n      case 'subscription':\n      case 'fragment':\n        return parseExecutableDefinition(lexer);\n      case 'schema':\n      case 'scalar':\n      case 'type':\n      case 'interface':\n      case 'union':\n      case 'enum':\n      case 'input':\n      case 'extend':\n      case 'directive':\n        // Note: The schema definition language is an experimental addition.\n        return parseTypeSystemDefinition(lexer);\n    }\n  } else if (peek(lexer, _lexer.TokenKind.BRACE_L)) {\n    return parseExecutableDefinition(lexer);\n  } else if (peekDescription(lexer)) {\n    // Note: The schema definition language is an experimental addition.\n    return parseTypeSystemDefinition(lexer);\n  }\n\n  throw unexpected(lexer);\n}\n\n/**\n * ExecutableDefinition :\n *   - OperationDefinition\n *   - FragmentDefinition\n */\nfunction parseExecutableDefinition(lexer) {\n  if (peek(lexer, _lexer.TokenKind.NAME)) {\n    switch (lexer.token.value) {\n      case 'query':\n      case 'mutation':\n      case 'subscription':\n        return parseOperationDefinition(lexer);\n\n      case 'fragment':\n        return parseFragmentDefinition(lexer);\n    }\n  } else if (peek(lexer, _lexer.TokenKind.BRACE_L)) {\n    return parseOperationDefinition(lexer);\n  }\n\n  throw unexpected(lexer);\n}\n\n// Implements the parsing rules in the Operations section.\n\n/**\n * OperationDefinition :\n *  - SelectionSet\n *  - OperationType Name? VariableDefinitions? Directives? SelectionSet\n */\nfunction parseOperationDefinition(lexer) {\n  var start = lexer.token;\n  if (peek(lexer, _lexer.TokenKind.BRACE_L)) {\n    return {\n      kind: _kinds.Kind.OPERATION_DEFINITION,\n      operation: 'query',\n      name: undefined,\n      variableDefinitions: [],\n      directives: [],\n      selectionSet: parseSelectionSet(lexer),\n      loc: loc(lexer, start)\n    };\n  }\n  var operation = parseOperationType(lexer);\n  var name = void 0;\n  if (peek(lexer, _lexer.TokenKind.NAME)) {\n    name = parseName(lexer);\n  }\n  return {\n    kind: _kinds.Kind.OPERATION_DEFINITION,\n    operation: operation,\n    name: name,\n    variableDefinitions: parseVariableDefinitions(lexer),\n    directives: parseDirectives(lexer, false),\n    selectionSet: parseSelectionSet(lexer),\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * OperationType : one of query mutation subscription\n */\nfunction parseOperationType(lexer) {\n  var operationToken = expect(lexer, _lexer.TokenKind.NAME);\n  switch (operationToken.value) {\n    case 'query':\n      return 'query';\n    case 'mutation':\n      return 'mutation';\n    case 'subscription':\n      return 'subscription';\n  }\n\n  throw unexpected(lexer, operationToken);\n}\n\n/**\n * VariableDefinitions : ( VariableDefinition+ )\n */\nfunction parseVariableDefinitions(lexer) {\n  return peek(lexer, _lexer.TokenKind.PAREN_L) ? many(lexer, _lexer.TokenKind.PAREN_L, parseVariableDefinition, _lexer.TokenKind.PAREN_R) : [];\n}\n\n/**\n * VariableDefinition : Variable : Type DefaultValue?\n */\nfunction parseVariableDefinition(lexer) {\n  var start = lexer.token;\n  return {\n    kind: _kinds.Kind.VARIABLE_DEFINITION,\n    variable: parseVariable(lexer),\n    type: (expect(lexer, _lexer.TokenKind.COLON), parseTypeReference(lexer)),\n    defaultValue: skip(lexer, _lexer.TokenKind.EQUALS) ? parseValueLiteral(lexer, true) : undefined,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * Variable : $ Name\n */\nfunction parseVariable(lexer) {\n  var start = lexer.token;\n  expect(lexer, _lexer.TokenKind.DOLLAR);\n  return {\n    kind: _kinds.Kind.VARIABLE,\n    name: parseName(lexer),\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * SelectionSet : { Selection+ }\n */\nfunction parseSelectionSet(lexer) {\n  var start = lexer.token;\n  return {\n    kind: _kinds.Kind.SELECTION_SET,\n    selections: many(lexer, _lexer.TokenKind.BRACE_L, parseSelection, _lexer.TokenKind.BRACE_R),\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * Selection :\n *   - Field\n *   - FragmentSpread\n *   - InlineFragment\n */\nfunction parseSelection(lexer) {\n  return peek(lexer, _lexer.TokenKind.SPREAD) ? parseFragment(lexer) : parseField(lexer);\n}\n\n/**\n * Field : Alias? Name Arguments? Directives? SelectionSet?\n *\n * Alias : Name :\n */\nfunction parseField(lexer) {\n  var start = lexer.token;\n\n  var nameOrAlias = parseName(lexer);\n  var alias = void 0;\n  var name = void 0;\n  if (skip(lexer, _lexer.TokenKind.COLON)) {\n    alias = nameOrAlias;\n    name = parseName(lexer);\n  } else {\n    name = nameOrAlias;\n  }\n\n  return {\n    kind: _kinds.Kind.FIELD,\n    alias: alias,\n    name: name,\n    arguments: parseArguments(lexer, false),\n    directives: parseDirectives(lexer, false),\n    selectionSet: peek(lexer, _lexer.TokenKind.BRACE_L) ? parseSelectionSet(lexer) : undefined,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * Arguments[Const] : ( Argument[?Const]+ )\n */\nfunction parseArguments(lexer, isConst) {\n  var item = isConst ? parseConstArgument : parseArgument;\n  return peek(lexer, _lexer.TokenKind.PAREN_L) ? many(lexer, _lexer.TokenKind.PAREN_L, item, _lexer.TokenKind.PAREN_R) : [];\n}\n\n/**\n * Argument[Const] : Name : Value[?Const]\n */\nfunction parseArgument(lexer) {\n  var start = lexer.token;\n  return {\n    kind: _kinds.Kind.ARGUMENT,\n    name: parseName(lexer),\n    value: (expect(lexer, _lexer.TokenKind.COLON), parseValueLiteral(lexer, false)),\n    loc: loc(lexer, start)\n  };\n}\n\nfunction parseConstArgument(lexer) {\n  var start = lexer.token;\n  return {\n    kind: _kinds.Kind.ARGUMENT,\n    name: parseName(lexer),\n    value: (expect(lexer, _lexer.TokenKind.COLON), parseConstValue(lexer)),\n    loc: loc(lexer, start)\n  };\n}\n\n// Implements the parsing rules in the Fragments section.\n\n/**\n * Corresponds to both FragmentSpread and InlineFragment in the spec.\n *\n * FragmentSpread : ... FragmentName Directives?\n *\n * InlineFragment : ... TypeCondition? Directives? SelectionSet\n */\nfunction parseFragment(lexer) {\n  var start = lexer.token;\n  expect(lexer, _lexer.TokenKind.SPREAD);\n  if (peek(lexer, _lexer.TokenKind.NAME) && lexer.token.value !== 'on') {\n    return {\n      kind: _kinds.Kind.FRAGMENT_SPREAD,\n      name: parseFragmentName(lexer),\n      directives: parseDirectives(lexer, false),\n      loc: loc(lexer, start)\n    };\n  }\n  var typeCondition = void 0;\n  if (lexer.token.value === 'on') {\n    lexer.advance();\n    typeCondition = parseNamedType(lexer);\n  }\n  return {\n    kind: _kinds.Kind.INLINE_FRAGMENT,\n    typeCondition: typeCondition,\n    directives: parseDirectives(lexer, false),\n    selectionSet: parseSelectionSet(lexer),\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * FragmentDefinition :\n *   - fragment FragmentName on TypeCondition Directives? SelectionSet\n *\n * TypeCondition : NamedType\n */\nfunction parseFragmentDefinition(lexer) {\n  var start = lexer.token;\n  expectKeyword(lexer, 'fragment');\n  // Experimental support for defining variables within fragments changes\n  // the grammar of FragmentDefinition:\n  //   - fragment FragmentName VariableDefinitions? on TypeCondition Directives? SelectionSet\n  if (lexer.options.experimentalFragmentVariables) {\n    return {\n      kind: _kinds.Kind.FRAGMENT_DEFINITION,\n      name: parseFragmentName(lexer),\n      variableDefinitions: parseVariableDefinitions(lexer),\n      typeCondition: (expectKeyword(lexer, 'on'), parseNamedType(lexer)),\n      directives: parseDirectives(lexer, false),\n      selectionSet: parseSelectionSet(lexer),\n      loc: loc(lexer, start)\n    };\n  }\n  return {\n    kind: _kinds.Kind.FRAGMENT_DEFINITION,\n    name: parseFragmentName(lexer),\n    typeCondition: (expectKeyword(lexer, 'on'), parseNamedType(lexer)),\n    directives: parseDirectives(lexer, false),\n    selectionSet: parseSelectionSet(lexer),\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * FragmentName : Name but not `on`\n */\nfunction parseFragmentName(lexer) {\n  if (lexer.token.value === 'on') {\n    throw unexpected(lexer);\n  }\n  return parseName(lexer);\n}\n\n// Implements the parsing rules in the Values section.\n\n/**\n * Value[Const] :\n *   - [~Const] Variable\n *   - IntValue\n *   - FloatValue\n *   - StringValue\n *   - BooleanValue\n *   - NullValue\n *   - EnumValue\n *   - ListValue[?Const]\n *   - ObjectValue[?Const]\n *\n * BooleanValue : one of `true` `false`\n *\n * NullValue : `null`\n *\n * EnumValue : Name but not `true`, `false` or `null`\n */\nfunction parseValueLiteral(lexer, isConst) {\n  var token = lexer.token;\n  switch (token.kind) {\n    case _lexer.TokenKind.BRACKET_L:\n      return parseList(lexer, isConst);\n    case _lexer.TokenKind.BRACE_L:\n      return parseObject(lexer, isConst);\n    case _lexer.TokenKind.INT:\n      lexer.advance();\n      return {\n        kind: _kinds.Kind.INT,\n        value: token.value,\n        loc: loc(lexer, token)\n      };\n    case _lexer.TokenKind.FLOAT:\n      lexer.advance();\n      return {\n        kind: _kinds.Kind.FLOAT,\n        value: token.value,\n        loc: loc(lexer, token)\n      };\n    case _lexer.TokenKind.STRING:\n    case _lexer.TokenKind.BLOCK_STRING:\n      return parseStringLiteral(lexer);\n    case _lexer.TokenKind.NAME:\n      if (token.value === 'true' || token.value === 'false') {\n        lexer.advance();\n        return {\n          kind: _kinds.Kind.BOOLEAN,\n          value: token.value === 'true',\n          loc: loc(lexer, token)\n        };\n      } else if (token.value === 'null') {\n        lexer.advance();\n        return {\n          kind: _kinds.Kind.NULL,\n          loc: loc(lexer, token)\n        };\n      }\n      lexer.advance();\n      return {\n        kind: _kinds.Kind.ENUM,\n        value: token.value,\n        loc: loc(lexer, token)\n      };\n    case _lexer.TokenKind.DOLLAR:\n      if (!isConst) {\n        return parseVariable(lexer);\n      }\n      break;\n  }\n  throw unexpected(lexer);\n}\n\nfunction parseStringLiteral(lexer) {\n  var token = lexer.token;\n  lexer.advance();\n  return {\n    kind: _kinds.Kind.STRING,\n    value: token.value,\n    block: token.kind === _lexer.TokenKind.BLOCK_STRING,\n    loc: loc(lexer, token)\n  };\n}\n\nfunction parseConstValue(lexer) {\n  return parseValueLiteral(lexer, true);\n}\n\nfunction parseValueValue(lexer) {\n  return parseValueLiteral(lexer, false);\n}\n\n/**\n * ListValue[Const] :\n *   - [ ]\n *   - [ Value[?Const]+ ]\n */\nfunction parseList(lexer, isConst) {\n  var start = lexer.token;\n  var item = isConst ? parseConstValue : parseValueValue;\n  return {\n    kind: _kinds.Kind.LIST,\n    values: any(lexer, _lexer.TokenKind.BRACKET_L, item, _lexer.TokenKind.BRACKET_R),\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * ObjectValue[Const] :\n *   - { }\n *   - { ObjectField[?Const]+ }\n */\nfunction parseObject(lexer, isConst) {\n  var start = lexer.token;\n  expect(lexer, _lexer.TokenKind.BRACE_L);\n  var fields = [];\n  while (!skip(lexer, _lexer.TokenKind.BRACE_R)) {\n    fields.push(parseObjectField(lexer, isConst));\n  }\n  return {\n    kind: _kinds.Kind.OBJECT,\n    fields: fields,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * ObjectField[Const] : Name : Value[?Const]\n */\nfunction parseObjectField(lexer, isConst) {\n  var start = lexer.token;\n  return {\n    kind: _kinds.Kind.OBJECT_FIELD,\n    name: parseName(lexer),\n    value: (expect(lexer, _lexer.TokenKind.COLON), parseValueLiteral(lexer, isConst)),\n    loc: loc(lexer, start)\n  };\n}\n\n// Implements the parsing rules in the Directives section.\n\n/**\n * Directives[Const] : Directive[?Const]+\n */\nfunction parseDirectives(lexer, isConst) {\n  var directives = [];\n  while (peek(lexer, _lexer.TokenKind.AT)) {\n    directives.push(parseDirective(lexer, isConst));\n  }\n  return directives;\n}\n\n/**\n * Directive[Const] : @ Name Arguments[?Const]?\n */\nfunction parseDirective(lexer, isConst) {\n  var start = lexer.token;\n  expect(lexer, _lexer.TokenKind.AT);\n  return {\n    kind: _kinds.Kind.DIRECTIVE,\n    name: parseName(lexer),\n    arguments: parseArguments(lexer, isConst),\n    loc: loc(lexer, start)\n  };\n}\n\n// Implements the parsing rules in the Types section.\n\n/**\n * Type :\n *   - NamedType\n *   - ListType\n *   - NonNullType\n */\nfunction parseTypeReference(lexer) {\n  var start = lexer.token;\n  var type = void 0;\n  if (skip(lexer, _lexer.TokenKind.BRACKET_L)) {\n    type = parseTypeReference(lexer);\n    expect(lexer, _lexer.TokenKind.BRACKET_R);\n    type = {\n      kind: _kinds.Kind.LIST_TYPE,\n      type: type,\n      loc: loc(lexer, start)\n    };\n  } else {\n    type = parseNamedType(lexer);\n  }\n  if (skip(lexer, _lexer.TokenKind.BANG)) {\n    return {\n      kind: _kinds.Kind.NON_NULL_TYPE,\n      type: type,\n      loc: loc(lexer, start)\n    };\n  }\n  return type;\n}\n\n/**\n * NamedType : Name\n */\nfunction parseNamedType(lexer) {\n  var start = lexer.token;\n  return {\n    kind: _kinds.Kind.NAMED_TYPE,\n    name: parseName(lexer),\n    loc: loc(lexer, start)\n  };\n}\n\n// Implements the parsing rules in the Type Definition section.\n\n/**\n * TypeSystemDefinition :\n *   - SchemaDefinition\n *   - TypeDefinition\n *   - TypeExtension\n *   - DirectiveDefinition\n *\n * TypeDefinition :\n *   - ScalarTypeDefinition\n *   - ObjectTypeDefinition\n *   - InterfaceTypeDefinition\n *   - UnionTypeDefinition\n *   - EnumTypeDefinition\n *   - InputObjectTypeDefinition\n */\nfunction parseTypeSystemDefinition(lexer) {\n  // Many definitions begin with a description and require a lookahead.\n  var keywordToken = peekDescription(lexer) ? lexer.lookahead() : lexer.token;\n\n  if (keywordToken.kind === _lexer.TokenKind.NAME) {\n    switch (keywordToken.value) {\n      case 'schema':\n        return parseSchemaDefinition(lexer);\n      case 'scalar':\n        return parseScalarTypeDefinition(lexer);\n      case 'type':\n        return parseObjectTypeDefinition(lexer);\n      case 'interface':\n        return parseInterfaceTypeDefinition(lexer);\n      case 'union':\n        return parseUnionTypeDefinition(lexer);\n      case 'enum':\n        return parseEnumTypeDefinition(lexer);\n      case 'input':\n        return parseInputObjectTypeDefinition(lexer);\n      case 'extend':\n        return parseTypeExtension(lexer);\n      case 'directive':\n        return parseDirectiveDefinition(lexer);\n    }\n  }\n\n  throw unexpected(lexer, keywordToken);\n}\n\nfunction peekDescription(lexer) {\n  return peek(lexer, _lexer.TokenKind.STRING) || peek(lexer, _lexer.TokenKind.BLOCK_STRING);\n}\n\n/**\n * Description : StringValue\n */\nfunction parseDescription(lexer) {\n  if (peekDescription(lexer)) {\n    return parseStringLiteral(lexer);\n  }\n}\n\n/**\n * SchemaDefinition : schema Directives[Const]? { OperationTypeDefinition+ }\n */\nfunction parseSchemaDefinition(lexer) {\n  var start = lexer.token;\n  expectKeyword(lexer, 'schema');\n  var directives = parseDirectives(lexer, true);\n  var operationTypes = many(lexer, _lexer.TokenKind.BRACE_L, parseOperationTypeDefinition, _lexer.TokenKind.BRACE_R);\n  return {\n    kind: _kinds.Kind.SCHEMA_DEFINITION,\n    directives: directives,\n    operationTypes: operationTypes,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * OperationTypeDefinition : OperationType : NamedType\n */\nfunction parseOperationTypeDefinition(lexer) {\n  var start = lexer.token;\n  var operation = parseOperationType(lexer);\n  expect(lexer, _lexer.TokenKind.COLON);\n  var type = parseNamedType(lexer);\n  return {\n    kind: _kinds.Kind.OPERATION_TYPE_DEFINITION,\n    operation: operation,\n    type: type,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * ScalarTypeDefinition : Description? scalar Name Directives[Const]?\n */\nfunction parseScalarTypeDefinition(lexer) {\n  var start = lexer.token;\n  var description = parseDescription(lexer);\n  expectKeyword(lexer, 'scalar');\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  return {\n    kind: _kinds.Kind.SCALAR_TYPE_DEFINITION,\n    description: description,\n    name: name,\n    directives: directives,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * ObjectTypeDefinition :\n *   Description?\n *   type Name ImplementsInterfaces? Directives[Const]? FieldsDefinition?\n */\nfunction parseObjectTypeDefinition(lexer) {\n  var start = lexer.token;\n  var description = parseDescription(lexer);\n  expectKeyword(lexer, 'type');\n  var name = parseName(lexer);\n  var interfaces = parseImplementsInterfaces(lexer);\n  var directives = parseDirectives(lexer, true);\n  var fields = parseFieldsDefinition(lexer);\n  return {\n    kind: _kinds.Kind.OBJECT_TYPE_DEFINITION,\n    description: description,\n    name: name,\n    interfaces: interfaces,\n    directives: directives,\n    fields: fields,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * ImplementsInterfaces :\n *   - implements `&`? NamedType\n *   - ImplementsInterfaces & NamedType\n */\nfunction parseImplementsInterfaces(lexer) {\n  var types = [];\n  if (lexer.token.value === 'implements') {\n    lexer.advance();\n    // Optional leading ampersand\n    skip(lexer, _lexer.TokenKind.AMP);\n    do {\n      types.push(parseNamedType(lexer));\n    } while (skip(lexer, _lexer.TokenKind.AMP) ||\n    // Legacy support for the SDL?\n    lexer.options.allowLegacySDLImplementsInterfaces && peek(lexer, _lexer.TokenKind.NAME));\n  }\n  return types;\n}\n\n/**\n * FieldsDefinition : { FieldDefinition+ }\n */\nfunction parseFieldsDefinition(lexer) {\n  // Legacy support for the SDL?\n  if (lexer.options.allowLegacySDLEmptyFields && peek(lexer, _lexer.TokenKind.BRACE_L) && lexer.lookahead().kind === _lexer.TokenKind.BRACE_R) {\n    lexer.advance();\n    lexer.advance();\n    return [];\n  }\n  return peek(lexer, _lexer.TokenKind.BRACE_L) ? many(lexer, _lexer.TokenKind.BRACE_L, parseFieldDefinition, _lexer.TokenKind.BRACE_R) : [];\n}\n\n/**\n * FieldDefinition :\n *   - Description? Name ArgumentsDefinition? : Type Directives[Const]?\n */\nfunction parseFieldDefinition(lexer) {\n  var start = lexer.token;\n  var description = parseDescription(lexer);\n  var name = parseName(lexer);\n  var args = parseArgumentDefs(lexer);\n  expect(lexer, _lexer.TokenKind.COLON);\n  var type = parseTypeReference(lexer);\n  var directives = parseDirectives(lexer, true);\n  return {\n    kind: _kinds.Kind.FIELD_DEFINITION,\n    description: description,\n    name: name,\n    arguments: args,\n    type: type,\n    directives: directives,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * ArgumentsDefinition : ( InputValueDefinition+ )\n */\nfunction parseArgumentDefs(lexer) {\n  if (!peek(lexer, _lexer.TokenKind.PAREN_L)) {\n    return [];\n  }\n  return many(lexer, _lexer.TokenKind.PAREN_L, parseInputValueDef, _lexer.TokenKind.PAREN_R);\n}\n\n/**\n * InputValueDefinition :\n *   - Description? Name : Type DefaultValue? Directives[Const]?\n */\nfunction parseInputValueDef(lexer) {\n  var start = lexer.token;\n  var description = parseDescription(lexer);\n  var name = parseName(lexer);\n  expect(lexer, _lexer.TokenKind.COLON);\n  var type = parseTypeReference(lexer);\n  var defaultValue = void 0;\n  if (skip(lexer, _lexer.TokenKind.EQUALS)) {\n    defaultValue = parseConstValue(lexer);\n  }\n  var directives = parseDirectives(lexer, true);\n  return {\n    kind: _kinds.Kind.INPUT_VALUE_DEFINITION,\n    description: description,\n    name: name,\n    type: type,\n    defaultValue: defaultValue,\n    directives: directives,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * InterfaceTypeDefinition :\n *   - Description? interface Name Directives[Const]? FieldsDefinition?\n */\nfunction parseInterfaceTypeDefinition(lexer) {\n  var start = lexer.token;\n  var description = parseDescription(lexer);\n  expectKeyword(lexer, 'interface');\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  var fields = parseFieldsDefinition(lexer);\n  return {\n    kind: _kinds.Kind.INTERFACE_TYPE_DEFINITION,\n    description: description,\n    name: name,\n    directives: directives,\n    fields: fields,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * UnionTypeDefinition :\n *   - Description? union Name Directives[Const]? UnionMemberTypes?\n */\nfunction parseUnionTypeDefinition(lexer) {\n  var start = lexer.token;\n  var description = parseDescription(lexer);\n  expectKeyword(lexer, 'union');\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  var types = parseUnionMemberTypes(lexer);\n  return {\n    kind: _kinds.Kind.UNION_TYPE_DEFINITION,\n    description: description,\n    name: name,\n    directives: directives,\n    types: types,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * UnionMemberTypes :\n *   - = `|`? NamedType\n *   - UnionMemberTypes | NamedType\n */\nfunction parseUnionMemberTypes(lexer) {\n  var types = [];\n  if (skip(lexer, _lexer.TokenKind.EQUALS)) {\n    // Optional leading pipe\n    skip(lexer, _lexer.TokenKind.PIPE);\n    do {\n      types.push(parseNamedType(lexer));\n    } while (skip(lexer, _lexer.TokenKind.PIPE));\n  }\n  return types;\n}\n\n/**\n * EnumTypeDefinition :\n *   - Description? enum Name Directives[Const]? EnumValuesDefinition?\n */\nfunction parseEnumTypeDefinition(lexer) {\n  var start = lexer.token;\n  var description = parseDescription(lexer);\n  expectKeyword(lexer, 'enum');\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  var values = parseEnumValuesDefinition(lexer);\n  return {\n    kind: _kinds.Kind.ENUM_TYPE_DEFINITION,\n    description: description,\n    name: name,\n    directives: directives,\n    values: values,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * EnumValuesDefinition : { EnumValueDefinition+ }\n */\nfunction parseEnumValuesDefinition(lexer) {\n  return peek(lexer, _lexer.TokenKind.BRACE_L) ? many(lexer, _lexer.TokenKind.BRACE_L, parseEnumValueDefinition, _lexer.TokenKind.BRACE_R) : [];\n}\n\n/**\n * EnumValueDefinition : Description? EnumValue Directives[Const]?\n *\n * EnumValue : Name\n */\nfunction parseEnumValueDefinition(lexer) {\n  var start = lexer.token;\n  var description = parseDescription(lexer);\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  return {\n    kind: _kinds.Kind.ENUM_VALUE_DEFINITION,\n    description: description,\n    name: name,\n    directives: directives,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * InputObjectTypeDefinition :\n *   - Description? input Name Directives[Const]? InputFieldsDefinition?\n */\nfunction parseInputObjectTypeDefinition(lexer) {\n  var start = lexer.token;\n  var description = parseDescription(lexer);\n  expectKeyword(lexer, 'input');\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  var fields = parseInputFieldsDefinition(lexer);\n  return {\n    kind: _kinds.Kind.INPUT_OBJECT_TYPE_DEFINITION,\n    description: description,\n    name: name,\n    directives: directives,\n    fields: fields,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * InputFieldsDefinition : { InputValueDefinition+ }\n */\nfunction parseInputFieldsDefinition(lexer) {\n  return peek(lexer, _lexer.TokenKind.BRACE_L) ? many(lexer, _lexer.TokenKind.BRACE_L, parseInputValueDef, _lexer.TokenKind.BRACE_R) : [];\n}\n\n/**\n * TypeExtension :\n *   - ScalarTypeExtension\n *   - ObjectTypeExtension\n *   - InterfaceTypeExtension\n *   - UnionTypeExtension\n *   - EnumTypeExtension\n *   - InputObjectTypeDefinition\n */\nfunction parseTypeExtension(lexer) {\n  var keywordToken = lexer.lookahead();\n\n  if (keywordToken.kind === _lexer.TokenKind.NAME) {\n    switch (keywordToken.value) {\n      case 'scalar':\n        return parseScalarTypeExtension(lexer);\n      case 'type':\n        return parseObjectTypeExtension(lexer);\n      case 'interface':\n        return parseInterfaceTypeExtension(lexer);\n      case 'union':\n        return parseUnionTypeExtension(lexer);\n      case 'enum':\n        return parseEnumTypeExtension(lexer);\n      case 'input':\n        return parseInputObjectTypeExtension(lexer);\n    }\n  }\n\n  throw unexpected(lexer, keywordToken);\n}\n\n/**\n * ScalarTypeExtension :\n *   - extend scalar Name Directives[Const]\n */\nfunction parseScalarTypeExtension(lexer) {\n  var start = lexer.token;\n  expectKeyword(lexer, 'extend');\n  expectKeyword(lexer, 'scalar');\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  if (directives.length === 0) {\n    throw unexpected(lexer);\n  }\n  return {\n    kind: _kinds.Kind.SCALAR_TYPE_EXTENSION,\n    name: name,\n    directives: directives,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * ObjectTypeExtension :\n *  - extend type Name ImplementsInterfaces? Directives[Const]? FieldsDefinition\n *  - extend type Name ImplementsInterfaces? Directives[Const]\n *  - extend type Name ImplementsInterfaces\n */\nfunction parseObjectTypeExtension(lexer) {\n  var start = lexer.token;\n  expectKeyword(lexer, 'extend');\n  expectKeyword(lexer, 'type');\n  var name = parseName(lexer);\n  var interfaces = parseImplementsInterfaces(lexer);\n  var directives = parseDirectives(lexer, true);\n  var fields = parseFieldsDefinition(lexer);\n  if (interfaces.length === 0 && directives.length === 0 && fields.length === 0) {\n    throw unexpected(lexer);\n  }\n  return {\n    kind: _kinds.Kind.OBJECT_TYPE_EXTENSION,\n    name: name,\n    interfaces: interfaces,\n    directives: directives,\n    fields: fields,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * InterfaceTypeExtension :\n *   - extend interface Name Directives[Const]? FieldsDefinition\n *   - extend interface Name Directives[Const]\n */\nfunction parseInterfaceTypeExtension(lexer) {\n  var start = lexer.token;\n  expectKeyword(lexer, 'extend');\n  expectKeyword(lexer, 'interface');\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  var fields = parseFieldsDefinition(lexer);\n  if (directives.length === 0 && fields.length === 0) {\n    throw unexpected(lexer);\n  }\n  return {\n    kind: _kinds.Kind.INTERFACE_TYPE_EXTENSION,\n    name: name,\n    directives: directives,\n    fields: fields,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * UnionTypeExtension :\n *   - extend union Name Directives[Const]? UnionMemberTypes\n *   - extend union Name Directives[Const]\n */\nfunction parseUnionTypeExtension(lexer) {\n  var start = lexer.token;\n  expectKeyword(lexer, 'extend');\n  expectKeyword(lexer, 'union');\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  var types = parseUnionMemberTypes(lexer);\n  if (directives.length === 0 && types.length === 0) {\n    throw unexpected(lexer);\n  }\n  return {\n    kind: _kinds.Kind.UNION_TYPE_EXTENSION,\n    name: name,\n    directives: directives,\n    types: types,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * EnumTypeExtension :\n *   - extend enum Name Directives[Const]? EnumValuesDefinition\n *   - extend enum Name Directives[Const]\n */\nfunction parseEnumTypeExtension(lexer) {\n  var start = lexer.token;\n  expectKeyword(lexer, 'extend');\n  expectKeyword(lexer, 'enum');\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  var values = parseEnumValuesDefinition(lexer);\n  if (directives.length === 0 && values.length === 0) {\n    throw unexpected(lexer);\n  }\n  return {\n    kind: _kinds.Kind.ENUM_TYPE_EXTENSION,\n    name: name,\n    directives: directives,\n    values: values,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * InputObjectTypeExtension :\n *   - extend input Name Directives[Const]? InputFieldsDefinition\n *   - extend input Name Directives[Const]\n */\nfunction parseInputObjectTypeExtension(lexer) {\n  var start = lexer.token;\n  expectKeyword(lexer, 'extend');\n  expectKeyword(lexer, 'input');\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  var fields = parseInputFieldsDefinition(lexer);\n  if (directives.length === 0 && fields.length === 0) {\n    throw unexpected(lexer);\n  }\n  return {\n    kind: _kinds.Kind.INPUT_OBJECT_TYPE_EXTENSION,\n    name: name,\n    directives: directives,\n    fields: fields,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * DirectiveDefinition :\n *   - Description? directive @ Name ArgumentsDefinition? on DirectiveLocations\n */\nfunction parseDirectiveDefinition(lexer) {\n  var start = lexer.token;\n  var description = parseDescription(lexer);\n  expectKeyword(lexer, 'directive');\n  expect(lexer, _lexer.TokenKind.AT);\n  var name = parseName(lexer);\n  var args = parseArgumentDefs(lexer);\n  expectKeyword(lexer, 'on');\n  var locations = parseDirectiveLocations(lexer);\n  return {\n    kind: _kinds.Kind.DIRECTIVE_DEFINITION,\n    description: description,\n    name: name,\n    arguments: args,\n    locations: locations,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * DirectiveLocations :\n *   - `|`? DirectiveLocation\n *   - DirectiveLocations | DirectiveLocation\n */\nfunction parseDirectiveLocations(lexer) {\n  // Optional leading pipe\n  skip(lexer, _lexer.TokenKind.PIPE);\n  var locations = [];\n  do {\n    locations.push(parseDirectiveLocation(lexer));\n  } while (skip(lexer, _lexer.TokenKind.PIPE));\n  return locations;\n}\n\n/*\n * DirectiveLocation :\n *   - ExecutableDirectiveLocation\n *   - TypeSystemDirectiveLocation\n *\n * ExecutableDirectiveLocation : one of\n *   `QUERY`\n *   `MUTATION`\n *   `SUBSCRIPTION`\n *   `FIELD`\n *   `FRAGMENT_DEFINITION`\n *   `FRAGMENT_SPREAD`\n *   `INLINE_FRAGMENT`\n *\n * TypeSystemDirectiveLocation : one of\n *   `SCHEMA`\n *   `SCALAR`\n *   `OBJECT`\n *   `FIELD_DEFINITION`\n *   `ARGUMENT_DEFINITION`\n *   `INTERFACE`\n *   `UNION`\n *   `ENUM`\n *   `ENUM_VALUE`\n *   `INPUT_OBJECT`\n *   `INPUT_FIELD_DEFINITION`\n */\nfunction parseDirectiveLocation(lexer) {\n  var start = lexer.token;\n  var name = parseName(lexer);\n  if (_directiveLocation.DirectiveLocation.hasOwnProperty(name.value)) {\n    return name;\n  }\n  throw unexpected(lexer, start);\n}\n\n// Core parsing utility functions\n\n/**\n * Returns a location object, used to identify the place in\n * the source that created a given parsed object.\n */\nfunction loc(lexer, startToken) {\n  if (!lexer.options.noLocation) {\n    return new Loc(startToken, lexer.lastToken, lexer.source);\n  }\n}\n\nfunction Loc(startToken, endToken, source) {\n  this.start = startToken.start;\n  this.end = endToken.end;\n  this.startToken = startToken;\n  this.endToken = endToken;\n  this.source = source;\n}\n\n// Print a simplified form when appearing in JSON/util.inspect.\nLoc.prototype.toJSON = Loc.prototype.inspect = function toJSON() {\n  return { start: this.start, end: this.end };\n};\n\n/**\n * Determines if the next token is of a given kind\n */\nfunction peek(lexer, kind) {\n  return lexer.token.kind === kind;\n}\n\n/**\n * If the next token is of the given kind, return true after advancing\n * the lexer. Otherwise, do not change the parser state and return false.\n */\nfunction skip(lexer, kind) {\n  var match = lexer.token.kind === kind;\n  if (match) {\n    lexer.advance();\n  }\n  return match;\n}\n\n/**\n * If the next token is of the given kind, return that token after advancing\n * the lexer. Otherwise, do not change the parser state and throw an error.\n */\nfunction expect(lexer, kind) {\n  var token = lexer.token;\n  if (token.kind === kind) {\n    lexer.advance();\n    return token;\n  }\n  throw (0, _error.syntaxError)(lexer.source, token.start, 'Expected ' + kind + ', found ' + (0, _lexer.getTokenDesc)(token));\n}\n\n/**\n * If the next token is a keyword with the given value, return that token after\n * advancing the lexer. Otherwise, do not change the parser state and return\n * false.\n */\nfunction expectKeyword(lexer, value) {\n  var token = lexer.token;\n  if (token.kind === _lexer.TokenKind.NAME && token.value === value) {\n    lexer.advance();\n    return token;\n  }\n  throw (0, _error.syntaxError)(lexer.source, token.start, 'Expected \"' + value + '\", found ' + (0, _lexer.getTokenDesc)(token));\n}\n\n/**\n * Helper function for creating an error when an unexpected lexed token\n * is encountered.\n */\nfunction unexpected(lexer, atToken) {\n  var token = atToken || lexer.token;\n  return (0, _error.syntaxError)(lexer.source, token.start, 'Unexpected ' + (0, _lexer.getTokenDesc)(token));\n}\n\n/**\n * Returns a possibly empty list of parse nodes, determined by\n * the parseFn. This list begins with a lex token of openKind\n * and ends with a lex token of closeKind. Advances the parser\n * to the next lex token after the closing token.\n */\nfunction any(lexer, openKind, parseFn, closeKind) {\n  expect(lexer, openKind);\n  var nodes = [];\n  while (!skip(lexer, closeKind)) {\n    nodes.push(parseFn(lexer));\n  }\n  return nodes;\n}\n\n/**\n * Returns a non-empty list of parse nodes, determined by\n * the parseFn. This list begins with a lex token of openKind\n * and ends with a lex token of closeKind. Advances the parser\n * to the next lex token after the closing token.\n */\nfunction many(lexer, openKind, parseFn, closeKind) {\n  expect(lexer, openKind);\n  var nodes = [parseFn(lexer)];\n  while (!skip(lexer, closeKind)) {\n    nodes.push(parseFn(lexer));\n  }\n  return nodes;\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Source = undefined;\n\nvar _invariant = require('../jsutils/invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } } /**\n                                                                                                                                                           * Copyright (c) 2015-present, Facebook, Inc.\n                                                                                                                                                           *\n                                                                                                                                                           * This source code is licensed under the MIT license found in the\n                                                                                                                                                           * LICENSE file in the root directory of this source tree.\n                                                                                                                                                           *\n                                                                                                                                                           * \n                                                                                                                                                           */\n\n/**\n * A representation of source input to GraphQL.\n * `name` and `locationOffset` are optional. They are useful for clients who\n * store GraphQL documents in source files; for example, if the GraphQL input\n * starts at line 40 in a file named Foo.graphql, it might be useful for name to\n * be \"Foo.graphql\" and location to be `{ line: 40, column: 0 }`.\n * line and column in locationOffset are 1-indexed\n */\nvar Source = exports.Source = function Source(body, name, locationOffset) {\n  _classCallCheck(this, Source);\n\n  this.body = body;\n  this.name = name || 'GraphQL request';\n  this.locationOffset = locationOffset || { line: 1, column: 1 };\n  !(this.locationOffset.line > 0) ? (0, _invariant2.default)(0, 'line in locationOffset is 1-indexed and must be positive') : void 0;\n  !(this.locationOffset.column > 0) ? (0, _invariant2.default)(0, 'column in locationOffset is 1-indexed and must be positive') : void 0;\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.syntaxError = syntaxError;\n\nvar _GraphQLError = require('./GraphQLError');\n\n/**\n * Produces a GraphQLError representing a syntax error, containing useful\n * descriptive information about the syntax error's position in the source.\n */\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction syntaxError(source, position, description) {\n  return new _GraphQLError.GraphQLError('Syntax Error: ' + description, undefined, source, [position]);\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.locatedError = locatedError;\n\nvar _GraphQLError = require('./GraphQLError');\n\n/**\n * Given an arbitrary Error, presumably thrown while attempting to execute a\n * GraphQL operation, produce a new GraphQLError aware of the location in the\n * document responsible for the original Error.\n */\nfunction locatedError(originalError, nodes, path) {\n  // Note: this uses a brand-check to support GraphQL errors originating from\n  // other contexts.\n  if (originalError && Array.isArray(originalError.path)) {\n    return originalError;\n  }\n\n  return new _GraphQLError.GraphQLError(originalError && originalError.message, originalError && originalError.nodes || nodes, originalError && originalError.source, originalError && originalError.positions, path, originalError);\n} /**\n   * Copyright (c) 2015-present, Facebook, Inc.\n   *\n   * This source code is licensed under the MIT license found in the\n   * LICENSE file in the root directory of this source tree.\n   *\n   * \n   */","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /**\n                                                                                                                                                                                                                                                                   * Copyright (c) 2015-present, Facebook, Inc.\n                                                                                                                                                                                                                                                                   *\n                                                                                                                                                                                                                                                                   * This source code is licensed under the MIT license found in the\n                                                                                                                                                                                                                                                                   * LICENSE file in the root directory of this source tree.\n                                                                                                                                                                                                                                                                   *\n                                                                                                                                                                                                                                                                   * \n                                                                                                                                                                                                                                                                   */\n\nexports.formatError = formatError;\n\nvar _invariant = require('../jsutils/invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Given a GraphQLError, format it according to the rules described by the\n * Response Format, Errors section of the GraphQL Specification.\n */\nfunction formatError(error) {\n  !error ? (0, _invariant2.default)(0, 'Received null or undefined error.') : void 0;\n  return _extends({}, error.extensions, {\n    message: error.message || 'An unknown error occurred.',\n    locations: error.locations,\n    path: error.path\n  });\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.TokenKind = undefined;\nexports.createLexer = createLexer;\nexports.getTokenDesc = getTokenDesc;\n\nvar _error = require('../error');\n\nvar _blockStringValue = require('./blockStringValue');\n\nvar _blockStringValue2 = _interopRequireDefault(_blockStringValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Given a Source object, this returns a Lexer for that source.\n * A Lexer is a stateful stream generator in that every time\n * it is advanced, it returns the next token in the Source. Assuming the\n * source lexes, the final Token emitted by the lexer will be of kind\n * EOF, after which the lexer will repeatedly return the same EOF token\n * whenever called.\n */\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction createLexer(source, options) {\n  var startOfFileToken = new Tok(TokenKind.SOF, 0, 0, 0, 0, null);\n  var lexer = {\n    source: source,\n    options: options,\n    lastToken: startOfFileToken,\n    token: startOfFileToken,\n    line: 1,\n    lineStart: 0,\n    advance: advanceLexer,\n    lookahead: lookahead\n  };\n  return lexer;\n}\n\nfunction advanceLexer() {\n  this.lastToken = this.token;\n  var token = this.token = this.lookahead();\n  return token;\n}\n\nfunction lookahead() {\n  var token = this.token;\n  if (token.kind !== TokenKind.EOF) {\n    do {\n      // Note: next is only mutable during parsing, so we cast to allow this.\n      token = token.next || (token.next = readToken(this, token));\n    } while (token.kind === TokenKind.COMMENT);\n  }\n  return token;\n}\n\n/**\n * The return type of createLexer.\n */\n\n\n/**\n * An exported enum describing the different kinds of tokens that the\n * lexer emits.\n */\nvar TokenKind = exports.TokenKind = Object.freeze({\n  SOF: '<SOF>',\n  EOF: '<EOF>',\n  BANG: '!',\n  DOLLAR: '$',\n  AMP: '&',\n  PAREN_L: '(',\n  PAREN_R: ')',\n  SPREAD: '...',\n  COLON: ':',\n  EQUALS: '=',\n  AT: '@',\n  BRACKET_L: '[',\n  BRACKET_R: ']',\n  BRACE_L: '{',\n  PIPE: '|',\n  BRACE_R: '}',\n  NAME: 'Name',\n  INT: 'Int',\n  FLOAT: 'Float',\n  STRING: 'String',\n  BLOCK_STRING: 'BlockString',\n  COMMENT: 'Comment'\n});\n\n/**\n * The enum type representing the token kinds values.\n */\n\n\n/**\n * A helper function to describe a token as a string for debugging\n */\nfunction getTokenDesc(token) {\n  var value = token.value;\n  return value ? token.kind + ' \"' + value + '\"' : token.kind;\n}\n\nvar charCodeAt = String.prototype.charCodeAt;\nvar slice = String.prototype.slice;\n\n/**\n * Helper function for constructing the Token object.\n */\nfunction Tok(kind, start, end, line, column, prev, value) {\n  this.kind = kind;\n  this.start = start;\n  this.end = end;\n  this.line = line;\n  this.column = column;\n  this.value = value;\n  this.prev = prev;\n  this.next = null;\n}\n\n// Print a simplified form when appearing in JSON/util.inspect.\nTok.prototype.toJSON = Tok.prototype.inspect = function toJSON() {\n  return {\n    kind: this.kind,\n    value: this.value,\n    line: this.line,\n    column: this.column\n  };\n};\n\nfunction printCharCode(code) {\n  return (\n    // NaN/undefined represents access beyond the end of the file.\n    isNaN(code) ? TokenKind.EOF : // Trust JSON for ASCII.\n    code < 0x007f ? JSON.stringify(String.fromCharCode(code)) : // Otherwise print the escaped form.\n    '\"\\\\u' + ('00' + code.toString(16).toUpperCase()).slice(-4) + '\"'\n  );\n}\n\n/**\n * Gets the next token from the source starting at the given position.\n *\n * This skips over whitespace and comments until it finds the next lexable\n * token, then lexes punctuators immediately or calls the appropriate helper\n * function for more complicated tokens.\n */\nfunction readToken(lexer, prev) {\n  var source = lexer.source;\n  var body = source.body;\n  var bodyLength = body.length;\n\n  var pos = positionAfterWhitespace(body, prev.end, lexer);\n  var line = lexer.line;\n  var col = 1 + pos - lexer.lineStart;\n\n  if (pos >= bodyLength) {\n    return new Tok(TokenKind.EOF, bodyLength, bodyLength, line, col, prev);\n  }\n\n  var code = charCodeAt.call(body, pos);\n\n  // SourceCharacter\n  if (code < 0x0020 && code !== 0x0009 && code !== 0x000a && code !== 0x000d) {\n    throw (0, _error.syntaxError)(source, pos, 'Cannot contain the invalid character ' + printCharCode(code) + '.');\n  }\n\n  switch (code) {\n    // !\n    case 33:\n      return new Tok(TokenKind.BANG, pos, pos + 1, line, col, prev);\n    // #\n    case 35:\n      return readComment(source, pos, line, col, prev);\n    // $\n    case 36:\n      return new Tok(TokenKind.DOLLAR, pos, pos + 1, line, col, prev);\n    // &\n    case 38:\n      return new Tok(TokenKind.AMP, pos, pos + 1, line, col, prev);\n    // (\n    case 40:\n      return new Tok(TokenKind.PAREN_L, pos, pos + 1, line, col, prev);\n    // )\n    case 41:\n      return new Tok(TokenKind.PAREN_R, pos, pos + 1, line, col, prev);\n    // .\n    case 46:\n      if (charCodeAt.call(body, pos + 1) === 46 && charCodeAt.call(body, pos + 2) === 46) {\n        return new Tok(TokenKind.SPREAD, pos, pos + 3, line, col, prev);\n      }\n      break;\n    // :\n    case 58:\n      return new Tok(TokenKind.COLON, pos, pos + 1, line, col, prev);\n    // =\n    case 61:\n      return new Tok(TokenKind.EQUALS, pos, pos + 1, line, col, prev);\n    // @\n    case 64:\n      return new Tok(TokenKind.AT, pos, pos + 1, line, col, prev);\n    // [\n    case 91:\n      return new Tok(TokenKind.BRACKET_L, pos, pos + 1, line, col, prev);\n    // ]\n    case 93:\n      return new Tok(TokenKind.BRACKET_R, pos, pos + 1, line, col, prev);\n    // {\n    case 123:\n      return new Tok(TokenKind.BRACE_L, pos, pos + 1, line, col, prev);\n    // |\n    case 124:\n      return new Tok(TokenKind.PIPE, pos, pos + 1, line, col, prev);\n    // }\n    case 125:\n      return new Tok(TokenKind.BRACE_R, pos, pos + 1, line, col, prev);\n    // A-Z _ a-z\n    case 65:\n    case 66:\n    case 67:\n    case 68:\n    case 69:\n    case 70:\n    case 71:\n    case 72:\n    case 73:\n    case 74:\n    case 75:\n    case 76:\n    case 77:\n    case 78:\n    case 79:\n    case 80:\n    case 81:\n    case 82:\n    case 83:\n    case 84:\n    case 85:\n    case 86:\n    case 87:\n    case 88:\n    case 89:\n    case 90:\n    case 95:\n    case 97:\n    case 98:\n    case 99:\n    case 100:\n    case 101:\n    case 102:\n    case 103:\n    case 104:\n    case 105:\n    case 106:\n    case 107:\n    case 108:\n    case 109:\n    case 110:\n    case 111:\n    case 112:\n    case 113:\n    case 114:\n    case 115:\n    case 116:\n    case 117:\n    case 118:\n    case 119:\n    case 120:\n    case 121:\n    case 122:\n      return readName(source, pos, line, col, prev);\n    // - 0-9\n    case 45:\n    case 48:\n    case 49:\n    case 50:\n    case 51:\n    case 52:\n    case 53:\n    case 54:\n    case 55:\n    case 56:\n    case 57:\n      return readNumber(source, pos, code, line, col, prev);\n    // \"\n    case 34:\n      if (charCodeAt.call(body, pos + 1) === 34 && charCodeAt.call(body, pos + 2) === 34) {\n        return readBlockString(source, pos, line, col, prev);\n      }\n      return readString(source, pos, line, col, prev);\n  }\n\n  throw (0, _error.syntaxError)(source, pos, unexpectedCharacterMessage(code));\n}\n\n/**\n * Report a message that an unexpected character was encountered.\n */\nfunction unexpectedCharacterMessage(code) {\n  if (code === 39) {\n    // '\n    return \"Unexpected single quote character ('), did you mean to use \" + 'a double quote (\")?';\n  }\n\n  return 'Cannot parse the unexpected character ' + printCharCode(code) + '.';\n}\n\n/**\n * Reads from body starting at startPosition until it finds a non-whitespace\n * or commented character, then returns the position of that character for\n * lexing.\n */\nfunction positionAfterWhitespace(body, startPosition, lexer) {\n  var bodyLength = body.length;\n  var position = startPosition;\n  while (position < bodyLength) {\n    var code = charCodeAt.call(body, position);\n    // tab | space | comma | BOM\n    if (code === 9 || code === 32 || code === 44 || code === 0xfeff) {\n      ++position;\n    } else if (code === 10) {\n      // new line\n      ++position;\n      ++lexer.line;\n      lexer.lineStart = position;\n    } else if (code === 13) {\n      // carriage return\n      if (charCodeAt.call(body, position + 1) === 10) {\n        position += 2;\n      } else {\n        ++position;\n      }\n      ++lexer.line;\n      lexer.lineStart = position;\n    } else {\n      break;\n    }\n  }\n  return position;\n}\n\n/**\n * Reads a comment token from the source file.\n *\n * #[\\u0009\\u0020-\\uFFFF]*\n */\nfunction readComment(source, start, line, col, prev) {\n  var body = source.body;\n  var code = void 0;\n  var position = start;\n\n  do {\n    code = charCodeAt.call(body, ++position);\n  } while (code !== null && (\n  // SourceCharacter but not LineTerminator\n  code > 0x001f || code === 0x0009));\n\n  return new Tok(TokenKind.COMMENT, start, position, line, col, prev, slice.call(body, start + 1, position));\n}\n\n/**\n * Reads a number token from the source file, either a float\n * or an int depending on whether a decimal point appears.\n *\n * Int:   -?(0|[1-9][0-9]*)\n * Float: -?(0|[1-9][0-9]*)(\\.[0-9]+)?((E|e)(+|-)?[0-9]+)?\n */\nfunction readNumber(source, start, firstCode, line, col, prev) {\n  var body = source.body;\n  var code = firstCode;\n  var position = start;\n  var isFloat = false;\n\n  if (code === 45) {\n    // -\n    code = charCodeAt.call(body, ++position);\n  }\n\n  if (code === 48) {\n    // 0\n    code = charCodeAt.call(body, ++position);\n    if (code >= 48 && code <= 57) {\n      throw (0, _error.syntaxError)(source, position, 'Invalid number, unexpected digit after 0: ' + printCharCode(code) + '.');\n    }\n  } else {\n    position = readDigits(source, position, code);\n    code = charCodeAt.call(body, position);\n  }\n\n  if (code === 46) {\n    // .\n    isFloat = true;\n\n    code = charCodeAt.call(body, ++position);\n    position = readDigits(source, position, code);\n    code = charCodeAt.call(body, position);\n  }\n\n  if (code === 69 || code === 101) {\n    // E e\n    isFloat = true;\n\n    code = charCodeAt.call(body, ++position);\n    if (code === 43 || code === 45) {\n      // + -\n      code = charCodeAt.call(body, ++position);\n    }\n    position = readDigits(source, position, code);\n  }\n\n  return new Tok(isFloat ? TokenKind.FLOAT : TokenKind.INT, start, position, line, col, prev, slice.call(body, start, position));\n}\n\n/**\n * Returns the new position in the source after reading digits.\n */\nfunction readDigits(source, start, firstCode) {\n  var body = source.body;\n  var position = start;\n  var code = firstCode;\n  if (code >= 48 && code <= 57) {\n    // 0 - 9\n    do {\n      code = charCodeAt.call(body, ++position);\n    } while (code >= 48 && code <= 57); // 0 - 9\n    return position;\n  }\n  throw (0, _error.syntaxError)(source, position, 'Invalid number, expected digit but got: ' + printCharCode(code) + '.');\n}\n\n/**\n * Reads a string token from the source file.\n *\n * \"([^\"\\\\\\u000A\\u000D]|(\\\\(u[0-9a-fA-F]{4}|[\"\\\\/bfnrt])))*\"\n */\nfunction readString(source, start, line, col, prev) {\n  var body = source.body;\n  var position = start + 1;\n  var chunkStart = position;\n  var code = 0;\n  var value = '';\n\n  while (position < body.length && (code = charCodeAt.call(body, position)) !== null &&\n  // not LineTerminator\n  code !== 0x000a && code !== 0x000d) {\n    // Closing Quote (\")\n    if (code === 34) {\n      value += slice.call(body, chunkStart, position);\n      return new Tok(TokenKind.STRING, start, position + 1, line, col, prev, value);\n    }\n\n    // SourceCharacter\n    if (code < 0x0020 && code !== 0x0009) {\n      throw (0, _error.syntaxError)(source, position, 'Invalid character within String: ' + printCharCode(code) + '.');\n    }\n\n    ++position;\n    if (code === 92) {\n      // \\\n      value += slice.call(body, chunkStart, position - 1);\n      code = charCodeAt.call(body, position);\n      switch (code) {\n        case 34:\n          value += '\"';\n          break;\n        case 47:\n          value += '/';\n          break;\n        case 92:\n          value += '\\\\';\n          break;\n        case 98:\n          value += '\\b';\n          break;\n        case 102:\n          value += '\\f';\n          break;\n        case 110:\n          value += '\\n';\n          break;\n        case 114:\n          value += '\\r';\n          break;\n        case 116:\n          value += '\\t';\n          break;\n        case 117:\n          // u\n          var charCode = uniCharCode(charCodeAt.call(body, position + 1), charCodeAt.call(body, position + 2), charCodeAt.call(body, position + 3), charCodeAt.call(body, position + 4));\n          if (charCode < 0) {\n            throw (0, _error.syntaxError)(source, position, 'Invalid character escape sequence: ' + ('\\\\u' + body.slice(position + 1, position + 5) + '.'));\n          }\n          value += String.fromCharCode(charCode);\n          position += 4;\n          break;\n        default:\n          throw (0, _error.syntaxError)(source, position, 'Invalid character escape sequence: \\\\' + String.fromCharCode(code) + '.');\n      }\n      ++position;\n      chunkStart = position;\n    }\n  }\n\n  throw (0, _error.syntaxError)(source, position, 'Unterminated string.');\n}\n\n/**\n * Reads a block string token from the source file.\n *\n * \"\"\"(\"?\"?(\\\\\"\"\"|\\\\(?!=\"\"\")|[^\"\\\\]))*\"\"\"\n */\nfunction readBlockString(source, start, line, col, prev) {\n  var body = source.body;\n  var position = start + 3;\n  var chunkStart = position;\n  var code = 0;\n  var rawValue = '';\n\n  while (position < body.length && (code = charCodeAt.call(body, position)) !== null) {\n    // Closing Triple-Quote (\"\"\")\n    if (code === 34 && charCodeAt.call(body, position + 1) === 34 && charCodeAt.call(body, position + 2) === 34) {\n      rawValue += slice.call(body, chunkStart, position);\n      return new Tok(TokenKind.BLOCK_STRING, start, position + 3, line, col, prev, (0, _blockStringValue2.default)(rawValue));\n    }\n\n    // SourceCharacter\n    if (code < 0x0020 && code !== 0x0009 && code !== 0x000a && code !== 0x000d) {\n      throw (0, _error.syntaxError)(source, position, 'Invalid character within String: ' + printCharCode(code) + '.');\n    }\n\n    // Escape Triple-Quote (\\\"\"\")\n    if (code === 92 && charCodeAt.call(body, position + 1) === 34 && charCodeAt.call(body, position + 2) === 34 && charCodeAt.call(body, position + 3) === 34) {\n      rawValue += slice.call(body, chunkStart, position) + '\"\"\"';\n      position += 4;\n      chunkStart = position;\n    } else {\n      ++position;\n    }\n  }\n\n  throw (0, _error.syntaxError)(source, position, 'Unterminated string.');\n}\n\n/**\n * Converts four hexidecimal chars to the integer that the\n * string represents. For example, uniCharCode('0','0','0','f')\n * will return 15, and uniCharCode('0','0','f','f') returns 255.\n *\n * Returns a negative number on error, if a char was invalid.\n *\n * This is implemented by noting that char2hex() returns -1 on error,\n * which means the result of ORing the char2hex() will also be negative.\n */\nfunction uniCharCode(a, b, c, d) {\n  return char2hex(a) << 12 | char2hex(b) << 8 | char2hex(c) << 4 | char2hex(d);\n}\n\n/**\n * Converts a hex character to its integer value.\n * '0' becomes 0, '9' becomes 9\n * 'A' becomes 10, 'F' becomes 15\n * 'a' becomes 10, 'f' becomes 15\n *\n * Returns -1 on error.\n */\nfunction char2hex(a) {\n  return a >= 48 && a <= 57 ? a - 48 // 0-9\n  : a >= 65 && a <= 70 ? a - 55 // A-F\n  : a >= 97 && a <= 102 ? a - 87 // a-f\n  : -1;\n}\n\n/**\n * Reads an alphanumeric + underscore name from the source.\n *\n * [_A-Za-z][_0-9A-Za-z]*\n */\nfunction readName(source, start, line, col, prev) {\n  var body = source.body;\n  var bodyLength = body.length;\n  var position = start + 1;\n  var code = 0;\n  while (position !== bodyLength && (code = charCodeAt.call(body, position)) !== null && (code === 95 || // _\n  code >= 48 && code <= 57 || // 0-9\n  code >= 65 && code <= 90 || // A-Z\n  code >= 97 && code <= 122) // a-z\n  ) {\n    ++position;\n  }\n  return new Tok(TokenKind.NAME, start, position, line, col, prev, slice.call(body, start, position));\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = blockStringValue;\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n/**\n * Produces the value of a block string from its parsed raw value, similar to\n * Coffeescript's block string, Python's docstring trim or Ruby's strip_heredoc.\n *\n * This implements the GraphQL spec's BlockStringValue() static algorithm.\n */\nfunction blockStringValue(rawString) {\n  // Expand a block string's raw value into independent lines.\n  var lines = rawString.split(/\\r\\n|[\\n\\r]/g);\n\n  // Remove common indentation from all lines but first.\n  var commonIndent = null;\n  for (var i = 1; i < lines.length; i++) {\n    var line = lines[i];\n    var indent = leadingWhitespace(line);\n    if (indent < line.length && (commonIndent === null || indent < commonIndent)) {\n      commonIndent = indent;\n      if (commonIndent === 0) {\n        break;\n      }\n    }\n  }\n\n  if (commonIndent) {\n    for (var _i = 1; _i < lines.length; _i++) {\n      lines[_i] = lines[_i].slice(commonIndent);\n    }\n  }\n\n  // Remove leading and trailing blank lines.\n  while (lines.length > 0 && isBlank(lines[0])) {\n    lines.shift();\n  }\n  while (lines.length > 0 && isBlank(lines[lines.length - 1])) {\n    lines.pop();\n  }\n\n  // Return a string of the lines joined with U+000A.\n  return lines.join('\\n');\n}\n\nfunction leadingWhitespace(str) {\n  var i = 0;\n  while (i < str.length && (str[i] === ' ' || str[i] === '\\t')) {\n    i++;\n  }\n  return i;\n}\n\nfunction isBlank(str) {\n  return leadingWhitespace(str) === str.length;\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n/**\n * The set of allowed kind values for AST nodes.\n */\nvar Kind = exports.Kind = Object.freeze({\n  // Name\n  NAME: 'Name',\n\n  // Document\n  DOCUMENT: 'Document',\n  OPERATION_DEFINITION: 'OperationDefinition',\n  VARIABLE_DEFINITION: 'VariableDefinition',\n  VARIABLE: 'Variable',\n  SELECTION_SET: 'SelectionSet',\n  FIELD: 'Field',\n  ARGUMENT: 'Argument',\n\n  // Fragments\n  FRAGMENT_SPREAD: 'FragmentSpread',\n  INLINE_FRAGMENT: 'InlineFragment',\n  FRAGMENT_DEFINITION: 'FragmentDefinition',\n\n  // Values\n  INT: 'IntValue',\n  FLOAT: 'FloatValue',\n  STRING: 'StringValue',\n  BOOLEAN: 'BooleanValue',\n  NULL: 'NullValue',\n  ENUM: 'EnumValue',\n  LIST: 'ListValue',\n  OBJECT: 'ObjectValue',\n  OBJECT_FIELD: 'ObjectField',\n\n  // Directives\n  DIRECTIVE: 'Directive',\n\n  // Types\n  NAMED_TYPE: 'NamedType',\n  LIST_TYPE: 'ListType',\n  NON_NULL_TYPE: 'NonNullType',\n\n  // Type System Definitions\n  SCHEMA_DEFINITION: 'SchemaDefinition',\n  OPERATION_TYPE_DEFINITION: 'OperationTypeDefinition',\n\n  // Type Definitions\n  SCALAR_TYPE_DEFINITION: 'ScalarTypeDefinition',\n  OBJECT_TYPE_DEFINITION: 'ObjectTypeDefinition',\n  FIELD_DEFINITION: 'FieldDefinition',\n  INPUT_VALUE_DEFINITION: 'InputValueDefinition',\n  INTERFACE_TYPE_DEFINITION: 'InterfaceTypeDefinition',\n  UNION_TYPE_DEFINITION: 'UnionTypeDefinition',\n  ENUM_TYPE_DEFINITION: 'EnumTypeDefinition',\n  ENUM_VALUE_DEFINITION: 'EnumValueDefinition',\n  INPUT_OBJECT_TYPE_DEFINITION: 'InputObjectTypeDefinition',\n\n  // Type Extensions\n  SCALAR_TYPE_EXTENSION: 'ScalarTypeExtension',\n  OBJECT_TYPE_EXTENSION: 'ObjectTypeExtension',\n  INTERFACE_TYPE_EXTENSION: 'InterfaceTypeExtension',\n  UNION_TYPE_EXTENSION: 'UnionTypeExtension',\n  ENUM_TYPE_EXTENSION: 'EnumTypeExtension',\n  INPUT_OBJECT_TYPE_EXTENSION: 'InputObjectTypeExtension',\n\n  // Directive Definitions\n  DIRECTIVE_DEFINITION: 'DirectiveDefinition'\n});\n\n/**\n * The enum type representing the possible kind values of AST nodes.\n */","export interface IGetRecordsRequest {recordType: string, fieldReference?: string,fieldReferenceValue?: any, additionalFields?: any};\nexport class GetRecordsRequest{\n    recordType: string;\n    fieldReference?: string;  \n    fieldReferenceValue?: any;\n    additionalFields: any;  \n\n    constructor(data: IGetRecordsRequest){\n        this.recordType = data.recordType; \n        this.fieldReference = data.fieldReference;\n        this.fieldReferenceValue = data.fieldReferenceValue;       \n        this.additionalFields = data.additionalFields;       \n    }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n/**\n * The set of allowed directive location values.\n */\nvar DirectiveLocation = exports.DirectiveLocation = Object.freeze({\n  // Request Definitions\n  QUERY: 'QUERY',\n  MUTATION: 'MUTATION',\n  SUBSCRIPTION: 'SUBSCRIPTION',\n  FIELD: 'FIELD',\n  FRAGMENT_DEFINITION: 'FRAGMENT_DEFINITION',\n  FRAGMENT_SPREAD: 'FRAGMENT_SPREAD',\n  INLINE_FRAGMENT: 'INLINE_FRAGMENT',\n  // Type System Definitions\n  SCHEMA: 'SCHEMA',\n  SCALAR: 'SCALAR',\n  OBJECT: 'OBJECT',\n  FIELD_DEFINITION: 'FIELD_DEFINITION',\n  ARGUMENT_DEFINITION: 'ARGUMENT_DEFINITION',\n  INTERFACE: 'INTERFACE',\n  UNION: 'UNION',\n  ENUM: 'ENUM',\n  ENUM_VALUE: 'ENUM_VALUE',\n  INPUT_OBJECT: 'INPUT_OBJECT',\n  INPUT_FIELD_DEFINITION: 'INPUT_FIELD_DEFINITION'\n});\n\n/**\n * The enum type representing the directive location values.\n */","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// === Symbol Support ===\n\nvar hasSymbols = function () {\n  return typeof Symbol === 'function';\n};\nvar hasSymbol = function (name) {\n  return hasSymbols() && Boolean(Symbol[name]);\n};\nvar getSymbol = function (name) {\n  return hasSymbol(name) ? Symbol[name] : '@@' + name;\n};\n\nif (hasSymbols() && !hasSymbol('observable')) {\n  Symbol.observable = Symbol('observable');\n}\n\nvar SymbolIterator = getSymbol('iterator');\nvar SymbolObservable = getSymbol('observable');\nvar SymbolSpecies = getSymbol('species');\n\n// === Abstract Operations ===\n\nfunction getMethod(obj, key) {\n  var value = obj[key];\n\n  if (value == null) return undefined;\n\n  if (typeof value !== 'function') throw new TypeError(value + ' is not a function');\n\n  return value;\n}\n\nfunction getSpecies(obj) {\n  var ctor = obj.constructor;\n  if (ctor !== undefined) {\n    ctor = ctor[SymbolSpecies];\n    if (ctor === null) {\n      ctor = undefined;\n    }\n  }\n  return ctor !== undefined ? ctor : Observable;\n}\n\nfunction isObservable(x) {\n  return x instanceof Observable; // SPEC: Brand check\n}\n\nfunction hostReportError(e) {\n  if (hostReportError.log) {\n    hostReportError.log(e);\n  } else {\n    setTimeout(function () {\n      throw e;\n    });\n  }\n}\n\nfunction enqueue(fn) {\n  Promise.resolve().then(function () {\n    try {\n      fn();\n    } catch (e) {\n      hostReportError(e);\n    }\n  });\n}\n\nfunction cleanupSubscription(subscription) {\n  var cleanup = subscription._cleanup;\n  if (cleanup === undefined) return;\n\n  subscription._cleanup = undefined;\n\n  if (!cleanup) {\n    return;\n  }\n\n  try {\n    if (typeof cleanup === 'function') {\n      cleanup();\n    } else {\n      var unsubscribe = getMethod(cleanup, 'unsubscribe');\n      if (unsubscribe) {\n        unsubscribe.call(cleanup);\n      }\n    }\n  } catch (e) {\n    hostReportError(e);\n  }\n}\n\nfunction closeSubscription(subscription) {\n  subscription._observer = undefined;\n  subscription._queue = undefined;\n  subscription._state = 'closed';\n}\n\nfunction flushSubscription(subscription) {\n  var queue = subscription._queue;\n  if (!queue) {\n    return;\n  }\n  subscription._queue = undefined;\n  subscription._state = 'ready';\n  for (var i = 0; i < queue.length; ++i) {\n    notifySubscription(subscription, queue[i].type, queue[i].value);\n    if (subscription._state === 'closed') break;\n  }\n}\n\nfunction notifySubscription(subscription, type, value) {\n  subscription._state = 'running';\n\n  var observer = subscription._observer;\n\n  try {\n    var m = getMethod(observer, type);\n    switch (type) {\n      case 'next':\n        if (m) m.call(observer, value);\n        break;\n      case 'error':\n        closeSubscription(subscription);\n        if (m) m.call(observer, value);else throw value;\n        break;\n      case 'complete':\n        closeSubscription(subscription);\n        if (m) m.call(observer);\n        break;\n    }\n  } catch (e) {\n    hostReportError(e);\n  }\n\n  if (subscription._state === 'closed') cleanupSubscription(subscription);else if (subscription._state === 'running') subscription._state = 'ready';\n}\n\nfunction onNotify(subscription, type, value) {\n  if (subscription._state === 'closed') return;\n\n  if (subscription._state === 'buffering') {\n    subscription._queue.push({ type: type, value: value });\n    return;\n  }\n\n  if (subscription._state !== 'ready') {\n    subscription._state = 'buffering';\n    subscription._queue = [{ type: type, value: value }];\n    enqueue(function () {\n      return flushSubscription(subscription);\n    });\n    return;\n  }\n\n  notifySubscription(subscription, type, value);\n}\n\nvar Subscription = function () {\n  function Subscription(observer, subscriber) {\n    _classCallCheck(this, Subscription);\n\n    // ASSERT: observer is an object\n    // ASSERT: subscriber is callable\n\n    this._cleanup = undefined;\n    this._observer = observer;\n    this._queue = undefined;\n    this._state = 'initializing';\n\n    var subscriptionObserver = new SubscriptionObserver(this);\n\n    try {\n      this._cleanup = subscriber.call(undefined, subscriptionObserver);\n    } catch (e) {\n      subscriptionObserver.error(e);\n    }\n\n    if (this._state === 'initializing') this._state = 'ready';\n  }\n\n  _createClass(Subscription, [{\n    key: 'unsubscribe',\n    value: function unsubscribe() {\n      if (this._state !== 'closed') {\n        closeSubscription(this);\n        cleanupSubscription(this);\n      }\n    }\n  }, {\n    key: 'closed',\n    get: function () {\n      return this._state === 'closed';\n    }\n  }]);\n\n  return Subscription;\n}();\n\nvar SubscriptionObserver = function () {\n  function SubscriptionObserver(subscription) {\n    _classCallCheck(this, SubscriptionObserver);\n\n    this._subscription = subscription;\n  }\n\n  _createClass(SubscriptionObserver, [{\n    key: 'next',\n    value: function next(value) {\n      onNotify(this._subscription, 'next', value);\n    }\n  }, {\n    key: 'error',\n    value: function error(value) {\n      onNotify(this._subscription, 'error', value);\n    }\n  }, {\n    key: 'complete',\n    value: function complete() {\n      onNotify(this._subscription, 'complete');\n    }\n  }, {\n    key: 'closed',\n    get: function () {\n      return this._subscription._state === 'closed';\n    }\n  }]);\n\n  return SubscriptionObserver;\n}();\n\nvar Observable = exports.Observable = function () {\n  function Observable(subscriber) {\n    _classCallCheck(this, Observable);\n\n    if (!(this instanceof Observable)) throw new TypeError('Observable cannot be called as a function');\n\n    if (typeof subscriber !== 'function') throw new TypeError('Observable initializer must be a function');\n\n    this._subscriber = subscriber;\n  }\n\n  _createClass(Observable, [{\n    key: 'subscribe',\n    value: function subscribe(observer) {\n      if (typeof observer !== 'object' || observer === null) {\n        observer = {\n          next: observer,\n          error: arguments[1],\n          complete: arguments[2]\n        };\n      }\n      return new Subscription(observer, this._subscriber);\n    }\n  }, {\n    key: 'forEach',\n    value: function forEach(fn) {\n      var _this = this;\n\n      return new Promise(function (resolve, reject) {\n        if (typeof fn !== 'function') {\n          reject(new TypeError(fn + ' is not a function'));\n          return;\n        }\n\n        function done() {\n          subscription.unsubscribe();\n          resolve();\n        }\n\n        var subscription = _this.subscribe({\n          next: function (value) {\n            try {\n              fn(value, done);\n            } catch (e) {\n              reject(e);\n              subscription.unsubscribe();\n            }\n          },\n\n          error: reject,\n          complete: resolve\n        });\n      });\n    }\n  }, {\n    key: 'map',\n    value: function map(fn) {\n      var _this2 = this;\n\n      if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n\n      var C = getSpecies(this);\n\n      return new C(function (observer) {\n        return _this2.subscribe({\n          next: function (value) {\n            try {\n              value = fn(value);\n            } catch (e) {\n              return observer.error(e);\n            }\n            observer.next(value);\n          },\n          error: function (e) {\n            observer.error(e);\n          },\n          complete: function () {\n            observer.complete();\n          }\n        });\n      });\n    }\n  }, {\n    key: 'filter',\n    value: function filter(fn) {\n      var _this3 = this;\n\n      if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n\n      var C = getSpecies(this);\n\n      return new C(function (observer) {\n        return _this3.subscribe({\n          next: function (value) {\n            try {\n              if (!fn(value)) return;\n            } catch (e) {\n              return observer.error(e);\n            }\n            observer.next(value);\n          },\n          error: function (e) {\n            observer.error(e);\n          },\n          complete: function () {\n            observer.complete();\n          }\n        });\n      });\n    }\n  }, {\n    key: 'reduce',\n    value: function reduce(fn) {\n      var _this4 = this;\n\n      if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n\n      var C = getSpecies(this);\n      var hasSeed = arguments.length > 1;\n      var hasValue = false;\n      var seed = arguments[1];\n      var acc = seed;\n\n      return new C(function (observer) {\n        return _this4.subscribe({\n          next: function (value) {\n            var first = !hasValue;\n            hasValue = true;\n\n            if (!first || hasSeed) {\n              try {\n                acc = fn(acc, value);\n              } catch (e) {\n                return observer.error(e);\n              }\n            } else {\n              acc = value;\n            }\n          },\n          error: function (e) {\n            observer.error(e);\n          },\n          complete: function () {\n            if (!hasValue && !hasSeed) return observer.error(new TypeError('Cannot reduce an empty sequence'));\n\n            observer.next(acc);\n            observer.complete();\n          }\n        });\n      });\n    }\n  }, {\n    key: 'concat',\n    value: function concat() {\n      var _this5 = this;\n\n      for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {\n        sources[_key] = arguments[_key];\n      }\n\n      var C = getSpecies(this);\n\n      return new C(function (observer) {\n        var subscription = void 0;\n        var index = 0;\n\n        function startNext(next) {\n          subscription = next.subscribe({\n            next: function (v) {\n              observer.next(v);\n            },\n            error: function (e) {\n              observer.error(e);\n            },\n            complete: function () {\n              if (index === sources.length) {\n                subscription = undefined;\n                observer.complete();\n              } else {\n                startNext(C.from(sources[index++]));\n              }\n            }\n          });\n        }\n\n        startNext(_this5);\n\n        return function () {\n          if (subscription) {\n            subscription.unsubscribe();\n            subscription = undefined;\n          }\n        };\n      });\n    }\n  }, {\n    key: 'flatMap',\n    value: function flatMap(fn) {\n      var _this6 = this;\n\n      if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n\n      var C = getSpecies(this);\n\n      return new C(function (observer) {\n        var subscriptions = [];\n\n        var outer = _this6.subscribe({\n          next: function (value) {\n            if (fn) {\n              try {\n                value = fn(value);\n              } catch (e) {\n                return observer.error(e);\n              }\n            }\n\n            var inner = C.from(value).subscribe({\n              next: function (value) {\n                observer.next(value);\n              },\n              error: function (e) {\n                observer.error(e);\n              },\n              complete: function () {\n                var i = subscriptions.indexOf(inner);\n                if (i >= 0) subscriptions.splice(i, 1);\n                completeIfDone();\n              }\n            });\n\n            subscriptions.push(inner);\n          },\n          error: function (e) {\n            observer.error(e);\n          },\n          complete: function () {\n            completeIfDone();\n          }\n        });\n\n        function completeIfDone() {\n          if (outer.closed && subscriptions.length === 0) observer.complete();\n        }\n\n        return function () {\n          subscriptions.forEach(function (s) {\n            return s.unsubscribe();\n          });\n          outer.unsubscribe();\n        };\n      });\n    }\n  }, {\n    key: SymbolObservable,\n    value: function () {\n      return this;\n    }\n  }], [{\n    key: 'from',\n    value: function from(x) {\n      var C = typeof this === 'function' ? this : Observable;\n\n      if (x == null) throw new TypeError(x + ' is not an object');\n\n      var method = getMethod(x, SymbolObservable);\n      if (method) {\n        var observable = method.call(x);\n\n        if (Object(observable) !== observable) throw new TypeError(observable + ' is not an object');\n\n        if (isObservable(observable) && observable.constructor === C) return observable;\n\n        return new C(function (observer) {\n          return observable.subscribe(observer);\n        });\n      }\n\n      if (hasSymbol('iterator')) {\n        method = getMethod(x, SymbolIterator);\n        if (method) {\n          return new C(function (observer) {\n            enqueue(function () {\n              if (observer.closed) return;\n              var _iteratorNormalCompletion = true;\n              var _didIteratorError = false;\n              var _iteratorError = undefined;\n\n              try {\n                for (var _iterator = method.call(x)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                  var item = _step.value;\n\n                  observer.next(item);\n                  if (observer.closed) return;\n                }\n              } catch (err) {\n                _didIteratorError = true;\n                _iteratorError = err;\n              } finally {\n                try {\n                  if (!_iteratorNormalCompletion && _iterator.return) {\n                    _iterator.return();\n                  }\n                } finally {\n                  if (_didIteratorError) {\n                    throw _iteratorError;\n                  }\n                }\n              }\n\n              observer.complete();\n            });\n          });\n        }\n      }\n\n      if (Array.isArray(x)) {\n        return new C(function (observer) {\n          enqueue(function () {\n            if (observer.closed) return;\n            for (var i = 0; i < x.length; ++i) {\n              observer.next(x[i]);\n              if (observer.closed) return;\n            }\n            observer.complete();\n          });\n        });\n      }\n\n      throw new TypeError(x + ' is not observable');\n    }\n  }, {\n    key: 'of',\n    value: function of() {\n      for (var _len2 = arguments.length, items = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        items[_key2] = arguments[_key2];\n      }\n\n      var C = typeof this === 'function' ? this : Observable;\n\n      return new C(function (observer) {\n        enqueue(function () {\n          if (observer.closed) return;\n          for (var i = 0; i < items.length; ++i) {\n            observer.next(items[i]);\n            if (observer.closed) return;\n          }\n          observer.complete();\n        });\n      });\n    }\n  }, {\n    key: SymbolSpecies,\n    get: function () {\n      return this;\n    }\n  }]);\n\n  return Observable;\n}();\n\nif (hasSymbols()) {\n  Object.defineProperty(Observable, Symbol('extensions'), {\n    value: {\n      symbol: SymbolObservable,\n      hostReportError: hostReportError\n    },\n    configurable: true\n  });\n}","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\n            t[p[i]] = s[p[i]];\n    return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@aws-amplify/core\");\nvar axios_1 = require(\"axios\");\nvar logger = new core_1.ConsoleLogger('RestClient'), urlLib = require('url');\n/**\n* HTTP Client for REST requests. Send and receive JSON data.\n* Sign request with AWS credentials if available\n* Usage:\n<pre>\nconst restClient = new RestClient();\nrestClient.get('...')\n    .then(function(data) {\n        console.log(data);\n    })\n    .catch(err => console.log(err));\n</pre>\n*/\nvar RestClient = /** @class */ (function () {\n    /**\n    * @param {RestClientOptions} [options] - Instance options\n    */\n    function RestClient(options) {\n        this._region = 'us-east-1'; // this will be updated by endpoint function\n        this._service = 'execute-api'; // this can be updated by endpoint function\n        this._custom_header = undefined; // this can be updated by endpoint function\n        var endpoints = options.endpoints;\n        this._options = options;\n        logger.debug('API Options', this._options);\n    }\n    /**\n    * Update AWS credentials\n    * @param {AWSCredentials} credentials - AWS credentials\n    *\n    updateCredentials(credentials: AWSCredentials) {\n        this.options.credentials = credentials;\n    }\n*/\n    /**\n    * Basic HTTP request. Customizable\n    * @param {string} url - Full request URL\n    * @param {string} method - Request HTTP method\n    * @param {json} [init] - Request extra params\n    * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n    */\n    RestClient.prototype.ajax = function (url, method, init) {\n        return __awaiter(this, void 0, void 0, function () {\n            var parsed_url, params, libraryHeaders, userAgent, initParams, isAllResponse, custom_header, _a, _b, search, parsedUrl;\n            var _this = this;\n            return __generator(this, function (_c) {\n                switch (_c.label) {\n                    case 0:\n                        logger.debug(method + ' ' + url);\n                        parsed_url = this._parseUrl(url);\n                        params = {\n                            method: method,\n                            url: url,\n                            host: parsed_url.host,\n                            path: parsed_url.path,\n                            headers: {},\n                            data: null,\n                            responseType: 'json'\n                        };\n                        libraryHeaders = {};\n                        if (core_1.Platform.isReactNative) {\n                            userAgent = core_1.Platform.userAgent || 'aws-amplify/0.1.x';\n                            libraryHeaders = {\n                                'User-Agent': userAgent\n                            };\n                        }\n                        initParams = Object.assign({}, init);\n                        isAllResponse = initParams.response;\n                        if (initParams.body) {\n                            libraryHeaders['Content-Type'] = 'application/json; charset=UTF-8';\n                            params.data = JSON.stringify(initParams.body);\n                        }\n                        if (initParams.responseType) {\n                            params.responseType = initParams.responseType;\n                        }\n                        params['signerServiceInfo'] = initParams.signerServiceInfo;\n                        if (!this._custom_header) return [3 /*break*/, 2];\n                        return [4 /*yield*/, this._custom_header()];\n                    case 1:\n                        _a = _c.sent();\n                        return [3 /*break*/, 3];\n                    case 2:\n                        _a = undefined;\n                        _c.label = 3;\n                    case 3:\n                        custom_header = _a;\n                        params.headers = __assign({}, libraryHeaders, (custom_header), initParams.headers);\n                        _b = urlLib.parse(url, true, true), search = _b.search, parsedUrl = __rest(_b, [\"search\"]);\n                        params.url = urlLib.format(__assign({}, parsedUrl, { query: __assign({}, parsedUrl.query, (initParams.queryStringParameters || {})) }));\n                        // Do not sign the request if client has added 'Authorization' header,\n                        // which means custom authorizer.\n                        if (typeof params.headers['Authorization'] !== 'undefined') {\n                            params.headers = Object.keys(params.headers).reduce(function (acc, k) {\n                                if (params.headers[k]) {\n                                    acc[k] = params.headers[k];\n                                }\n                                return acc;\n                                // tslint:disable-next-line:align\n                            }, {});\n                            return [2 /*return*/, this._request(params, isAllResponse)];\n                        }\n                        // Signing the request in case there credentials are available\n                        return [2 /*return*/, core_1.Credentials.get()\n                                .then(function (credentials) { return _this._signed(__assign({}, params), credentials, isAllResponse); }, function (err) {\n                                logger.debug('No credentials available, the request will be unsigned');\n                                return _this._request(params, isAllResponse);\n                            })];\n                }\n            });\n        });\n    };\n    /**\n    * GET HTTP request\n    * @param {string} url - Full request URL\n    * @param {JSON} init - Request extra params\n    * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n    */\n    RestClient.prototype.get = function (url, init) {\n        return this.ajax(url, 'GET', init);\n    };\n    /**\n    * PUT HTTP request\n    * @param {string} url - Full request URL\n    * @param {json} init - Request extra params\n    * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n    */\n    RestClient.prototype.put = function (url, init) {\n        return this.ajax(url, 'PUT', init);\n    };\n    /**\n    * PATCH HTTP request\n    * @param {string} url - Full request URL\n    * @param {json} init - Request extra params\n    * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n    */\n    RestClient.prototype.patch = function (url, init) {\n        return this.ajax(url, 'PATCH', init);\n    };\n    /**\n    * POST HTTP request\n    * @param {string} url - Full request URL\n    * @param {json} init - Request extra params\n    * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n    */\n    RestClient.prototype.post = function (url, init) {\n        return this.ajax(url, 'POST', init);\n    };\n    /**\n    * DELETE HTTP request\n    * @param {string} url - Full request URL\n    * @param {json} init - Request extra params\n    * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n    */\n    RestClient.prototype.del = function (url, init) {\n        return this.ajax(url, 'DELETE', init);\n    };\n    /**\n    * HEAD HTTP request\n    * @param {string} url - Full request URL\n    * @param {json} init - Request extra params\n    * @return {Promise} - A promise that resolves to an object with response status and JSON data, if successful.\n    */\n    RestClient.prototype.head = function (url, init) {\n        return this.ajax(url, 'HEAD', init);\n    };\n    /**\n    * Getting endpoint for API\n    * @param {string} apiName - The name of the api\n    * @return {string} - The endpoint of the api\n    */\n    RestClient.prototype.endpoint = function (apiName) {\n        var _this = this;\n        var cloud_logic_array = this._options.endpoints;\n        var response = '';\n        if (!Array.isArray(cloud_logic_array)) {\n            return response;\n        }\n        cloud_logic_array.forEach(function (v) {\n            if (v.name === apiName) {\n                response = v.endpoint;\n                if (typeof v.region === 'string') {\n                    _this._region = v.region;\n                }\n                else if (typeof _this._options.region === 'string') {\n                    _this._region = _this._options.region;\n                }\n                if (typeof v.service === 'string') {\n                    _this._service = v.service || 'execute-api';\n                }\n                else {\n                    _this._service = 'execute-api';\n                }\n                if (typeof v.custom_header === 'function') {\n                    _this._custom_header = v.custom_header;\n                }\n                else {\n                    _this._custom_header = undefined;\n                }\n            }\n        });\n        return response;\n    };\n    /** private methods **/\n    RestClient.prototype._signed = function (params, credentials, isAllResponse) {\n        var signerServiceInfoParams = params.signerServiceInfo, otherParams = __rest(params, [\"signerServiceInfo\"]);\n        var endpoint_region = this._region || this._options.region;\n        var endpoint_service = this._service || this._options.service;\n        var creds = {\n            secret_key: credentials.secretAccessKey,\n            access_key: credentials.accessKeyId,\n            session_token: credentials.sessionToken,\n        };\n        var endpointInfo = {\n            region: endpoint_region,\n            service: endpoint_service,\n        };\n        var signerServiceInfo = Object.assign(endpointInfo, signerServiceInfoParams);\n        var signed_params = core_1.Signer.sign(otherParams, creds, signerServiceInfo);\n        if (signed_params.data) {\n            signed_params.body = signed_params.data;\n        }\n        logger.debug('Signed Request: ', signed_params);\n        delete signed_params.headers['host'];\n        return axios_1.default(signed_params)\n            .then(function (response) { return isAllResponse ? response : response.data; })\n            .catch(function (error) {\n            logger.debug(error);\n            throw error;\n        });\n    };\n    RestClient.prototype._request = function (params, isAllResponse) {\n        if (isAllResponse === void 0) { isAllResponse = false; }\n        return axios_1.default(params)\n            .then(function (response) { return isAllResponse ? response : response.data; })\n            .catch(function (error) {\n            logger.debug(error);\n            throw error;\n        });\n    };\n    RestClient.prototype._parseUrl = function (url) {\n        var parts = url.split('/');\n        return {\n            host: parts[2],\n            path: '/' + parts.slice(3).join('/')\n        };\n    };\n    return RestClient;\n}());\nexports.RestClient = RestClient;\n//# sourceMappingURL=RestClient.js.map","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  var context = new Axios(defaultConfig);\n  var instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context);\n\n  // Copy context to instance\n  utils.extend(instance, context);\n\n  return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n  return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n\nmodule.exports = function isBuffer (obj) {\n  return obj != null && obj.constructor != null &&\n    typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n  this.defaults = instanceConfig;\n  this.interceptors = {\n    request: new InterceptorManager(),\n    response: new InterceptorManager()\n  };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n  /*eslint no-param-reassign:0*/\n  // Allow for axios('example/url'[, config]) a la fetch API\n  if (typeof config === 'string') {\n    config = arguments[1] || {};\n    config.url = arguments[0];\n  } else {\n    config = config || {};\n  }\n\n  config = mergeConfig(this.defaults, config);\n  config.method = config.method ? config.method.toLowerCase() : 'get';\n\n  // Hook up interceptors middleware\n  var chain = [dispatchRequest, undefined];\n  var promise = Promise.resolve(config);\n\n  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n    chain.unshift(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n    chain.push(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  while (chain.length) {\n    promise = promise.then(chain.shift(), chain.shift());\n  }\n\n  return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n  config = mergeConfig(this.defaults, config);\n  return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(utils.merge(config || {}, {\n      method: method,\n      url: url\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, data, config) {\n    return this.request(utils.merge(config || {}, {\n      method: method,\n      url: url,\n      data: data\n    }));\n  };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n  this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n  this.handlers.push({\n    fulfilled: fulfilled,\n    rejected: rejected\n  });\n  return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n  if (this.handlers[id]) {\n    this.handlers[id] = null;\n  }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n  utils.forEach(this.handlers, function forEachHandler(h) {\n    if (h !== null) {\n      fn(h);\n    }\n  });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar isAbsoluteURL = require('./../helpers/isAbsoluteURL');\nvar combineURLs = require('./../helpers/combineURLs');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  // Support baseURL config\n  if (config.baseURL && !isAbsoluteURL(config.url)) {\n    config.url = combineURLs(config.baseURL, config.url);\n  }\n\n  // Ensure headers exist\n  config.headers = config.headers || {};\n\n  // Transform request data\n  config.data = transformData(\n    config.data,\n    config.headers,\n    config.transformRequest\n  );\n\n  // Flatten headers\n  config.headers = utils.merge(\n    config.headers.common || {},\n    config.headers[config.method] || {},\n    config.headers || {}\n  );\n\n  utils.forEach(\n    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n    function cleanHeaderConfig(method) {\n      delete config.headers[method];\n    }\n  );\n\n  var adapter = config.adapter || defaults.adapter;\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData(\n      response.data,\n      response.headers,\n      config.transformResponse\n    );\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason && reason.response) {\n        reason.response.data = transformData(\n          reason.response.data,\n          reason.response.headers,\n          config.transformResponse\n        );\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n  /*eslint no-param-reassign:0*/\n  utils.forEach(fns, function transform(fn) {\n    data = fn(data, headers);\n  });\n\n  return data;\n};\n","/**\n * Copyright (c) 2016, Lee Byron\n * All rights reserved.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @ignore\n */\n\n/**\n * [Iterator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#iterator)\n * is a *protocol* which describes a standard way to produce a sequence of\n * values, typically the values of the Iterable represented by this Iterator.\n *\n * While described by the [ES2015 version of JavaScript](http://www.ecma-international.org/ecma-262/6.0/#sec-iterator-interface)\n * it can be utilized by any version of JavaScript.\n *\n * @external Iterator\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#iterator|MDN Iteration protocols}\n */\n\n/**\n * [Iterable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#iterable)\n * is a *protocol* which when implemented allows a JavaScript object to define\n * their iteration behavior, such as what values are looped over in a\n * [`for...of`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of)\n * loop or `iterall`'s `forEach` function. Many [built-in types](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#Builtin_iterables)\n * implement the Iterable protocol, including `Array` and `Map`.\n *\n * While described by the [ES2015 version of JavaScript](http://www.ecma-international.org/ecma-262/6.0/#sec-iterable-interface)\n * it can be utilized by any version of JavaScript.\n *\n * @external Iterable\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#iterable|MDN Iteration protocols}\n */\n\n// In ES2015 (or a polyfilled) environment, this will be Symbol.iterator\nvar SYMBOL_ITERATOR = typeof Symbol === 'function' && Symbol.iterator\n\n/**\n * A property name to be used as the name of an Iterable's method responsible\n * for producing an Iterator, referred to as `@@iterator`. Typically represents\n * the value `Symbol.iterator` but falls back to the string `\"@@iterator\"` when\n * `Symbol.iterator` is not defined.\n *\n * Use `$$iterator` for defining new Iterables instead of `Symbol.iterator`,\n * but do not use it for accessing existing Iterables, instead use\n * {@link getIterator} or {@link isIterable}.\n *\n * @example\n *\n * var $$iterator = require('iterall').$$iterator\n *\n * function Counter (to) {\n *   this.to = to\n * }\n *\n * Counter.prototype[$$iterator] = function () {\n *   return {\n *     to: this.to,\n *     num: 0,\n *     next () {\n *       if (this.num >= this.to) {\n *         return { value: undefined, done: true }\n *       }\n *       return { value: this.num++, done: false }\n *     }\n *   }\n * }\n *\n * var counter = new Counter(3)\n * for (var number of counter) {\n *   console.log(number) // 0 ... 1 ... 2\n * }\n *\n * @type {Symbol|string}\n */\nvar $$iterator = SYMBOL_ITERATOR || '@@iterator'\nexports.$$iterator = $$iterator\n\n/**\n * Returns true if the provided object implements the Iterator protocol via\n * either implementing a `Symbol.iterator` or `\"@@iterator\"` method.\n *\n * @example\n *\n * var isIterable = require('iterall').isIterable\n * isIterable([ 1, 2, 3 ]) // true\n * isIterable('ABC') // true\n * isIterable({ length: 1, 0: 'Alpha' }) // false\n * isIterable({ key: 'value' }) // false\n * isIterable(new Map()) // true\n *\n * @param obj\n *   A value which might implement the Iterable protocol.\n * @return {boolean} true if Iterable.\n */\nfunction isIterable(obj) {\n  return !!getIteratorMethod(obj)\n}\nexports.isIterable = isIterable\n\n/**\n * Returns true if the provided object implements the Array-like protocol via\n * defining a positive-integer `length` property.\n *\n * @example\n *\n * var isArrayLike = require('iterall').isArrayLike\n * isArrayLike([ 1, 2, 3 ]) // true\n * isArrayLike('ABC') // true\n * isArrayLike({ length: 1, 0: 'Alpha' }) // true\n * isArrayLike({ key: 'value' }) // false\n * isArrayLike(new Map()) // false\n *\n * @param obj\n *   A value which might implement the Array-like protocol.\n * @return {boolean} true if Array-like.\n */\nfunction isArrayLike(obj) {\n  var length = obj != null && obj.length\n  return typeof length === 'number' && length >= 0 && length % 1 === 0\n}\nexports.isArrayLike = isArrayLike\n\n/**\n * Returns true if the provided object is an Object (i.e. not a string literal)\n * and is either Iterable or Array-like.\n *\n * This may be used in place of [Array.isArray()][isArray] to determine if an\n * object should be iterated-over. It always excludes string literals and\n * includes Arrays (regardless of if it is Iterable). It also includes other\n * Array-like objects such as NodeList, TypedArray, and Buffer.\n *\n * @example\n *\n * var isCollection = require('iterall').isCollection\n * isCollection([ 1, 2, 3 ]) // true\n * isCollection('ABC') // false\n * isCollection({ length: 1, 0: 'Alpha' }) // true\n * isCollection({ key: 'value' }) // false\n * isCollection(new Map()) // true\n *\n * @example\n *\n * var forEach = require('iterall').forEach\n * if (isCollection(obj)) {\n *   forEach(obj, function (value) {\n *     console.log(value)\n *   })\n * }\n *\n * @param obj\n *   An Object value which might implement the Iterable or Array-like protocols.\n * @return {boolean} true if Iterable or Array-like Object.\n */\nfunction isCollection(obj) {\n  return Object(obj) === obj && (isArrayLike(obj) || isIterable(obj))\n}\nexports.isCollection = isCollection\n\n/**\n * If the provided object implements the Iterator protocol, its Iterator object\n * is returned. Otherwise returns undefined.\n *\n * @example\n *\n * var getIterator = require('iterall').getIterator\n * var iterator = getIterator([ 1, 2, 3 ])\n * iterator.next() // { value: 1, done: false }\n * iterator.next() // { value: 2, done: false }\n * iterator.next() // { value: 3, done: false }\n * iterator.next() // { value: undefined, done: true }\n *\n * @template T the type of each iterated value\n * @param {Iterable<T>} iterable\n *   An Iterable object which is the source of an Iterator.\n * @return {Iterator<T>} new Iterator instance.\n */\nfunction getIterator(iterable) {\n  var method = getIteratorMethod(iterable)\n  if (method) {\n    return method.call(iterable)\n  }\n}\nexports.getIterator = getIterator\n\n/**\n * If the provided object implements the Iterator protocol, the method\n * responsible for producing its Iterator object is returned.\n *\n * This is used in rare cases for performance tuning. This method must be called\n * with obj as the contextual this-argument.\n *\n * @example\n *\n * var getIteratorMethod = require('iterall').getIteratorMethod\n * var myArray = [ 1, 2, 3 ]\n * var method = getIteratorMethod(myArray)\n * if (method) {\n *   var iterator = method.call(myArray)\n * }\n *\n * @template T the type of each iterated value\n * @param {Iterable<T>} iterable\n *   An Iterable object which defines an `@@iterator` method.\n * @return {function(): Iterator<T>} `@@iterator` method.\n */\nfunction getIteratorMethod(iterable) {\n  if (iterable != null) {\n    var method =\n      (SYMBOL_ITERATOR && iterable[SYMBOL_ITERATOR]) || iterable['@@iterator']\n    if (typeof method === 'function') {\n      return method\n    }\n  }\n}\nexports.getIteratorMethod = getIteratorMethod\n\n/**\n * Similar to {@link getIterator}, this method returns a new Iterator given an\n * Iterable. However it will also create an Iterator for a non-Iterable\n * Array-like collection, such as Array in a non-ES2015 environment.\n *\n * `createIterator` is complimentary to `forEach`, but allows a \"pull\"-based\n * iteration as opposed to `forEach`'s \"push\"-based iteration.\n *\n * `createIterator` produces an Iterator for Array-likes with the same behavior\n * as ArrayIteratorPrototype described in the ECMAScript specification, and\n * does *not* skip over \"holes\".\n *\n * @example\n *\n * var createIterator = require('iterall').createIterator\n *\n * var myArraylike = { length: 3, 0: 'Alpha', 1: 'Bravo', 2: 'Charlie' }\n * var iterator = createIterator(myArraylike)\n * iterator.next() // { value: 'Alpha', done: false }\n * iterator.next() // { value: 'Bravo', done: false }\n * iterator.next() // { value: 'Charlie', done: false }\n * iterator.next() // { value: undefined, done: true }\n *\n * @template T the type of each iterated value\n * @param {Iterable<T>|{ length: number }} collection\n *   An Iterable or Array-like object to produce an Iterator.\n * @return {Iterator<T>} new Iterator instance.\n */\nfunction createIterator(collection) {\n  if (collection != null) {\n    var iterator = getIterator(collection)\n    if (iterator) {\n      return iterator\n    }\n    if (isArrayLike(collection)) {\n      return new ArrayLikeIterator(collection)\n    }\n  }\n}\nexports.createIterator = createIterator\n\n// When the object provided to `createIterator` is not Iterable but is\n// Array-like, this simple Iterator is created.\nfunction ArrayLikeIterator(obj) {\n  this._o = obj\n  this._i = 0\n}\n\n// Note: all Iterators are themselves Iterable.\nArrayLikeIterator.prototype[$$iterator] = function() {\n  return this\n}\n\n// A simple state-machine determines the IteratorResult returned, yielding\n// each value in the Array-like object in order of their indicies.\nArrayLikeIterator.prototype.next = function() {\n  if (this._o === void 0 || this._i >= this._o.length) {\n    this._o = void 0\n    return { value: void 0, done: true }\n  }\n  return { value: this._o[this._i++], done: false }\n}\n\n/**\n * Given an object which either implements the Iterable protocol or is\n * Array-like, iterate over it, calling the `callback` at each iteration.\n *\n * Use `forEach` where you would expect to use a `for ... of` loop in ES6.\n * However `forEach` adheres to the behavior of [Array#forEach][] described in\n * the ECMAScript specification, skipping over \"holes\" in Array-likes. It will\n * also delegate to a `forEach` method on `collection` if one is defined,\n * ensuring native performance for `Arrays`.\n *\n * Similar to [Array#forEach][], the `callback` function accepts three\n * arguments, and is provided with `thisArg` as the calling context.\n *\n * Note: providing an infinite Iterator to forEach will produce an error.\n *\n * [Array#forEach]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\n *\n * @example\n *\n * var forEach = require('iterall').forEach\n *\n * forEach(myIterable, function (value, index, iterable) {\n *   console.log(value, index, iterable === myIterable)\n * })\n *\n * @example\n *\n * // ES6:\n * for (let value of myIterable) {\n *   console.log(value)\n * }\n *\n * // Any JavaScript environment:\n * forEach(myIterable, function (value) {\n *   console.log(value)\n * })\n *\n * @template T the type of each iterated value\n * @param {Iterable<T>|{ length: number }} collection\n *   The Iterable or array to iterate over.\n * @param {function(T, number, object)} callback\n *   Function to execute for each iteration, taking up to three arguments\n * @param [thisArg]\n *   Optional. Value to use as `this` when executing `callback`.\n */\nfunction forEach(collection, callback, thisArg) {\n  if (collection != null) {\n    if (typeof collection.forEach === 'function') {\n      return collection.forEach(callback, thisArg)\n    }\n    var i = 0\n    var iterator = getIterator(collection)\n    if (iterator) {\n      var step\n      while (!(step = iterator.next()).done) {\n        callback.call(thisArg, step.value, i++, collection)\n        // Infinite Iterators could cause forEach to run forever.\n        // After a very large number of iterations, produce an error.\n        /* istanbul ignore if */\n        if (i > 9999999) {\n          throw new TypeError('Near-infinite iteration.')\n        }\n      }\n    } else if (isArrayLike(collection)) {\n      for (; i < collection.length; i++) {\n        if (collection.hasOwnProperty(i)) {\n          callback.call(thisArg, collection[i], i, collection)\n        }\n      }\n    }\n  }\n}\nexports.forEach = forEach\n\n/////////////////////////////////////////////////////\n//                                                 //\n//                 ASYNC ITERATORS                 //\n//                                                 //\n/////////////////////////////////////////////////////\n\n/**\n * [AsyncIterable](https://tc39.github.io/proposal-async-iteration/#sec-asynciterable-interface)\n * is a *protocol* which when implemented allows a JavaScript object to define\n * an asynchronous iteration behavior, such as what values are looped over in\n * a [`for-await-of`](https://tc39.github.io/proposal-async-iteration/#sec-for-in-and-for-of-statements)\n * loop or `iterall`'s {@link forAwaitEach} function.\n *\n * While described as a proposed addition to the [ES2017 version of JavaScript](https://tc39.github.io/proposal-async-iteration/)\n * it can be utilized by any version of JavaScript.\n *\n * @external AsyncIterable\n * @see {@link https://tc39.github.io/proposal-async-iteration/#sec-asynciterable-interface|Async Iteration Proposal}\n * @template T The type of each iterated value\n * @property {function (): AsyncIterator<T>} Symbol.asyncIterator\n *   A method which produces an AsyncIterator for this AsyncIterable.\n */\n\n/**\n * [AsyncIterator](https://tc39.github.io/proposal-async-iteration/#sec-asynciterator-interface)\n * is a *protocol* which describes a standard way to produce and consume an\n * asynchronous sequence of values, typically the values of the\n * {@link AsyncIterable} represented by this {@link AsyncIterator}.\n *\n * AsyncIterator is similar to Observable or Stream. Like an {@link Iterator} it\n * also as a `next()` method, however instead of an IteratorResult,\n * calling this method returns a {@link Promise} for a IteratorResult.\n *\n * While described as a proposed addition to the [ES2017 version of JavaScript](https://tc39.github.io/proposal-async-iteration/)\n * it can be utilized by any version of JavaScript.\n *\n * @external AsyncIterator\n * @see {@link https://tc39.github.io/proposal-async-iteration/#sec-asynciterator-interface|Async Iteration Proposal}\n */\n\n// In ES2017 (or a polyfilled) environment, this will be Symbol.asyncIterator\nvar SYMBOL_ASYNC_ITERATOR = typeof Symbol === 'function' && Symbol.asyncIterator\n\n/**\n * A property name to be used as the name of an AsyncIterable's method\n * responsible for producing an Iterator, referred to as `@@asyncIterator`.\n * Typically represents the value `Symbol.asyncIterator` but falls back to the\n * string `\"@@asyncIterator\"` when `Symbol.asyncIterator` is not defined.\n *\n * Use `$$asyncIterator` for defining new AsyncIterables instead of\n * `Symbol.asyncIterator`, but do not use it for accessing existing Iterables,\n * instead use {@link getAsyncIterator} or {@link isAsyncIterable}.\n *\n * @example\n *\n * var $$asyncIterator = require('iterall').$$asyncIterator\n *\n * function Chirper (to) {\n *   this.to = to\n * }\n *\n * Chirper.prototype[$$asyncIterator] = function () {\n *   return {\n *     to: this.to,\n *     num: 0,\n *     next () {\n *       return new Promise(resolve => {\n *         if (this.num >= this.to) {\n *           resolve({ value: undefined, done: true })\n *         } else {\n *           setTimeout(() => {\n *             resolve({ value: this.num++, done: false })\n *           }, 1000)\n *         }\n *       })\n *     }\n *   }\n * }\n *\n * var chirper = new Chirper(3)\n * for await (var number of chirper) {\n *   console.log(number) // 0 ...wait... 1 ...wait... 2\n * }\n *\n * @type {Symbol|string}\n */\nvar $$asyncIterator = SYMBOL_ASYNC_ITERATOR || '@@asyncIterator'\nexports.$$asyncIterator = $$asyncIterator\n\n/**\n * Returns true if the provided object implements the AsyncIterator protocol via\n * either implementing a `Symbol.asyncIterator` or `\"@@asyncIterator\"` method.\n *\n * @example\n *\n * var isAsyncIterable = require('iterall').isAsyncIterable\n * isAsyncIterable(myStream) // true\n * isAsyncIterable('ABC') // false\n *\n * @param obj\n *   A value which might implement the AsyncIterable protocol.\n * @return {boolean} true if AsyncIterable.\n */\nfunction isAsyncIterable(obj) {\n  return !!getAsyncIteratorMethod(obj)\n}\nexports.isAsyncIterable = isAsyncIterable\n\n/**\n * If the provided object implements the AsyncIterator protocol, its\n * AsyncIterator object is returned. Otherwise returns undefined.\n *\n * @example\n *\n * var getAsyncIterator = require('iterall').getAsyncIterator\n * var asyncIterator = getAsyncIterator(myStream)\n * asyncIterator.next().then(console.log) // { value: 1, done: false }\n * asyncIterator.next().then(console.log) // { value: 2, done: false }\n * asyncIterator.next().then(console.log) // { value: 3, done: false }\n * asyncIterator.next().then(console.log) // { value: undefined, done: true }\n *\n * @template T the type of each iterated value\n * @param {AsyncIterable<T>} asyncIterable\n *   An AsyncIterable object which is the source of an AsyncIterator.\n * @return {AsyncIterator<T>} new AsyncIterator instance.\n */\nfunction getAsyncIterator(asyncIterable) {\n  var method = getAsyncIteratorMethod(asyncIterable)\n  if (method) {\n    return method.call(asyncIterable)\n  }\n}\nexports.getAsyncIterator = getAsyncIterator\n\n/**\n * If the provided object implements the AsyncIterator protocol, the method\n * responsible for producing its AsyncIterator object is returned.\n *\n * This is used in rare cases for performance tuning. This method must be called\n * with obj as the contextual this-argument.\n *\n * @example\n *\n * var getAsyncIteratorMethod = require('iterall').getAsyncIteratorMethod\n * var method = getAsyncIteratorMethod(myStream)\n * if (method) {\n *   var asyncIterator = method.call(myStream)\n * }\n *\n * @template T the type of each iterated value\n * @param {AsyncIterable<T>} asyncIterable\n *   An AsyncIterable object which defines an `@@asyncIterator` method.\n * @return {function(): AsyncIterator<T>} `@@asyncIterator` method.\n */\nfunction getAsyncIteratorMethod(asyncIterable) {\n  if (asyncIterable != null) {\n    var method =\n      (SYMBOL_ASYNC_ITERATOR && asyncIterable[SYMBOL_ASYNC_ITERATOR]) ||\n      asyncIterable['@@asyncIterator']\n    if (typeof method === 'function') {\n      return method\n    }\n  }\n}\nexports.getAsyncIteratorMethod = getAsyncIteratorMethod\n\n/**\n * Similar to {@link getAsyncIterator}, this method returns a new AsyncIterator\n * given an AsyncIterable. However it will also create an AsyncIterator for a\n * non-async Iterable as well as non-Iterable Array-like collection, such as\n * Array in a pre-ES2015 environment.\n *\n * `createAsyncIterator` is complimentary to `forAwaitEach`, but allows a\n * buffering \"pull\"-based iteration as opposed to `forAwaitEach`'s\n * \"push\"-based iteration.\n *\n * `createAsyncIterator` produces an AsyncIterator for non-async Iterables as\n * described in the ECMAScript proposal [Async-from-Sync Iterator Objects](https://tc39.github.io/proposal-async-iteration/#sec-async-from-sync-iterator-objects).\n *\n * > Note: Creating `AsyncIterator`s requires the existence of `Promise`.\n * > While `Promise` has been available in modern browsers for a number of\n * > years, legacy browsers (like IE 11) may require a polyfill.\n *\n * @example\n *\n * var createAsyncIterator = require('iterall').createAsyncIterator\n *\n * var myArraylike = { length: 3, 0: 'Alpha', 1: 'Bravo', 2: 'Charlie' }\n * var iterator = createAsyncIterator(myArraylike)\n * iterator.next().then(console.log) // { value: 'Alpha', done: false }\n * iterator.next().then(console.log) // { value: 'Bravo', done: false }\n * iterator.next().then(console.log) // { value: 'Charlie', done: false }\n * iterator.next().then(console.log) // { value: undefined, done: true }\n *\n * @template T the type of each iterated value\n * @param {AsyncIterable<T>|Iterable<T>|{ length: number }} source\n *   An AsyncIterable, Iterable, or Array-like object to produce an Iterator.\n * @return {AsyncIterator<T>} new AsyncIterator instance.\n */\nfunction createAsyncIterator(source) {\n  if (source != null) {\n    var asyncIterator = getAsyncIterator(source)\n    if (asyncIterator) {\n      return asyncIterator\n    }\n    var iterator = createIterator(source)\n    if (iterator) {\n      return new AsyncFromSyncIterator(iterator)\n    }\n  }\n}\nexports.createAsyncIterator = createAsyncIterator\n\n// When the object provided to `createAsyncIterator` is not AsyncIterable but is\n// sync Iterable, this simple wrapper is created.\nfunction AsyncFromSyncIterator(iterator) {\n  this._i = iterator\n}\n\n// Note: all AsyncIterators are themselves AsyncIterable.\nAsyncFromSyncIterator.prototype[$$asyncIterator] = function() {\n  return this\n}\n\n// A simple state-machine determines the IteratorResult returned, yielding\n// each value in the Array-like object in order of their indicies.\nAsyncFromSyncIterator.prototype.next = function() {\n  var step = this._i.next()\n  return Promise.resolve(step.value).then(function(value) {\n    return { value: value, done: step.done }\n  })\n}\n\n/**\n * Given an object which either implements the AsyncIterable protocol or is\n * Array-like, iterate over it, calling the `callback` at each iteration.\n *\n * Use `forAwaitEach` where you would expect to use a [for-await-of](https://tc39.github.io/proposal-async-iteration/#sec-for-in-and-for-of-statements) loop.\n *\n * Similar to [Array#forEach][], the `callback` function accepts three\n * arguments, and is provided with `thisArg` as the calling context.\n *\n * > Note: Using `forAwaitEach` requires the existence of `Promise`.\n * > While `Promise` has been available in modern browsers for a number of\n * > years, legacy browsers (like IE 11) may require a polyfill.\n *\n * @example\n *\n * var forAwaitEach = require('iterall').forAwaitEach\n *\n * forAwaitEach(myIterable, function (value, index, iterable) {\n *   console.log(value, index, iterable === myIterable)\n * })\n *\n * @example\n *\n * // ES2017:\n * for await (let value of myAsyncIterable) {\n *   console.log(await doSomethingAsync(value))\n * }\n * console.log('done')\n *\n * // Any JavaScript environment:\n * forAwaitEach(myAsyncIterable, function (value) {\n *   return doSomethingAsync(value).then(console.log)\n * }).then(function () {\n *   console.log('done')\n * })\n *\n * @template T the type of each iterated value\n * @param {AsyncIterable<T>|Iterable<Promise<T> | T>|{ length: number }} source\n *   The AsyncIterable or array to iterate over.\n * @param {function(T, number, object)} callback\n *   Function to execute for each iteration, taking up to three arguments\n * @param [thisArg]\n *   Optional. Value to use as `this` when executing `callback`.\n */\nfunction forAwaitEach(source, callback, thisArg) {\n  var asyncIterator = createAsyncIterator(source)\n  if (asyncIterator) {\n    var i = 0\n    return new Promise(function(resolve, reject) {\n      function next() {\n        asyncIterator\n          .next()\n          .then(function(step) {\n            if (!step.done) {\n              Promise.resolve(callback.call(thisArg, step.value, i++, source))\n                .then(next)\n                .catch(reject)\n            } else {\n              resolve()\n            }\n            // Explicitly return null, silencing bluebird-style warnings.\n            return null\n          })\n          .catch(reject)\n        // Explicitly return null, silencing bluebird-style warnings.\n        return null\n      }\n      next()\n    })\n  }\n}\nexports.forAwaitEach = forAwaitEach\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n  utils.forEach(headers, function processHeader(value, name) {\n    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n      headers[normalizedName] = value;\n      delete headers[name];\n    }\n  });\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n  var validateStatus = response.config.validateStatus;\n  if (!validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(createError(\n      'Request failed with status code ' + response.status,\n      response.config,\n      null,\n      response.request,\n      response\n    ));\n  }\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n  error.config = config;\n  if (code) {\n    error.code = code;\n  }\n\n  error.request = request;\n  error.response = response;\n  error.isAxiosError = true;\n\n  error.toJSON = function() {\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: this.config,\n      code: this.code\n    };\n  };\n  return error;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n  var parsed = {};\n  var key;\n  var val;\n  var i;\n\n  if (!headers) { return parsed; }\n\n  utils.forEach(headers.split('\\n'), function parser(line) {\n    i = line.indexOf(':');\n    key = utils.trim(line.substr(0, i)).toLowerCase();\n    val = utils.trim(line.substr(i + 1));\n\n    if (key) {\n      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n        return;\n      }\n      if (key === 'set-cookie') {\n        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n      } else {\n        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n      }\n    }\n  });\n\n  return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs have full support of the APIs needed to test\n  // whether the request URL is of the same origin as current location.\n    (function standardBrowserEnv() {\n      var msie = /(msie|trident)/i.test(navigator.userAgent);\n      var urlParsingNode = document.createElement('a');\n      var originURL;\n\n      /**\n    * Parse a URL to discover it's components\n    *\n    * @param {String} url The URL to be parsed\n    * @returns {Object}\n    */\n      function resolveURL(url) {\n        var href = url;\n\n        if (msie) {\n        // IE needs attribute set twice to normalize properties\n          urlParsingNode.setAttribute('href', href);\n          href = urlParsingNode.href;\n        }\n\n        urlParsingNode.setAttribute('href', href);\n\n        // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n        return {\n          href: urlParsingNode.href,\n          protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n          host: urlParsingNode.host,\n          search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n          hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n          hostname: urlParsingNode.hostname,\n          port: urlParsingNode.port,\n          pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n            urlParsingNode.pathname :\n            '/' + urlParsingNode.pathname\n        };\n      }\n\n      originURL = resolveURL(window.location.href);\n\n      /**\n    * Determine if a URL shares the same origin as the current location\n    *\n    * @param {String} requestURL The URL to test\n    * @returns {boolean} True if URL shares the same origin, otherwise false\n    */\n      return function isURLSameOrigin(requestURL) {\n        var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n        return (parsed.protocol === originURL.protocol &&\n            parsed.host === originURL.host);\n      };\n    })() :\n\n  // Non standard browser envs (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return function isURLSameOrigin() {\n        return true;\n      };\n    })()\n);\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs support document.cookie\n    (function standardBrowserEnv() {\n      return {\n        write: function write(name, value, expires, path, domain, secure) {\n          var cookie = [];\n          cookie.push(name + '=' + encodeURIComponent(value));\n\n          if (utils.isNumber(expires)) {\n            cookie.push('expires=' + new Date(expires).toGMTString());\n          }\n\n          if (utils.isString(path)) {\n            cookie.push('path=' + path);\n          }\n\n          if (utils.isString(domain)) {\n            cookie.push('domain=' + domain);\n          }\n\n          if (secure === true) {\n            cookie.push('secure');\n          }\n\n          document.cookie = cookie.join('; ');\n        },\n\n        read: function read(name) {\n          var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n          return (match ? decodeURIComponent(match[3]) : null);\n        },\n\n        remove: function remove(name) {\n          this.write(name, '', Date.now() - 86400000);\n        }\n      };\n    })() :\n\n  // Non standard browser env (web workers, react-native) lack needed support.\n    (function nonStandardBrowserEnv() {\n      return {\n        write: function write() {},\n        read: function read() { return null; },\n        remove: function remove() {}\n      };\n    })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n};\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n  if (typeof executor !== 'function') {\n    throw new TypeError('executor must be a function.');\n  }\n\n  var resolvePromise;\n  this.promise = new Promise(function promiseExecutor(resolve) {\n    resolvePromise = resolve;\n  });\n\n  var token = this;\n  executor(function cancel(message) {\n    if (token.reason) {\n      // Cancellation has already been requested\n      return;\n    }\n\n    token.reason = new Cancel(message);\n    resolvePromise(token.reason);\n  });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n  if (this.reason) {\n    throw this.reason;\n  }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n  var cancel;\n  var token = new CancelToken(function executor(c) {\n    cancel = c;\n  });\n  return {\n    token: token,\n    cancel: cancel\n  };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n};\n","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n/**\n * Only returns the value if it acts like a Promise, i.e. has a \"then\" function,\n * otherwise returns void.\n */\nexport default function getPromise(value) {\n  if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value !== null && typeof value.then === 'function') {\n    return value;\n  }\n}","\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar PubSub_1 = require(\"./PubSub\");\nexports.PubSubClass = PubSub_1.default;\nvar core_1 = require(\"@aws-amplify/core\");\nvar logger = new core_1.ConsoleLogger('PubSub');\nvar _instance = null;\nif (!_instance) {\n    logger.debug('Create PubSub Instance');\n    _instance = new PubSub_1.default(null);\n}\nvar PubSub = _instance;\ncore_1.default.register(PubSub);\nexports.default = PubSub;\n__export(require(\"./Providers/AWSIotProvider\"));\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\n// import '../Common/Polyfills';\nvar Observable = require(\"zen-observable\");\nvar core_1 = require(\"@aws-amplify/core\");\nvar constants_1 = require(\"@aws-amplify/core/lib/constants\");\nvar Providers_1 = require(\"./Providers\");\nvar logger = new core_1.ConsoleLogger('PubSub');\nvar PubSub = /** @class */ (function () {\n    /**\n     * Initialize PubSub with AWS configurations\n     *\n     * @param {PubSubOptions} options - Configuration object for PubSub\n     */\n    function PubSub(options) {\n        this._options = options;\n        logger.debug('PubSub Options', this._options);\n        this._pluggables = [];\n        this.subscribe = this.subscribe.bind(this);\n    }\n    Object.defineProperty(PubSub.prototype, \"awsAppSyncProvider\", {\n        /**\n         * Lazy instantiate awsAppSyncProvider when it is required by the API category\n         */\n        get: function () {\n            if (!this._awsAppSyncProvider) {\n                this._awsAppSyncProvider = new Providers_1.AWSAppSyncProvider();\n            }\n            return this._awsAppSyncProvider;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    PubSub.prototype.getModuleName = function () {\n        return 'PubSub';\n    };\n    /**\n     * Configure PubSub part with configurations\n     *\n     * @param {PubSubOptions} config - Configuration for PubSub\n     * @return {Object} - The current configuration\n     */\n    PubSub.prototype.configure = function (options) {\n        var _this = this;\n        var opt = options ? options.PubSub || options : {};\n        logger.debug('configure PubSub', { opt: opt });\n        this._options = Object.assign({}, this._options, opt);\n        this._pluggables.map(function (pluggable) { return pluggable.configure(_this._options); });\n        return this._options;\n    };\n    /**\n     * add plugin into Analytics category\n     * @param {Object} pluggable - an instance of the plugin\n     */\n    PubSub.prototype.addPluggable = function (pluggable) {\n        return __awaiter(this, void 0, void 0, function () {\n            var config;\n            return __generator(this, function (_a) {\n                if (pluggable && pluggable.getCategory() === 'PubSub') {\n                    this._pluggables.push(pluggable);\n                    config = pluggable.configure(this._options);\n                    return [2 /*return*/, config];\n                }\n                return [2 /*return*/];\n            });\n        });\n    };\n    PubSub.prototype.getProviderByName = function (providerName) {\n        if (providerName === constants_1.INTERNAL_AWS_APPSYNC_PUBSUB_PROVIDER) {\n            return this.awsAppSyncProvider;\n        }\n        return this._pluggables.find(function (pluggable) { return pluggable.getProviderName() === providerName; });\n    };\n    PubSub.prototype.getProviders = function (options) {\n        if (options === void 0) { options = {}; }\n        var providerName = options.provider;\n        if (!providerName) {\n            return this._pluggables;\n        }\n        var provider = this.getProviderByName(providerName);\n        if (!provider) {\n            throw new Error(\"Could not find provider named \" + providerName);\n        }\n        return [provider];\n    };\n    PubSub.prototype.publish = function (topics, msg, options) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                return [2 /*return*/, Promise.all(this.getProviders(options).map(function (provider) { return provider.publish(topics, msg, options); }))];\n            });\n        });\n    };\n    PubSub.prototype.subscribe = function (topics, options) {\n        logger.debug('subscribe options', options);\n        var providers = this.getProviders(options);\n        return new Observable(function (observer) {\n            var observables = providers.map(function (provider) { return ({\n                provider: provider,\n                observable: provider.subscribe(topics, options),\n            }); });\n            var subscriptions = observables.map(function (_a) {\n                var provider = _a.provider, observable = _a.observable;\n                return observable.subscribe({\n                    start: console.error,\n                    next: function (value) { return observer.next({ provider: provider, value: value }); },\n                    error: function (error) { return observer.error({ provider: provider, error: error }); },\n                });\n            });\n            return function () { return subscriptions.forEach(function (subscription) { return subscription.unsubscribe(); }); };\n        });\n    };\n    return PubSub;\n}());\nexports.default = PubSub;\n//# sourceMappingURL=PubSub.js.map","\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\n__export(require(\"./PubSubProvider\"));\n__export(require(\"./AWSAppSyncProvider\"));\n__export(require(\"./AWSIotProvider\"));\n__export(require(\"./MqttOverWSProvider\"));\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\n            t[p[i]] = s[p[i]];\n    return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Observable = require(\"zen-observable\");\nvar core_1 = require(\"@aws-amplify/core\");\nvar MqttOverWSProvider_1 = require(\"./MqttOverWSProvider\");\nvar logger = new core_1.ConsoleLogger('AWSAppSyncProvider');\nvar AWSAppSyncProvider = /** @class */ (function (_super) {\n    __extends(AWSAppSyncProvider, _super);\n    function AWSAppSyncProvider() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this._topicClient = new Map();\n        _this._topicAlias = new Map();\n        return _this;\n    }\n    Object.defineProperty(AWSAppSyncProvider.prototype, \"endpoint\", {\n        get: function () { throw new Error('Not supported'); },\n        enumerable: true,\n        configurable: true\n    });\n    AWSAppSyncProvider.prototype.getProviderName = function () { return 'AWSAppSyncProvider'; };\n    AWSAppSyncProvider.prototype.publish = function (topics, msg, options) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                throw new Error('Operation not supported');\n            });\n        });\n    };\n    AWSAppSyncProvider.prototype._cleanUp = function (clientId) {\n        var _this = this;\n        var topicsForClient = Array.from(this._topicClient.entries())\n            .filter(function (_a) {\n            var c = _a[1];\n            return c.clientId === clientId;\n        })\n            .map(function (_a) {\n            var t = _a[0];\n            return t;\n        });\n        topicsForClient.forEach(function (t) { return _this._cleanUpForTopic(t); });\n    };\n    AWSAppSyncProvider.prototype._cleanUpForTopic = function (topic) {\n        this._topicClient.delete(topic);\n        this._topicAlias.delete(topic);\n    };\n    AWSAppSyncProvider.prototype.onDisconnect = function (_a) {\n        var _this = this;\n        var clientId = _a.clientId, errorCode = _a.errorCode, args = __rest(_a, [\"clientId\", \"errorCode\"]);\n        if (errorCode !== 0) {\n            var topicsForClient = Array.from(this._topicClient.entries())\n                .filter(function (_a) {\n                var c = _a[1];\n                return c.clientId === clientId;\n            })\n                .map(function (_a) {\n                var t = _a[0];\n                return t;\n            });\n            topicsForClient.forEach(function (topic) {\n                if (_this._topicObservers.has(topic)) {\n                    _this._topicObservers.get(topic).forEach(function (obs) {\n                        if (!obs.closed) {\n                            obs.error(args);\n                        }\n                    });\n                    _this._topicObservers.delete(topic);\n                }\n            });\n            this._cleanUp(clientId);\n        }\n    };\n    AWSAppSyncProvider.prototype.disconnect = function (clientId) {\n        return __awaiter(this, void 0, void 0, function () {\n            var client;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.clientsQueue.get(clientId, function () { return null; })];\n                    case 1:\n                        client = _a.sent();\n                        return [4 /*yield*/, _super.prototype.disconnect.call(this, clientId)];\n                    case 2:\n                        _a.sent();\n                        this._cleanUp(clientId);\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    AWSAppSyncProvider.prototype.subscribe = function (topics, options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        var result = new Observable(function (observer) {\n            var targetTopics = [].concat(topics);\n            logger.debug('Subscribing to topic(s)', targetTopics.join(','));\n            (function () { return __awaiter(_this, void 0, void 0, function () {\n                var _a, mqttConnections, newSubscriptions, newAliases, map;\n                var _this = this;\n                return __generator(this, function (_b) {\n                    switch (_b.label) {\n                        case 0:\n                            // Add these topics to map\n                            targetTopics.forEach(function (t) {\n                                if (!_this._topicObservers.has(t)) {\n                                    _this._topicObservers.set(t, new Set());\n                                }\n                                _this._topicObservers.get(t).add(observer);\n                            });\n                            _a = options.mqttConnections, mqttConnections = _a === void 0 ? [] : _a, newSubscriptions = options.newSubscriptions;\n                            newAliases = Object.entries(newSubscriptions)\n                                .map(function (_a) {\n                                var alias = _a[0], v = _a[1];\n                                return [v.topic, alias];\n                            });\n                            // Merge new aliases with old ones\n                            this._topicAlias = new Map(Array.from(this._topicAlias.entries()).concat(newAliases));\n                            map = Object.entries(targetTopics.reduce(function (acc, elem) {\n                                var connectionInfoForTopic = mqttConnections.find(function (c) { return c.topics.indexOf(elem) > -1; });\n                                if (connectionInfoForTopic) {\n                                    var clientId = connectionInfoForTopic.client, url = connectionInfoForTopic.url;\n                                    if (!acc[clientId]) {\n                                        acc[clientId] = {\n                                            url: url,\n                                            topics: new Set(),\n                                        };\n                                    }\n                                    acc[clientId].topics.add(elem);\n                                }\n                                return acc;\n                            }, {}));\n                            // reconnect everything we have in the map\n                            return [4 /*yield*/, Promise.all(map.map(function (_a) {\n                                    var clientId = _a[0], _b = _a[1], url = _b.url, topics = _b.topics;\n                                    return __awaiter(_this, void 0, void 0, function () {\n                                        var client;\n                                        var _this = this;\n                                        return __generator(this, function (_c) {\n                                            switch (_c.label) {\n                                                case 0: return [4 /*yield*/, this.connect(clientId, {\n                                                        clientId: clientId,\n                                                        url: url,\n                                                    })];\n                                                case 1:\n                                                    client = _c.sent();\n                                                    // subscribe to all topics for this client\n                                                    // store topic-client mapping\n                                                    topics.forEach(function (topic) {\n                                                        if (client.isConnected()) {\n                                                            client.subscribe(topic);\n                                                            _this._topicClient.set(topic, client);\n                                                        }\n                                                    });\n                                                    return [2 /*return*/, client];\n                                            }\n                                        });\n                                    });\n                                }))];\n                        case 1:\n                            // reconnect everything we have in the map\n                            _b.sent();\n                            return [2 /*return*/];\n                    }\n                });\n            }); })();\n            return function () {\n                logger.debug('Unsubscribing from topic(s)', targetTopics.join(','));\n                targetTopics.forEach(function (t) {\n                    var client = _this._topicClient.get(t);\n                    if (client && client.isConnected()) {\n                        client.unsubscribe(t);\n                        _this._topicClient.delete(t);\n                        if (!Array.from(_this._topicClient.values()).some(function (c) { return c === client; })) {\n                            _this.disconnect(client.clientId);\n                        }\n                    }\n                    _this._topicObservers.delete(t);\n                });\n            };\n        });\n        return Observable.from(result).map(function (value) {\n            var topic = _this.getTopicForValue(value);\n            var alias = _this._topicAlias.get(topic);\n            value.data = Object.entries(value.data)\n                .reduce(function (obj, _a) {\n                var origKey = _a[0], val = _a[1];\n                return (obj[(alias || origKey)] = val, obj);\n            }, {});\n            return value;\n        });\n    };\n    return AWSAppSyncProvider;\n}(MqttOverWSProvider_1.MqttOverWSProvider));\nexports.AWSAppSyncProvider = AWSAppSyncProvider;\n//# sourceMappingURL=AWSAppSyncProvider.js.map","/*******************************************************************************\n * Copyright (c) 2013 IBM Corp.\n *\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * and Eclipse Distribution License v1.0 which accompany this distribution.\n *\n * The Eclipse Public License is available at\n *    http://www.eclipse.org/legal/epl-v10.html\n * and the Eclipse Distribution License is available at\n *   http://www.eclipse.org/org/documents/edl-v10.php.\n *\n * Contributors:\n *    Andrew Banks - initial API and implementation and initial documentation\n *******************************************************************************/\n\n\n// Only expose a single object name in the global namespace.\n// Everything must go through this module. Global Paho module\n// only has a single public function, client, which returns\n// a Paho client object given connection details.\n\n/**\n * Send and receive messages using web browsers.\n * <p>\n * This programming interface lets a JavaScript client application use the MQTT V3.1 or\n * V3.1.1 protocol to connect to an MQTT-supporting messaging server.\n *\n * The function supported includes:\n * <ol>\n * <li>Connecting to and disconnecting from a server. The server is identified by its host name and port number.\n * <li>Specifying options that relate to the communications link with the server,\n * for example the frequency of keep-alive heartbeats, and whether SSL/TLS is required.\n * <li>Subscribing to and receiving messages from MQTT Topics.\n * <li>Publishing messages to MQTT Topics.\n * </ol>\n * <p>\n * The API consists of two main objects:\n * <dl>\n * <dt><b>{@link Paho.Client}</b></dt>\n * <dd>This contains methods that provide the functionality of the API,\n * including provision of callbacks that notify the application when a message\n * arrives from or is delivered to the messaging server,\n * or when the status of its connection to the messaging server changes.</dd>\n * <dt><b>{@link Paho.Message}</b></dt>\n * <dd>This encapsulates the payload of the message along with various attributes\n * associated with its delivery, in particular the destination to which it has\n * been (or is about to be) sent.</dd>\n * </dl>\n * <p>\n * The programming interface validates parameters passed to it, and will throw\n * an Error containing an error message intended for developer use, if it detects\n * an error with any parameter.\n * <p>\n * Example:\n *\n * <code><pre>\n * client = new Paho.Client(location.hostname, Number(location.port), \"clientId\");\n * client.onConnectionLost = onConnectionLost;\n * client.onMessageArrived = onMessageArrived;\n * client.connect({onSuccess:onConnect});\n * \n * function onConnect() {\n *   // Once a connection has been made, make a subscription and send a message.\n *   console.log(\"onConnect\");\n *   client.subscribe(\"/World\");\n *   message = new Paho.Message(\"Hello\");\n *   message.destinationName = \"/World\";\n *   client.send(message);\n * };\n * function onConnectionLost(responseObject) {\n *   if (responseObject.errorCode !== 0)\n *  \tconsole.log(\"onConnectionLost:\"+responseObject.errorMessage);\n * \t };\n * function onMessageArrived(message) {\n *   console.log(\"onMessageArrived:\"+message.payloadString);\n *   client.disconnect();\n * };\n * </pre></code>\n * @namespace Paho\n */\n\n \n/* jshint shadow:true */\n(function ExportLibrary(root, factory) {\n\tif(typeof exports === \"object\" && typeof module === \"object\"){\n\t\tmodule.exports = factory();\n\t} else if (typeof define === \"function\" && define.amd){\n\t\tdefine(factory);\n\t} else if (typeof exports === \"object\"){\n\t\texports = factory();\n\t} else {\n\t\t//if (typeof root.Paho === \"undefined\"){\n\t\t//\troot.Paho = {};\n\t\t//}\n\t\troot.Paho = factory();\n\t}\n})(this, function LibraryFactory(){\n\n\n\tvar PahoMQTT = (function (global) {\n\n\t// Private variables below, these are only visible inside the function closure\n\t// which is used to define the module.\n\tvar version = \"@VERSION@-@BUILDLEVEL@\";\n\n\t/**\n\t * @private\n\t */\n\tvar localStorage = global.localStorage || (function () {\n\t\tvar data = {};\n\n\t\treturn {\n\t\t\tsetItem: function (key, item) { data[key] = item; },\n\t\t\tgetItem: function (key) { return data[key]; },\n\t\t\tremoveItem: function (key) { delete data[key]; },\n\t\t};\n\t})();\n\n\t\t/**\n\t * Unique message type identifiers, with associated\n\t * associated integer values.\n\t * @private\n\t */\n\t\tvar MESSAGE_TYPE = {\n\t\t\tCONNECT: 1,\n\t\t\tCONNACK: 2,\n\t\t\tPUBLISH: 3,\n\t\t\tPUBACK: 4,\n\t\t\tPUBREC: 5,\n\t\t\tPUBREL: 6,\n\t\t\tPUBCOMP: 7,\n\t\t\tSUBSCRIBE: 8,\n\t\t\tSUBACK: 9,\n\t\t\tUNSUBSCRIBE: 10,\n\t\t\tUNSUBACK: 11,\n\t\t\tPINGREQ: 12,\n\t\t\tPINGRESP: 13,\n\t\t\tDISCONNECT: 14\n\t\t};\n\n\t\t// Collection of utility methods used to simplify module code\n\t\t// and promote the DRY pattern.\n\n\t\t/**\n\t * Validate an object's parameter names to ensure they\n\t * match a list of expected variables name for this option\n\t * type. Used to ensure option object passed into the API don't\n\t * contain erroneous parameters.\n\t * @param {Object} obj - User options object\n\t * @param {Object} keys - valid keys and types that may exist in obj.\n\t * @throws {Error} Invalid option parameter found.\n\t * @private\n\t */\n\t\tvar validate = function(obj, keys) {\n\t\t\tfor (var key in obj) {\n\t\t\t\tif (obj.hasOwnProperty(key)) {\n\t\t\t\t\tif (keys.hasOwnProperty(key)) {\n\t\t\t\t\t\tif (typeof obj[key] !== keys[key])\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof obj[key], key]));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar errorStr = \"Unknown property, \" + key + \". Valid properties are:\";\n\t\t\t\t\t\tfor (var validKey in keys)\n\t\t\t\t\t\t\tif (keys.hasOwnProperty(validKey))\n\t\t\t\t\t\t\t\terrorStr = errorStr+\" \"+validKey;\n\t\t\t\t\t\tthrow new Error(errorStr);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t * Return a new function which runs the user function bound\n\t * to a fixed scope.\n\t * @param {function} User function\n\t * @param {object} Function scope\n\t * @return {function} User function bound to another scope\n\t * @private\n\t */\n\t\tvar scope = function (f, scope) {\n\t\t\treturn function () {\n\t\t\t\treturn f.apply(scope, arguments);\n\t\t\t};\n\t\t};\n\n\t\t/**\n\t * Unique message type identifiers, with associated\n\t * associated integer values.\n\t * @private\n\t */\n\t\tvar ERROR = {\n\t\t\tOK: {code:0, text:\"AMQJSC0000I OK.\"},\n\t\t\tCONNECT_TIMEOUT: {code:1, text:\"AMQJSC0001E Connect timed out.\"},\n\t\t\tSUBSCRIBE_TIMEOUT: {code:2, text:\"AMQJS0002E Subscribe timed out.\"},\n\t\t\tUNSUBSCRIBE_TIMEOUT: {code:3, text:\"AMQJS0003E Unsubscribe timed out.\"},\n\t\t\tPING_TIMEOUT: {code:4, text:\"AMQJS0004E Ping timed out.\"},\n\t\t\tINTERNAL_ERROR: {code:5, text:\"AMQJS0005E Internal error. Error Message: {0}, Stack trace: {1}\"},\n\t\t\tCONNACK_RETURNCODE: {code:6, text:\"AMQJS0006E Bad Connack return code:{0} {1}.\"},\n\t\t\tSOCKET_ERROR: {code:7, text:\"AMQJS0007E Socket error:{0}.\"},\n\t\t\tSOCKET_CLOSE: {code:8, text:\"AMQJS0008I Socket closed.\"},\n\t\t\tMALFORMED_UTF: {code:9, text:\"AMQJS0009E Malformed UTF data:{0} {1} {2}.\"},\n\t\t\tUNSUPPORTED: {code:10, text:\"AMQJS0010E {0} is not supported by this browser.\"},\n\t\t\tINVALID_STATE: {code:11, text:\"AMQJS0011E Invalid state {0}.\"},\n\t\t\tINVALID_TYPE: {code:12, text:\"AMQJS0012E Invalid type {0} for {1}.\"},\n\t\t\tINVALID_ARGUMENT: {code:13, text:\"AMQJS0013E Invalid argument {0} for {1}.\"},\n\t\t\tUNSUPPORTED_OPERATION: {code:14, text:\"AMQJS0014E Unsupported operation.\"},\n\t\t\tINVALID_STORED_DATA: {code:15, text:\"AMQJS0015E Invalid data in local storage key={0} value={1}.\"},\n\t\t\tINVALID_MQTT_MESSAGE_TYPE: {code:16, text:\"AMQJS0016E Invalid MQTT message type {0}.\"},\n\t\t\tMALFORMED_UNICODE: {code:17, text:\"AMQJS0017E Malformed Unicode string:{0} {1}.\"},\n\t\t\tBUFFER_FULL: {code:18, text:\"AMQJS0018E Message buffer is full, maximum buffer size: {0}.\"},\n\t\t};\n\n\t\t/** CONNACK RC Meaning. */\n\t\tvar CONNACK_RC = {\n\t\t\t0:\"Connection Accepted\",\n\t\t\t1:\"Connection Refused: unacceptable protocol version\",\n\t\t\t2:\"Connection Refused: identifier rejected\",\n\t\t\t3:\"Connection Refused: server unavailable\",\n\t\t\t4:\"Connection Refused: bad user name or password\",\n\t\t\t5:\"Connection Refused: not authorized\"\n\t\t};\n\n\t/**\n\t * Format an error message text.\n\t * @private\n\t * @param {error} ERROR value above.\n\t * @param {substitutions} [array] substituted into the text.\n\t * @return the text with the substitutions made.\n\t */\n\t\tvar format = function(error, substitutions) {\n\t\t\tvar text = error.text;\n\t\t\tif (substitutions) {\n\t\t\t\tvar field,start;\n\t\t\t\tfor (var i=0; i<substitutions.length; i++) {\n\t\t\t\t\tfield = \"{\"+i+\"}\";\n\t\t\t\t\tstart = text.indexOf(field);\n\t\t\t\t\tif(start > 0) {\n\t\t\t\t\t\tvar part1 = text.substring(0,start);\n\t\t\t\t\t\tvar part2 = text.substring(start+field.length);\n\t\t\t\t\t\ttext = part1+substitutions[i]+part2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn text;\n\t\t};\n\n\t\t//MQTT protocol and version          6    M    Q    I    s    d    p    3\n\t\tvar MqttProtoIdentifierv3 = [0x00,0x06,0x4d,0x51,0x49,0x73,0x64,0x70,0x03];\n\t\t//MQTT proto/version for 311         4    M    Q    T    T    4\n\t\tvar MqttProtoIdentifierv4 = [0x00,0x04,0x4d,0x51,0x54,0x54,0x04];\n\n\t\t/**\n\t * Construct an MQTT wire protocol message.\n\t * @param type MQTT packet type.\n\t * @param options optional wire message attributes.\n\t *\n\t * Optional properties\n\t *\n\t * messageIdentifier: message ID in the range [0..65535]\n\t * payloadMessage:\tApplication Message - PUBLISH only\n\t * connectStrings:\tarray of 0 or more Strings to be put into the CONNECT payload\n\t * topics:\t\t\tarray of strings (SUBSCRIBE, UNSUBSCRIBE)\n\t * requestQoS:\t\tarray of QoS values [0..2]\n\t *\n\t * \"Flag\" properties\n\t * cleanSession:\ttrue if present / false if absent (CONNECT)\n\t * willMessage:  \ttrue if present / false if absent (CONNECT)\n\t * isRetained:\t\ttrue if present / false if absent (CONNECT)\n\t * userName:\t\ttrue if present / false if absent (CONNECT)\n\t * password:\t\ttrue if present / false if absent (CONNECT)\n\t * keepAliveInterval:\tinteger [0..65535]  (CONNECT)\n\t *\n\t * @private\n\t * @ignore\n\t */\n\t\tvar WireMessage = function (type, options) {\n\t\t\tthis.type = type;\n\t\t\tfor (var name in options) {\n\t\t\t\tif (options.hasOwnProperty(name)) {\n\t\t\t\t\tthis[name] = options[name];\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tWireMessage.prototype.encode = function() {\n\t\t// Compute the first byte of the fixed header\n\t\t\tvar first = ((this.type & 0x0f) << 4);\n\n\t\t\t/*\n\t\t * Now calculate the length of the variable header + payload by adding up the lengths\n\t\t * of all the component parts\n\t\t */\n\n\t\t\tvar remLength = 0;\n\t\t\tvar topicStrLength = [];\n\t\t\tvar destinationNameLength = 0;\n\t\t\tvar willMessagePayloadBytes;\n\n\t\t\t// if the message contains a messageIdentifier then we need two bytes for that\n\t\t\tif (this.messageIdentifier !== undefined)\n\t\t\t\tremLength += 2;\n\n\t\t\tswitch(this.type) {\n\t\t\t// If this a Connect then we need to include 12 bytes for its header\n\t\t\tcase MESSAGE_TYPE.CONNECT:\n\t\t\t\tswitch(this.mqttVersion) {\n\t\t\t\tcase 3:\n\t\t\t\t\tremLength += MqttProtoIdentifierv3.length + 3;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\tremLength += MqttProtoIdentifierv4.length + 3;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tremLength += UTF8Length(this.clientId) + 2;\n\t\t\t\tif (this.willMessage !== undefined) {\n\t\t\t\t\tremLength += UTF8Length(this.willMessage.destinationName) + 2;\n\t\t\t\t\t// Will message is always a string, sent as UTF-8 characters with a preceding length.\n\t\t\t\t\twillMessagePayloadBytes = this.willMessage.payloadBytes;\n\t\t\t\t\tif (!(willMessagePayloadBytes instanceof Uint8Array))\n\t\t\t\t\t\twillMessagePayloadBytes = new Uint8Array(payloadBytes);\n\t\t\t\t\tremLength += willMessagePayloadBytes.byteLength +2;\n\t\t\t\t}\n\t\t\t\tif (this.userName !== undefined)\n\t\t\t\t\tremLength += UTF8Length(this.userName) + 2;\n\t\t\t\tif (this.password !== undefined)\n\t\t\t\t\tremLength += UTF8Length(this.password) + 2;\n\t\t\t\tbreak;\n\n\t\t\t// Subscribe, Unsubscribe can both contain topic strings\n\t\t\tcase MESSAGE_TYPE.SUBSCRIBE:\n\t\t\t\tfirst |= 0x02; // Qos = 1;\n\t\t\t\tfor ( var i = 0; i < this.topics.length; i++) {\n\t\t\t\t\ttopicStrLength[i] = UTF8Length(this.topics[i]);\n\t\t\t\t\tremLength += topicStrLength[i] + 2;\n\t\t\t\t}\n\t\t\t\tremLength += this.requestedQos.length; // 1 byte for each topic's Qos\n\t\t\t\t// QoS on Subscribe only\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.UNSUBSCRIBE:\n\t\t\t\tfirst |= 0x02; // Qos = 1;\n\t\t\t\tfor ( var i = 0; i < this.topics.length; i++) {\n\t\t\t\t\ttopicStrLength[i] = UTF8Length(this.topics[i]);\n\t\t\t\t\tremLength += topicStrLength[i] + 2;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.PUBREL:\n\t\t\t\tfirst |= 0x02; // Qos = 1;\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.PUBLISH:\n\t\t\t\tif (this.payloadMessage.duplicate) first |= 0x08;\n\t\t\t\tfirst  = first |= (this.payloadMessage.qos << 1);\n\t\t\t\tif (this.payloadMessage.retained) first |= 0x01;\n\t\t\t\tdestinationNameLength = UTF8Length(this.payloadMessage.destinationName);\n\t\t\t\tremLength += destinationNameLength + 2;\n\t\t\t\tvar payloadBytes = this.payloadMessage.payloadBytes;\n\t\t\t\tremLength += payloadBytes.byteLength;\n\t\t\t\tif (payloadBytes instanceof ArrayBuffer)\n\t\t\t\t\tpayloadBytes = new Uint8Array(payloadBytes);\n\t\t\t\telse if (!(payloadBytes instanceof Uint8Array))\n\t\t\t\t\tpayloadBytes = new Uint8Array(payloadBytes.buffer);\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.DISCONNECT:\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Now we can allocate a buffer for the message\n\n\t\t\tvar mbi = encodeMBI(remLength);  // Convert the length to MQTT MBI format\n\t\t\tvar pos = mbi.length + 1;        // Offset of start of variable header\n\t\t\tvar buffer = new ArrayBuffer(remLength + pos);\n\t\t\tvar byteStream = new Uint8Array(buffer);    // view it as a sequence of bytes\n\n\t\t\t//Write the fixed header into the buffer\n\t\t\tbyteStream[0] = first;\n\t\t\tbyteStream.set(mbi,1);\n\n\t\t\t// If this is a PUBLISH then the variable header starts with a topic\n\t\t\tif (this.type == MESSAGE_TYPE.PUBLISH)\n\t\t\t\tpos = writeString(this.payloadMessage.destinationName, destinationNameLength, byteStream, pos);\n\t\t\t// If this is a CONNECT then the variable header contains the protocol name/version, flags and keepalive time\n\n\t\t\telse if (this.type == MESSAGE_TYPE.CONNECT) {\n\t\t\t\tswitch (this.mqttVersion) {\n\t\t\t\tcase 3:\n\t\t\t\t\tbyteStream.set(MqttProtoIdentifierv3, pos);\n\t\t\t\t\tpos += MqttProtoIdentifierv3.length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\tbyteStream.set(MqttProtoIdentifierv4, pos);\n\t\t\t\t\tpos += MqttProtoIdentifierv4.length;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tvar connectFlags = 0;\n\t\t\t\tif (this.cleanSession)\n\t\t\t\t\tconnectFlags = 0x02;\n\t\t\t\tif (this.willMessage !== undefined ) {\n\t\t\t\t\tconnectFlags |= 0x04;\n\t\t\t\t\tconnectFlags |= (this.willMessage.qos<<3);\n\t\t\t\t\tif (this.willMessage.retained) {\n\t\t\t\t\t\tconnectFlags |= 0x20;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.userName !== undefined)\n\t\t\t\t\tconnectFlags |= 0x80;\n\t\t\t\tif (this.password !== undefined)\n\t\t\t\t\tconnectFlags |= 0x40;\n\t\t\t\tbyteStream[pos++] = connectFlags;\n\t\t\t\tpos = writeUint16 (this.keepAliveInterval, byteStream, pos);\n\t\t\t}\n\n\t\t\t// Output the messageIdentifier - if there is one\n\t\t\tif (this.messageIdentifier !== undefined)\n\t\t\t\tpos = writeUint16 (this.messageIdentifier, byteStream, pos);\n\n\t\t\tswitch(this.type) {\n\t\t\tcase MESSAGE_TYPE.CONNECT:\n\t\t\t\tpos = writeString(this.clientId, UTF8Length(this.clientId), byteStream, pos);\n\t\t\t\tif (this.willMessage !== undefined) {\n\t\t\t\t\tpos = writeString(this.willMessage.destinationName, UTF8Length(this.willMessage.destinationName), byteStream, pos);\n\t\t\t\t\tpos = writeUint16(willMessagePayloadBytes.byteLength, byteStream, pos);\n\t\t\t\t\tbyteStream.set(willMessagePayloadBytes, pos);\n\t\t\t\t\tpos += willMessagePayloadBytes.byteLength;\n\n\t\t\t\t}\n\t\t\t\tif (this.userName !== undefined)\n\t\t\t\t\tpos = writeString(this.userName, UTF8Length(this.userName), byteStream, pos);\n\t\t\t\tif (this.password !== undefined)\n\t\t\t\t\tpos = writeString(this.password, UTF8Length(this.password), byteStream, pos);\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.PUBLISH:\n\t\t\t\t// PUBLISH has a text or binary payload, if text do not add a 2 byte length field, just the UTF characters.\n\t\t\t\tbyteStream.set(payloadBytes, pos);\n\n\t\t\t\tbreak;\n\n\t\t\t\t//    \t    case MESSAGE_TYPE.PUBREC:\n\t\t\t\t//    \t    case MESSAGE_TYPE.PUBREL:\n\t\t\t\t//    \t    case MESSAGE_TYPE.PUBCOMP:\n\t\t\t\t//    \t    \tbreak;\n\n\t\t\tcase MESSAGE_TYPE.SUBSCRIBE:\n\t\t\t\t// SUBSCRIBE has a list of topic strings and request QoS\n\t\t\t\tfor (var i=0; i<this.topics.length; i++) {\n\t\t\t\t\tpos = writeString(this.topics[i], topicStrLength[i], byteStream, pos);\n\t\t\t\t\tbyteStream[pos++] = this.requestedQos[i];\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.UNSUBSCRIBE:\n\t\t\t\t// UNSUBSCRIBE has a list of topic strings\n\t\t\t\tfor (var i=0; i<this.topics.length; i++)\n\t\t\t\t\tpos = writeString(this.topics[i], topicStrLength[i], byteStream, pos);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\t// Do nothing.\n\t\t\t}\n\n\t\t\treturn buffer;\n\t\t};\n\n\t\tfunction decodeMessage(input,pos) {\n\t\t\tvar startingPos = pos;\n\t\t\tvar first = input[pos];\n\t\t\tvar type = first >> 4;\n\t\t\tvar messageInfo = first &= 0x0f;\n\t\t\tpos += 1;\n\n\n\t\t\t// Decode the remaining length (MBI format)\n\n\t\t\tvar digit;\n\t\t\tvar remLength = 0;\n\t\t\tvar multiplier = 1;\n\t\t\tdo {\n\t\t\t\tif (pos == input.length) {\n\t\t\t\t\treturn [null,startingPos];\n\t\t\t\t}\n\t\t\t\tdigit = input[pos++];\n\t\t\t\tremLength += ((digit & 0x7F) * multiplier);\n\t\t\t\tmultiplier *= 128;\n\t\t\t} while ((digit & 0x80) !== 0);\n\n\t\t\tvar endPos = pos+remLength;\n\t\t\tif (endPos > input.length) {\n\t\t\t\treturn [null,startingPos];\n\t\t\t}\n\n\t\t\tvar wireMessage = new WireMessage(type);\n\t\t\tswitch(type) {\n\t\t\tcase MESSAGE_TYPE.CONNACK:\n\t\t\t\tvar connectAcknowledgeFlags = input[pos++];\n\t\t\t\tif (connectAcknowledgeFlags & 0x01)\n\t\t\t\t\twireMessage.sessionPresent = true;\n\t\t\t\twireMessage.returnCode = input[pos++];\n\t\t\t\tbreak;\n\n\t\t\tcase MESSAGE_TYPE.PUBLISH:\n\t\t\t\tvar qos = (messageInfo >> 1) & 0x03;\n\n\t\t\t\tvar len = readUint16(input, pos);\n\t\t\t\tpos += 2;\n\t\t\t\tvar topicName = parseUTF8(input, pos, len);\n\t\t\t\tpos += len;\n\t\t\t\t// If QoS 1 or 2 there will be a messageIdentifier\n\t\t\t\tif (qos > 0) {\n\t\t\t\t\twireMessage.messageIdentifier = readUint16(input, pos);\n\t\t\t\t\tpos += 2;\n\t\t\t\t}\n\t\t\t\tvar message = new PahoMQTT.Message(input.subarray(pos, endPos));\n\t\t\t\tif ((messageInfo & 0x01) == 0x01)\n\t\t\t\t\tmessage.retained = true;\n\t\t\t\tif ((messageInfo & 0x08) == 0x08)\n\t\t\t\t\tmessage.duplicate =  true;\n\t\t\t\tmessage.qos = qos;\n\t\t\t\tmessage.destinationName = topicName;\n\t\t\t\twireMessage.payloadMessage = message;\n\t\t\t\tbreak;\n\n\t\t\tcase  MESSAGE_TYPE.PUBACK:\n\t\t\tcase  MESSAGE_TYPE.PUBREC:\n\t\t\tcase  MESSAGE_TYPE.PUBREL:\n\t\t\tcase  MESSAGE_TYPE.PUBCOMP:\n\t\t\tcase  MESSAGE_TYPE.UNSUBACK:\n\t\t\t\twireMessage.messageIdentifier = readUint16(input, pos);\n\t\t\t\tbreak;\n\n\t\t\tcase  MESSAGE_TYPE.SUBACK:\n\t\t\t\twireMessage.messageIdentifier = readUint16(input, pos);\n\t\t\t\tpos += 2;\n\t\t\t\twireMessage.returnCode = input.subarray(pos, endPos);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn [wireMessage,endPos];\n\t\t}\n\n\t\tfunction writeUint16(input, buffer, offset) {\n\t\t\tbuffer[offset++] = input >> 8;      //MSB\n\t\t\tbuffer[offset++] = input % 256;     //LSB\n\t\t\treturn offset;\n\t\t}\n\n\t\tfunction writeString(input, utf8Length, buffer, offset) {\n\t\t\toffset = writeUint16(utf8Length, buffer, offset);\n\t\t\tstringToUTF8(input, buffer, offset);\n\t\t\treturn offset + utf8Length;\n\t\t}\n\n\t\tfunction readUint16(buffer, offset) {\n\t\t\treturn 256*buffer[offset] + buffer[offset+1];\n\t\t}\n\n\t\t/**\n\t * Encodes an MQTT Multi-Byte Integer\n\t * @private\n\t */\n\t\tfunction encodeMBI(number) {\n\t\t\tvar output = new Array(1);\n\t\t\tvar numBytes = 0;\n\n\t\t\tdo {\n\t\t\t\tvar digit = number % 128;\n\t\t\t\tnumber = number >> 7;\n\t\t\t\tif (number > 0) {\n\t\t\t\t\tdigit |= 0x80;\n\t\t\t\t}\n\t\t\t\toutput[numBytes++] = digit;\n\t\t\t} while ( (number > 0) && (numBytes<4) );\n\n\t\t\treturn output;\n\t\t}\n\n\t\t/**\n\t * Takes a String and calculates its length in bytes when encoded in UTF8.\n\t * @private\n\t */\n\t\tfunction UTF8Length(input) {\n\t\t\tvar output = 0;\n\t\t\tfor (var i = 0; i<input.length; i++)\n\t\t\t{\n\t\t\t\tvar charCode = input.charCodeAt(i);\n\t\t\t\tif (charCode > 0x7FF)\n\t\t\t\t{\n\t\t\t\t\t// Surrogate pair means its a 4 byte character\n\t\t\t\t\tif (0xD800 <= charCode && charCode <= 0xDBFF)\n\t\t\t\t\t{\n\t\t\t\t\t\ti++;\n\t\t\t\t\t\toutput++;\n\t\t\t\t\t}\n\t\t\t\t\toutput +=3;\n\t\t\t\t}\n\t\t\t\telse if (charCode > 0x7F)\n\t\t\t\t\toutput +=2;\n\t\t\t\telse\n\t\t\t\t\toutput++;\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\n\t\t/**\n\t * Takes a String and writes it into an array as UTF8 encoded bytes.\n\t * @private\n\t */\n\t\tfunction stringToUTF8(input, output, start) {\n\t\t\tvar pos = start;\n\t\t\tfor (var i = 0; i<input.length; i++) {\n\t\t\t\tvar charCode = input.charCodeAt(i);\n\n\t\t\t\t// Check for a surrogate pair.\n\t\t\t\tif (0xD800 <= charCode && charCode <= 0xDBFF) {\n\t\t\t\t\tvar lowCharCode = input.charCodeAt(++i);\n\t\t\t\t\tif (isNaN(lowCharCode)) {\n\t\t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UNICODE, [charCode, lowCharCode]));\n\t\t\t\t\t}\n\t\t\t\t\tcharCode = ((charCode - 0xD800)<<10) + (lowCharCode - 0xDC00) + 0x10000;\n\n\t\t\t\t}\n\n\t\t\t\tif (charCode <= 0x7F) {\n\t\t\t\t\toutput[pos++] = charCode;\n\t\t\t\t} else if (charCode <= 0x7FF) {\n\t\t\t\t\toutput[pos++] = charCode>>6  & 0x1F | 0xC0;\n\t\t\t\t\toutput[pos++] = charCode     & 0x3F | 0x80;\n\t\t\t\t} else if (charCode <= 0xFFFF) {\n\t\t\t\t\toutput[pos++] = charCode>>12 & 0x0F | 0xE0;\n\t\t\t\t\toutput[pos++] = charCode>>6  & 0x3F | 0x80;\n\t\t\t\t\toutput[pos++] = charCode     & 0x3F | 0x80;\n\t\t\t\t} else {\n\t\t\t\t\toutput[pos++] = charCode>>18 & 0x07 | 0xF0;\n\t\t\t\t\toutput[pos++] = charCode>>12 & 0x3F | 0x80;\n\t\t\t\t\toutput[pos++] = charCode>>6  & 0x3F | 0x80;\n\t\t\t\t\toutput[pos++] = charCode     & 0x3F | 0x80;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\n\t\tfunction parseUTF8(input, offset, length) {\n\t\t\tvar output = \"\";\n\t\t\tvar utf16;\n\t\t\tvar pos = offset;\n\n\t\t\twhile (pos < offset+length)\n\t\t\t{\n\t\t\t\tvar byte1 = input[pos++];\n\t\t\t\tif (byte1 < 128)\n\t\t\t\t\tutf16 = byte1;\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tvar byte2 = input[pos++]-128;\n\t\t\t\t\tif (byte2 < 0)\n\t\t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16),\"\"]));\n\t\t\t\t\tif (byte1 < 0xE0)             // 2 byte character\n\t\t\t\t\t\tutf16 = 64*(byte1-0xC0) + byte2;\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tvar byte3 = input[pos++]-128;\n\t\t\t\t\t\tif (byte3 < 0)\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16), byte3.toString(16)]));\n\t\t\t\t\t\tif (byte1 < 0xF0)        // 3 byte character\n\t\t\t\t\t\t\tutf16 = 4096*(byte1-0xE0) + 64*byte2 + byte3;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvar byte4 = input[pos++]-128;\n\t\t\t\t\t\t\tif (byte4 < 0)\n\t\t\t\t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16), byte3.toString(16), byte4.toString(16)]));\n\t\t\t\t\t\t\tif (byte1 < 0xF8)        // 4 byte character\n\t\t\t\t\t\t\t\tutf16 = 262144*(byte1-0xF0) + 4096*byte2 + 64*byte3 + byte4;\n\t\t\t\t\t\t\telse                     // longer encodings are not supported\n\t\t\t\t\t\t\t\tthrow new Error(format(ERROR.MALFORMED_UTF, [byte1.toString(16), byte2.toString(16), byte3.toString(16), byte4.toString(16)]));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (utf16 > 0xFFFF)   // 4 byte character - express as a surrogate pair\n\t\t\t\t{\n\t\t\t\t\tutf16 -= 0x10000;\n\t\t\t\t\toutput += String.fromCharCode(0xD800 + (utf16 >> 10)); // lead character\n\t\t\t\t\tutf16 = 0xDC00 + (utf16 & 0x3FF);  // trail character\n\t\t\t\t}\n\t\t\t\toutput += String.fromCharCode(utf16);\n\t\t\t}\n\t\t\treturn output;\n\t\t}\n\n\t\t/**\n\t * Repeat keepalive requests, monitor responses.\n\t * @ignore\n\t */\n\t\tvar Pinger = function(client, keepAliveInterval) {\n\t\t\tthis._client = client;\n\t\t\tthis._keepAliveInterval = keepAliveInterval*1000;\n\t\t\tthis.isReset = false;\n\n\t\t\tvar pingReq = new WireMessage(MESSAGE_TYPE.PINGREQ).encode();\n\n\t\t\tvar doTimeout = function (pinger) {\n\t\t\t\treturn function () {\n\t\t\t\t\treturn doPing.apply(pinger);\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t/** @ignore */\n\t\t\tvar doPing = function() {\n\t\t\t\tif (!this.isReset) {\n\t\t\t\t\tthis._client._trace(\"Pinger.doPing\", \"Timed out\");\n\t\t\t\t\tthis._client._disconnected( ERROR.PING_TIMEOUT.code , format(ERROR.PING_TIMEOUT));\n\t\t\t\t} else {\n\t\t\t\t\tthis.isReset = false;\n\t\t\t\t\tthis._client._trace(\"Pinger.doPing\", \"send PINGREQ\");\n\t\t\t\t\tthis._client.socket.send(pingReq);\n\t\t\t\t\tthis.timeout = setTimeout(doTimeout(this), this._keepAliveInterval);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis.reset = function() {\n\t\t\t\tthis.isReset = true;\n\t\t\t\tclearTimeout(this.timeout);\n\t\t\t\tif (this._keepAliveInterval > 0)\n\t\t\t\t\tthis.timeout = setTimeout(doTimeout(this), this._keepAliveInterval);\n\t\t\t};\n\n\t\t\tthis.cancel = function() {\n\t\t\t\tclearTimeout(this.timeout);\n\t\t\t};\n\t\t};\n\n\t\t/**\n\t * Monitor request completion.\n\t * @ignore\n\t */\n\t\tvar Timeout = function(client, timeoutSeconds, action, args) {\n\t\t\tif (!timeoutSeconds)\n\t\t\t\ttimeoutSeconds = 30;\n\n\t\t\tvar doTimeout = function (action, client, args) {\n\t\t\t\treturn function () {\n\t\t\t\t\treturn action.apply(client, args);\n\t\t\t\t};\n\t\t\t};\n\t\t\tthis.timeout = setTimeout(doTimeout(action, client, args), timeoutSeconds * 1000);\n\n\t\t\tthis.cancel = function() {\n\t\t\t\tclearTimeout(this.timeout);\n\t\t\t};\n\t\t};\n\n\t/**\n\t * Internal implementation of the Websockets MQTT V3.1 client.\n\t *\n\t * @name Paho.ClientImpl @constructor\n\t * @param {String} host the DNS nameof the webSocket host.\n\t * @param {Number} port the port number for that host.\n\t * @param {String} clientId the MQ client identifier.\n\t */\n\t\tvar ClientImpl = function (uri, host, port, path, clientId) {\n\t\t// Check dependencies are satisfied in this browser.\n\t\t\tif (!(\"WebSocket\" in global && global.WebSocket !== null)) {\n\t\t\t\tthrow new Error(format(ERROR.UNSUPPORTED, [\"WebSocket\"]));\n\t\t\t}\n\t\t\tif (!(\"ArrayBuffer\" in global && global.ArrayBuffer !== null)) {\n\t\t\t\tthrow new Error(format(ERROR.UNSUPPORTED, [\"ArrayBuffer\"]));\n\t\t\t}\n\t\t\tthis._trace(\"Paho.Client\", uri, host, port, path, clientId);\n\n\t\t\tthis.host = host;\n\t\t\tthis.port = port;\n\t\t\tthis.path = path;\n\t\t\tthis.uri = uri;\n\t\t\tthis.clientId = clientId;\n\t\t\tthis._wsuri = null;\n\n\t\t\t// Local storagekeys are qualified with the following string.\n\t\t\t// The conditional inclusion of path in the key is for backward\n\t\t\t// compatibility to when the path was not configurable and assumed to\n\t\t\t// be /mqtt\n\t\t\tthis._localKey=host+\":\"+port+(path!=\"/mqtt\"?\":\"+path:\"\")+\":\"+clientId+\":\";\n\n\t\t\t// Create private instance-only message queue\n\t\t\t// Internal queue of messages to be sent, in sending order.\n\t\t\tthis._msg_queue = [];\n\t\t\tthis._buffered_msg_queue = [];\n\n\t\t\t// Messages we have sent and are expecting a response for, indexed by their respective message ids.\n\t\t\tthis._sentMessages = {};\n\n\t\t\t// Messages we have received and acknowleged and are expecting a confirm message for\n\t\t\t// indexed by their respective message ids.\n\t\t\tthis._receivedMessages = {};\n\n\t\t\t// Internal list of callbacks to be executed when messages\n\t\t\t// have been successfully sent over web socket, e.g. disconnect\n\t\t\t// when it doesn't have to wait for ACK, just message is dispatched.\n\t\t\tthis._notify_msg_sent = {};\n\n\t\t\t// Unique identifier for SEND messages, incrementing\n\t\t\t// counter as messages are sent.\n\t\t\tthis._message_identifier = 1;\n\n\t\t\t// Used to determine the transmission sequence of stored sent messages.\n\t\t\tthis._sequence = 0;\n\n\n\t\t\t// Load the local state, if any, from the saved version, only restore state relevant to this client.\n\t\t\tfor (var key in localStorage)\n\t\t\t\tif (   key.indexOf(\"Sent:\"+this._localKey) === 0 || key.indexOf(\"Received:\"+this._localKey) === 0)\n\t\t\t\t\tthis.restore(key);\n\t\t};\n\n\t\t// Messaging Client public instance members.\n\t\tClientImpl.prototype.host = null;\n\t\tClientImpl.prototype.port = null;\n\t\tClientImpl.prototype.path = null;\n\t\tClientImpl.prototype.uri = null;\n\t\tClientImpl.prototype.clientId = null;\n\n\t\t// Messaging Client private instance members.\n\t\tClientImpl.prototype.socket = null;\n\t\t/* true once we have received an acknowledgement to a CONNECT packet. */\n\t\tClientImpl.prototype.connected = false;\n\t\t/* The largest message identifier allowed, may not be larger than 2**16 but\n\t\t * if set smaller reduces the maximum number of outbound messages allowed.\n\t\t */\n\t\tClientImpl.prototype.maxMessageIdentifier = 65536;\n\t\tClientImpl.prototype.connectOptions = null;\n\t\tClientImpl.prototype.hostIndex = null;\n\t\tClientImpl.prototype.onConnected = null;\n\t\tClientImpl.prototype.onConnectionLost = null;\n\t\tClientImpl.prototype.onMessageDelivered = null;\n\t\tClientImpl.prototype.onMessageArrived = null;\n\t\tClientImpl.prototype.traceFunction = null;\n\t\tClientImpl.prototype._msg_queue = null;\n\t\tClientImpl.prototype._buffered_msg_queue = null;\n\t\tClientImpl.prototype._connectTimeout = null;\n\t\t/* The sendPinger monitors how long we allow before we send data to prove to the server that we are alive. */\n\t\tClientImpl.prototype.sendPinger = null;\n\t\t/* The receivePinger monitors how long we allow before we require evidence that the server is alive. */\n\t\tClientImpl.prototype.receivePinger = null;\n\t\tClientImpl.prototype._reconnectInterval = 1; // Reconnect Delay, starts at 1 second\n\t\tClientImpl.prototype._reconnecting = false;\n\t\tClientImpl.prototype._reconnectTimeout = null;\n\t\tClientImpl.prototype.disconnectedPublishing = false;\n\t\tClientImpl.prototype.disconnectedBufferSize = 5000;\n\n\t\tClientImpl.prototype.receiveBuffer = null;\n\n\t\tClientImpl.prototype._traceBuffer = null;\n\t\tClientImpl.prototype._MAX_TRACE_ENTRIES = 100;\n\n\t\tClientImpl.prototype.connect = function (connectOptions) {\n\t\t\tvar connectOptionsMasked = this._traceMask(connectOptions, \"password\");\n\t\t\tthis._trace(\"Client.connect\", connectOptionsMasked, this.socket, this.connected);\n\n\t\t\tif (this.connected)\n\t\t\t\tthrow new Error(format(ERROR.INVALID_STATE, [\"already connected\"]));\n\t\t\tif (this.socket)\n\t\t\t\tthrow new Error(format(ERROR.INVALID_STATE, [\"already connected\"]));\n\n\t\t\tif (this._reconnecting) {\n\t\t\t// connect() function is called while reconnect is in progress.\n\t\t\t// Terminate the auto reconnect process to use new connect options.\n\t\t\t\tthis._reconnectTimeout.cancel();\n\t\t\t\tthis._reconnectTimeout = null;\n\t\t\t\tthis._reconnecting = false;\n\t\t\t}\n\n\t\t\tthis.connectOptions = connectOptions;\n\t\t\tthis._reconnectInterval = 1;\n\t\t\tthis._reconnecting = false;\n\t\t\tif (connectOptions.uris) {\n\t\t\t\tthis.hostIndex = 0;\n\t\t\t\tthis._doConnect(connectOptions.uris[0]);\n\t\t\t} else {\n\t\t\t\tthis._doConnect(this.uri);\n\t\t\t}\n\n\t\t};\n\n\t\tClientImpl.prototype.subscribe = function (filter, subscribeOptions) {\n\t\t\tthis._trace(\"Client.subscribe\", filter, subscribeOptions);\n\n\t\t\tif (!this.connected)\n\t\t\t\tthrow new Error(format(ERROR.INVALID_STATE, [\"not connected\"]));\n\n\t\t\tvar wireMessage = new WireMessage(MESSAGE_TYPE.SUBSCRIBE);\n\t\t\twireMessage.topics=[filter];\n\t\t\tif (subscribeOptions.qos !== undefined)\n\t\t\t\twireMessage.requestedQos = [subscribeOptions.qos];\n\t\t\telse\n\t\t\t\twireMessage.requestedQos = [0];\n\n\t\t\tif (subscribeOptions.onSuccess) {\n\t\t\t\twireMessage.onSuccess = function(grantedQos) {subscribeOptions.onSuccess({invocationContext:subscribeOptions.invocationContext,grantedQos:grantedQos});};\n\t\t\t}\n\n\t\t\tif (subscribeOptions.onFailure) {\n\t\t\t\twireMessage.onFailure = function(errorCode) {subscribeOptions.onFailure({invocationContext:subscribeOptions.invocationContext,errorCode:errorCode, errorMessage:format(errorCode)});};\n\t\t\t}\n\n\t\t\tif (subscribeOptions.timeout) {\n\t\t\t\twireMessage.timeOut = new Timeout(this, subscribeOptions.timeout, subscribeOptions.onFailure,\n\t\t\t\t\t[{invocationContext:subscribeOptions.invocationContext,\n\t\t\t\t\t\terrorCode:ERROR.SUBSCRIBE_TIMEOUT.code,\n\t\t\t\t\t\terrorMessage:format(ERROR.SUBSCRIBE_TIMEOUT)}]);\n\t\t\t}\n\n\t\t\t// All subscriptions return a SUBACK.\n\t\t\tthis._requires_ack(wireMessage);\n\t\t\tthis._schedule_message(wireMessage);\n\t\t};\n\n\t\t/** @ignore */\n\t\tClientImpl.prototype.unsubscribe = function(filter, unsubscribeOptions) {\n\t\t\tthis._trace(\"Client.unsubscribe\", filter, unsubscribeOptions);\n\n\t\t\tif (!this.connected)\n\t\t\t\tthrow new Error(format(ERROR.INVALID_STATE, [\"not connected\"]));\n\n\t\t\tvar wireMessage = new WireMessage(MESSAGE_TYPE.UNSUBSCRIBE);\n\t\t\twireMessage.topics = [filter];\n\n\t\t\tif (unsubscribeOptions.onSuccess) {\n\t\t\t\twireMessage.callback = function() {unsubscribeOptions.onSuccess({invocationContext:unsubscribeOptions.invocationContext});};\n\t\t\t}\n\t\t\tif (unsubscribeOptions.timeout) {\n\t\t\t\twireMessage.timeOut = new Timeout(this, unsubscribeOptions.timeout, unsubscribeOptions.onFailure,\n\t\t\t\t\t[{invocationContext:unsubscribeOptions.invocationContext,\n\t\t\t\t\t\terrorCode:ERROR.UNSUBSCRIBE_TIMEOUT.code,\n\t\t\t\t\t\terrorMessage:format(ERROR.UNSUBSCRIBE_TIMEOUT)}]);\n\t\t\t}\n\n\t\t\t// All unsubscribes return a SUBACK.\n\t\t\tthis._requires_ack(wireMessage);\n\t\t\tthis._schedule_message(wireMessage);\n\t\t};\n\n\t\tClientImpl.prototype.send = function (message) {\n\t\t\tthis._trace(\"Client.send\", message);\n\n\t\t\tvar wireMessage = new WireMessage(MESSAGE_TYPE.PUBLISH);\n\t\t\twireMessage.payloadMessage = message;\n\n\t\t\tif (this.connected) {\n\t\t\t// Mark qos 1 & 2 message as \"ACK required\"\n\t\t\t// For qos 0 message, invoke onMessageDelivered callback if there is one.\n\t\t\t// Then schedule the message.\n\t\t\t\tif (message.qos > 0) {\n\t\t\t\t\tthis._requires_ack(wireMessage);\n\t\t\t\t} else if (this.onMessageDelivered) {\n\t\t\t\t\tthis._notify_msg_sent[wireMessage] = this.onMessageDelivered(wireMessage.payloadMessage);\n\t\t\t\t}\n\t\t\t\tthis._schedule_message(wireMessage);\n\t\t\t} else {\n\t\t\t// Currently disconnected, will not schedule this message\n\t\t\t// Check if reconnecting is in progress and disconnected publish is enabled.\n\t\t\t\tif (this._reconnecting && this.disconnectedPublishing) {\n\t\t\t\t// Check the limit which include the \"required ACK\" messages\n\t\t\t\t\tvar messageCount = Object.keys(this._sentMessages).length + this._buffered_msg_queue.length;\n\t\t\t\t\tif (messageCount > this.disconnectedBufferSize) {\n\t\t\t\t\t\tthrow new Error(format(ERROR.BUFFER_FULL, [this.disconnectedBufferSize]));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (message.qos > 0) {\n\t\t\t\t\t\t// Mark this message as \"ACK required\"\n\t\t\t\t\t\t\tthis._requires_ack(wireMessage);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\twireMessage.sequence = ++this._sequence;\n\t\t\t\t\t\t\t// Add messages in fifo order to array, by adding to start\n\t\t\t\t\t\t\tthis._buffered_msg_queue.unshift(wireMessage);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(format(ERROR.INVALID_STATE, [\"not connected\"]));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tClientImpl.prototype.disconnect = function () {\n\t\t\tthis._trace(\"Client.disconnect\");\n\n\t\t\tif (this._reconnecting) {\n\t\t\t// disconnect() function is called while reconnect is in progress.\n\t\t\t// Terminate the auto reconnect process.\n\t\t\t\tthis._reconnectTimeout.cancel();\n\t\t\t\tthis._reconnectTimeout = null;\n\t\t\t\tthis._reconnecting = false;\n\t\t\t}\n\n\t\t\tif (!this.socket)\n\t\t\t\tthrow new Error(format(ERROR.INVALID_STATE, [\"not connecting or connected\"]));\n\n\t\t\tvar wireMessage = new WireMessage(MESSAGE_TYPE.DISCONNECT);\n\n\t\t\t// Run the disconnected call back as soon as the message has been sent,\n\t\t\t// in case of a failure later on in the disconnect processing.\n\t\t\t// as a consequence, the _disconected call back may be run several times.\n\t\t\tthis._notify_msg_sent[wireMessage] = scope(this._disconnected, this);\n\n\t\t\tthis._schedule_message(wireMessage);\n\t\t};\n\n\t\tClientImpl.prototype.getTraceLog = function () {\n\t\t\tif ( this._traceBuffer !== null ) {\n\t\t\t\tthis._trace(\"Client.getTraceLog\", new Date());\n\t\t\t\tthis._trace(\"Client.getTraceLog in flight messages\", this._sentMessages.length);\n\t\t\t\tfor (var key in this._sentMessages)\n\t\t\t\t\tthis._trace(\"_sentMessages \",key, this._sentMessages[key]);\n\t\t\t\tfor (var key in this._receivedMessages)\n\t\t\t\t\tthis._trace(\"_receivedMessages \",key, this._receivedMessages[key]);\n\n\t\t\t\treturn this._traceBuffer;\n\t\t\t}\n\t\t};\n\n\t\tClientImpl.prototype.startTrace = function () {\n\t\t\tif ( this._traceBuffer === null ) {\n\t\t\t\tthis._traceBuffer = [];\n\t\t\t}\n\t\t\tthis._trace(\"Client.startTrace\", new Date(), version);\n\t\t};\n\n\t\tClientImpl.prototype.stopTrace = function () {\n\t\t\tdelete this._traceBuffer;\n\t\t};\n\n\t\tClientImpl.prototype._doConnect = function (wsurl) {\n\t\t// When the socket is open, this client will send the CONNECT WireMessage using the saved parameters.\n\t\t\tif (this.connectOptions.useSSL) {\n\t\t\t\tvar uriParts = wsurl.split(\":\");\n\t\t\t\turiParts[0] = \"wss\";\n\t\t\t\twsurl = uriParts.join(\":\");\n\t\t\t}\n\t\t\tthis._wsuri = wsurl;\n\t\t\tthis.connected = false;\n\n\n\n\t\t\tif (this.connectOptions.mqttVersion < 4) {\n\t\t\t\tthis.socket = new WebSocket(wsurl, [\"mqttv3.1\"]);\n\t\t\t} else {\n\t\t\t\tthis.socket = new WebSocket(wsurl, [\"mqtt\"]);\n\t\t\t}\n\t\t\tthis.socket.binaryType = \"arraybuffer\";\n\t\t\tthis.socket.onopen = scope(this._on_socket_open, this);\n\t\t\tthis.socket.onmessage = scope(this._on_socket_message, this);\n\t\t\tthis.socket.onerror = scope(this._on_socket_error, this);\n\t\t\tthis.socket.onclose = scope(this._on_socket_close, this);\n\n\t\t\tthis.sendPinger = new Pinger(this, this.connectOptions.keepAliveInterval);\n\t\t\tthis.receivePinger = new Pinger(this, this.connectOptions.keepAliveInterval);\n\t\t\tif (this._connectTimeout) {\n\t\t\t\tthis._connectTimeout.cancel();\n\t\t\t\tthis._connectTimeout = null;\n\t\t\t}\n\t\t\tthis._connectTimeout = new Timeout(this, this.connectOptions.timeout, this._disconnected,  [ERROR.CONNECT_TIMEOUT.code, format(ERROR.CONNECT_TIMEOUT)]);\n\t\t};\n\n\n\t\t// Schedule a new message to be sent over the WebSockets\n\t\t// connection. CONNECT messages cause WebSocket connection\n\t\t// to be started. All other messages are queued internally\n\t\t// until this has happened. When WS connection starts, process\n\t\t// all outstanding messages.\n\t\tClientImpl.prototype._schedule_message = function (message) {\n\t\t\t// Add messages in fifo order to array, by adding to start\n\t\t\tthis._msg_queue.unshift(message);\n\t\t\t// Process outstanding messages in the queue if we have an  open socket, and have received CONNACK.\n\t\t\tif (this.connected) {\n\t\t\t\tthis._process_queue();\n\t\t\t}\n\t\t};\n\n\t\tClientImpl.prototype.store = function(prefix, wireMessage) {\n\t\t\tvar storedMessage = {type:wireMessage.type, messageIdentifier:wireMessage.messageIdentifier, version:1};\n\n\t\t\tswitch(wireMessage.type) {\n\t\t\tcase MESSAGE_TYPE.PUBLISH:\n\t\t\t\tif(wireMessage.pubRecReceived)\n\t\t\t\t\tstoredMessage.pubRecReceived = true;\n\n\t\t\t\t// Convert the payload to a hex string.\n\t\t\t\tstoredMessage.payloadMessage = {};\n\t\t\t\tvar hex = \"\";\n\t\t\t\tvar messageBytes = wireMessage.payloadMessage.payloadBytes;\n\t\t\t\tfor (var i=0; i<messageBytes.length; i++) {\n\t\t\t\t\tif (messageBytes[i] <= 0xF)\n\t\t\t\t\t\thex = hex+\"0\"+messageBytes[i].toString(16);\n\t\t\t\t\telse\n\t\t\t\t\t\thex = hex+messageBytes[i].toString(16);\n\t\t\t\t}\n\t\t\t\tstoredMessage.payloadMessage.payloadHex = hex;\n\n\t\t\t\tstoredMessage.payloadMessage.qos = wireMessage.payloadMessage.qos;\n\t\t\t\tstoredMessage.payloadMessage.destinationName = wireMessage.payloadMessage.destinationName;\n\t\t\t\tif (wireMessage.payloadMessage.duplicate)\n\t\t\t\t\tstoredMessage.payloadMessage.duplicate = true;\n\t\t\t\tif (wireMessage.payloadMessage.retained)\n\t\t\t\t\tstoredMessage.payloadMessage.retained = true;\n\n\t\t\t\t// Add a sequence number to sent messages.\n\t\t\t\tif ( prefix.indexOf(\"Sent:\") === 0 ) {\n\t\t\t\t\tif ( wireMessage.sequence === undefined )\n\t\t\t\t\t\twireMessage.sequence = ++this._sequence;\n\t\t\t\t\tstoredMessage.sequence = wireMessage.sequence;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow Error(format(ERROR.INVALID_STORED_DATA, [prefix+this._localKey+wireMessage.messageIdentifier, storedMessage]));\n\t\t\t}\n\t\t\tlocalStorage.setItem(prefix+this._localKey+wireMessage.messageIdentifier, JSON.stringify(storedMessage));\n\t\t};\n\n\t\tClientImpl.prototype.restore = function(key) {\n\t\t\tvar value = localStorage.getItem(key);\n\t\t\tvar storedMessage = JSON.parse(value);\n\n\t\t\tvar wireMessage = new WireMessage(storedMessage.type, storedMessage);\n\n\t\t\tswitch(storedMessage.type) {\n\t\t\tcase MESSAGE_TYPE.PUBLISH:\n\t\t\t\t// Replace the payload message with a Message object.\n\t\t\t\tvar hex = storedMessage.payloadMessage.payloadHex;\n\t\t\t\tvar buffer = new ArrayBuffer((hex.length)/2);\n\t\t\t\tvar byteStream = new Uint8Array(buffer);\n\t\t\t\tvar i = 0;\n\t\t\t\twhile (hex.length >= 2) {\n\t\t\t\t\tvar x = parseInt(hex.substring(0, 2), 16);\n\t\t\t\t\thex = hex.substring(2, hex.length);\n\t\t\t\t\tbyteStream[i++] = x;\n\t\t\t\t}\n\t\t\t\tvar payloadMessage = new PahoMQTT.Message(byteStream);\n\t\t\t\tpayloadMessage.qos = storedMessage.payloadMessage.qos;\n\t\t\t\tpayloadMessage.destinationName = storedMessage.payloadMessage.destinationName;\n\t\t\t\tif (storedMessage.payloadMessage.duplicate)\n\t\t\t\t\tpayloadMessage.duplicate = true;\n\t\t\t\tif (storedMessage.payloadMessage.retained)\n\t\t\t\t\tpayloadMessage.retained = true;\n\t\t\t\twireMessage.payloadMessage = payloadMessage;\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow Error(format(ERROR.INVALID_STORED_DATA, [key, value]));\n\t\t\t}\n\n\t\t\tif (key.indexOf(\"Sent:\"+this._localKey) === 0) {\n\t\t\t\twireMessage.payloadMessage.duplicate = true;\n\t\t\t\tthis._sentMessages[wireMessage.messageIdentifier] = wireMessage;\n\t\t\t} else if (key.indexOf(\"Received:\"+this._localKey) === 0) {\n\t\t\t\tthis._receivedMessages[wireMessage.messageIdentifier] = wireMessage;\n\t\t\t}\n\t\t};\n\n\t\tClientImpl.prototype._process_queue = function () {\n\t\t\tvar message = null;\n\n\t\t\t// Send all queued messages down socket connection\n\t\t\twhile ((message = this._msg_queue.pop())) {\n\t\t\t\tthis._socket_send(message);\n\t\t\t\t// Notify listeners that message was successfully sent\n\t\t\t\tif (this._notify_msg_sent[message]) {\n\t\t\t\t\tthis._notify_msg_sent[message]();\n\t\t\t\t\tdelete this._notify_msg_sent[message];\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t * Expect an ACK response for this message. Add message to the set of in progress\n\t * messages and set an unused identifier in this message.\n\t * @ignore\n\t */\n\t\tClientImpl.prototype._requires_ack = function (wireMessage) {\n\t\t\tvar messageCount = Object.keys(this._sentMessages).length;\n\t\t\tif (messageCount > this.maxMessageIdentifier)\n\t\t\t\tthrow Error (\"Too many messages:\"+messageCount);\n\n\t\t\twhile(this._sentMessages[this._message_identifier] !== undefined) {\n\t\t\t\tthis._message_identifier++;\n\t\t\t}\n\t\t\twireMessage.messageIdentifier = this._message_identifier;\n\t\t\tthis._sentMessages[wireMessage.messageIdentifier] = wireMessage;\n\t\t\tif (wireMessage.type === MESSAGE_TYPE.PUBLISH) {\n\t\t\t\tthis.store(\"Sent:\", wireMessage);\n\t\t\t}\n\t\t\tif (this._message_identifier === this.maxMessageIdentifier) {\n\t\t\t\tthis._message_identifier = 1;\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t * Called when the underlying websocket has been opened.\n\t * @ignore\n\t */\n\t\tClientImpl.prototype._on_socket_open = function () {\n\t\t// Create the CONNECT message object.\n\t\t\tvar wireMessage = new WireMessage(MESSAGE_TYPE.CONNECT, this.connectOptions);\n\t\t\twireMessage.clientId = this.clientId;\n\t\t\tthis._socket_send(wireMessage);\n\t\t};\n\n\t\t/**\n\t * Called when the underlying websocket has received a complete packet.\n\t * @ignore\n\t */\n\t\tClientImpl.prototype._on_socket_message = function (event) {\n\t\t\tthis._trace(\"Client._on_socket_message\", event.data);\n\t\t\tvar messages = this._deframeMessages(event.data);\n\t\t\tfor (var i = 0; i < messages.length; i+=1) {\n\t\t\t\tthis._handleMessage(messages[i]);\n\t\t\t}\n\t\t};\n\n\t\tClientImpl.prototype._deframeMessages = function(data) {\n\t\t\tvar byteArray = new Uint8Array(data);\n\t\t\tvar messages = [];\n\t\t\tif (this.receiveBuffer) {\n\t\t\t\tvar newData = new Uint8Array(this.receiveBuffer.length+byteArray.length);\n\t\t\t\tnewData.set(this.receiveBuffer);\n\t\t\t\tnewData.set(byteArray,this.receiveBuffer.length);\n\t\t\t\tbyteArray = newData;\n\t\t\t\tdelete this.receiveBuffer;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tvar offset = 0;\n\t\t\t\twhile(offset < byteArray.length) {\n\t\t\t\t\tvar result = decodeMessage(byteArray,offset);\n\t\t\t\t\tvar wireMessage = result[0];\n\t\t\t\t\toffset = result[1];\n\t\t\t\t\tif (wireMessage !== null) {\n\t\t\t\t\t\tmessages.push(wireMessage);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (offset < byteArray.length) {\n\t\t\t\t\tthis.receiveBuffer = byteArray.subarray(offset);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tvar errorStack = ((error.hasOwnProperty(\"stack\") == \"undefined\") ? error.stack.toString() : \"No Error Stack Available\");\n\t\t\t\tthis._disconnected(ERROR.INTERNAL_ERROR.code , format(ERROR.INTERNAL_ERROR, [error.message,errorStack]));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn messages;\n\t\t};\n\n\t\tClientImpl.prototype._handleMessage = function(wireMessage) {\n\n\t\t\tthis._trace(\"Client._handleMessage\", wireMessage);\n\n\t\t\ttry {\n\t\t\t\tswitch(wireMessage.type) {\n\t\t\t\tcase MESSAGE_TYPE.CONNACK:\n\t\t\t\t\tthis._connectTimeout.cancel();\n\t\t\t\t\tif (this._reconnectTimeout)\n\t\t\t\t\t\tthis._reconnectTimeout.cancel();\n\n\t\t\t\t\t// If we have started using clean session then clear up the local state.\n\t\t\t\t\tif (this.connectOptions.cleanSession) {\n\t\t\t\t\t\tfor (var key in this._sentMessages) {\n\t\t\t\t\t\t\tvar sentMessage = this._sentMessages[key];\n\t\t\t\t\t\t\tlocalStorage.removeItem(\"Sent:\"+this._localKey+sentMessage.messageIdentifier);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._sentMessages = {};\n\n\t\t\t\t\t\tfor (var key in this._receivedMessages) {\n\t\t\t\t\t\t\tvar receivedMessage = this._receivedMessages[key];\n\t\t\t\t\t\t\tlocalStorage.removeItem(\"Received:\"+this._localKey+receivedMessage.messageIdentifier);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._receivedMessages = {};\n\t\t\t\t\t}\n\t\t\t\t\t// Client connected and ready for business.\n\t\t\t\t\tif (wireMessage.returnCode === 0) {\n\n\t\t\t\t\t\tthis.connected = true;\n\t\t\t\t\t\t// Jump to the end of the list of uris and stop looking for a good host.\n\n\t\t\t\t\t\tif (this.connectOptions.uris)\n\t\t\t\t\t\t\tthis.hostIndex = this.connectOptions.uris.length;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._disconnected(ERROR.CONNACK_RETURNCODE.code , format(ERROR.CONNACK_RETURNCODE, [wireMessage.returnCode, CONNACK_RC[wireMessage.returnCode]]));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resend messages.\n\t\t\t\t\tvar sequencedMessages = [];\n\t\t\t\t\tfor (var msgId in this._sentMessages) {\n\t\t\t\t\t\tif (this._sentMessages.hasOwnProperty(msgId))\n\t\t\t\t\t\t\tsequencedMessages.push(this._sentMessages[msgId]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Also schedule qos 0 buffered messages if any\n\t\t\t\t\tif (this._buffered_msg_queue.length > 0) {\n\t\t\t\t\t\tvar msg = null;\n\t\t\t\t\t\twhile ((msg = this._buffered_msg_queue.pop())) {\n\t\t\t\t\t\t\tsequencedMessages.push(msg);\n\t\t\t\t\t\t\tif (this.onMessageDelivered)\n\t\t\t\t\t\t\t\tthis._notify_msg_sent[msg] = this.onMessageDelivered(msg.payloadMessage);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Sort sentMessages into the original sent order.\n\t\t\t\t\tvar sequencedMessages = sequencedMessages.sort(function(a,b) {return a.sequence - b.sequence;} );\n\t\t\t\t\tfor (var i=0, len=sequencedMessages.length; i<len; i++) {\n\t\t\t\t\t\tvar sentMessage = sequencedMessages[i];\n\t\t\t\t\t\tif (sentMessage.type == MESSAGE_TYPE.PUBLISH && sentMessage.pubRecReceived) {\n\t\t\t\t\t\t\tvar pubRelMessage = new WireMessage(MESSAGE_TYPE.PUBREL, {messageIdentifier:sentMessage.messageIdentifier});\n\t\t\t\t\t\t\tthis._schedule_message(pubRelMessage);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._schedule_message(sentMessage);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Execute the connectOptions.onSuccess callback if there is one.\n\t\t\t\t\t// Will also now return if this connection was the result of an automatic\n\t\t\t\t\t// reconnect and which URI was successfully connected to.\n\t\t\t\t\tif (this.connectOptions.onSuccess) {\n\t\t\t\t\t\tthis.connectOptions.onSuccess({invocationContext:this.connectOptions.invocationContext});\n\t\t\t\t\t}\n\n\t\t\t\t\tvar reconnected = false;\n\t\t\t\t\tif (this._reconnecting) {\n\t\t\t\t\t\treconnected = true;\n\t\t\t\t\t\tthis._reconnectInterval = 1;\n\t\t\t\t\t\tthis._reconnecting = false;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Execute the onConnected callback if there is one.\n\t\t\t\t\tthis._connected(reconnected, this._wsuri);\n\n\t\t\t\t\t// Process all queued messages now that the connection is established.\n\t\t\t\t\tthis._process_queue();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MESSAGE_TYPE.PUBLISH:\n\t\t\t\t\tthis._receivePublish(wireMessage);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MESSAGE_TYPE.PUBACK:\n\t\t\t\t\tvar sentMessage = this._sentMessages[wireMessage.messageIdentifier];\n\t\t\t\t\t// If this is a re flow of a PUBACK after we have restarted receivedMessage will not exist.\n\t\t\t\t\tif (sentMessage) {\n\t\t\t\t\t\tdelete this._sentMessages[wireMessage.messageIdentifier];\n\t\t\t\t\t\tlocalStorage.removeItem(\"Sent:\"+this._localKey+wireMessage.messageIdentifier);\n\t\t\t\t\t\tif (this.onMessageDelivered)\n\t\t\t\t\t\t\tthis.onMessageDelivered(sentMessage.payloadMessage);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MESSAGE_TYPE.PUBREC:\n\t\t\t\t\tvar sentMessage = this._sentMessages[wireMessage.messageIdentifier];\n\t\t\t\t\t// If this is a re flow of a PUBREC after we have restarted receivedMessage will not exist.\n\t\t\t\t\tif (sentMessage) {\n\t\t\t\t\t\tsentMessage.pubRecReceived = true;\n\t\t\t\t\t\tvar pubRelMessage = new WireMessage(MESSAGE_TYPE.PUBREL, {messageIdentifier:wireMessage.messageIdentifier});\n\t\t\t\t\t\tthis.store(\"Sent:\", sentMessage);\n\t\t\t\t\t\tthis._schedule_message(pubRelMessage);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MESSAGE_TYPE.PUBREL:\n\t\t\t\t\tvar receivedMessage = this._receivedMessages[wireMessage.messageIdentifier];\n\t\t\t\t\tlocalStorage.removeItem(\"Received:\"+this._localKey+wireMessage.messageIdentifier);\n\t\t\t\t\t// If this is a re flow of a PUBREL after we have restarted receivedMessage will not exist.\n\t\t\t\t\tif (receivedMessage) {\n\t\t\t\t\t\tthis._receiveMessage(receivedMessage);\n\t\t\t\t\t\tdelete this._receivedMessages[wireMessage.messageIdentifier];\n\t\t\t\t\t}\n\t\t\t\t\t// Always flow PubComp, we may have previously flowed PubComp but the server lost it and restarted.\n\t\t\t\t\tvar pubCompMessage = new WireMessage(MESSAGE_TYPE.PUBCOMP, {messageIdentifier:wireMessage.messageIdentifier});\n\t\t\t\t\tthis._schedule_message(pubCompMessage);\n\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MESSAGE_TYPE.PUBCOMP:\n\t\t\t\t\tvar sentMessage = this._sentMessages[wireMessage.messageIdentifier];\n\t\t\t\t\tdelete this._sentMessages[wireMessage.messageIdentifier];\n\t\t\t\t\tlocalStorage.removeItem(\"Sent:\"+this._localKey+wireMessage.messageIdentifier);\n\t\t\t\t\tif (this.onMessageDelivered)\n\t\t\t\t\t\tthis.onMessageDelivered(sentMessage.payloadMessage);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MESSAGE_TYPE.SUBACK:\n\t\t\t\t\tvar sentMessage = this._sentMessages[wireMessage.messageIdentifier];\n\t\t\t\t\tif (sentMessage) {\n\t\t\t\t\t\tif(sentMessage.timeOut)\n\t\t\t\t\t\t\tsentMessage.timeOut.cancel();\n\t\t\t\t\t\t// This will need to be fixed when we add multiple topic support\n\t\t\t\t\t\tif (wireMessage.returnCode[0] === 0x80) {\n\t\t\t\t\t\t\tif (sentMessage.onFailure) {\n\t\t\t\t\t\t\t\tsentMessage.onFailure(wireMessage.returnCode);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (sentMessage.onSuccess) {\n\t\t\t\t\t\t\tsentMessage.onSuccess(wireMessage.returnCode);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdelete this._sentMessages[wireMessage.messageIdentifier];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MESSAGE_TYPE.UNSUBACK:\n\t\t\t\t\tvar sentMessage = this._sentMessages[wireMessage.messageIdentifier];\n\t\t\t\t\tif (sentMessage) {\n\t\t\t\t\t\tif (sentMessage.timeOut)\n\t\t\t\t\t\t\tsentMessage.timeOut.cancel();\n\t\t\t\t\t\tif (sentMessage.callback) {\n\t\t\t\t\t\t\tsentMessage.callback();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdelete this._sentMessages[wireMessage.messageIdentifier];\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MESSAGE_TYPE.PINGRESP:\n\t\t\t\t/* The sendPinger or receivePinger may have sent a ping, the receivePinger has already been reset. */\n\t\t\t\t\tthis.sendPinger.reset();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MESSAGE_TYPE.DISCONNECT:\n\t\t\t\t// Clients do not expect to receive disconnect packets.\n\t\t\t\t\tthis._disconnected(ERROR.INVALID_MQTT_MESSAGE_TYPE.code , format(ERROR.INVALID_MQTT_MESSAGE_TYPE, [wireMessage.type]));\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthis._disconnected(ERROR.INVALID_MQTT_MESSAGE_TYPE.code , format(ERROR.INVALID_MQTT_MESSAGE_TYPE, [wireMessage.type]));\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tvar errorStack = ((error.hasOwnProperty(\"stack\") == \"undefined\") ? error.stack.toString() : \"No Error Stack Available\");\n\t\t\t\tthis._disconnected(ERROR.INTERNAL_ERROR.code , format(ERROR.INTERNAL_ERROR, [error.message,errorStack]));\n\t\t\t\treturn;\n\t\t\t}\n\t\t};\n\n\t\t/** @ignore */\n\t\tClientImpl.prototype._on_socket_error = function (error) {\n\t\t\tif (!this._reconnecting) {\n\t\t\t\tthis._disconnected(ERROR.SOCKET_ERROR.code , format(ERROR.SOCKET_ERROR, [error.data]));\n\t\t\t}\n\t\t};\n\n\t\t/** @ignore */\n\t\tClientImpl.prototype._on_socket_close = function () {\n\t\t\tif (!this._reconnecting) {\n\t\t\t\tthis._disconnected(ERROR.SOCKET_CLOSE.code , format(ERROR.SOCKET_CLOSE));\n\t\t\t}\n\t\t};\n\n\t\t/** @ignore */\n\t\tClientImpl.prototype._socket_send = function (wireMessage) {\n\n\t\t\tif (wireMessage.type == 1) {\n\t\t\t\tvar wireMessageMasked = this._traceMask(wireMessage, \"password\");\n\t\t\t\tthis._trace(\"Client._socket_send\", wireMessageMasked);\n\t\t\t}\n\t\t\telse this._trace(\"Client._socket_send\", wireMessage);\n\n\t\t\tthis.socket.send(wireMessage.encode());\n\t\t\t/* We have proved to the server we are alive. */\n\t\t\tthis.sendPinger.reset();\n\t\t};\n\n\t\t/** @ignore */\n\t\tClientImpl.prototype._receivePublish = function (wireMessage) {\n\t\t\tswitch(wireMessage.payloadMessage.qos) {\n\t\t\tcase \"undefined\":\n\t\t\tcase 0:\n\t\t\t\tthis._receiveMessage(wireMessage);\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\tvar pubAckMessage = new WireMessage(MESSAGE_TYPE.PUBACK, {messageIdentifier:wireMessage.messageIdentifier});\n\t\t\t\tthis._schedule_message(pubAckMessage);\n\t\t\t\tthis._receiveMessage(wireMessage);\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\t\t\t\tthis._receivedMessages[wireMessage.messageIdentifier] = wireMessage;\n\t\t\t\tthis.store(\"Received:\", wireMessage);\n\t\t\t\tvar pubRecMessage = new WireMessage(MESSAGE_TYPE.PUBREC, {messageIdentifier:wireMessage.messageIdentifier});\n\t\t\t\tthis._schedule_message(pubRecMessage);\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow Error(\"Invaild qos=\" + wireMessage.payloadMessage.qos);\n\t\t\t}\n\t\t};\n\n\t\t/** @ignore */\n\t\tClientImpl.prototype._receiveMessage = function (wireMessage) {\n\t\t\tif (this.onMessageArrived) {\n\t\t\t\tthis.onMessageArrived(wireMessage.payloadMessage);\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t * Client has connected.\n\t * @param {reconnect} [boolean] indicate if this was a result of reconnect operation.\n\t * @param {uri} [string] fully qualified WebSocket URI of the server.\n\t */\n\t\tClientImpl.prototype._connected = function (reconnect, uri) {\n\t\t// Execute the onConnected callback if there is one.\n\t\t\tif (this.onConnected)\n\t\t\t\tthis.onConnected(reconnect, uri);\n\t\t};\n\n\t\t/**\n\t * Attempts to reconnect the client to the server.\n   * For each reconnect attempt, will double the reconnect interval\n   * up to 128 seconds.\n\t */\n\t\tClientImpl.prototype._reconnect = function () {\n\t\t\tthis._trace(\"Client._reconnect\");\n\t\t\tif (!this.connected) {\n\t\t\t\tthis._reconnecting = true;\n\t\t\t\tthis.sendPinger.cancel();\n\t\t\t\tthis.receivePinger.cancel();\n\t\t\t\tif (this._reconnectInterval < 128)\n\t\t\t\t\tthis._reconnectInterval = this._reconnectInterval * 2;\n\t\t\t\tif (this.connectOptions.uris) {\n\t\t\t\t\tthis.hostIndex = 0;\n\t\t\t\t\tthis._doConnect(this.connectOptions.uris[0]);\n\t\t\t\t} else {\n\t\t\t\t\tthis._doConnect(this.uri);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t * Client has disconnected either at its own request or because the server\n\t * or network disconnected it. Remove all non-durable state.\n\t * @param {errorCode} [number] the error number.\n\t * @param {errorText} [string] the error text.\n\t * @ignore\n\t */\n\t\tClientImpl.prototype._disconnected = function (errorCode, errorText) {\n\t\t\tthis._trace(\"Client._disconnected\", errorCode, errorText);\n\n\t\t\tif (errorCode !== undefined && this._reconnecting) {\n\t\t\t\t//Continue automatic reconnect process\n\t\t\t\tthis._reconnectTimeout = new Timeout(this, this._reconnectInterval, this._reconnect);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.sendPinger.cancel();\n\t\t\tthis.receivePinger.cancel();\n\t\t\tif (this._connectTimeout) {\n\t\t\t\tthis._connectTimeout.cancel();\n\t\t\t\tthis._connectTimeout = null;\n\t\t\t}\n\n\t\t\t// Clear message buffers.\n\t\t\tthis._msg_queue = [];\n\t\t\tthis._buffered_msg_queue = [];\n\t\t\tthis._notify_msg_sent = {};\n\n\t\t\tif (this.socket) {\n\t\t\t// Cancel all socket callbacks so that they cannot be driven again by this socket.\n\t\t\t\tthis.socket.onopen = null;\n\t\t\t\tthis.socket.onmessage = null;\n\t\t\t\tthis.socket.onerror = null;\n\t\t\t\tthis.socket.onclose = null;\n\t\t\t\tif (this.socket.readyState === 1)\n\t\t\t\t\tthis.socket.close();\n\t\t\t\tdelete this.socket;\n\t\t\t}\n\n\t\t\tif (this.connectOptions.uris && this.hostIndex < this.connectOptions.uris.length-1) {\n\t\t\t// Try the next host.\n\t\t\t\tthis.hostIndex++;\n\t\t\t\tthis._doConnect(this.connectOptions.uris[this.hostIndex]);\n\t\t\t} else {\n\n\t\t\t\tif (errorCode === undefined) {\n\t\t\t\t\terrorCode = ERROR.OK.code;\n\t\t\t\t\terrorText = format(ERROR.OK);\n\t\t\t\t}\n\n\t\t\t\t// Run any application callbacks last as they may attempt to reconnect and hence create a new socket.\n\t\t\t\tif (this.connected) {\n\t\t\t\t\tthis.connected = false;\n\t\t\t\t\t// Execute the connectionLostCallback if there is one, and we were connected.\n\t\t\t\t\tif (this.onConnectionLost) {\n\t\t\t\t\t\tthis.onConnectionLost({errorCode:errorCode, errorMessage:errorText, reconnect:this.connectOptions.reconnect, uri:this._wsuri});\n\t\t\t\t\t}\n\t\t\t\t\tif (errorCode !== ERROR.OK.code && this.connectOptions.reconnect) {\n\t\t\t\t\t// Start automatic reconnect process for the very first time since last successful connect.\n\t\t\t\t\t\tthis._reconnectInterval = 1;\n\t\t\t\t\t\tthis._reconnect();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t// Otherwise we never had a connection, so indicate that the connect has failed.\n\t\t\t\t\tif (this.connectOptions.mqttVersion === 4 && this.connectOptions.mqttVersionExplicit === false) {\n\t\t\t\t\t\tthis._trace(\"Failed to connect V4, dropping back to V3\");\n\t\t\t\t\t\tthis.connectOptions.mqttVersion = 3;\n\t\t\t\t\t\tif (this.connectOptions.uris) {\n\t\t\t\t\t\t\tthis.hostIndex = 0;\n\t\t\t\t\t\t\tthis._doConnect(this.connectOptions.uris[0]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._doConnect(this.uri);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if(this.connectOptions.onFailure) {\n\t\t\t\t\t\tthis.connectOptions.onFailure({invocationContext:this.connectOptions.invocationContext, errorCode:errorCode, errorMessage:errorText});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/** @ignore */\n\t\tClientImpl.prototype._trace = function () {\n\t\t// Pass trace message back to client's callback function\n\t\t\tif (this.traceFunction) {\n\t\t\t\tvar args = Array.prototype.slice.call(arguments);\n\t\t\t\tfor (var i in args)\n\t\t\t\t{\n\t\t\t\t\tif (typeof args[i] !== \"undefined\")\n\t\t\t\t\t\targs.splice(i, 1, JSON.stringify(args[i]));\n\t\t\t\t}\n\t\t\t\tvar record = args.join(\"\");\n\t\t\t\tthis.traceFunction ({severity: \"Debug\", message: record\t});\n\t\t\t}\n\n\t\t\t//buffer style trace\n\t\t\tif ( this._traceBuffer !== null ) {\n\t\t\t\tfor (var i = 0, max = arguments.length; i < max; i++) {\n\t\t\t\t\tif ( this._traceBuffer.length == this._MAX_TRACE_ENTRIES ) {\n\t\t\t\t\t\tthis._traceBuffer.shift();\n\t\t\t\t\t}\n\t\t\t\t\tif (i === 0) this._traceBuffer.push(arguments[i]);\n\t\t\t\t\telse if (typeof arguments[i] === \"undefined\" ) this._traceBuffer.push(arguments[i]);\n\t\t\t\t\telse this._traceBuffer.push(\"  \"+JSON.stringify(arguments[i]));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/** @ignore */\n\t\tClientImpl.prototype._traceMask = function (traceObject, masked) {\n\t\t\tvar traceObjectMasked = {};\n\t\t\tfor (var attr in traceObject) {\n\t\t\t\tif (traceObject.hasOwnProperty(attr)) {\n\t\t\t\t\tif (attr == masked)\n\t\t\t\t\t\ttraceObjectMasked[attr] = \"******\";\n\t\t\t\t\telse\n\t\t\t\t\t\ttraceObjectMasked[attr] = traceObject[attr];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn traceObjectMasked;\n\t\t};\n\n\t\t// ------------------------------------------------------------------------\n\t\t// Public Programming interface.\n\t\t// ------------------------------------------------------------------------\n\n\t\t/**\n\t * The JavaScript application communicates to the server using a {@link Paho.Client} object.\n\t * <p>\n\t * Most applications will create just one Client object and then call its connect() method,\n\t * however applications can create more than one Client object if they wish.\n\t * In this case the combination of host, port and clientId attributes must be different for each Client object.\n\t * <p>\n\t * The send, subscribe and unsubscribe methods are implemented as asynchronous JavaScript methods\n\t * (even though the underlying protocol exchange might be synchronous in nature).\n\t * This means they signal their completion by calling back to the application,\n\t * via Success or Failure callback functions provided by the application on the method in question.\n\t * Such callbacks are called at most once per method invocation and do not persist beyond the lifetime\n\t * of the script that made the invocation.\n\t * <p>\n\t * In contrast there are some callback functions, most notably <i>onMessageArrived</i>,\n\t * that are defined on the {@link Paho.Client} object.\n\t * These may get called multiple times, and aren't directly related to specific method invocations made by the client.\n\t *\n\t * @name Paho.Client\n\t *\n\t * @constructor\n\t *\n\t * @param {string} host - the address of the messaging server, as a fully qualified WebSocket URI, as a DNS name or dotted decimal IP address.\n\t * @param {number} port - the port number to connect to - only required if host is not a URI\n\t * @param {string} path - the path on the host to connect to - only used if host is not a URI. Default: '/mqtt'.\n\t * @param {string} clientId - the Messaging client identifier, between 1 and 23 characters in length.\n\t *\n\t * @property {string} host - <i>read only</i> the server's DNS hostname or dotted decimal IP address.\n\t * @property {number} port - <i>read only</i> the server's port.\n\t * @property {string} path - <i>read only</i> the server's path.\n\t * @property {string} clientId - <i>read only</i> used when connecting to the server.\n\t * @property {function} onConnectionLost - called when a connection has been lost.\n\t *                            after a connect() method has succeeded.\n\t *                            Establish the call back used when a connection has been lost. The connection may be\n\t *                            lost because the client initiates a disconnect or because the server or network\n\t *                            cause the client to be disconnected. The disconnect call back may be called without\n\t *                            the connectionComplete call back being invoked if, for example the client fails to\n\t *                            connect.\n\t *                            A single response object parameter is passed to the onConnectionLost callback containing the following fields:\n\t *                            <ol>\n\t *                            <li>errorCode\n\t *                            <li>errorMessage\n\t *                            </ol>\n\t * @property {function} onMessageDelivered - called when a message has been delivered.\n\t *                            All processing that this Client will ever do has been completed. So, for example,\n\t *                            in the case of a Qos=2 message sent by this client, the PubComp flow has been received from the server\n\t *                            and the message has been removed from persistent storage before this callback is invoked.\n\t *                            Parameters passed to the onMessageDelivered callback are:\n\t *                            <ol>\n\t *                            <li>{@link Paho.Message} that was delivered.\n\t *                            </ol>\n\t * @property {function} onMessageArrived - called when a message has arrived in this Paho.client.\n\t *                            Parameters passed to the onMessageArrived callback are:\n\t *                            <ol>\n\t *                            <li>{@link Paho.Message} that has arrived.\n\t *                            </ol>\n\t * @property {function} onConnected - called when a connection is successfully made to the server.\n\t *                                  after a connect() method.\n\t *                                  Parameters passed to the onConnected callback are:\n\t *                                  <ol>\n\t *                                  <li>reconnect (boolean) - If true, the connection was the result of a reconnect.</li>\n\t *                                  <li>URI (string) - The URI used to connect to the server.</li>\n\t *                                  </ol>\n\t * @property {boolean} disconnectedPublishing - if set, will enable disconnected publishing in\n\t *                                            in the event that the connection to the server is lost.\n\t * @property {number} disconnectedBufferSize - Used to set the maximum number of messages that the disconnected\n\t *                                             buffer will hold before rejecting new messages. Default size: 5000 messages\n\t * @property {function} trace - called whenever trace is called. TODO\n\t */\n\t\tvar Client = function (host, port, path, clientId) {\n\n\t\t\tvar uri;\n\n\t\t\tif (typeof host !== \"string\")\n\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof host, \"host\"]));\n\n\t\t\tif (arguments.length == 2) {\n\t\t\t// host: must be full ws:// uri\n\t\t\t// port: clientId\n\t\t\t\tclientId = port;\n\t\t\t\turi = host;\n\t\t\t\tvar match = uri.match(/^(wss?):\\/\\/((\\[(.+)\\])|([^\\/]+?))(:(\\d+))?(\\/.*)$/);\n\t\t\t\tif (match) {\n\t\t\t\t\thost = match[4]||match[2];\n\t\t\t\t\tport = parseInt(match[7]);\n\t\t\t\t\tpath = match[8];\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT,[host,\"host\"]));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (arguments.length == 3) {\n\t\t\t\t\tclientId = path;\n\t\t\t\t\tpath = \"/mqtt\";\n\t\t\t\t}\n\t\t\t\tif (typeof port !== \"number\" || port < 0)\n\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof port, \"port\"]));\n\t\t\t\tif (typeof path !== \"string\")\n\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof path, \"path\"]));\n\n\t\t\t\tvar ipv6AddSBracket = (host.indexOf(\":\") !== -1 && host.slice(0,1) !== \"[\" && host.slice(-1) !== \"]\");\n\t\t\t\turi = \"ws://\"+(ipv6AddSBracket?\"[\"+host+\"]\":host)+\":\"+port+path;\n\t\t\t}\n\n\t\t\tvar clientIdLength = 0;\n\t\t\tfor (var i = 0; i<clientId.length; i++) {\n\t\t\t\tvar charCode = clientId.charCodeAt(i);\n\t\t\t\tif (0xD800 <= charCode && charCode <= 0xDBFF)  {\n\t\t\t\t\ti++; // Surrogate pair.\n\t\t\t\t}\n\t\t\t\tclientIdLength++;\n\t\t\t}\n\t\t\tif (typeof clientId !== \"string\" || clientIdLength > 65535)\n\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [clientId, \"clientId\"]));\n\n\t\t\tvar client = new ClientImpl(uri, host, port, path, clientId);\n\n\t\t\t//Public Properties\n\t\t\tObject.defineProperties(this,{\n\t\t\t\t\"host\":{\n\t\t\t\t\tget: function() { return host; },\n\t\t\t\t\tset: function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); }\n\t\t\t\t},\n\t\t\t\t\"port\":{\n\t\t\t\t\tget: function() { return port; },\n\t\t\t\t\tset: function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); }\n\t\t\t\t},\n\t\t\t\t\"path\":{\n\t\t\t\t\tget: function() { return path; },\n\t\t\t\t\tset: function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); }\n\t\t\t\t},\n\t\t\t\t\"uri\":{\n\t\t\t\t\tget: function() { return uri; },\n\t\t\t\t\tset: function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); }\n\t\t\t\t},\n\t\t\t\t\"clientId\":{\n\t\t\t\t\tget: function() { return client.clientId; },\n\t\t\t\t\tset: function() { throw new Error(format(ERROR.UNSUPPORTED_OPERATION)); }\n\t\t\t\t},\n\t\t\t\t\"onConnected\":{\n\t\t\t\t\tget: function() { return client.onConnected; },\n\t\t\t\t\tset: function(newOnConnected) {\n\t\t\t\t\t\tif (typeof newOnConnected === \"function\")\n\t\t\t\t\t\t\tclient.onConnected = newOnConnected;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof newOnConnected, \"onConnected\"]));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"disconnectedPublishing\":{\n\t\t\t\t\tget: function() { return client.disconnectedPublishing; },\n\t\t\t\t\tset: function(newDisconnectedPublishing) {\n\t\t\t\t\t\tclient.disconnectedPublishing = newDisconnectedPublishing;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"disconnectedBufferSize\":{\n\t\t\t\t\tget: function() { return client.disconnectedBufferSize; },\n\t\t\t\t\tset: function(newDisconnectedBufferSize) {\n\t\t\t\t\t\tclient.disconnectedBufferSize = newDisconnectedBufferSize;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"onConnectionLost\":{\n\t\t\t\t\tget: function() { return client.onConnectionLost; },\n\t\t\t\t\tset: function(newOnConnectionLost) {\n\t\t\t\t\t\tif (typeof newOnConnectionLost === \"function\")\n\t\t\t\t\t\t\tclient.onConnectionLost = newOnConnectionLost;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof newOnConnectionLost, \"onConnectionLost\"]));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"onMessageDelivered\":{\n\t\t\t\t\tget: function() { return client.onMessageDelivered; },\n\t\t\t\t\tset: function(newOnMessageDelivered) {\n\t\t\t\t\t\tif (typeof newOnMessageDelivered === \"function\")\n\t\t\t\t\t\t\tclient.onMessageDelivered = newOnMessageDelivered;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof newOnMessageDelivered, \"onMessageDelivered\"]));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"onMessageArrived\":{\n\t\t\t\t\tget: function() { return client.onMessageArrived; },\n\t\t\t\t\tset: function(newOnMessageArrived) {\n\t\t\t\t\t\tif (typeof newOnMessageArrived === \"function\")\n\t\t\t\t\t\t\tclient.onMessageArrived = newOnMessageArrived;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof newOnMessageArrived, \"onMessageArrived\"]));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"trace\":{\n\t\t\t\t\tget: function() { return client.traceFunction; },\n\t\t\t\t\tset: function(trace) {\n\t\t\t\t\t\tif(typeof trace === \"function\"){\n\t\t\t\t\t\t\tclient.traceFunction = trace;\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof trace, \"onTrace\"]));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\n\t\t\t/**\n\t\t * Connect this Messaging client to its server.\n\t\t *\n\t\t * @name Paho.Client#connect\n\t\t * @function\n\t\t * @param {object} connectOptions - Attributes used with the connection.\n\t\t * @param {number} connectOptions.timeout - If the connect has not succeeded within this\n\t\t *                    number of seconds, it is deemed to have failed.\n\t\t *                    The default is 30 seconds.\n\t\t * @param {string} connectOptions.userName - Authentication username for this connection.\n\t\t * @param {string} connectOptions.password - Authentication password for this connection.\n\t\t * @param {Paho.Message} connectOptions.willMessage - sent by the server when the client\n\t\t *                    disconnects abnormally.\n\t\t * @param {number} connectOptions.keepAliveInterval - the server disconnects this client if\n\t\t *                    there is no activity for this number of seconds.\n\t\t *                    The default value of 60 seconds is assumed if not set.\n\t\t * @param {boolean} connectOptions.cleanSession - if true(default) the client and server\n\t\t *                    persistent state is deleted on successful connect.\n\t\t * @param {boolean} connectOptions.useSSL - if present and true, use an SSL Websocket connection.\n\t\t * @param {object} connectOptions.invocationContext - passed to the onSuccess callback or onFailure callback.\n\t\t * @param {function} connectOptions.onSuccess - called when the connect acknowledgement\n\t\t *                    has been received from the server.\n\t\t * A single response object parameter is passed to the onSuccess callback containing the following fields:\n\t\t * <ol>\n\t\t * <li>invocationContext as passed in to the onSuccess method in the connectOptions.\n\t\t * </ol>\n\t * @param {function} connectOptions.onFailure - called when the connect request has failed or timed out.\n\t\t * A single response object parameter is passed to the onFailure callback containing the following fields:\n\t\t * <ol>\n\t\t * <li>invocationContext as passed in to the onFailure method in the connectOptions.\n\t\t * <li>errorCode a number indicating the nature of the error.\n\t\t * <li>errorMessage text describing the error.\n\t\t * </ol>\n\t * @param {array} connectOptions.hosts - If present this contains either a set of hostnames or fully qualified\n\t\t * WebSocket URIs (ws://iot.eclipse.org:80/ws), that are tried in order in place\n\t\t * of the host and port paramater on the construtor. The hosts are tried one at at time in order until\n\t\t * one of then succeeds.\n\t * @param {array} connectOptions.ports - If present the set of ports matching the hosts. If hosts contains URIs, this property\n\t\t * is not used.\n\t * @param {boolean} connectOptions.reconnect - Sets whether the client will automatically attempt to reconnect\n\t * to the server if the connection is lost.\n\t *<ul>\n\t *<li>If set to false, the client will not attempt to automatically reconnect to the server in the event that the\n\t * connection is lost.</li>\n\t *<li>If set to true, in the event that the connection is lost, the client will attempt to reconnect to the server.\n\t * It will initially wait 1 second before it attempts to reconnect, for every failed reconnect attempt, the delay\n\t * will double until it is at 2 minutes at which point the delay will stay at 2 minutes.</li>\n\t *</ul>\n\t * @param {number} connectOptions.mqttVersion - The version of MQTT to use to connect to the MQTT Broker.\n\t *<ul>\n\t *<li>3 - MQTT V3.1</li>\n\t *<li>4 - MQTT V3.1.1</li>\n\t *</ul>\n\t * @param {boolean} connectOptions.mqttVersionExplicit - If set to true, will force the connection to use the\n\t * selected MQTT Version or will fail to connect.\n\t * @param {array} connectOptions.uris - If present, should contain a list of fully qualified WebSocket uris\n\t * (e.g. ws://iot.eclipse.org:80/ws), that are tried in order in place of the host and port parameter of the construtor.\n\t * The uris are tried one at a time in order until one of them succeeds. Do not use this in conjunction with hosts as\n\t * the hosts array will be converted to uris and will overwrite this property.\n\t\t * @throws {InvalidState} If the client is not in disconnected state. The client must have received connectionLost\n\t\t * or disconnected before calling connect for a second or subsequent time.\n\t\t */\n\t\t\tthis.connect = function (connectOptions) {\n\t\t\t\tconnectOptions = connectOptions || {} ;\n\t\t\t\tvalidate(connectOptions,  {timeout:\"number\",\n\t\t\t\t\tuserName:\"string\",\n\t\t\t\t\tpassword:\"string\",\n\t\t\t\t\twillMessage:\"object\",\n\t\t\t\t\tkeepAliveInterval:\"number\",\n\t\t\t\t\tcleanSession:\"boolean\",\n\t\t\t\t\tuseSSL:\"boolean\",\n\t\t\t\t\tinvocationContext:\"object\",\n\t\t\t\t\tonSuccess:\"function\",\n\t\t\t\t\tonFailure:\"function\",\n\t\t\t\t\thosts:\"object\",\n\t\t\t\t\tports:\"object\",\n\t\t\t\t\treconnect:\"boolean\",\n\t\t\t\t\tmqttVersion:\"number\",\n\t\t\t\t\tmqttVersionExplicit:\"boolean\",\n\t\t\t\t\turis: \"object\"});\n\n\t\t\t\t// If no keep alive interval is set, assume 60 seconds.\n\t\t\t\tif (connectOptions.keepAliveInterval === undefined)\n\t\t\t\t\tconnectOptions.keepAliveInterval = 60;\n\n\t\t\t\tif (connectOptions.mqttVersion > 4 || connectOptions.mqttVersion < 3) {\n\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.mqttVersion, \"connectOptions.mqttVersion\"]));\n\t\t\t\t}\n\n\t\t\t\tif (connectOptions.mqttVersion === undefined) {\n\t\t\t\t\tconnectOptions.mqttVersionExplicit = false;\n\t\t\t\t\tconnectOptions.mqttVersion = 4;\n\t\t\t\t} else {\n\t\t\t\t\tconnectOptions.mqttVersionExplicit = true;\n\t\t\t\t}\n\n\t\t\t\t//Check that if password is set, so is username\n\t\t\t\tif (connectOptions.password !== undefined && connectOptions.userName === undefined)\n\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.password, \"connectOptions.password\"]));\n\n\t\t\t\tif (connectOptions.willMessage) {\n\t\t\t\t\tif (!(connectOptions.willMessage instanceof Message))\n\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [connectOptions.willMessage, \"connectOptions.willMessage\"]));\n\t\t\t\t\t// The will message must have a payload that can be represented as a string.\n\t\t\t\t\t// Cause the willMessage to throw an exception if this is not the case.\n\t\t\t\t\tconnectOptions.willMessage.stringPayload = null;\n\n\t\t\t\t\tif (typeof connectOptions.willMessage.destinationName === \"undefined\")\n\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof connectOptions.willMessage.destinationName, \"connectOptions.willMessage.destinationName\"]));\n\t\t\t\t}\n\t\t\t\tif (typeof connectOptions.cleanSession === \"undefined\")\n\t\t\t\t\tconnectOptions.cleanSession = true;\n\t\t\t\tif (connectOptions.hosts) {\n\n\t\t\t\t\tif (!(connectOptions.hosts instanceof Array) )\n\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.hosts, \"connectOptions.hosts\"]));\n\t\t\t\t\tif (connectOptions.hosts.length <1 )\n\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.hosts, \"connectOptions.hosts\"]));\n\n\t\t\t\t\tvar usingURIs = false;\n\t\t\t\t\tfor (var i = 0; i<connectOptions.hosts.length; i++) {\n\t\t\t\t\t\tif (typeof connectOptions.hosts[i] !== \"string\")\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof connectOptions.hosts[i], \"connectOptions.hosts[\"+i+\"]\"]));\n\t\t\t\t\t\tif (/^(wss?):\\/\\/((\\[(.+)\\])|([^\\/]+?))(:(\\d+))?(\\/.*)$/.test(connectOptions.hosts[i])) {\n\t\t\t\t\t\t\tif (i === 0) {\n\t\t\t\t\t\t\t\tusingURIs = true;\n\t\t\t\t\t\t\t} else if (!usingURIs) {\n\t\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.hosts[i], \"connectOptions.hosts[\"+i+\"]\"]));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (usingURIs) {\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.hosts[i], \"connectOptions.hosts[\"+i+\"]\"]));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!usingURIs) {\n\t\t\t\t\t\tif (!connectOptions.ports)\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.ports, \"connectOptions.ports\"]));\n\t\t\t\t\t\tif (!(connectOptions.ports instanceof Array) )\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.ports, \"connectOptions.ports\"]));\n\t\t\t\t\t\tif (connectOptions.hosts.length !== connectOptions.ports.length)\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [connectOptions.ports, \"connectOptions.ports\"]));\n\n\t\t\t\t\t\tconnectOptions.uris = [];\n\n\t\t\t\t\t\tfor (var i = 0; i<connectOptions.hosts.length; i++) {\n\t\t\t\t\t\t\tif (typeof connectOptions.ports[i] !== \"number\" || connectOptions.ports[i] < 0)\n\t\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_TYPE, [typeof connectOptions.ports[i], \"connectOptions.ports[\"+i+\"]\"]));\n\t\t\t\t\t\t\tvar host = connectOptions.hosts[i];\n\t\t\t\t\t\t\tvar port = connectOptions.ports[i];\n\n\t\t\t\t\t\t\tvar ipv6 = (host.indexOf(\":\") !== -1);\n\t\t\t\t\t\t\turi = \"ws://\"+(ipv6?\"[\"+host+\"]\":host)+\":\"+port+path;\n\t\t\t\t\t\t\tconnectOptions.uris.push(uri);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconnectOptions.uris = connectOptions.hosts;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclient.connect(connectOptions);\n\t\t\t};\n\n\t\t\t/**\n\t\t * Subscribe for messages, request receipt of a copy of messages sent to the destinations described by the filter.\n\t\t *\n\t\t * @name Paho.Client#subscribe\n\t\t * @function\n\t\t * @param {string} filter describing the destinations to receive messages from.\n\t\t * <br>\n\t\t * @param {object} subscribeOptions - used to control the subscription\n\t\t *\n\t\t * @param {number} subscribeOptions.qos - the maximum qos of any publications sent\n\t\t *                                  as a result of making this subscription.\n\t\t * @param {object} subscribeOptions.invocationContext - passed to the onSuccess callback\n\t\t *                                  or onFailure callback.\n\t\t * @param {function} subscribeOptions.onSuccess - called when the subscribe acknowledgement\n\t\t *                                  has been received from the server.\n\t\t *                                  A single response object parameter is passed to the onSuccess callback containing the following fields:\n\t\t *                                  <ol>\n\t\t *                                  <li>invocationContext if set in the subscribeOptions.\n\t\t *                                  </ol>\n\t\t * @param {function} subscribeOptions.onFailure - called when the subscribe request has failed or timed out.\n\t\t *                                  A single response object parameter is passed to the onFailure callback containing the following fields:\n\t\t *                                  <ol>\n\t\t *                                  <li>invocationContext - if set in the subscribeOptions.\n\t\t *                                  <li>errorCode - a number indicating the nature of the error.\n\t\t *                                  <li>errorMessage - text describing the error.\n\t\t *                                  </ol>\n\t\t * @param {number} subscribeOptions.timeout - which, if present, determines the number of\n\t\t *                                  seconds after which the onFailure calback is called.\n\t\t *                                  The presence of a timeout does not prevent the onSuccess\n\t\t *                                  callback from being called when the subscribe completes.\n\t\t * @throws {InvalidState} if the client is not in connected state.\n\t\t */\n\t\t\tthis.subscribe = function (filter, subscribeOptions) {\n\t\t\t\tif (typeof filter !== \"string\")\n\t\t\t\t\tthrow new Error(\"Invalid argument:\"+filter);\n\t\t\t\tsubscribeOptions = subscribeOptions || {} ;\n\t\t\t\tvalidate(subscribeOptions,  {qos:\"number\",\n\t\t\t\t\tinvocationContext:\"object\",\n\t\t\t\t\tonSuccess:\"function\",\n\t\t\t\t\tonFailure:\"function\",\n\t\t\t\t\ttimeout:\"number\"\n\t\t\t\t});\n\t\t\t\tif (subscribeOptions.timeout && !subscribeOptions.onFailure)\n\t\t\t\t\tthrow new Error(\"subscribeOptions.timeout specified with no onFailure callback.\");\n\t\t\t\tif (typeof subscribeOptions.qos !== \"undefined\" && !(subscribeOptions.qos === 0 || subscribeOptions.qos === 1 || subscribeOptions.qos === 2 ))\n\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [subscribeOptions.qos, \"subscribeOptions.qos\"]));\n\t\t\t\tclient.subscribe(filter, subscribeOptions);\n\t\t\t};\n\n\t\t\t/**\n\t\t * Unsubscribe for messages, stop receiving messages sent to destinations described by the filter.\n\t\t *\n\t\t * @name Paho.Client#unsubscribe\n\t\t * @function\n\t\t * @param {string} filter - describing the destinations to receive messages from.\n\t\t * @param {object} unsubscribeOptions - used to control the subscription\n\t\t * @param {object} unsubscribeOptions.invocationContext - passed to the onSuccess callback\n\t\t\t\t\t\t\t\t\t\t\t  or onFailure callback.\n\t\t * @param {function} unsubscribeOptions.onSuccess - called when the unsubscribe acknowledgement has been received from the server.\n\t\t *                                    A single response object parameter is passed to the\n\t\t *                                    onSuccess callback containing the following fields:\n\t\t *                                    <ol>\n\t\t *                                    <li>invocationContext - if set in the unsubscribeOptions.\n\t\t *                                    </ol>\n\t\t * @param {function} unsubscribeOptions.onFailure called when the unsubscribe request has failed or timed out.\n\t\t *                                    A single response object parameter is passed to the onFailure callback containing the following fields:\n\t\t *                                    <ol>\n\t\t *                                    <li>invocationContext - if set in the unsubscribeOptions.\n\t\t *                                    <li>errorCode - a number indicating the nature of the error.\n\t\t *                                    <li>errorMessage - text describing the error.\n\t\t *                                    </ol>\n\t\t * @param {number} unsubscribeOptions.timeout - which, if present, determines the number of seconds\n\t\t *                                    after which the onFailure callback is called. The presence of\n\t\t *                                    a timeout does not prevent the onSuccess callback from being\n\t\t *                                    called when the unsubscribe completes\n\t\t * @throws {InvalidState} if the client is not in connected state.\n\t\t */\n\t\t\tthis.unsubscribe = function (filter, unsubscribeOptions) {\n\t\t\t\tif (typeof filter !== \"string\")\n\t\t\t\t\tthrow new Error(\"Invalid argument:\"+filter);\n\t\t\t\tunsubscribeOptions = unsubscribeOptions || {} ;\n\t\t\t\tvalidate(unsubscribeOptions,  {invocationContext:\"object\",\n\t\t\t\t\tonSuccess:\"function\",\n\t\t\t\t\tonFailure:\"function\",\n\t\t\t\t\ttimeout:\"number\"\n\t\t\t\t});\n\t\t\t\tif (unsubscribeOptions.timeout && !unsubscribeOptions.onFailure)\n\t\t\t\t\tthrow new Error(\"unsubscribeOptions.timeout specified with no onFailure callback.\");\n\t\t\t\tclient.unsubscribe(filter, unsubscribeOptions);\n\t\t\t};\n\n\t\t\t/**\n\t\t * Send a message to the consumers of the destination in the Message.\n\t\t *\n\t\t * @name Paho.Client#send\n\t\t * @function\n\t\t * @param {string|Paho.Message} topic - <b>mandatory</b> The name of the destination to which the message is to be sent.\n\t\t * \t\t\t\t\t   - If it is the only parameter, used as Paho.Message object.\n\t\t * @param {String|ArrayBuffer} payload - The message data to be sent.\n\t\t * @param {number} qos The Quality of Service used to deliver the message.\n\t\t * \t\t<dl>\n\t\t * \t\t\t<dt>0 Best effort (default).\n\t\t *     \t\t\t<dt>1 At least once.\n\t\t *     \t\t\t<dt>2 Exactly once.\n\t\t * \t\t</dl>\n\t\t * @param {Boolean} retained If true, the message is to be retained by the server and delivered\n\t\t *                     to both current and future subscriptions.\n\t\t *                     If false the server only delivers the message to current subscribers, this is the default for new Messages.\n\t\t *                     A received message has the retained boolean set to true if the message was published\n\t\t *                     with the retained boolean set to true\n\t\t *                     and the subscrption was made after the message has been published.\n\t\t * @throws {InvalidState} if the client is not connected.\n\t\t */\n\t\t\tthis.send = function (topic,payload,qos,retained) {\n\t\t\t\tvar message ;\n\n\t\t\t\tif(arguments.length === 0){\n\t\t\t\t\tthrow new Error(\"Invalid argument.\"+\"length\");\n\n\t\t\t\t}else if(arguments.length == 1) {\n\n\t\t\t\t\tif (!(topic instanceof Message) && (typeof topic !== \"string\"))\n\t\t\t\t\t\tthrow new Error(\"Invalid argument:\"+ typeof topic);\n\n\t\t\t\t\tmessage = topic;\n\t\t\t\t\tif (typeof message.destinationName === \"undefined\")\n\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT,[message.destinationName,\"Message.destinationName\"]));\n\t\t\t\t\tclient.send(message);\n\n\t\t\t\t}else {\n\t\t\t\t//parameter checking in Message object\n\t\t\t\t\tmessage = new Message(payload);\n\t\t\t\t\tmessage.destinationName = topic;\n\t\t\t\t\tif(arguments.length >= 3)\n\t\t\t\t\t\tmessage.qos = qos;\n\t\t\t\t\tif(arguments.length >= 4)\n\t\t\t\t\t\tmessage.retained = retained;\n\t\t\t\t\tclient.send(message);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/**\n\t\t * Publish a message to the consumers of the destination in the Message.\n\t\t * Synonym for Paho.Mqtt.Client#send\n\t\t *\n\t\t * @name Paho.Client#publish\n\t\t * @function\n\t\t * @param {string|Paho.Message} topic - <b>mandatory</b> The name of the topic to which the message is to be published.\n\t\t * \t\t\t\t\t   - If it is the only parameter, used as Paho.Message object.\n\t\t * @param {String|ArrayBuffer} payload - The message data to be published.\n\t\t * @param {number} qos The Quality of Service used to deliver the message.\n\t\t * \t\t<dl>\n\t\t * \t\t\t<dt>0 Best effort (default).\n\t\t *     \t\t\t<dt>1 At least once.\n\t\t *     \t\t\t<dt>2 Exactly once.\n\t\t * \t\t</dl>\n\t\t * @param {Boolean} retained If true, the message is to be retained by the server and delivered\n\t\t *                     to both current and future subscriptions.\n\t\t *                     If false the server only delivers the message to current subscribers, this is the default for new Messages.\n\t\t *                     A received message has the retained boolean set to true if the message was published\n\t\t *                     with the retained boolean set to true\n\t\t *                     and the subscrption was made after the message has been published.\n\t\t * @throws {InvalidState} if the client is not connected.\n\t\t */\n\t\t\tthis.publish = function(topic,payload,qos,retained) {\n\t\t\t\tvar message ;\n\n\t\t\t\tif(arguments.length === 0){\n\t\t\t\t\tthrow new Error(\"Invalid argument.\"+\"length\");\n\n\t\t\t\t}else if(arguments.length == 1) {\n\n\t\t\t\t\tif (!(topic instanceof Message) && (typeof topic !== \"string\"))\n\t\t\t\t\t\tthrow new Error(\"Invalid argument:\"+ typeof topic);\n\n\t\t\t\t\tmessage = topic;\n\t\t\t\t\tif (typeof message.destinationName === \"undefined\")\n\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT,[message.destinationName,\"Message.destinationName\"]));\n\t\t\t\t\tclient.send(message);\n\n\t\t\t\t}else {\n\t\t\t\t\t//parameter checking in Message object\n\t\t\t\t\tmessage = new Message(payload);\n\t\t\t\t\tmessage.destinationName = topic;\n\t\t\t\t\tif(arguments.length >= 3)\n\t\t\t\t\t\tmessage.qos = qos;\n\t\t\t\t\tif(arguments.length >= 4)\n\t\t\t\t\t\tmessage.retained = retained;\n\t\t\t\t\tclient.send(message);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/**\n\t\t * Normal disconnect of this Messaging client from its server.\n\t\t *\n\t\t * @name Paho.Client#disconnect\n\t\t * @function\n\t\t * @throws {InvalidState} if the client is already disconnected.\n\t\t */\n\t\t\tthis.disconnect = function () {\n\t\t\t\tclient.disconnect();\n\t\t\t};\n\n\t\t\t/**\n\t\t * Get the contents of the trace log.\n\t\t *\n\t\t * @name Paho.Client#getTraceLog\n\t\t * @function\n\t\t * @return {Object[]} tracebuffer containing the time ordered trace records.\n\t\t */\n\t\t\tthis.getTraceLog = function () {\n\t\t\t\treturn client.getTraceLog();\n\t\t\t};\n\n\t\t\t/**\n\t\t * Start tracing.\n\t\t *\n\t\t * @name Paho.Client#startTrace\n\t\t * @function\n\t\t */\n\t\t\tthis.startTrace = function () {\n\t\t\t\tclient.startTrace();\n\t\t\t};\n\n\t\t\t/**\n\t\t * Stop tracing.\n\t\t *\n\t\t * @name Paho.Client#stopTrace\n\t\t * @function\n\t\t */\n\t\t\tthis.stopTrace = function () {\n\t\t\t\tclient.stopTrace();\n\t\t\t};\n\n\t\t\tthis.isConnected = function() {\n\t\t\t\treturn client.connected;\n\t\t\t};\n\t\t};\n\n\t\t/**\n\t * An application message, sent or received.\n\t * <p>\n\t * All attributes may be null, which implies the default values.\n\t *\n\t * @name Paho.Message\n\t * @constructor\n\t * @param {String|ArrayBuffer} payload The message data to be sent.\n\t * <p>\n\t * @property {string} payloadString <i>read only</i> The payload as a string if the payload consists of valid UTF-8 characters.\n\t * @property {ArrayBuffer} payloadBytes <i>read only</i> The payload as an ArrayBuffer.\n\t * <p>\n\t * @property {string} destinationName <b>mandatory</b> The name of the destination to which the message is to be sent\n\t *                    (for messages about to be sent) or the name of the destination from which the message has been received.\n\t *                    (for messages received by the onMessage function).\n\t * <p>\n\t * @property {number} qos The Quality of Service used to deliver the message.\n\t * <dl>\n\t *     <dt>0 Best effort (default).\n\t *     <dt>1 At least once.\n\t *     <dt>2 Exactly once.\n\t * </dl>\n\t * <p>\n\t * @property {Boolean} retained If true, the message is to be retained by the server and delivered\n\t *                     to both current and future subscriptions.\n\t *                     If false the server only delivers the message to current subscribers, this is the default for new Messages.\n\t *                     A received message has the retained boolean set to true if the message was published\n\t *                     with the retained boolean set to true\n\t *                     and the subscrption was made after the message has been published.\n\t * <p>\n\t * @property {Boolean} duplicate <i>read only</i> If true, this message might be a duplicate of one which has already been received.\n\t *                     This is only set on messages received from the server.\n\t *\n\t */\n\t\tvar Message = function (newPayload) {\n\t\t\tvar payload;\n\t\t\tif (   typeof newPayload === \"string\" ||\n\t\tnewPayload instanceof ArrayBuffer ||\n\t\t(ArrayBuffer.isView(newPayload) && !(newPayload instanceof DataView))\n\t\t\t) {\n\t\t\t\tpayload = newPayload;\n\t\t\t} else {\n\t\t\t\tthrow (format(ERROR.INVALID_ARGUMENT, [newPayload, \"newPayload\"]));\n\t\t\t}\n\n\t\t\tvar destinationName;\n\t\t\tvar qos = 0;\n\t\t\tvar retained = false;\n\t\t\tvar duplicate = false;\n\n\t\t\tObject.defineProperties(this,{\n\t\t\t\t\"payloadString\":{\n\t\t\t\t\tenumerable : true,\n\t\t\t\t\tget : function () {\n\t\t\t\t\t\tif (typeof payload === \"string\")\n\t\t\t\t\t\t\treturn payload;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\treturn parseUTF8(payload, 0, payload.length);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"payloadBytes\":{\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: function() {\n\t\t\t\t\t\tif (typeof payload === \"string\") {\n\t\t\t\t\t\t\tvar buffer = new ArrayBuffer(UTF8Length(payload));\n\t\t\t\t\t\t\tvar byteStream = new Uint8Array(buffer);\n\t\t\t\t\t\t\tstringToUTF8(payload, byteStream, 0);\n\t\t\n\t\t\t\t\t\t\treturn byteStream;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn payload;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"destinationName\":{\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: function() { return destinationName; },\n\t\t\t\t\tset: function(newDestinationName) {\n\t\t\t\t\t\tif (typeof newDestinationName === \"string\")\n\t\t\t\t\t\t\tdestinationName = newDestinationName;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [newDestinationName, \"newDestinationName\"]));\n\t\t\t\t\t} \n\t\t\t\t},\n\t\t\t\t\"qos\":{\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: function() { return qos; },\n\t\t\t\t\tset: function(newQos) {\n\t\t\t\t\t\tif (newQos === 0 || newQos === 1 || newQos === 2 )\n\t\t\t\t\t\t\tqos = newQos;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(\"Invalid argument:\"+newQos);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"retained\":{\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: function() { return retained; },\n\t\t\t\t\tset: function(newRetained) {\n\t\t\t\t\t\tif (typeof newRetained === \"boolean\")\n\t\t\t\t\t\t\tretained = newRetained;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthrow new Error(format(ERROR.INVALID_ARGUMENT, [newRetained, \"newRetained\"]));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"topic\":{\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: function() { return destinationName; },\n\t\t\t\t\tset: function(newTopic) {destinationName=newTopic;}\n\t\t\t\t},\n\t\t\t\t\"duplicate\":{\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: function() { return duplicate; },\n\t\t\t\t\tset: function(newDuplicate) {duplicate=newDuplicate;}\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\t// Module contents.\n\t\treturn {\n\t\t\tClient: Client,\n\t\t\tMessage: Message\n\t\t};\n\t// eslint-disable-next-line no-nested-ternary\n\t})(typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {});\n\treturn PahoMQTT;\n});\n","\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar Interactions_1 = require(\"./Interactions\");\nexports.InteractionsClass = Interactions_1.default;\nvar core_1 = require(\"@aws-amplify/core\");\nvar logger = new core_1.ConsoleLogger('Interactions');\nvar _instance = null;\nif (!_instance) {\n    logger.debug('Create Interactions Instance');\n    _instance = new Interactions_1.default(null);\n}\nvar Interactions = _instance;\ncore_1.default.register(Interactions);\nexports.default = Interactions;\n__export(require(\"./Providers/AWSLexProvider\"));\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@aws-amplify/core\");\nvar Providers_1 = require(\"./Providers\");\nvar logger = new core_1.ConsoleLogger('Interactions');\nvar Interactions = /** @class */ (function () {\n    /**\n     * Initialize PubSub with AWS configurations\n     *\n     * @param {InteractionsOptions} options - Configuration object for Interactions\n     */\n    function Interactions(options) {\n        this._options = options;\n        logger.debug('Interactions Options', this._options);\n        this._pluggables = {};\n    }\n    Interactions.prototype.getModuleName = function () {\n        return 'Interactions';\n    };\n    /**\n     *\n     * @param {InteractionsOptions} options - Configuration object for Interactions\n     * @return {Object} - The current configuration\n     */\n    Interactions.prototype.configure = function (options) {\n        var _this = this;\n        var opt = options ? options.Interactions || options : {};\n        logger.debug('configure Interactions', { opt: opt });\n        this._options = __assign({ bots: {} }, opt, opt.Interactions);\n        var aws_bots_config = this._options.aws_bots_config;\n        var bots_config = this._options.bots;\n        if (!Object.keys(bots_config).length && aws_bots_config) {\n            // Convert aws_bots_config to bots object\n            if (Array.isArray(aws_bots_config)) {\n                aws_bots_config.forEach(function (bot) {\n                    _this._options.bots[bot.name] = bot;\n                });\n            }\n        }\n        // Check if AWSLex provider is already on pluggables\n        if (!this._pluggables.AWSLexProvider && bots_config &&\n            Object.keys(bots_config).\n                map(function (key) { return bots_config[key]; }).\n                find(function (bot) { return !bot.providerName || bot.providerName === 'AWSLexProvider'; })) {\n            this._pluggables.AWSLexProvider = new Providers_1.AWSLexProvider();\n        }\n        Object.keys(this._pluggables).map(function (key) {\n            _this._pluggables[key].configure(_this._options.bots);\n        });\n        return this._options;\n    };\n    Interactions.prototype.addPluggable = function (pluggable) {\n        if (pluggable && pluggable.getCategory() === 'Interactions') {\n            if (!this._pluggables[pluggable.getProviderName()]) {\n                pluggable.configure(this._options.bots);\n                this._pluggables[pluggable.getProviderName()] = pluggable;\n                return;\n            }\n            else {\n                throw new Error('Bot ' + pluggable.getProviderName() + ' already plugged');\n            }\n        }\n    };\n    Interactions.prototype.send = function (botname, message) {\n        return __awaiter(this, void 0, void 0, function () {\n            var botProvider;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!this._options.bots || !this._options.bots[botname]) {\n                            throw new Error('Bot ' + botname + ' does not exist');\n                        }\n                        botProvider = this._options.bots[botname].providerName || 'AWSLexProvider';\n                        if (!this._pluggables[botProvider]) {\n                            throw new Error('Bot ' + botProvider +\n                                ' does not have valid pluggin did you try addPluggable first?');\n                        }\n                        return [4 /*yield*/, this._pluggables[botProvider].sendMessage(botname, message)];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    Interactions.prototype.onComplete = function (botname, callback) {\n        if (!this._options.bots || !this._options.bots[botname]) {\n            throw new Error('Bot ' + botname + ' does not exist');\n        }\n        var botProvider = this._options.bots[botname].providerName || 'AWSLexProvider';\n        if (!this._pluggables[botProvider]) {\n            throw new Error('Bot ' + botProvider +\n                ' does not have valid pluggin did you try addPluggable first?');\n        }\n        this._pluggables[botProvider].onComplete(botname, callback);\n    };\n    return Interactions;\n}());\nexports.default = Interactions;\n//# sourceMappingURL=Interactions.js.map","\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\n__export(require(\"./AWSLexProvider\"));\n__export(require(\"./InteractionsProvider\"));\n//# sourceMappingURL=index.js.map","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['lexruntime'] = {};\nAWS.LexRuntime = Service.defineService('lexruntime', ['2016-11-28']);\nObject.defineProperty(apiLoader.services['lexruntime'], '2016-11-28', {\n  get: function get() {\n    var model = require('../apis/runtime.lex-2016-11-28.min.json');\n    model.paginators = require('../apis/runtime.lex-2016-11-28.paginators.json').pagination;\n    return model;\n  },\n  enumerable: true,\n  configurable: true\n});\n\nmodule.exports = AWS.LexRuntime;\n","import { autoinject } from \"aurelia-framework\";\nimport { DefaultService } from \"shared-service/default-service\";\nimport { GetRecordsResponse } from \"shared-models/get-records-response\";\nimport { GetRecordsRequest } from \"shared-models/get-records-request\";\n\n@autoinject\nexport class GetRecordsService extends DefaultService{\n    private static readonly URI = \"get-records\";\n\n    constructor(){\n        super(GetRecordsService.name);\n    }\n\n    async getRecords(getRecordsRequest: GetRecordsRequest, recordConverter: (record: any) => any, self:any=this): Promise<GetRecordsResponse>{\n        let getRecordsResult = await this.post(GetRecordsService.URI, getRecordsRequest);   \n        let records = (getRecordsResult[\"records\"] || []).map(recordConverter.bind(self));\n        return new GetRecordsResponse({\n            recordType: getRecordsRequest.recordType,\n            records: records\n        });\n    }\n}","!function(t,_){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=_():\"function\"==typeof define&&define.amd?define(\"aws_amplify_ui\",[],_):\"object\"==typeof exports?exports.aws_amplify_ui=_():t.aws_amplify_ui=_()}(window,function(){return function(t){var _={};function n(o){if(_[o])return _[o].exports;var e=_[o]={i:o,l:!1,exports:{}};return t[o].call(e.exports,e,e.exports,n),e.l=!0,e.exports}return n.m=t,n.c=_,n.d=function(t,_,o){n.o(t,_)||Object.defineProperty(t,_,{enumerable:!0,get:o})},n.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.t=function(t,_){if(1&_&&(t=n(t)),8&_)return t;if(4&_&&\"object\"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,\"default\",{enumerable:!0,value:t}),2&_&&\"string\"!=typeof t)for(var e in t)n.d(o,e,function(_){return t[_]}.bind(null,e));return o},n.n=function(t){var _=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(_,\"a\",_),_},n.o=function(t,_){return Object.prototype.hasOwnProperty.call(t,_)},n.p=\"\",n(n.s=0)}([function(t,_,n){\"use strict\";function o(t){for(var n in t)_.hasOwnProperty(n)||(_[n]=t[n])}Object.defineProperty(_,\"__esModule\",{value:!0}),o(n(1)),o(n(2)),o(n(3)),o(n(4)),o(n(5)),o(n(6)),o(n(7)),o(n(8)),o(n(9)),o(n(10)),o(n(11)),o(n(12)),o(n(13))},function(t,_,n){t.exports={a:\"Anchor__a___1_Iz8\"}},function(t,_,n){t.exports={button:\"Button__button___vS7Mv\",signInButton:\"Button__signInButton___3bUH-\",googleSignInButton:\"Button__googleSignInButton___1YiCu\",signInButtonIcon:\"Button__signInButtonIcon___ihN75\",auth0SignInButton:\"Button__auth0SignInButton___znnCj\",facebookSignInButton:\"Button__facebookSignInButton___34Txh\",amazonSignInButton:\"Button__amazonSignInButton___2EMtl\",oAuthSignInButton:\"Button__oAuthSignInButton___3UGOl\",signInButtonContent:\"Button__signInButtonContent___xqTXJ\"}},function(t,_,n){t.exports={formContainer:\"Form__formContainer___1GA3x\",formSection:\"Form__formSection___1PPvW\",formField:\"Form__formField___38Ikl\",formRow:\"Form__formRow___2mwRs\"}},function(t,_,n){t.exports={hint:\"Hint__hint___2XngB\"}},function(t,_,n){t.exports={input:\"Input__input___3e_bf\",inputLabel:\"Input__inputLabel___3VF0S\",label:\"Input__label___23sO8\",radio:\"Input__radio___2hllK\"}},function(t,_,n){t.exports={navBar:\"Nav__navBar___xtCFA\",navRight:\"Nav__navRight___1QG2J\",nav:\"Nav__nav___2Dx2Y\",navItem:\"Nav__navItem___1LtFQ\"}},function(t,_,n){t.exports={photoPickerButton:\"PhotoPicker__photoPickerButton___2XdVn\",photoPlaceholder:\"PhotoPicker__photoPlaceholder___2JXO4\",photoPlaceholderIcon:\"PhotoPicker__photoPlaceholderIcon___3Et71\"}},function(t,_,n){t.exports={container:\"Section__container___3YYTG\",actionRow:\"Section__actionRow___2LWSU\",sectionHeader:\"Section__sectionHeader___2djyg\",sectionHeaderHint:\"Section__sectionHeaderHint___3Wxdc\",sectionBody:\"Section__sectionBody___ihqqd\",sectionFooter:\"Section__sectionFooter___1T54C\",sectionFooterPrimaryContent:\"Section__sectionFooterPrimaryContent___2r9ZX\",sectionFooterSecondaryContent:\"Section__sectionFooterSecondaryContent___Nj41Q\"}},function(t,_,n){t.exports={selectInput:\"SelectInput__selectInput___3efO4\"}},function(t,_,n){t.exports={strike:\"Strike__strike___1XV1b\",strikeContent:\"Strike__strikeContent___10gLb\"}},function(t,_,n){t.exports={toast:\"Toast__toast___XXr3v\",toastClose:\"Toast__toastClose___18lU4\"}},function(t,_,n){t.exports={totpQrcode:\"Totp__totpQrcode___1crLx\"}},function(t,_,n){t.exports={sumerianSceneContainer:\"XR__sumerianSceneContainer___3nVMt\",sumerianScene:\"XR__sumerianScene___2Tt7-\",loadingOverlay:\"XR__loadingOverlay___IbqcI\",loadingContainer:\"XR__loadingContainer___2Itxb\",loadingLogo:\"XR__loadingLogo___Ub7xQ\",loadingSceneName:\"XR__loadingSceneName___3__ne\",loadingBar:\"XR__loadingBar___2vcke\",loadingBarFill:\"XR__loadingBarFill___3M-D9\",sceneErrorText:\"XR__sceneErrorText___2y0tp\",sceneBar:\"XR__sceneBar___2ShrP\",sceneName:\"XR__sceneName___1ApHr\",sceneActions:\"XR__sceneActions___7plGs\",actionButton:\"XR__actionButton___2poIM\",tooltip:\"XR__tooltip___UYyhn\",actionIcon:\"XR__actionIcon___2qnd2\",autoShowTooltip:\"XR__autoShowTooltip___V1QH7\"}}])});\n//# sourceMappingURL=aws-amplify-ui.js.map","\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar XR_1 = require(\"./XR\");\nexports.XRClass = XR_1.default;\nvar core_1 = require(\"@aws-amplify/core\");\nvar logger = new core_1.ConsoleLogger('XR');\nvar _instance = null;\nif (!_instance) {\n    logger.debug('Create XR Instance');\n    _instance = new XR_1.default(null);\n}\nvar XR = _instance;\ncore_1.default.register(XR);\nexports.default = XR;\n__export(require(\"./Providers/SumerianProvider\"));\n__export(require(\"./Errors\"));\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar core_1 = require(\"@aws-amplify/core\");\nvar SumerianProvider_1 = require(\"./Providers/SumerianProvider\");\nvar Errors_1 = require(\"./Errors\");\nvar logger = new core_1.ConsoleLogger('XR');\nvar DEFAULT_PROVIDER_NAME = \"SumerianProvider\";\nvar XR = /** @class */ (function () {\n    /**\n     * Initialize XR with AWS configurations\n     *\n     * @param {XROptions} options - Configuration object for XR\n     */\n    function XR(options) {\n        this._options = options;\n        logger.debug('XR Options', this._options);\n        this._defaultProvider = DEFAULT_PROVIDER_NAME;\n        this._pluggables = {};\n        // Add default provider\n        this.addPluggable(new SumerianProvider_1.SumerianProvider());\n    }\n    /**\n     * Configure XR part with configurations\n     *\n     * @param {XROptions} config - Configuration for XR\n     * @return {Object} - The current configuration\n     */\n    XR.prototype.configure = function (options) {\n        var _this = this;\n        var opt = options ? options.XR || options : {};\n        logger.debug('configure XR', { opt: opt });\n        this._options = Object.assign({}, this._options, opt);\n        Object.entries(this._pluggables).map(function (_a) {\n            var name = _a[0], provider = _a[1];\n            if (name === _this._defaultProvider && !opt[_this._defaultProvider]) {\n                provider.configure(_this._options);\n            }\n            else {\n                provider.configure(_this._options[name]);\n            }\n        });\n        return this._options;\n    };\n    /**\n     * add plugin into XR category\n     * @param {Object} pluggable - an instance of the plugin\n     */\n    XR.prototype.addPluggable = function (pluggable) {\n        return __awaiter(this, void 0, void 0, function () {\n            var config;\n            return __generator(this, function (_a) {\n                if (pluggable && pluggable.getCategory() === 'XR') {\n                    this._pluggables[pluggable.getProviderName()] = pluggable;\n                    config = pluggable.configure(this._options);\n                    return [2 /*return*/, config];\n                }\n                return [2 /*return*/];\n            });\n        });\n    };\n    XR.prototype.loadScene = function (sceneName, domElementId, sceneOptions, provider) {\n        if (sceneOptions === void 0) { sceneOptions = {}; }\n        if (provider === void 0) { provider = this._defaultProvider; }\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!this._pluggables[provider])\n                            throw new Errors_1.XRProviderNotConfigured(\"Provider '\" + provider + \"' not configured\");\n                        return [4 /*yield*/, this._pluggables[provider].loadScene(sceneName, domElementId, sceneOptions)];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    XR.prototype.isSceneLoaded = function (sceneName, provider) {\n        if (provider === void 0) { provider = this._defaultProvider; }\n        if (!this._pluggables[provider])\n            throw new Errors_1.XRProviderNotConfigured(\"Provider '\" + provider + \"' not configured\");\n        return this._pluggables[provider].isSceneLoaded(sceneName);\n    };\n    XR.prototype.getSceneController = function (sceneName, provider) {\n        if (provider === void 0) { provider = this._defaultProvider; }\n        if (!this._pluggables[provider])\n            throw new Errors_1.XRProviderNotConfigured(\"Provider '\" + provider + \"' not configured\");\n        return this._pluggables[provider].getSceneController(sceneName);\n    };\n    XR.prototype.isVRCapable = function (sceneName, provider) {\n        if (provider === void 0) { provider = this._defaultProvider; }\n        if (!this._pluggables[provider])\n            throw new Errors_1.XRProviderNotConfigured(\"Provider '\" + provider + \"' not configured\");\n        return this._pluggables[provider].isVRCapable(sceneName);\n    };\n    XR.prototype.isVRPresentationActive = function (sceneName, provider) {\n        if (provider === void 0) { provider = this._defaultProvider; }\n        if (!this._pluggables[provider])\n            throw new Errors_1.XRProviderNotConfigured(\"Provider '\" + provider + \"' not configured\");\n        return this._pluggables[provider].isVRPresentationActive(sceneName);\n    };\n    XR.prototype.start = function (sceneName, provider) {\n        if (provider === void 0) { provider = this._defaultProvider; }\n        if (!this._pluggables[provider])\n            throw new Errors_1.XRProviderNotConfigured(\"Provider '\" + provider + \"' not configured\");\n        return this._pluggables[provider].start(sceneName);\n    };\n    XR.prototype.enterVR = function (sceneName, provider) {\n        if (provider === void 0) { provider = this._defaultProvider; }\n        if (!this._pluggables[provider])\n            throw new Errors_1.XRProviderNotConfigured(\"Provider '\" + provider + \"' not configured\");\n        return this._pluggables[provider].enterVR(sceneName);\n    };\n    XR.prototype.exitVR = function (sceneName, provider) {\n        if (provider === void 0) { provider = this._defaultProvider; }\n        if (!this._pluggables[provider])\n            throw new Errors_1.XRProviderNotConfigured(\"Provider '\" + provider + \"' not configured\");\n        return this._pluggables[provider].exitVR(sceneName);\n    };\n    XR.prototype.isMuted = function (sceneName, provider) {\n        if (provider === void 0) { provider = this._defaultProvider; }\n        if (!this._pluggables[provider])\n            throw new Errors_1.XRProviderNotConfigured(\"Provider '\" + provider + \"' not configured\");\n        return this._pluggables[provider].isMuted(sceneName);\n    };\n    XR.prototype.setMuted = function (sceneName, muted, provider) {\n        if (provider === void 0) { provider = this._defaultProvider; }\n        if (!this._pluggables[provider])\n            throw new Errors_1.XRProviderNotConfigured(\"Provider '\" + provider + \"' not configured\");\n        return this._pluggables[provider].setMuted(sceneName, muted);\n    };\n    XR.prototype.onSceneEvent = function (sceneName, eventName, eventHandler, provider) {\n        if (provider === void 0) { provider = this._defaultProvider; }\n        if (!this._pluggables[provider])\n            throw new Errors_1.XRProviderNotConfigured(\"Provider '\" + provider + \"' not configured\");\n        return this._pluggables[provider].onSceneEvent(sceneName, eventName, eventHandler);\n    };\n    XR.prototype.enableAudio = function (sceneName, provider) {\n        if (provider === void 0) { provider = this._defaultProvider; }\n        if (!this._pluggables[provider])\n            throw new Errors_1.XRProviderNotConfigured(\"Provider '\" + provider + \"' not configured\");\n        return this._pluggables[provider].enableAudio(sceneName);\n    };\n    return XR;\n}());\nexports.default = XR;\n//# sourceMappingURL=XR.js.map","\"use strict\";\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@aws-amplify/core\");\nvar logger = new core_1.ConsoleLogger('AbstractXRProvider');\nvar AbstractXRProvider = /** @class */ (function () {\n    function AbstractXRProvider(options) {\n        if (options === void 0) { options = {}; }\n        this._config = options;\n    }\n    AbstractXRProvider.prototype.configure = function (config) {\n        if (config === void 0) { config = {}; }\n        this._config = __assign({}, config, this._config);\n        logger.debug(\"configure \" + this.getProviderName(), this._config);\n        return this.options;\n    };\n    AbstractXRProvider.prototype.getCategory = function () { return 'XR'; };\n    Object.defineProperty(AbstractXRProvider.prototype, \"options\", {\n        get: function () { return __assign({}, this._config); },\n        enumerable: true,\n        configurable: true\n    });\n    return AbstractXRProvider;\n}());\nexports.AbstractXRProvider = AbstractXRProvider;\n//# sourceMappingURL=XRProvider.js.map","\"use strict\";\n\n/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n  var list = []; // return the list of modules as css string\n\n  list.toString = function toString() {\n    return this.map(function (item) {\n      var content = cssWithMappingToString(item, useSourceMap);\n\n      if (item[2]) {\n        return \"@media \".concat(item[2], \"{\").concat(content, \"}\");\n      }\n\n      return content;\n    }).join('');\n  }; // import a list of modules into the list\n  // eslint-disable-next-line func-names\n\n\n  list.i = function (modules, mediaQuery) {\n    if (typeof modules === 'string') {\n      // eslint-disable-next-line no-param-reassign\n      modules = [[null, modules, '']];\n    }\n\n    var alreadyImportedModules = {};\n\n    for (var i = 0; i < this.length; i++) {\n      // eslint-disable-next-line prefer-destructuring\n      var id = this[i][0];\n\n      if (id != null) {\n        alreadyImportedModules[id] = true;\n      }\n    }\n\n    for (var _i = 0; _i < modules.length; _i++) {\n      var item = modules[_i]; // skip already imported module\n      // this implementation is not 100% perfect for weird media query combinations\n      // when a module is imported multiple times with different media queries.\n      // I hope this will never occur (Hey this way we have smaller bundles)\n\n      if (item[0] == null || !alreadyImportedModules[item[0]]) {\n        if (mediaQuery && !item[2]) {\n          item[2] = mediaQuery;\n        } else if (mediaQuery) {\n          item[2] = \"(\".concat(item[2], \") and (\").concat(mediaQuery, \")\");\n        }\n\n        list.push(item);\n      }\n    }\n  };\n\n  return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n  var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n  var cssMapping = item[3];\n\n  if (!cssMapping) {\n    return content;\n  }\n\n  if (useSourceMap && typeof btoa === 'function') {\n    var sourceMapping = toComment(cssMapping);\n    var sourceURLs = cssMapping.sources.map(function (source) {\n      return \"/*# sourceURL=\".concat(cssMapping.sourceRoot).concat(source, \" */\");\n    });\n    return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n  }\n\n  return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n  // eslint-disable-next-line no-undef\n  var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n  var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n  return \"/*# \".concat(data, \" */\");\n}","\"use strict\";\n\nmodule.exports = function (url, needQuotes) {\n  // eslint-disable-next-line no-underscore-dangle, no-param-reassign\n  url = url.__esModule ? url.default : url;\n\n  if (typeof url !== 'string') {\n    return url;\n  } // If url is already wrapped in quotes, remove them\n\n\n  if (/^['\"].*['\"]$/.test(url)) {\n    // eslint-disable-next-line no-param-reassign\n    url = url.slice(1, -1);\n  } // Should url be wrapped?\n  // See https://drafts.csswg.org/css-values-3/#urls\n\n\n  if (/[\"'() \\t\\n]/.test(url) || needQuotes) {\n    return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n'), \"\\\"\");\n  }\n\n  return url;\n};","module.exports = __webpack_public_path__ + \"9c74e172f87984c48ddf5c8108cabe67.png\";","module.exports = __webpack_public_path__ + \"64b3e814a66c2719b15abf8f7998bd73.woff2\";","module.exports = __webpack_public_path__ + \"0be94a07755ba9b88f2ebcac0f23a3da.woff\";","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./ConsoleLogger\"));\n//# sourceMappingURL=index.js.map","module.exports = __webpack_public_path__ + \"f14c3b2ff7c821a4c838debbffd6ad2d.ttf\";","module.exports = __webpack_public_path__ + \"7726a281c1d436eb038f78c6e9048c96.svg\";","module.exports = __webpack_public_path__ + \"7980a6361c25b4665dbbe92d4488783c.woff2\";","module.exports = __webpack_public_path__ + \"7aaf5675efd6339e9aba53ecbe5f1e36.woff\";","module.exports = __webpack_public_path__ + \"f33342516f7cbe46f1d6b68f9e7bbeda.ttf\";","module.exports = __webpack_public_path__ + \"da8a235bb207c74eea21507f3a86a53b.svg\";","module.exports = __webpack_public_path__ + \"9f4ce3dc689981a1b87faab0f5484f9e.woff2\";","module.exports = __webpack_public_path__ + \"9f018d1025561e96439f7c0e9026301a.woff\";","module.exports = __webpack_public_path__ + \"b7d071b9c3c197bff4af902070622423.ttf\";","module.exports = __webpack_public_path__ + \"38975343b586296e9b73e6b56cc3ec5d.svg\";","'use strict';\n\nvar bind = require('./helpers/bind');\nvar isBuffer = require('is-buffer');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n  return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n  return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n  return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  var result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n  return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n  return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n  return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n  return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n  return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n  return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n  return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n  return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n  return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n  return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n  return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n  if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n                                           navigator.product === 'NativeScript' ||\n                                           navigator.product === 'NS')) {\n    return false;\n  }\n  return (\n    typeof window !== 'undefined' &&\n    typeof document !== 'undefined'\n  );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (var i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    for (var key in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        fn.call(null, obj[key], key, obj);\n      }\n    }\n  }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (typeof result[key] === 'object' && typeof val === 'object') {\n      result[key] = merge(result[key], val);\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Function equal to merge with the difference being that no reference\n * to original objects is kept.\n *\n * @see merge\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction deepMerge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (typeof result[key] === 'object' && typeof val === 'object') {\n      result[key] = deepMerge(result[key], val);\n    } else if (typeof val === 'object') {\n      result[key] = deepMerge({}, val);\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n  forEach(b, function assignValue(val, key) {\n    if (thisArg && typeof val === 'function') {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  });\n  return a;\n}\n\nmodule.exports = {\n  isArray: isArray,\n  isArrayBuffer: isArrayBuffer,\n  isBuffer: isBuffer,\n  isFormData: isFormData,\n  isArrayBufferView: isArrayBufferView,\n  isString: isString,\n  isNumber: isNumber,\n  isObject: isObject,\n  isUndefined: isUndefined,\n  isDate: isDate,\n  isFile: isFile,\n  isBlob: isBlob,\n  isFunction: isFunction,\n  isStream: isStream,\n  isURLSearchParams: isURLSearchParams,\n  isStandardBrowserEnv: isStandardBrowserEnv,\n  forEach: forEach,\n  merge: merge,\n  deepMerge: deepMerge,\n  extend: extend,\n  trim: trim\n};\n","// With default aurelia-loader-webpack config, this module is added as an extra entry\n// before any other code executes so that PAL.Loader is properly configured.\n// There are several tricky points worth noticing.\n// \n// We don't add aurelia-loader-webpack itself as an entry point (used to until 2.0 RC2)\n// because it (transitively) brings too much bagage with itself, most notably polyfills.\n// This made it super-hard to add other polyfills before Aurelia's and led to various bugs.\n//\n// We don't add custom code in aurelia-pal or aurelia-loader or aurelia-bootstrapper to detect\n// the Webpack environment and configure the loader because they might live in a DLL.\n// If they do, they would bring aurelia-loader-webpack along in the DLL and this is a special \n// library that *has to be in the main chunk.*\n//\n// The over-complicated design I've settled upon in the end is to use this special module\n// as an entry point that configures aurelia-loader-webpack. It has minimal static imports:\n// just aurelia-pal, which itself has no other dependencies and doesn't run much code.\n// It hacks the loader field into a getter so that it can synchronously load aurelia-loader-webpack\n// just in time when it is demanded by aurelia-bootstrapper.\n// This enables users to load polyfills before aurelia-loader-webpack is actually loaded.\n\nimport { PLATFORM } from \"aurelia-pal\";\n\nvar Loader;\n\nObject.defineProperty(PLATFORM, \"Loader\", {\n  get: function() {\n    return Loader || (Loader = require(\"aurelia-loader-webpack\").WebpackLoader);\n  },\n  set: function(value) {\n    Loader = value;\n  }\n});\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nimport { Origin } from 'aurelia-metadata';\nimport { Loader } from 'aurelia-loader';\nimport { DOM, PLATFORM } from 'aurelia-pal';\n/**\n* An implementation of the TemplateLoader interface implemented with text-based loading.\n*/\nvar TextTemplateLoader = /** @class */ (function () {\n    function TextTemplateLoader() {\n    }\n    /**\n    * Loads a template.\n    * @param loader The loader that is requesting the template load.\n    * @param entry The TemplateRegistryEntry to load and populate with a template.\n    * @return A promise which resolves when the TemplateRegistryEntry is loaded with a template.\n    */\n    TextTemplateLoader.prototype.loadTemplate = function (loader, entry) {\n        return __awaiter(this, void 0, void 0, function () {\n            var text;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, loader.loadText(entry.address)];\n                    case 1:\n                        text = _a.sent();\n                        entry.template = DOM.createTemplateFromMarkup(text);\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    return TextTemplateLoader;\n}());\nexport { TextTemplateLoader };\nexport function ensureOriginOnExports(moduleExports, moduleId) {\n    var target = moduleExports;\n    var key;\n    var exportedValue;\n    if (target.__useDefault) {\n        target = target.default;\n    }\n    Origin.set(target, new Origin(moduleId, 'default'));\n    if (typeof target === 'object') {\n        for (key in target) {\n            exportedValue = target[key];\n            if (typeof exportedValue === 'function') {\n                Origin.set(exportedValue, new Origin(moduleId, key));\n            }\n        }\n    }\n    return moduleExports;\n}\n/**\n* A default implementation of the Loader abstraction which works with webpack (extended common-js style).\n*/\nvar WebpackLoader = /** @class */ (function (_super) {\n    __extends(WebpackLoader, _super);\n    function WebpackLoader() {\n        var _this = _super.call(this) || this;\n        _this.moduleRegistry = Object.create(null);\n        _this.loaderPlugins = Object.create(null);\n        _this.modulesBeingLoaded = new Map();\n        _this.useTemplateLoader(new TextTemplateLoader());\n        _this.addPlugin('template-registry-entry', {\n            fetch: function (moduleId) { return __awaiter(_this, void 0, void 0, function () {\n                var HmrContext, entry;\n                var _this = this;\n                return __generator(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            // HMR:\n                            if (module.hot) {\n                                if (!this.hmrContext) {\n                                    HmrContext = require('aurelia-hot-module-reload').HmrContext;\n                                    this.hmrContext = new HmrContext(this);\n                                }\n                                module.hot.accept(moduleId, function () { return __awaiter(_this, void 0, void 0, function () {\n                                    return __generator(this, function (_a) {\n                                        switch (_a.label) {\n                                            case 0: return [4 /*yield*/, this.hmrContext.handleViewChange(moduleId)];\n                                            case 1:\n                                                _a.sent();\n                                                return [2 /*return*/];\n                                        }\n                                    });\n                                }); });\n                            }\n                            entry = this.getOrCreateTemplateRegistryEntry(moduleId);\n                            if (!!entry.templateIsLoaded) return [3 /*break*/, 2];\n                            return [4 /*yield*/, this.templateLoader.loadTemplate(this, entry)];\n                        case 1:\n                            _a.sent();\n                            _a.label = 2;\n                        case 2: return [2 /*return*/, entry];\n                    }\n                });\n            }); }\n        });\n        PLATFORM.eachModule = function (callback) {\n            var registry = __webpack_require__.c;\n            var cachedModuleIds = Object.getOwnPropertyNames(registry);\n            cachedModuleIds\n                // Note: we use .some here like a .forEach that can be \"break\"ed out of.\n                // It will stop iterating only when a truthy value is returned.\n                // Even though the docs say \"true\" explicitly, loader-default also goes by truthy\n                // and this is to keep it consistent with that.\n                .some(function (moduleId) {\n                var moduleExports = registry[moduleId].exports;\n                if (typeof moduleExports === 'object') {\n                    return callback(moduleId, moduleExports);\n                }\n                return false;\n            });\n        };\n        return _this;\n    }\n    WebpackLoader.prototype._import = function (address, defaultHMR) {\n        if (defaultHMR === void 0) { defaultHMR = true; }\n        return __awaiter(this, void 0, void 0, function () {\n            var addressParts, moduleId, loaderPlugin, plugin_1, asyncModuleId, callback;\n            var _this = this;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        addressParts = address.split('!');\n                        moduleId = addressParts.splice(addressParts.length - 1, 1)[0];\n                        loaderPlugin = addressParts.length === 1 ? addressParts[0] : null;\n                        if (!loaderPlugin) return [3 /*break*/, 2];\n                        plugin_1 = this.loaderPlugins[loaderPlugin];\n                        if (!plugin_1) {\n                            throw new Error(\"Plugin \" + loaderPlugin + \" is not registered in the loader.\");\n                        }\n                        if (module.hot && plugin_1.hot) {\n                            module.hot.accept(moduleId, function () { return plugin_1.hot(moduleId); });\n                        }\n                        return [4 /*yield*/, plugin_1.fetch(moduleId)];\n                    case 1: return [2 /*return*/, _a.sent()];\n                    case 2:\n                        if (__webpack_require__.m[moduleId]) {\n                            if (defaultHMR && module.hot && this.hmrContext) {\n                                module.hot.accept(moduleId, function () { return _this.hmrContext.handleModuleChange(moduleId, module.hot); });\n                            }\n                            return [2 /*return*/, __webpack_require__(moduleId)];\n                        }\n                        asyncModuleId = \"async!\" + moduleId;\n                        if (!__webpack_require__.m[asyncModuleId]) return [3 /*break*/, 4];\n                        if (defaultHMR && module.hot && this.hmrContext) {\n                            module.hot.accept(moduleId, function () { return _this.hmrContext.handleModuleChange(moduleId, module.hot); });\n                            module.hot.accept(asyncModuleId, function () { return _this.hmrContext.handleModuleChange(moduleId, module.hot); });\n                        }\n                        callback = __webpack_require__(asyncModuleId);\n                        return [4 /*yield*/, new Promise(callback)];\n                    case 3: return [2 /*return*/, _a.sent()];\n                    case 4: throw new Error(\"Unable to find module with ID: \" + moduleId);\n                }\n            });\n        });\n    };\n    /**\n    * Maps a module id to a source.\n    * @param id The module id.\n    * @param source The source to map the module to.\n    */\n    WebpackLoader.prototype.map = function (id, source) { };\n    /**\n    * Normalizes a module id.\n    * @param moduleId The module id to normalize.\n    * @param relativeTo What the module id should be normalized relative to.\n    * @return The normalized module id.\n    */\n    WebpackLoader.prototype.normalizeSync = function (moduleId, relativeTo) {\n        return moduleId;\n    };\n    /**\n    * Normalizes a module id.\n    * @param moduleId The module id to normalize.\n    * @param relativeTo What the module id should be normalized relative to.\n    * @return The normalized module id.\n    */\n    WebpackLoader.prototype.normalize = function (moduleId, relativeTo) {\n        return Promise.resolve(moduleId);\n    };\n    /**\n    * Instructs the loader to use a specific TemplateLoader instance for loading templates\n    * @param templateLoader The instance of TemplateLoader to use for loading templates.\n    */\n    WebpackLoader.prototype.useTemplateLoader = function (templateLoader) {\n        this.templateLoader = templateLoader;\n    };\n    /**\n    * Loads a collection of modules.\n    * @param ids The set of module ids to load.\n    * @return A Promise for an array of loaded modules.\n    */\n    WebpackLoader.prototype.loadAllModules = function (ids) {\n        var _this = this;\n        return Promise.all(ids.map(function (id) { return _this.loadModule(id); }));\n    };\n    /**\n    * Loads a module.\n    * @param moduleId The module ID to load.\n    * @return A Promise for the loaded module.\n    */\n    WebpackLoader.prototype.loadModule = function (moduleId, defaultHMR) {\n        if (defaultHMR === void 0) { defaultHMR = true; }\n        return __awaiter(this, void 0, void 0, function () {\n            var existing, beingLoaded, moduleExports;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        existing = this.moduleRegistry[moduleId];\n                        if (existing) {\n                            return [2 /*return*/, existing];\n                        }\n                        beingLoaded = this.modulesBeingLoaded.get(moduleId);\n                        if (beingLoaded) {\n                            return [2 /*return*/, beingLoaded];\n                        }\n                        beingLoaded = this._import(moduleId, defaultHMR);\n                        this.modulesBeingLoaded.set(moduleId, beingLoaded);\n                        return [4 /*yield*/, beingLoaded];\n                    case 1:\n                        moduleExports = _a.sent();\n                        this.moduleRegistry[moduleId] = ensureOriginOnExports(moduleExports, moduleId);\n                        this.modulesBeingLoaded.delete(moduleId);\n                        return [2 /*return*/, moduleExports];\n                }\n            });\n        });\n    };\n    /**\n    * Loads a template.\n    * @param url The url of the template to load.\n    * @return A Promise for a TemplateRegistryEntry containing the template.\n    */\n    WebpackLoader.prototype.loadTemplate = function (url) {\n        return this.loadModule(this.applyPluginToUrl(url, 'template-registry-entry'), false);\n    };\n    /**\n    * Loads a text-based resource.\n    * @param url The url of the text file to load.\n    * @return A Promise for text content.\n    */\n    WebpackLoader.prototype.loadText = function (url) {\n        return __awaiter(this, void 0, void 0, function () {\n            var result;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.loadModule(url, false)];\n                    case 1:\n                        result = _a.sent();\n                        if (result instanceof Array && result[0] instanceof Array && result.hasOwnProperty('toString')) {\n                            // we're dealing with a file loaded using the css-loader:\n                            return [2 /*return*/, result.toString()];\n                        }\n                        return [2 /*return*/, result];\n                }\n            });\n        });\n    };\n    /**\n    * Alters a module id so that it includes a plugin loader.\n    * @param url The url of the module to load.\n    * @param pluginName The plugin to apply to the module id.\n    * @return The plugin-based module id.\n    */\n    WebpackLoader.prototype.applyPluginToUrl = function (url, pluginName) {\n        return pluginName + \"!\" + url;\n    };\n    /**\n    * Registers a plugin with the loader.\n    * @param pluginName The name of the plugin.\n    * @param implementation The plugin implementation.\n    */\n    WebpackLoader.prototype.addPlugin = function (pluginName, implementation) {\n        this.loaderPlugins[pluginName] = implementation;\n    };\n    return WebpackLoader;\n}(Loader));\nexport { WebpackLoader };\nPLATFORM.Loader = WebpackLoader;\n","module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nexport function getIntrospectionQuery(options) {\n  var descriptions = !(options && options.descriptions === false);\n  return '\\n    query IntrospectionQuery {\\n      __schema {\\n        queryType { name }\\n        mutationType { name }\\n        subscriptionType { name }\\n        types {\\n          ...FullType\\n        }\\n        directives {\\n          name\\n          ' + (descriptions ? 'description' : '') + '\\n          locations\\n          args {\\n            ...InputValue\\n          }\\n        }\\n      }\\n    }\\n\\n    fragment FullType on __Type {\\n      kind\\n      name\\n      ' + (descriptions ? 'description' : '') + '\\n      fields(includeDeprecated: true) {\\n        name\\n        ' + (descriptions ? 'description' : '') + '\\n        args {\\n          ...InputValue\\n        }\\n        type {\\n          ...TypeRef\\n        }\\n        isDeprecated\\n        deprecationReason\\n      }\\n      inputFields {\\n        ...InputValue\\n      }\\n      interfaces {\\n        ...TypeRef\\n      }\\n      enumValues(includeDeprecated: true) {\\n        name\\n        ' + (descriptions ? 'description' : '') + '\\n        isDeprecated\\n        deprecationReason\\n      }\\n      possibleTypes {\\n        ...TypeRef\\n      }\\n    }\\n\\n    fragment InputValue on __InputValue {\\n      name\\n      ' + (descriptions ? 'description' : '') + '\\n      type { ...TypeRef }\\n      defaultValue\\n    }\\n\\n    fragment TypeRef on __Type {\\n      kind\\n      name\\n      ofType {\\n        kind\\n        name\\n        ofType {\\n          kind\\n          name\\n          ofType {\\n            kind\\n            name\\n            ofType {\\n              kind\\n              name\\n              ofType {\\n                kind\\n                name\\n                ofType {\\n                  kind\\n                  name\\n                  ofType {\\n                    kind\\n                    name\\n                  }\\n                }\\n              }\\n            }\\n          }\\n        }\\n      }\\n    }\\n  ';\n}\n\nexport var introspectionQuery = getIntrospectionQuery();","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { Kind } from '../language/kinds';\n\n\n/**\n * Returns an operation AST given a document AST and optionally an operation\n * name. If a name is not provided, an operation is only returned if only one is\n * provided in the document.\n */\nexport function getOperationAST(documentAST, operationName) {\n  var operation = null;\n  for (var i = 0; i < documentAST.definitions.length; i++) {\n    var definition = documentAST.definitions[i];\n    if (definition.kind === Kind.OPERATION_DEFINITION) {\n      if (!operationName) {\n        // If no operation name was provided, only return an Operation if there\n        // is one defined in the document. Upon encountering the second, return\n        // null.\n        if (operation) {\n          return null;\n        }\n        operation = definition;\n      } else if (definition.name && definition.name.value === operationName) {\n        return definition;\n      }\n    }\n  }\n  return operation;\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from '../jsutils/invariant';\nimport { getIntrospectionQuery } from './introspectionQuery';\nimport { GraphQLSchema } from '../type/schema';\nimport { execute } from '../execution/execute';\nimport { parse } from '../language/parser';\n\n\n/**\n * Build an IntrospectionQuery from a GraphQLSchema\n *\n * IntrospectionQuery is useful for utilities that care about type and field\n * relationships, but do not need to traverse through those relationships.\n *\n * This is the inverse of buildClientSchema. The primary use case is outside\n * of the server context, for instance when doing schema comparisons.\n */\nexport function introspectionFromSchema(schema, options) {\n  var queryAST = parse(getIntrospectionQuery(options));\n  var result = execute(schema, queryAST);\n  !(!result.then && !result.errors && result.data) ? invariant(0) : void 0;\n  return result.data;\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from '../jsutils/invariant';\nimport keyMap from '../jsutils/keyMap';\nimport keyValMap from '../jsutils/keyValMap';\nimport { valueFromAST } from './valueFromAST';\nimport { parseValue } from '../language/parser';\nimport { GraphQLSchema } from '../type/schema';\n\nimport { DirectiveLocation } from '../language/directiveLocation';\n\nimport { isInputType, isOutputType, GraphQLScalarType, GraphQLObjectType, GraphQLInterfaceType, GraphQLUnionType, GraphQLEnumType, GraphQLInputObjectType, assertNullableType, assertObjectType, assertInterfaceType } from '../type/definition';\n\nimport { GraphQLList, GraphQLNonNull } from '../type/wrappers';\n\nimport { GraphQLDirective } from '../type/directives';\n\nimport { introspectionTypes, TypeKind } from '../type/introspection';\n\nimport { specifiedScalarTypes } from '../type/scalars';\n\n/**\n * Build a GraphQLSchema for use by client tools.\n *\n * Given the result of a client running the introspection query, creates and\n * returns a GraphQLSchema instance which can be then used with all graphql-js\n * tools, but cannot be used to execute a query, as introspection does not\n * represent the \"resolver\", \"parse\" or \"serialize\" functions or any other\n * server-internal mechanisms.\n *\n * This function expects a complete introspection result. Don't forget to check\n * the \"errors\" field of a server response before calling this function.\n */\nexport function buildClientSchema(introspection, options) {\n  // Get the schema from the introspection result.\n  var schemaIntrospection = introspection.__schema;\n\n  // Converts the list of types into a keyMap based on the type names.\n  var typeIntrospectionMap = keyMap(schemaIntrospection.types, function (type) {\n    return type.name;\n  });\n\n  // A cache to use to store the actual GraphQLType definition objects by name.\n  // Initialize to the GraphQL built in scalars. All functions below are inline\n  // so that this type def cache is within the scope of the closure.\n  var typeDefCache = keyMap(specifiedScalarTypes.concat(introspectionTypes), function (type) {\n    return type.name;\n  });\n\n  // Given a type reference in introspection, return the GraphQLType instance.\n  // preferring cached instances before building new instances.\n  function getType(typeRef) {\n    if (typeRef.kind === TypeKind.LIST) {\n      var itemRef = typeRef.ofType;\n      if (!itemRef) {\n        throw new Error('Decorated type deeper than introspection query.');\n      }\n      return GraphQLList(getType(itemRef));\n    }\n    if (typeRef.kind === TypeKind.NON_NULL) {\n      var nullableRef = typeRef.ofType;\n      if (!nullableRef) {\n        throw new Error('Decorated type deeper than introspection query.');\n      }\n      var nullableType = getType(nullableRef);\n      return GraphQLNonNull(assertNullableType(nullableType));\n    }\n    if (!typeRef.name) {\n      throw new Error('Unknown type reference: ' + JSON.stringify(typeRef));\n    }\n    return getNamedType(typeRef.name);\n  }\n\n  function getNamedType(typeName) {\n    if (typeDefCache[typeName]) {\n      return typeDefCache[typeName];\n    }\n    var typeIntrospection = typeIntrospectionMap[typeName];\n    if (!typeIntrospection) {\n      throw new Error('Invalid or incomplete schema, unknown type: ' + typeName + '. Ensure ' + 'that a full introspection query is used in order to build a ' + 'client schema.');\n    }\n    var typeDef = buildType(typeIntrospection);\n    typeDefCache[typeName] = typeDef;\n    return typeDef;\n  }\n\n  function getInputType(typeRef) {\n    var type = getType(typeRef);\n    !isInputType(type) ? invariant(0, 'Introspection must provide input type for arguments.') : void 0;\n    return type;\n  }\n\n  function getOutputType(typeRef) {\n    var type = getType(typeRef);\n    !isOutputType(type) ? invariant(0, 'Introspection must provide output type for fields.') : void 0;\n    return type;\n  }\n\n  function getObjectType(typeRef) {\n    var type = getType(typeRef);\n    return assertObjectType(type);\n  }\n\n  function getInterfaceType(typeRef) {\n    var type = getType(typeRef);\n    return assertInterfaceType(type);\n  }\n\n  // Given a type's introspection result, construct the correct\n  // GraphQLType instance.\n  function buildType(type) {\n    if (type && type.name && type.kind) {\n      switch (type.kind) {\n        case TypeKind.SCALAR:\n          return buildScalarDef(type);\n        case TypeKind.OBJECT:\n          return buildObjectDef(type);\n        case TypeKind.INTERFACE:\n          return buildInterfaceDef(type);\n        case TypeKind.UNION:\n          return buildUnionDef(type);\n        case TypeKind.ENUM:\n          return buildEnumDef(type);\n        case TypeKind.INPUT_OBJECT:\n          return buildInputObjectDef(type);\n      }\n    }\n    throw new Error('Invalid or incomplete introspection result. Ensure that a full ' + 'introspection query is used in order to build a client schema:' + JSON.stringify(type));\n  }\n\n  function buildScalarDef(scalarIntrospection) {\n    return new GraphQLScalarType({\n      name: scalarIntrospection.name,\n      description: scalarIntrospection.description,\n      serialize: function serialize(value) {\n        return value;\n      }\n    });\n  }\n\n  function buildObjectDef(objectIntrospection) {\n    if (!objectIntrospection.interfaces) {\n      throw new Error('Introspection result missing interfaces: ' + JSON.stringify(objectIntrospection));\n    }\n    return new GraphQLObjectType({\n      name: objectIntrospection.name,\n      description: objectIntrospection.description,\n      interfaces: objectIntrospection.interfaces.map(getInterfaceType),\n      fields: function fields() {\n        return buildFieldDefMap(objectIntrospection);\n      }\n    });\n  }\n\n  function buildInterfaceDef(interfaceIntrospection) {\n    return new GraphQLInterfaceType({\n      name: interfaceIntrospection.name,\n      description: interfaceIntrospection.description,\n      fields: function fields() {\n        return buildFieldDefMap(interfaceIntrospection);\n      }\n    });\n  }\n\n  function buildUnionDef(unionIntrospection) {\n    if (!unionIntrospection.possibleTypes) {\n      throw new Error('Introspection result missing possibleTypes: ' + JSON.stringify(unionIntrospection));\n    }\n    return new GraphQLUnionType({\n      name: unionIntrospection.name,\n      description: unionIntrospection.description,\n      types: unionIntrospection.possibleTypes.map(getObjectType)\n    });\n  }\n\n  function buildEnumDef(enumIntrospection) {\n    if (!enumIntrospection.enumValues) {\n      throw new Error('Introspection result missing enumValues: ' + JSON.stringify(enumIntrospection));\n    }\n    return new GraphQLEnumType({\n      name: enumIntrospection.name,\n      description: enumIntrospection.description,\n      values: keyValMap(enumIntrospection.enumValues, function (valueIntrospection) {\n        return valueIntrospection.name;\n      }, function (valueIntrospection) {\n        return {\n          description: valueIntrospection.description,\n          deprecationReason: valueIntrospection.deprecationReason\n        };\n      })\n    });\n  }\n\n  function buildInputObjectDef(inputObjectIntrospection) {\n    if (!inputObjectIntrospection.inputFields) {\n      throw new Error('Introspection result missing inputFields: ' + JSON.stringify(inputObjectIntrospection));\n    }\n    return new GraphQLInputObjectType({\n      name: inputObjectIntrospection.name,\n      description: inputObjectIntrospection.description,\n      fields: function fields() {\n        return buildInputValueDefMap(inputObjectIntrospection.inputFields);\n      }\n    });\n  }\n\n  function buildFieldDefMap(typeIntrospection) {\n    if (!typeIntrospection.fields) {\n      throw new Error('Introspection result missing fields: ' + JSON.stringify(typeIntrospection));\n    }\n    return keyValMap(typeIntrospection.fields, function (fieldIntrospection) {\n      return fieldIntrospection.name;\n    }, function (fieldIntrospection) {\n      if (!fieldIntrospection.args) {\n        throw new Error('Introspection result missing field args: ' + JSON.stringify(fieldIntrospection));\n      }\n      return {\n        description: fieldIntrospection.description,\n        deprecationReason: fieldIntrospection.deprecationReason,\n        type: getOutputType(fieldIntrospection.type),\n        args: buildInputValueDefMap(fieldIntrospection.args)\n      };\n    });\n  }\n\n  function buildInputValueDefMap(inputValueIntrospections) {\n    return keyValMap(inputValueIntrospections, function (inputValue) {\n      return inputValue.name;\n    }, buildInputValue);\n  }\n\n  function buildInputValue(inputValueIntrospection) {\n    var type = getInputType(inputValueIntrospection.type);\n    var defaultValue = inputValueIntrospection.defaultValue ? valueFromAST(parseValue(inputValueIntrospection.defaultValue), type) : undefined;\n    return {\n      name: inputValueIntrospection.name,\n      description: inputValueIntrospection.description,\n      type: type,\n      defaultValue: defaultValue\n    };\n  }\n\n  function buildDirective(directiveIntrospection) {\n    // Support deprecated `on****` fields for building `locations`, as this\n    // is used by GraphiQL which may need to support outdated servers.\n    var locations = directiveIntrospection.locations ? directiveIntrospection.locations.slice() : [].concat(!directiveIntrospection.onField ? [] : [DirectiveLocation.FIELD], !directiveIntrospection.onOperation ? [] : [DirectiveLocation.QUERY, DirectiveLocation.MUTATION, DirectiveLocation.SUBSCRIPTION], !directiveIntrospection.onFragment ? [] : [DirectiveLocation.FRAGMENT_DEFINITION, DirectiveLocation.FRAGMENT_SPREAD, DirectiveLocation.INLINE_FRAGMENT]);\n    if (!directiveIntrospection.args) {\n      throw new Error('Introspection result missing directive args: ' + JSON.stringify(directiveIntrospection));\n    }\n    return new GraphQLDirective({\n      name: directiveIntrospection.name,\n      description: directiveIntrospection.description,\n      locations: locations,\n      args: buildInputValueDefMap(directiveIntrospection.args)\n    });\n  }\n\n  // Iterate through all types, getting the type definition for each, ensuring\n  // that any type not directly referenced by a field will get created.\n  var types = schemaIntrospection.types.map(function (typeIntrospection) {\n    return getNamedType(typeIntrospection.name);\n  });\n\n  // Get the root Query, Mutation, and Subscription types.\n  var queryType = schemaIntrospection.queryType ? getObjectType(schemaIntrospection.queryType) : null;\n\n  var mutationType = schemaIntrospection.mutationType ? getObjectType(schemaIntrospection.mutationType) : null;\n\n  var subscriptionType = schemaIntrospection.subscriptionType ? getObjectType(schemaIntrospection.subscriptionType) : null;\n\n  // Get the directives supported by Introspection, assuming empty-set if\n  // directives were not queried for.\n  var directives = schemaIntrospection.directives ? schemaIntrospection.directives.map(buildDirective) : [];\n\n  // Then produce and return a Schema with these types.\n  return new GraphQLSchema({\n    query: queryType,\n    mutation: mutationType,\n    subscription: subscriptionType,\n    types: types,\n    directives: directives,\n    assumeValid: options && options.assumeValid\n  });\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport keyMap from '../jsutils/keyMap';\nimport keyValMap from '../jsutils/keyValMap';\n\nimport { valueFromAST } from './valueFromAST';\nimport blockStringValue from '../language/blockStringValue';\nimport { TokenKind } from '../language/lexer';\nimport { parse } from '../language/parser';\n\nimport { getDirectiveValues } from '../execution/values';\nimport { Kind } from '../language/kinds';\n\nimport { assertNullableType, GraphQLScalarType, GraphQLObjectType, GraphQLInterfaceType, GraphQLUnionType, GraphQLEnumType, GraphQLInputObjectType } from '../type/definition';\n\nimport { GraphQLList, GraphQLNonNull } from '../type/wrappers';\n\nimport { GraphQLDirective, GraphQLSkipDirective, GraphQLIncludeDirective, GraphQLDeprecatedDirective } from '../type/directives';\n\nimport { introspectionTypes } from '../type/introspection';\n\nimport { specifiedScalarTypes } from '../type/scalars';\n\nimport { GraphQLSchema } from '../type/schema';\n\nfunction buildWrappedType(innerType, inputTypeNode) {\n  if (inputTypeNode.kind === Kind.LIST_TYPE) {\n    return GraphQLList(buildWrappedType(innerType, inputTypeNode.type));\n  }\n  if (inputTypeNode.kind === Kind.NON_NULL_TYPE) {\n    var wrappedType = buildWrappedType(innerType, inputTypeNode.type);\n    return GraphQLNonNull(assertNullableType(wrappedType));\n  }\n  return innerType;\n}\n\nfunction getNamedTypeNode(typeNode) {\n  var namedType = typeNode;\n  while (namedType.kind === Kind.LIST_TYPE || namedType.kind === Kind.NON_NULL_TYPE) {\n    namedType = namedType.type;\n  }\n  return namedType;\n}\n\n/**\n * This takes the ast of a schema document produced by the parse function in\n * src/language/parser.js.\n *\n * If no schema definition is provided, then it will look for types named Query\n * and Mutation.\n *\n * Given that AST it constructs a GraphQLSchema. The resulting schema\n * has no resolve methods, so execution will use default resolvers.\n *\n * Accepts options as a second argument:\n *\n *    - commentDescriptions:\n *        Provide true to use preceding comments as the description.\n *\n */\nexport function buildASTSchema(ast, options) {\n  if (!ast || ast.kind !== Kind.DOCUMENT) {\n    throw new Error('Must provide a document ast.');\n  }\n\n  var schemaDef = void 0;\n\n  var typeDefs = [];\n  var nodeMap = Object.create(null);\n  var directiveDefs = [];\n  for (var i = 0; i < ast.definitions.length; i++) {\n    var d = ast.definitions[i];\n    switch (d.kind) {\n      case Kind.SCHEMA_DEFINITION:\n        if (schemaDef) {\n          throw new Error('Must provide only one schema definition.');\n        }\n        schemaDef = d;\n        break;\n      case Kind.SCALAR_TYPE_DEFINITION:\n      case Kind.OBJECT_TYPE_DEFINITION:\n      case Kind.INTERFACE_TYPE_DEFINITION:\n      case Kind.ENUM_TYPE_DEFINITION:\n      case Kind.UNION_TYPE_DEFINITION:\n      case Kind.INPUT_OBJECT_TYPE_DEFINITION:\n        var _typeName = d.name.value;\n        if (nodeMap[_typeName]) {\n          throw new Error('Type \"' + _typeName + '\" was defined more than once.');\n        }\n        typeDefs.push(d);\n        nodeMap[_typeName] = d;\n        break;\n      case Kind.DIRECTIVE_DEFINITION:\n        directiveDefs.push(d);\n        break;\n    }\n  }\n\n  var operationTypes = schemaDef ? getOperationTypes(schemaDef) : {\n    query: nodeMap.Query ? 'Query' : null,\n    mutation: nodeMap.Mutation ? 'Mutation' : null,\n    subscription: nodeMap.Subscription ? 'Subscription' : null\n  };\n\n  var definitionBuilder = new ASTDefinitionBuilder(nodeMap, options, function (typeName) {\n    throw new Error('Type \"' + typeName + '\" not found in document.');\n  });\n\n  var types = typeDefs.map(function (def) {\n    return definitionBuilder.buildType(def.name.value);\n  });\n\n  var directives = directiveDefs.map(function (def) {\n    return definitionBuilder.buildDirective(def);\n  });\n\n  // If specified directives were not explicitly declared, add them.\n  if (!directives.some(function (directive) {\n    return directive.name === 'skip';\n  })) {\n    directives.push(GraphQLSkipDirective);\n  }\n\n  if (!directives.some(function (directive) {\n    return directive.name === 'include';\n  })) {\n    directives.push(GraphQLIncludeDirective);\n  }\n\n  if (!directives.some(function (directive) {\n    return directive.name === 'deprecated';\n  })) {\n    directives.push(GraphQLDeprecatedDirective);\n  }\n\n  // Note: While this could make early assertions to get the correctly\n  // typed values below, that would throw immediately while type system\n  // validation with validateSchema() will produce more actionable results.\n  return new GraphQLSchema({\n    query: operationTypes.query ? definitionBuilder.buildType(operationTypes.query) : null,\n    mutation: operationTypes.mutation ? definitionBuilder.buildType(operationTypes.mutation) : null,\n    subscription: operationTypes.subscription ? definitionBuilder.buildType(operationTypes.subscription) : null,\n    types: types,\n    directives: directives,\n    astNode: schemaDef,\n    assumeValid: options && options.assumeValid\n  });\n\n  function getOperationTypes(schema) {\n    var opTypes = {};\n    schema.operationTypes.forEach(function (operationType) {\n      var typeName = operationType.type.name.value;\n      var operation = operationType.operation;\n      if (opTypes[operation]) {\n        throw new Error('Must provide only one ' + operation + ' type in schema.');\n      }\n      if (!nodeMap[typeName]) {\n        throw new Error('Specified ' + operation + ' type \"' + typeName + '\" not found in document.');\n      }\n      opTypes[operation] = typeName;\n    });\n    return opTypes;\n  }\n}\n\nexport var ASTDefinitionBuilder = function () {\n  function ASTDefinitionBuilder(typeDefinitionsMap, options, resolveType) {\n    _classCallCheck(this, ASTDefinitionBuilder);\n\n    this._typeDefinitionsMap = typeDefinitionsMap;\n    this._options = options;\n    this._resolveType = resolveType;\n    // Initialize to the GraphQL built in scalars and introspection types.\n    this._cache = keyMap(specifiedScalarTypes.concat(introspectionTypes), function (type) {\n      return type.name;\n    });\n  }\n\n  ASTDefinitionBuilder.prototype._buildType = function _buildType(typeName, typeNode) {\n    if (!this._cache[typeName]) {\n      var defNode = this._typeDefinitionsMap[typeName];\n      if (defNode) {\n        this._cache[typeName] = this._makeSchemaDef(defNode);\n      } else {\n        this._cache[typeName] = this._resolveType(typeName, typeNode);\n      }\n    }\n    return this._cache[typeName];\n  };\n\n  ASTDefinitionBuilder.prototype.buildType = function buildType(ref) {\n    if (typeof ref === 'string') {\n      return this._buildType(ref);\n    }\n    return this._buildType(ref.name.value, ref);\n  };\n\n  ASTDefinitionBuilder.prototype._buildWrappedType = function _buildWrappedType(typeNode) {\n    var typeDef = this.buildType(getNamedTypeNode(typeNode));\n    return buildWrappedType(typeDef, typeNode);\n  };\n\n  ASTDefinitionBuilder.prototype.buildDirective = function buildDirective(directiveNode) {\n    return new GraphQLDirective({\n      name: directiveNode.name.value,\n      description: getDescription(directiveNode, this._options),\n      locations: directiveNode.locations.map(function (node) {\n        return node.value;\n      }),\n      args: directiveNode.arguments && this._makeInputValues(directiveNode.arguments),\n      astNode: directiveNode\n    });\n  };\n\n  ASTDefinitionBuilder.prototype.buildField = function buildField(field) {\n    return {\n      // Note: While this could make assertions to get the correctly typed\n      // value, that would throw immediately while type system validation\n      // with validateSchema() will produce more actionable results.\n      type: this._buildWrappedType(field.type),\n      description: getDescription(field, this._options),\n      args: field.arguments && this._makeInputValues(field.arguments),\n      deprecationReason: getDeprecationReason(field),\n      astNode: field\n    };\n  };\n\n  ASTDefinitionBuilder.prototype._makeSchemaDef = function _makeSchemaDef(def) {\n    switch (def.kind) {\n      case Kind.OBJECT_TYPE_DEFINITION:\n        return this._makeTypeDef(def);\n      case Kind.INTERFACE_TYPE_DEFINITION:\n        return this._makeInterfaceDef(def);\n      case Kind.ENUM_TYPE_DEFINITION:\n        return this._makeEnumDef(def);\n      case Kind.UNION_TYPE_DEFINITION:\n        return this._makeUnionDef(def);\n      case Kind.SCALAR_TYPE_DEFINITION:\n        return this._makeScalarDef(def);\n      case Kind.INPUT_OBJECT_TYPE_DEFINITION:\n        return this._makeInputObjectDef(def);\n      default:\n        throw new Error('Type kind \"' + def.kind + '\" not supported.');\n    }\n  };\n\n  ASTDefinitionBuilder.prototype._makeTypeDef = function _makeTypeDef(def) {\n    var _this = this;\n\n    var typeName = def.name.value;\n    return new GraphQLObjectType({\n      name: typeName,\n      description: getDescription(def, this._options),\n      fields: function fields() {\n        return _this._makeFieldDefMap(def);\n      },\n      interfaces: function interfaces() {\n        return _this._makeImplementedInterfaces(def);\n      },\n      astNode: def\n    });\n  };\n\n  ASTDefinitionBuilder.prototype._makeFieldDefMap = function _makeFieldDefMap(def) {\n    var _this2 = this;\n\n    return def.fields ? keyValMap(def.fields, function (field) {\n      return field.name.value;\n    }, function (field) {\n      return _this2.buildField(field);\n    }) : {};\n  };\n\n  ASTDefinitionBuilder.prototype._makeImplementedInterfaces = function _makeImplementedInterfaces(def) {\n    var _this3 = this;\n\n    return def.interfaces &&\n    // Note: While this could make early assertions to get the correctly\n    // typed values, that would throw immediately while type system\n    // validation with validateSchema() will produce more actionable results.\n    def.interfaces.map(function (iface) {\n      return _this3.buildType(iface);\n    });\n  };\n\n  ASTDefinitionBuilder.prototype._makeInputValues = function _makeInputValues(values) {\n    var _this4 = this;\n\n    return keyValMap(values, function (value) {\n      return value.name.value;\n    }, function (value) {\n      // Note: While this could make assertions to get the correctly typed\n      // value, that would throw immediately while type system validation\n      var type = _this4._buildWrappedType(value.type);\n      return {\n        type: type,\n        description: getDescription(value, _this4._options),\n        defaultValue: valueFromAST(value.defaultValue, type),\n        astNode: value\n      };\n    });\n  };\n\n  ASTDefinitionBuilder.prototype._makeInterfaceDef = function _makeInterfaceDef(def) {\n    var _this5 = this;\n\n    return new GraphQLInterfaceType({\n      name: def.name.value,\n      description: getDescription(def, this._options),\n      fields: function fields() {\n        return _this5._makeFieldDefMap(def);\n      },\n      astNode: def\n    });\n  };\n\n  ASTDefinitionBuilder.prototype._makeEnumDef = function _makeEnumDef(def) {\n    var _this6 = this;\n\n    return new GraphQLEnumType({\n      name: def.name.value,\n      description: getDescription(def, this._options),\n      values: def.values ? keyValMap(def.values, function (enumValue) {\n        return enumValue.name.value;\n      }, function (enumValue) {\n        return {\n          description: getDescription(enumValue, _this6._options),\n          deprecationReason: getDeprecationReason(enumValue),\n          astNode: enumValue\n        };\n      }) : {},\n      astNode: def\n    });\n  };\n\n  ASTDefinitionBuilder.prototype._makeUnionDef = function _makeUnionDef(def) {\n    var _this7 = this;\n\n    return new GraphQLUnionType({\n      name: def.name.value,\n      description: getDescription(def, this._options),\n      // Note: While this could make assertions to get the correctly typed\n      // values below, that would throw immediately while type system\n      // validation with validateSchema() will produce more actionable results.\n      types: def.types ? def.types.map(function (t) {\n        return _this7.buildType(t);\n      }) : [],\n      astNode: def\n    });\n  };\n\n  ASTDefinitionBuilder.prototype._makeScalarDef = function _makeScalarDef(def) {\n    return new GraphQLScalarType({\n      name: def.name.value,\n      description: getDescription(def, this._options),\n      astNode: def,\n      serialize: function serialize(value) {\n        return value;\n      }\n    });\n  };\n\n  ASTDefinitionBuilder.prototype._makeInputObjectDef = function _makeInputObjectDef(def) {\n    var _this8 = this;\n\n    return new GraphQLInputObjectType({\n      name: def.name.value,\n      description: getDescription(def, this._options),\n      fields: function fields() {\n        return def.fields ? _this8._makeInputValues(def.fields) : {};\n      },\n      astNode: def\n    });\n  };\n\n  return ASTDefinitionBuilder;\n}();\n\n/**\n * Given a field or enum value node, returns the string value for the\n * deprecation reason.\n */\nfunction getDeprecationReason(node) {\n  var deprecated = getDirectiveValues(GraphQLDeprecatedDirective, node);\n  return deprecated && deprecated.reason;\n}\n\n/**\n * Given an ast node, returns its string description.\n *\n * Accepts options as a second argument:\n *\n *    - commentDescriptions:\n *        Provide true to use preceding comments as the description.\n *\n */\nexport function getDescription(node, options) {\n  if (node.description) {\n    return node.description.value;\n  }\n  if (options && options.commentDescriptions) {\n    var rawValue = getLeadingCommentBlock(node);\n    if (rawValue !== undefined) {\n      return blockStringValue('\\n' + rawValue);\n    }\n  }\n}\n\nfunction getLeadingCommentBlock(node) {\n  var loc = node.loc;\n  if (!loc) {\n    return;\n  }\n  var comments = [];\n  var token = loc.startToken.prev;\n  while (token && token.kind === TokenKind.COMMENT && token.next && token.prev && token.line + 1 === token.next.line && token.line !== token.prev.line) {\n    var value = String(token.value);\n    comments.push(value);\n    token = token.prev;\n  }\n  return comments.reverse().join('\\n');\n}\n\n/**\n * A helper function to build a GraphQLSchema directly from a source\n * document.\n */\nexport function buildSchema(source) {\n  return buildASTSchema(parse(source));\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from '../jsutils/invariant';\nimport keyMap from '../jsutils/keyMap';\nimport { ASTDefinitionBuilder } from './buildASTSchema';\nimport { GraphQLError } from '../error/GraphQLError';\nimport { isSchema, GraphQLSchema } from '../type/schema';\n\nimport { isObjectType, isInterfaceType, isUnionType, isListType, isNonNullType, GraphQLObjectType, GraphQLInterfaceType, GraphQLUnionType } from '../type/definition';\nimport { GraphQLList, GraphQLNonNull } from '../type/wrappers';\n\nimport { GraphQLDirective } from '../type/directives';\n\nimport { Kind } from '../language/kinds';\n\n/**\n * Produces a new schema given an existing schema and a document which may\n * contain GraphQL type extensions and definitions. The original schema will\n * remain unaltered.\n *\n * Because a schema represents a graph of references, a schema cannot be\n * extended without effectively making an entire copy. We do not know until it's\n * too late if subgraphs remain unchanged.\n *\n * This algorithm copies the provided schema, applying extensions while\n * producing the copy. The original schema remains unaltered.\n *\n * Accepts options as a third argument:\n *\n *    - commentDescriptions:\n *        Provide true to use preceding comments as the description.\n *\n */\nexport function extendSchema(schema, documentAST, options) {\n  !isSchema(schema) ? invariant(0, 'Must provide valid GraphQLSchema') : void 0;\n\n  !(documentAST && documentAST.kind === Kind.DOCUMENT) ? invariant(0, 'Must provide valid Document AST') : void 0;\n\n  // Collect the type definitions and extensions found in the document.\n  var typeDefinitionMap = Object.create(null);\n  var typeExtensionsMap = Object.create(null);\n\n  // New directives and types are separate because a directives and types can\n  // have the same name. For example, a type named \"skip\".\n  var directiveDefinitions = [];\n\n  for (var i = 0; i < documentAST.definitions.length; i++) {\n    var def = documentAST.definitions[i];\n    switch (def.kind) {\n      case Kind.OBJECT_TYPE_DEFINITION:\n      case Kind.INTERFACE_TYPE_DEFINITION:\n      case Kind.ENUM_TYPE_DEFINITION:\n      case Kind.UNION_TYPE_DEFINITION:\n      case Kind.SCALAR_TYPE_DEFINITION:\n      case Kind.INPUT_OBJECT_TYPE_DEFINITION:\n        // Sanity check that none of the defined types conflict with the\n        // schema's existing types.\n        var typeName = def.name.value;\n        if (schema.getType(typeName)) {\n          throw new GraphQLError('Type \"' + typeName + '\" already exists in the schema. It cannot also ' + 'be defined in this type definition.', [def]);\n        }\n        typeDefinitionMap[typeName] = def;\n        break;\n      case Kind.OBJECT_TYPE_EXTENSION:\n        // Sanity check that this type extension exists within the\n        // schema's existing types.\n        var extendedTypeName = def.name.value;\n        var existingType = schema.getType(extendedTypeName);\n        if (!existingType) {\n          throw new GraphQLError('Cannot extend type \"' + extendedTypeName + '\" because it does not ' + 'exist in the existing schema.', [def]);\n        }\n        if (!isObjectType(existingType)) {\n          throw new GraphQLError('Cannot extend non-object type \"' + extendedTypeName + '\".', [def]);\n        }\n        var extensions = typeExtensionsMap[extendedTypeName];\n        if (extensions) {\n          extensions.push(def);\n        } else {\n          extensions = [def];\n        }\n        typeExtensionsMap[extendedTypeName] = extensions;\n        break;\n      case Kind.DIRECTIVE_DEFINITION:\n        var directiveName = def.name.value;\n        var existingDirective = schema.getDirective(directiveName);\n        if (existingDirective) {\n          throw new GraphQLError('Directive \"' + directiveName + '\" already exists in the schema. It ' + 'cannot be redefined.', [def]);\n        }\n        directiveDefinitions.push(def);\n        break;\n      case Kind.SCALAR_TYPE_EXTENSION:\n      case Kind.INTERFACE_TYPE_EXTENSION:\n      case Kind.UNION_TYPE_EXTENSION:\n      case Kind.ENUM_TYPE_EXTENSION:\n      case Kind.INPUT_OBJECT_TYPE_EXTENSION:\n        throw new Error('The ' + def.kind + ' kind is not yet supported by extendSchema().');\n    }\n  }\n\n  // If this document contains no new types, extensions, or directives then\n  // return the same unmodified GraphQLSchema instance.\n  if (Object.keys(typeExtensionsMap).length === 0 && Object.keys(typeDefinitionMap).length === 0 && directiveDefinitions.length === 0) {\n    return schema;\n  }\n\n  var definitionBuilder = new ASTDefinitionBuilder(typeDefinitionMap, options, function (typeName, node) {\n    var existingType = schema.getType(typeName);\n    if (existingType) {\n      return extendType(existingType);\n    }\n\n    if (node) {\n      throw new GraphQLError('Unknown type: \"' + typeName + '\". Ensure that this type exists ' + 'either in the original schema, or is added in a type definition.', [node]);\n    }\n    throw GraphQLError('Missing type from schema');\n  });\n\n  // Get the root Query, Mutation, and Subscription object types.\n  // Note: While this could make early assertions to get the correctly\n  // typed values below, that would throw immediately while type system\n  // validation with validateSchema() will produce more actionable results.\n  var existingQueryType = schema.getQueryType();\n  var queryType = existingQueryType ? definitionBuilder.buildType(existingQueryType.name) : null;\n\n  var existingMutationType = schema.getMutationType();\n  var mutationType = existingMutationType ? definitionBuilder.buildType(existingMutationType.name) : null;\n\n  var existingSubscriptionType = schema.getSubscriptionType();\n  var subscriptionType = existingSubscriptionType ? definitionBuilder.buildType(existingSubscriptionType.name) : null;\n\n  // Iterate through all types, getting the type definition for each, ensuring\n  // that any type not directly referenced by a field will get created.\n  var typeMap = schema.getTypeMap();\n  var types = Object.keys(typeMap).map(function (typeName) {\n    return definitionBuilder.buildType(typeName);\n  });\n\n  // Do the same with new types, appending to the list of defined types.\n  Object.keys(typeDefinitionMap).forEach(function (typeName) {\n    types.push(definitionBuilder.buildType(typeName));\n  });\n\n  // Then produce and return a Schema with these types.\n  return new GraphQLSchema({\n    query: queryType,\n    mutation: mutationType,\n    subscription: subscriptionType,\n    types: types,\n    directives: getMergedDirectives(),\n    astNode: schema.astNode,\n    allowedLegacyNames: schema.__allowedLegacyNames && schema.__allowedLegacyNames.slice()\n  });\n\n  // Below are functions used for producing this schema that have closed over\n  // this scope and have access to the schema, cache, and newly defined types.\n\n  function getMergedDirectives() {\n    var existingDirectives = schema.getDirectives();\n    !existingDirectives ? invariant(0, 'schema must have default directives') : void 0;\n\n    var newDirectives = directiveDefinitions.map(function (directiveNode) {\n      return definitionBuilder.buildDirective(directiveNode);\n    });\n    return existingDirectives.concat(newDirectives);\n  }\n\n  function getTypeFromDef(typeDef) {\n    var type = definitionBuilder.buildType(typeDef.name);\n    return type;\n  }\n\n  // Given a type's introspection result, construct the correct\n  // GraphQLType instance.\n  function extendType(type) {\n    if (isObjectType(type)) {\n      return extendObjectType(type);\n    }\n    if (isInterfaceType(type)) {\n      return extendInterfaceType(type);\n    }\n    if (isUnionType(type)) {\n      return extendUnionType(type);\n    }\n    return type;\n  }\n\n  function extendObjectType(type) {\n    var name = type.name;\n    var extensionASTNodes = typeExtensionsMap[name] ? type.extensionASTNodes ? type.extensionASTNodes.concat(typeExtensionsMap[name]) : typeExtensionsMap[name] : type.extensionASTNodes;\n    return new GraphQLObjectType({\n      name: name,\n      description: type.description,\n      interfaces: function interfaces() {\n        return extendImplementedInterfaces(type);\n      },\n      fields: function fields() {\n        return extendFieldMap(type);\n      },\n      astNode: type.astNode,\n      extensionASTNodes: extensionASTNodes,\n      isTypeOf: type.isTypeOf\n    });\n  }\n\n  function extendInterfaceType(type) {\n    return new GraphQLInterfaceType({\n      name: type.name,\n      description: type.description,\n      fields: function fields() {\n        return extendFieldMap(type);\n      },\n      astNode: type.astNode,\n      resolveType: type.resolveType\n    });\n  }\n\n  function extendUnionType(type) {\n    return new GraphQLUnionType({\n      name: type.name,\n      description: type.description,\n      types: type.getTypes().map(getTypeFromDef),\n      astNode: type.astNode,\n      resolveType: type.resolveType\n    });\n  }\n\n  function extendImplementedInterfaces(type) {\n    var interfaces = type.getInterfaces().map(getTypeFromDef);\n\n    // If there are any extensions to the interfaces, apply those here.\n    var extensions = typeExtensionsMap[type.name];\n    if (extensions) {\n      extensions.forEach(function (extension) {\n        extension.interfaces.forEach(function (namedType) {\n          // Note: While this could make early assertions to get the correctly\n          // typed values, that would throw immediately while type system\n          // validation with validateSchema() will produce more actionable results.\n          interfaces.push(definitionBuilder.buildType(namedType));\n        });\n      });\n    }\n\n    return interfaces;\n  }\n\n  function extendFieldMap(type) {\n    var newFieldMap = Object.create(null);\n    var oldFieldMap = type.getFields();\n    Object.keys(oldFieldMap).forEach(function (fieldName) {\n      var field = oldFieldMap[fieldName];\n      newFieldMap[fieldName] = {\n        description: field.description,\n        deprecationReason: field.deprecationReason,\n        type: extendFieldType(field.type),\n        args: keyMap(field.args, function (arg) {\n          return arg.name;\n        }),\n        astNode: field.astNode,\n        resolve: field.resolve\n      };\n    });\n\n    // If there are any extensions to the fields, apply those here.\n    var extensions = typeExtensionsMap[type.name];\n    if (extensions) {\n      extensions.forEach(function (extension) {\n        extension.fields.forEach(function (field) {\n          var fieldName = field.name.value;\n          if (oldFieldMap[fieldName]) {\n            throw new GraphQLError('Field \"' + type.name + '.' + fieldName + '\" already exists in the ' + 'schema. It cannot also be defined in this type extension.', [field]);\n          }\n          newFieldMap[fieldName] = definitionBuilder.buildField(field);\n        });\n      });\n    }\n\n    return newFieldMap;\n  }\n\n  function extendFieldType(typeDef) {\n    if (isListType(typeDef)) {\n      return GraphQLList(extendFieldType(typeDef.ofType));\n    }\n    if (isNonNullType(typeDef)) {\n      return GraphQLNonNull(extendFieldType(typeDef.ofType));\n    }\n    return getTypeFromDef(typeDef);\n  }\n}","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nimport keyValMap from '../jsutils/keyValMap'; /**\n                                               * Copyright (c) 2015-present, Facebook, Inc.\n                                               *\n                                               * This source code is licensed under the MIT license found in the\n                                               * LICENSE file in the root directory of this source tree.\n                                               *\n                                               * \n                                               */\n\nimport objectValues from '../jsutils/objectValues';\nimport { GraphQLSchema } from '../type/schema';\nimport { GraphQLDirective } from '../type/directives';\nimport { GraphQLList, GraphQLNonNull } from '../type/wrappers';\n\nimport { GraphQLObjectType, GraphQLInterfaceType, GraphQLUnionType, GraphQLEnumType, GraphQLInputObjectType, isListType, isNonNullType, isScalarType, isObjectType, isInterfaceType, isUnionType, isEnumType, isInputObjectType } from '../type/definition';\nimport { isSpecifiedScalarType } from '../type/scalars';\nimport { isIntrospectionType } from '../type/introspection';\n\n/**\n * Sort GraphQLSchema.\n */\nexport function lexicographicSortSchema(schema) {\n  var cache = Object.create(null);\n\n  var sortMaybeType = function sortMaybeType(maybeType) {\n    return maybeType && sortNamedType(maybeType);\n  };\n  return new GraphQLSchema({\n    types: sortByName(objectValues(schema.getTypeMap()).map(sortNamedType)),\n    directives: sortByName(schema.getDirectives()).map(sortDirective),\n    query: sortMaybeType(schema.getQueryType()),\n    mutation: sortMaybeType(schema.getMutationType()),\n    subscription: sortMaybeType(schema.getSubscriptionType()),\n    astNode: schema.astNode\n  });\n\n  function sortDirective(directive) {\n    return new GraphQLDirective({\n      name: directive.name,\n      description: directive.description,\n      locations: sortBy(directive.locations, function (x) {\n        return x;\n      }),\n      args: sortArgs(directive.args),\n      astNode: directive.astNode\n    });\n  }\n\n  function sortArgs(args) {\n    return keyValMap(sortByName(args), function (arg) {\n      return arg.name;\n    }, function (arg) {\n      return _extends({}, arg, {\n        type: sortType(arg.type)\n      });\n    });\n  }\n\n  function sortFields(fieldsMap) {\n    return function () {\n      return sortObjMap(fieldsMap, function (field) {\n        return {\n          type: sortType(field.type),\n          args: sortArgs(field.args),\n          resolve: field.resolve,\n          subscribe: field.subscribe,\n          deprecationReason: field.deprecationReason,\n          description: field.description,\n          astNode: field.astNode\n        };\n      });\n    };\n  }\n\n  function sortInputFields(fieldsMap) {\n    return function () {\n      return sortObjMap(fieldsMap, function (field) {\n        return {\n          type: sortType(field.type),\n          defaultValue: field.defaultValue,\n          description: field.description,\n          astNode: field.astNode\n        };\n      });\n    };\n  }\n\n  function sortType(type) {\n    if (isListType(type)) {\n      return new GraphQLList(sortType(type.ofType));\n    } else if (isNonNullType(type)) {\n      return new GraphQLNonNull(sortType(type.ofType));\n    }\n    return sortNamedType(type);\n  }\n\n  function sortTypes(arr) {\n    return function () {\n      return sortByName(arr).map(sortNamedType);\n    };\n  }\n\n  function sortNamedType(type) {\n    if (isSpecifiedScalarType(type) || isIntrospectionType(type)) {\n      return type;\n    }\n\n    var sortedType = cache[type.name];\n    if (!sortedType) {\n      sortedType = sortNamedTypeImpl(type);\n      cache[type.name] = sortedType;\n    }\n    return sortedType;\n  }\n\n  function sortNamedTypeImpl(type) {\n    if (isScalarType(type)) {\n      return type;\n    } else if (isObjectType(type)) {\n      return new GraphQLObjectType({\n        name: type.name,\n        interfaces: sortTypes(type.getInterfaces()),\n        fields: sortFields(type.getFields()),\n        isTypeOf: type.isTypeOf,\n        description: type.description,\n        astNode: type.astNode,\n        extensionASTNodes: type.extensionASTNodes\n      });\n    } else if (isInterfaceType(type)) {\n      return new GraphQLInterfaceType({\n        name: type.name,\n        fields: sortFields(type.getFields()),\n        resolveType: type.resolveType,\n        description: type.description,\n        astNode: type.astNode,\n        extensionASTNodes: type.extensionASTNodes\n      });\n    } else if (isUnionType(type)) {\n      return new GraphQLUnionType({\n        name: type.name,\n        types: sortTypes(type.getTypes()),\n        resolveType: type.resolveType,\n        description: type.description,\n        astNode: type.astNode\n      });\n    } else if (isEnumType(type)) {\n      return new GraphQLEnumType({\n        name: type.name,\n        values: keyValMap(sortByName(type.getValues()), function (val) {\n          return val.name;\n        }, function (val) {\n          return {\n            value: val.value,\n            deprecationReason: val.deprecationReason,\n            description: val.description,\n            astNode: val.astNode\n          };\n        }),\n        description: type.description,\n        astNode: type.astNode\n      });\n    } else if (isInputObjectType(type)) {\n      return new GraphQLInputObjectType({\n        name: type.name,\n        fields: sortInputFields(type.getFields()),\n        description: type.description,\n        astNode: type.astNode\n      });\n    }\n    throw new Error('Unknown type: \"' + type + '\"');\n  }\n}\n\nfunction sortObjMap(map, sortValueFn) {\n  var sortedMap = Object.create(null);\n  var sortedKeys = sortBy(Object.keys(map), function (x) {\n    return x;\n  });\n  var _iteratorNormalCompletion = true;\n  var _didIteratorError = false;\n  var _iteratorError = undefined;\n\n  try {\n    for (var _iterator = sortedKeys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n      var key = _step.value;\n\n      var value = map[key];\n      sortedMap[key] = sortValueFn ? sortValueFn(value) : value;\n    }\n  } catch (err) {\n    _didIteratorError = true;\n    _iteratorError = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion && _iterator.return) {\n        _iterator.return();\n      }\n    } finally {\n      if (_didIteratorError) {\n        throw _iteratorError;\n      }\n    }\n  }\n\n  return sortedMap;\n}\n\nfunction sortByName(array) {\n  return sortBy(array, function (obj) {\n    return obj.name;\n  });\n}\n\nfunction sortBy(array, mapToKey) {\n  return array.slice().sort(function (obj1, obj2) {\n    var key1 = mapToKey(obj1);\n    var key2 = mapToKey(obj2);\n    return key1.localeCompare(key2);\n  });\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport isNullish from '../jsutils/isNullish';\nimport isInvalid from '../jsutils/isInvalid';\nimport objectValues from '../jsutils/objectValues';\nimport { astFromValue } from '../utilities/astFromValue';\nimport { print } from '../language/printer';\n\nimport { isScalarType, isObjectType, isInterfaceType, isUnionType, isEnumType, isInputObjectType } from '../type/definition';\n\nimport { GraphQLString, isSpecifiedScalarType } from '../type/scalars';\nimport { GraphQLDirective, DEFAULT_DEPRECATION_REASON, isSpecifiedDirective } from '../type/directives';\nimport { isIntrospectionType } from '../type/introspection';\n\n/**\n * Accepts options as a second argument:\n *\n *    - commentDescriptions:\n *        Provide true to use preceding comments as the description.\n *\n */\nexport function printSchema(schema, options) {\n  return printFilteredSchema(schema, function (n) {\n    return !isSpecifiedDirective(n);\n  }, isDefinedType, options);\n}\n\nexport function printIntrospectionSchema(schema, options) {\n  return printFilteredSchema(schema, isSpecifiedDirective, isIntrospectionType, options);\n}\n\nfunction isDefinedType(type) {\n  return !isSpecifiedScalarType(type) && !isIntrospectionType(type);\n}\n\nfunction printFilteredSchema(schema, directiveFilter, typeFilter, options) {\n  var directives = schema.getDirectives().filter(directiveFilter);\n  var typeMap = schema.getTypeMap();\n  var types = objectValues(typeMap).sort(function (type1, type2) {\n    return type1.name.localeCompare(type2.name);\n  }).filter(typeFilter);\n\n  return [printSchemaDefinition(schema)].concat(directives.map(function (directive) {\n    return printDirective(directive, options);\n  }), types.map(function (type) {\n    return printType(type, options);\n  })).filter(Boolean).join('\\n\\n') + '\\n';\n}\n\nfunction printSchemaDefinition(schema) {\n  if (isSchemaOfCommonNames(schema)) {\n    return;\n  }\n\n  var operationTypes = [];\n\n  var queryType = schema.getQueryType();\n  if (queryType) {\n    operationTypes.push('  query: ' + queryType.name);\n  }\n\n  var mutationType = schema.getMutationType();\n  if (mutationType) {\n    operationTypes.push('  mutation: ' + mutationType.name);\n  }\n\n  var subscriptionType = schema.getSubscriptionType();\n  if (subscriptionType) {\n    operationTypes.push('  subscription: ' + subscriptionType.name);\n  }\n\n  return 'schema {\\n' + operationTypes.join('\\n') + '\\n}';\n}\n\n/**\n * GraphQL schema define root types for each type of operation. These types are\n * the same as any other type and can be named in any manner, however there is\n * a common naming convention:\n *\n *   schema {\n *     query: Query\n *     mutation: Mutation\n *   }\n *\n * When using this naming convention, the schema description can be omitted.\n */\nfunction isSchemaOfCommonNames(schema) {\n  var queryType = schema.getQueryType();\n  if (queryType && queryType.name !== 'Query') {\n    return false;\n  }\n\n  var mutationType = schema.getMutationType();\n  if (mutationType && mutationType.name !== 'Mutation') {\n    return false;\n  }\n\n  var subscriptionType = schema.getSubscriptionType();\n  if (subscriptionType && subscriptionType.name !== 'Subscription') {\n    return false;\n  }\n\n  return true;\n}\n\nexport function printType(type, options) {\n  if (isScalarType(type)) {\n    return printScalar(type, options);\n  } else if (isObjectType(type)) {\n    return printObject(type, options);\n  } else if (isInterfaceType(type)) {\n    return printInterface(type, options);\n  } else if (isUnionType(type)) {\n    return printUnion(type, options);\n  } else if (isEnumType(type)) {\n    return printEnum(type, options);\n  } else if (isInputObjectType(type)) {\n    return printInputObject(type, options);\n  }\n  /* istanbul ignore next */\n  throw new Error('Unknown type: ' + type + '.');\n}\n\nfunction printScalar(type, options) {\n  return printDescription(options, type) + ('scalar ' + type.name);\n}\n\nfunction printObject(type, options) {\n  var interfaces = type.getInterfaces();\n  var implementedInterfaces = interfaces.length ? ' implements ' + interfaces.map(function (i) {\n    return i.name;\n  }).join(' & ') : '';\n  return printDescription(options, type) + ('type ' + type.name + implementedInterfaces + ' {\\n') + printFields(options, type) + '\\n' + '}';\n}\n\nfunction printInterface(type, options) {\n  return printDescription(options, type) + ('interface ' + type.name + ' {\\n') + printFields(options, type) + '\\n' + '}';\n}\n\nfunction printUnion(type, options) {\n  return printDescription(options, type) + ('union ' + type.name + ' = ' + type.getTypes().join(' | '));\n}\n\nfunction printEnum(type, options) {\n  return printDescription(options, type) + ('enum ' + type.name + ' {\\n') + printEnumValues(type.getValues(), options) + '\\n' + '}';\n}\n\nfunction printEnumValues(values, options) {\n  return values.map(function (value, i) {\n    return printDescription(options, value, '  ', !i) + '  ' + value.name + printDeprecated(value);\n  }).join('\\n');\n}\n\nfunction printInputObject(type, options) {\n  var fields = objectValues(type.getFields());\n  return printDescription(options, type) + ('input ' + type.name + ' {\\n') + fields.map(function (f, i) {\n    return printDescription(options, f, '  ', !i) + '  ' + printInputValue(f);\n  }).join('\\n') + '\\n' + '}';\n}\n\nfunction printFields(options, type) {\n  var fields = objectValues(type.getFields());\n  return fields.map(function (f, i) {\n    return printDescription(options, f, '  ', !i) + '  ' + f.name + printArgs(options, f.args, '  ') + ': ' + String(f.type) + printDeprecated(f);\n  }).join('\\n');\n}\n\nfunction printArgs(options, args) {\n  var indentation = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n\n  if (args.length === 0) {\n    return '';\n  }\n\n  // If every arg does not have a description, print them on one line.\n  if (args.every(function (arg) {\n    return !arg.description;\n  })) {\n    return '(' + args.map(printInputValue).join(', ') + ')';\n  }\n\n  return '(\\n' + args.map(function (arg, i) {\n    return printDescription(options, arg, '  ' + indentation, !i) + '  ' + indentation + printInputValue(arg);\n  }).join('\\n') + '\\n' + indentation + ')';\n}\n\nfunction printInputValue(arg) {\n  var argDecl = arg.name + ': ' + String(arg.type);\n  if (!isInvalid(arg.defaultValue)) {\n    argDecl += ' = ' + print(astFromValue(arg.defaultValue, arg.type));\n  }\n  return argDecl;\n}\n\nfunction printDirective(directive, options) {\n  return printDescription(options, directive) + 'directive @' + directive.name + printArgs(options, directive.args) + ' on ' + directive.locations.join(' | ');\n}\n\nfunction printDeprecated(fieldOrEnumVal) {\n  if (!fieldOrEnumVal.isDeprecated) {\n    return '';\n  }\n  var reason = fieldOrEnumVal.deprecationReason;\n  if (isNullish(reason) || reason === '' || reason === DEFAULT_DEPRECATION_REASON) {\n    return ' @deprecated';\n  }\n  return ' @deprecated(reason: ' + print(astFromValue(reason, GraphQLString)) + ')';\n}\n\nfunction printDescription(options, def) {\n  var indentation = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n  var firstInBlock = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n\n  if (!def.description) {\n    return '';\n  }\n\n  var lines = descriptionLines(def.description, 120 - indentation.length);\n  if (options && options.commentDescriptions) {\n    return printDescriptionWithComments(lines, indentation, firstInBlock);\n  }\n\n  var description = indentation && !firstInBlock ? '\\n' + indentation + '\"\"\"' : indentation + '\"\"\"';\n\n  // In some circumstances, a single line can be used for the description.\n  if (lines.length === 1 && lines[0].length < 70 && lines[0][lines[0].length - 1] !== '\"') {\n    return description + escapeQuote(lines[0]) + '\"\"\"\\n';\n  }\n\n  // Format a multi-line block quote to account for leading space.\n  var hasLeadingSpace = lines[0][0] === ' ' || lines[0][0] === '\\t';\n  if (!hasLeadingSpace) {\n    description += '\\n';\n  }\n  for (var i = 0; i < lines.length; i++) {\n    if (i !== 0 || !hasLeadingSpace) {\n      description += indentation;\n    }\n    description += escapeQuote(lines[i]) + '\\n';\n  }\n  description += indentation + '\"\"\"\\n';\n  return description;\n}\n\nfunction escapeQuote(line) {\n  return line.replace(/\"\"\"/g, '\\\\\"\"\"');\n}\n\nfunction printDescriptionWithComments(lines, indentation, firstInBlock) {\n  var description = indentation && !firstInBlock ? '\\n' : '';\n  for (var i = 0; i < lines.length; i++) {\n    if (lines[i] === '') {\n      description += indentation + '#\\n';\n    } else {\n      description += indentation + '# ' + lines[i] + '\\n';\n    }\n  }\n  return description;\n}\n\nfunction descriptionLines(description, maxLen) {\n  var lines = [];\n  var rawLines = description.split('\\n');\n  for (var i = 0; i < rawLines.length; i++) {\n    if (rawLines[i] === '') {\n      lines.push(rawLines[i]);\n    } else {\n      // For > 120 character long lines, cut at space boundaries into sublines\n      // of ~80 chars.\n      var sublines = breakLine(rawLines[i], maxLen);\n      for (var j = 0; j < sublines.length; j++) {\n        lines.push(sublines[j]);\n      }\n    }\n  }\n  return lines;\n}\n\nfunction breakLine(line, maxLen) {\n  if (line.length < maxLen + 5) {\n    return [line];\n  }\n  var parts = line.split(new RegExp('((?: |^).{15,' + (maxLen - 40) + '}(?= |$))'));\n  if (parts.length < 4) {\n    return [line];\n  }\n  var sublines = [parts[0] + parts[1] + parts[2]];\n  for (var i = 3; i < parts.length; i += 2) {\n    sublines.push(parts[i].slice(1) + parts[i + 1]);\n  }\n  return sublines;\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { coerceValue } from './coerceValue';\n\n\n/**\n * Deprecated. Use coerceValue() directly for richer information.\n */\nexport function isValidJSValue(value, type) {\n  var errors = coerceValue(value, type).errors;\n  return errors ? errors.map(function (error) {\n    return error.message;\n  }) : [];\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { TypeInfo } from './TypeInfo';\n\nimport { Kind } from '../language/kinds';\nimport { visit, visitWithTypeInfo } from '../language/visitor';\n\nimport { GraphQLSchema } from '../type/schema';\nimport { ValuesOfCorrectType } from '../validation/rules/ValuesOfCorrectType';\nimport { ValidationContext } from '../validation/validate';\n\n/**\n * Utility which determines if a value literal node is valid for an input type.\n *\n * Deprecated. Rely on validation for documents containing literal values.\n */\nexport function isValidLiteralValue(type, valueNode) {\n  var emptySchema = new GraphQLSchema({});\n  var emptyDoc = { kind: Kind.DOCUMENT, definitions: [] };\n  var typeInfo = new TypeInfo(emptySchema, undefined, type);\n  var context = new ValidationContext(emptySchema, emptyDoc, typeInfo);\n  var visitor = ValuesOfCorrectType(context);\n  visit(valueNode, visitWithTypeInfo(typeInfo, visitor));\n  return context.getErrors();\n}","\n\n/**\n * Provided a collection of ASTs, presumably each from different files,\n * concatenate the ASTs together into batched AST, useful for validating many\n * GraphQL source files which together represent one conceptual application.\n */\nexport function concatAST(asts) {\n  var batchDefinitions = [];\n  for (var i = 0; i < asts.length; i++) {\n    var definitions = asts[i].definitions;\n    for (var j = 0; j < definitions.length; j++) {\n      batchDefinitions.push(definitions[j]);\n    }\n  }\n  return {\n    kind: 'Document',\n    definitions: batchDefinitions\n  };\n} /**\n   * Copyright (c) 2015-present, Facebook, Inc.\n   *\n   * This source code is licensed under the MIT license found in the\n   * LICENSE file in the root directory of this source tree.\n   *\n   * \n   */","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { visit } from '../language/visitor';\n\n\n/**\n * separateOperations accepts a single AST document which may contain many\n * operations and fragments and returns a collection of AST documents each of\n * which contains a single operation as well the fragment definitions it\n * refers to.\n */\nexport function separateOperations(documentAST) {\n  var operations = [];\n  var fragments = Object.create(null);\n  var positions = new Map();\n  var depGraph = Object.create(null);\n  var fromName = void 0;\n  var idx = 0;\n\n  // Populate metadata and build a dependency graph.\n  visit(documentAST, {\n    OperationDefinition: function OperationDefinition(node) {\n      fromName = opName(node);\n      operations.push(node);\n      positions.set(node, idx++);\n    },\n    FragmentDefinition: function FragmentDefinition(node) {\n      fromName = node.name.value;\n      fragments[fromName] = node;\n      positions.set(node, idx++);\n    },\n    FragmentSpread: function FragmentSpread(node) {\n      var toName = node.name.value;\n      (depGraph[fromName] || (depGraph[fromName] = Object.create(null)))[toName] = true;\n    }\n  });\n\n  // For each operation, produce a new synthesized AST which includes only what\n  // is necessary for completing that operation.\n  var separatedDocumentASTs = Object.create(null);\n  operations.forEach(function (operation) {\n    var operationName = opName(operation);\n    var dependencies = Object.create(null);\n    collectTransitiveDependencies(dependencies, depGraph, operationName);\n\n    // The list of definition nodes to be included for this operation, sorted\n    // to retain the same order as the original document.\n    var definitions = [operation];\n    Object.keys(dependencies).forEach(function (name) {\n      definitions.push(fragments[name]);\n    });\n    definitions.sort(function (n1, n2) {\n      return (positions.get(n1) || 0) - (positions.get(n2) || 0);\n    });\n\n    separatedDocumentASTs[operationName] = {\n      kind: 'Document',\n      definitions: definitions\n    };\n  });\n\n  return separatedDocumentASTs;\n}\n\n// Provides the empty string for anonymous operations.\nfunction opName(operation) {\n  return operation.name ? operation.name.value : '';\n}\n\n// From a dependency graph, collects a list of transitive dependencies by\n// recursing through a dependency graph.\nfunction collectTransitiveDependencies(collected, depGraph, fromName) {\n  var immediateDeps = depGraph[fromName];\n  if (immediateDeps) {\n    Object.keys(immediateDeps).forEach(function (toName) {\n      if (!collected[toName]) {\n        collected[toName] = true;\n        collectTransitiveDependencies(collected, depGraph, toName);\n      }\n    });\n  }\n}","/**\n * Copyright (c) 2016-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { isScalarType, isObjectType, isInterfaceType, isUnionType, isEnumType, isInputObjectType, isNonNullType, isListType, isNamedType } from '../type/definition';\n\nimport { GraphQLDirective } from '../type/directives';\nimport { GraphQLSchema } from '../type/schema';\nimport keyMap from '../jsutils/keyMap';\n\nexport var BreakingChangeType = {\n  FIELD_CHANGED_KIND: 'FIELD_CHANGED_KIND',\n  FIELD_REMOVED: 'FIELD_REMOVED',\n  TYPE_CHANGED_KIND: 'TYPE_CHANGED_KIND',\n  TYPE_REMOVED: 'TYPE_REMOVED',\n  TYPE_REMOVED_FROM_UNION: 'TYPE_REMOVED_FROM_UNION',\n  VALUE_REMOVED_FROM_ENUM: 'VALUE_REMOVED_FROM_ENUM',\n  ARG_REMOVED: 'ARG_REMOVED',\n  ARG_CHANGED_KIND: 'ARG_CHANGED_KIND',\n  NON_NULL_ARG_ADDED: 'NON_NULL_ARG_ADDED',\n  NON_NULL_INPUT_FIELD_ADDED: 'NON_NULL_INPUT_FIELD_ADDED',\n  INTERFACE_REMOVED_FROM_OBJECT: 'INTERFACE_REMOVED_FROM_OBJECT',\n  DIRECTIVE_REMOVED: 'DIRECTIVE_REMOVED',\n  DIRECTIVE_ARG_REMOVED: 'DIRECTIVE_ARG_REMOVED',\n  DIRECTIVE_LOCATION_REMOVED: 'DIRECTIVE_LOCATION_REMOVED',\n  NON_NULL_DIRECTIVE_ARG_ADDED: 'NON_NULL_DIRECTIVE_ARG_ADDED'\n};\n\nexport var DangerousChangeType = {\n  ARG_DEFAULT_VALUE_CHANGE: 'ARG_DEFAULT_VALUE_CHANGE',\n  VALUE_ADDED_TO_ENUM: 'VALUE_ADDED_TO_ENUM',\n  INTERFACE_ADDED_TO_OBJECT: 'INTERFACE_ADDED_TO_OBJECT',\n  TYPE_ADDED_TO_UNION: 'TYPE_ADDED_TO_UNION',\n  NULLABLE_INPUT_FIELD_ADDED: 'NULLABLE_INPUT_FIELD_ADDED',\n  NULLABLE_ARG_ADDED: 'NULLABLE_ARG_ADDED'\n};\n\n/**\n * Given two schemas, returns an Array containing descriptions of all the types\n * of breaking changes covered by the other functions down below.\n */\nexport function findBreakingChanges(oldSchema, newSchema) {\n  return [].concat(findRemovedTypes(oldSchema, newSchema), findTypesThatChangedKind(oldSchema, newSchema), findFieldsThatChangedTypeOnObjectOrInterfaceTypes(oldSchema, newSchema), findFieldsThatChangedTypeOnInputObjectTypes(oldSchema, newSchema).breakingChanges, findTypesRemovedFromUnions(oldSchema, newSchema), findValuesRemovedFromEnums(oldSchema, newSchema), findArgChanges(oldSchema, newSchema).breakingChanges, findInterfacesRemovedFromObjectTypes(oldSchema, newSchema), findRemovedDirectives(oldSchema, newSchema), findRemovedDirectiveArgs(oldSchema, newSchema), findAddedNonNullDirectiveArgs(oldSchema, newSchema), findRemovedDirectiveLocations(oldSchema, newSchema));\n}\n\n/**\n * Given two schemas, returns an Array containing descriptions of all the types\n * of potentially dangerous changes covered by the other functions down below.\n */\nexport function findDangerousChanges(oldSchema, newSchema) {\n  return [].concat(findArgChanges(oldSchema, newSchema).dangerousChanges, findValuesAddedToEnums(oldSchema, newSchema), findInterfacesAddedToObjectTypes(oldSchema, newSchema), findTypesAddedToUnions(oldSchema, newSchema), findFieldsThatChangedTypeOnInputObjectTypes(oldSchema, newSchema).dangerousChanges);\n}\n\n/**\n * Given two schemas, returns an Array containing descriptions of any breaking\n * changes in the newSchema related to removing an entire type.\n */\nexport function findRemovedTypes(oldSchema, newSchema) {\n  var oldTypeMap = oldSchema.getTypeMap();\n  var newTypeMap = newSchema.getTypeMap();\n\n  var breakingChanges = [];\n  Object.keys(oldTypeMap).forEach(function (typeName) {\n    if (!newTypeMap[typeName]) {\n      breakingChanges.push({\n        type: BreakingChangeType.TYPE_REMOVED,\n        description: typeName + ' was removed.'\n      });\n    }\n  });\n  return breakingChanges;\n}\n\n/**\n * Given two schemas, returns an Array containing descriptions of any breaking\n * changes in the newSchema related to changing the type of a type.\n */\nexport function findTypesThatChangedKind(oldSchema, newSchema) {\n  var oldTypeMap = oldSchema.getTypeMap();\n  var newTypeMap = newSchema.getTypeMap();\n\n  var breakingChanges = [];\n  Object.keys(oldTypeMap).forEach(function (typeName) {\n    if (!newTypeMap[typeName]) {\n      return;\n    }\n    var oldType = oldTypeMap[typeName];\n    var newType = newTypeMap[typeName];\n    if (oldType.constructor !== newType.constructor) {\n      breakingChanges.push({\n        type: BreakingChangeType.TYPE_CHANGED_KIND,\n        description: typeName + ' changed from ' + (typeKindName(oldType) + ' to ' + typeKindName(newType) + '.')\n      });\n    }\n  });\n  return breakingChanges;\n}\n\n/**\n * Given two schemas, returns an Array containing descriptions of any\n * breaking or dangerous changes in the newSchema related to arguments\n * (such as removal or change of type of an argument, or a change in an\n * argument's default value).\n */\nexport function findArgChanges(oldSchema, newSchema) {\n  var oldTypeMap = oldSchema.getTypeMap();\n  var newTypeMap = newSchema.getTypeMap();\n\n  var breakingChanges = [];\n  var dangerousChanges = [];\n\n  Object.keys(oldTypeMap).forEach(function (typeName) {\n    var oldType = oldTypeMap[typeName];\n    var newType = newTypeMap[typeName];\n    if (!(isObjectType(oldType) || isInterfaceType(oldType)) || !(isObjectType(newType) || isInterfaceType(newType)) || newType.constructor !== oldType.constructor) {\n      return;\n    }\n\n    var oldTypeFields = oldType.getFields();\n    var newTypeFields = newType.getFields();\n\n    Object.keys(oldTypeFields).forEach(function (fieldName) {\n      if (!newTypeFields[fieldName]) {\n        return;\n      }\n\n      oldTypeFields[fieldName].args.forEach(function (oldArgDef) {\n        var newArgs = newTypeFields[fieldName].args;\n        var newArgDef = newArgs.find(function (arg) {\n          return arg.name === oldArgDef.name;\n        });\n\n        // Arg not present\n        if (!newArgDef) {\n          breakingChanges.push({\n            type: BreakingChangeType.ARG_REMOVED,\n            description: oldType.name + '.' + fieldName + ' arg ' + (oldArgDef.name + ' was removed')\n          });\n        } else {\n          var isSafe = isChangeSafeForInputObjectFieldOrFieldArg(oldArgDef.type, newArgDef.type);\n          if (!isSafe) {\n            breakingChanges.push({\n              type: BreakingChangeType.ARG_CHANGED_KIND,\n              description: oldType.name + '.' + fieldName + ' arg ' + (oldArgDef.name + ' has changed type from ') + (oldArgDef.type.toString() + ' to ' + newArgDef.type.toString())\n            });\n          } else if (oldArgDef.defaultValue !== undefined && oldArgDef.defaultValue !== newArgDef.defaultValue) {\n            dangerousChanges.push({\n              type: DangerousChangeType.ARG_DEFAULT_VALUE_CHANGE,\n              description: oldType.name + '.' + fieldName + ' arg ' + (oldArgDef.name + ' has changed defaultValue')\n            });\n          }\n        }\n      });\n      // Check if a non-null arg was added to the field\n      newTypeFields[fieldName].args.forEach(function (newArgDef) {\n        var oldArgs = oldTypeFields[fieldName].args;\n        var oldArgDef = oldArgs.find(function (arg) {\n          return arg.name === newArgDef.name;\n        });\n        if (!oldArgDef) {\n          if (isNonNullType(newArgDef.type)) {\n            breakingChanges.push({\n              type: BreakingChangeType.NON_NULL_ARG_ADDED,\n              description: 'A non-null arg ' + newArgDef.name + ' on ' + (newType.name + '.' + fieldName + ' was added')\n            });\n          } else {\n            dangerousChanges.push({\n              type: DangerousChangeType.NULLABLE_ARG_ADDED,\n              description: 'A nullable arg ' + newArgDef.name + ' on ' + (newType.name + '.' + fieldName + ' was added')\n            });\n          }\n        }\n      });\n    });\n  });\n\n  return {\n    breakingChanges: breakingChanges,\n    dangerousChanges: dangerousChanges\n  };\n}\n\nfunction typeKindName(type) {\n  if (isScalarType(type)) {\n    return 'a Scalar type';\n  }\n  if (isObjectType(type)) {\n    return 'an Object type';\n  }\n  if (isInterfaceType(type)) {\n    return 'an Interface type';\n  }\n  if (isUnionType(type)) {\n    return 'a Union type';\n  }\n  if (isEnumType(type)) {\n    return 'an Enum type';\n  }\n  if (isInputObjectType(type)) {\n    return 'an Input type';\n  }\n  throw new TypeError('Unknown type ' + type.constructor.name);\n}\n\nexport function findFieldsThatChangedTypeOnObjectOrInterfaceTypes(oldSchema, newSchema) {\n  var oldTypeMap = oldSchema.getTypeMap();\n  var newTypeMap = newSchema.getTypeMap();\n\n  var breakingChanges = [];\n  Object.keys(oldTypeMap).forEach(function (typeName) {\n    var oldType = oldTypeMap[typeName];\n    var newType = newTypeMap[typeName];\n    if (!(isObjectType(oldType) || isInterfaceType(oldType)) || !(isObjectType(newType) || isInterfaceType(newType)) || newType.constructor !== oldType.constructor) {\n      return;\n    }\n\n    var oldTypeFieldsDef = oldType.getFields();\n    var newTypeFieldsDef = newType.getFields();\n    Object.keys(oldTypeFieldsDef).forEach(function (fieldName) {\n      // Check if the field is missing on the type in the new schema.\n      if (!(fieldName in newTypeFieldsDef)) {\n        breakingChanges.push({\n          type: BreakingChangeType.FIELD_REMOVED,\n          description: typeName + '.' + fieldName + ' was removed.'\n        });\n      } else {\n        var oldFieldType = oldTypeFieldsDef[fieldName].type;\n        var newFieldType = newTypeFieldsDef[fieldName].type;\n        var isSafe = isChangeSafeForObjectOrInterfaceField(oldFieldType, newFieldType);\n        if (!isSafe) {\n          var oldFieldTypeString = isNamedType(oldFieldType) ? oldFieldType.name : oldFieldType.toString();\n          var newFieldTypeString = isNamedType(newFieldType) ? newFieldType.name : newFieldType.toString();\n          breakingChanges.push({\n            type: BreakingChangeType.FIELD_CHANGED_KIND,\n            description: typeName + '.' + fieldName + ' changed type from ' + (oldFieldTypeString + ' to ' + newFieldTypeString + '.')\n          });\n        }\n      }\n    });\n  });\n  return breakingChanges;\n}\n\nexport function findFieldsThatChangedTypeOnInputObjectTypes(oldSchema, newSchema) {\n  var oldTypeMap = oldSchema.getTypeMap();\n  var newTypeMap = newSchema.getTypeMap();\n\n  var breakingChanges = [];\n  var dangerousChanges = [];\n  Object.keys(oldTypeMap).forEach(function (typeName) {\n    var oldType = oldTypeMap[typeName];\n    var newType = newTypeMap[typeName];\n    if (!isInputObjectType(oldType) || !isInputObjectType(newType)) {\n      return;\n    }\n\n    var oldTypeFieldsDef = oldType.getFields();\n    var newTypeFieldsDef = newType.getFields();\n    Object.keys(oldTypeFieldsDef).forEach(function (fieldName) {\n      // Check if the field is missing on the type in the new schema.\n      if (!(fieldName in newTypeFieldsDef)) {\n        breakingChanges.push({\n          type: BreakingChangeType.FIELD_REMOVED,\n          description: typeName + '.' + fieldName + ' was removed.'\n        });\n      } else {\n        var oldFieldType = oldTypeFieldsDef[fieldName].type;\n        var newFieldType = newTypeFieldsDef[fieldName].type;\n\n        var isSafe = isChangeSafeForInputObjectFieldOrFieldArg(oldFieldType, newFieldType);\n        if (!isSafe) {\n          var oldFieldTypeString = isNamedType(oldFieldType) ? oldFieldType.name : oldFieldType.toString();\n          var newFieldTypeString = isNamedType(newFieldType) ? newFieldType.name : newFieldType.toString();\n          breakingChanges.push({\n            type: BreakingChangeType.FIELD_CHANGED_KIND,\n            description: typeName + '.' + fieldName + ' changed type from ' + (oldFieldTypeString + ' to ' + newFieldTypeString + '.')\n          });\n        }\n      }\n    });\n    // Check if a field was added to the input object type\n    Object.keys(newTypeFieldsDef).forEach(function (fieldName) {\n      if (!(fieldName in oldTypeFieldsDef)) {\n        if (isNonNullType(newTypeFieldsDef[fieldName].type)) {\n          breakingChanges.push({\n            type: BreakingChangeType.NON_NULL_INPUT_FIELD_ADDED,\n            description: 'A non-null field ' + fieldName + ' on ' + ('input type ' + newType.name + ' was added.')\n          });\n        } else {\n          dangerousChanges.push({\n            type: DangerousChangeType.NULLABLE_INPUT_FIELD_ADDED,\n            description: 'A nullable field ' + fieldName + ' on ' + ('input type ' + newType.name + ' was added.')\n          });\n        }\n      }\n    });\n  });\n  return {\n    breakingChanges: breakingChanges,\n    dangerousChanges: dangerousChanges\n  };\n}\n\nfunction isChangeSafeForObjectOrInterfaceField(oldType, newType) {\n  if (isNamedType(oldType)) {\n    return (\n      // if they're both named types, see if their names are equivalent\n      isNamedType(newType) && oldType.name === newType.name ||\n      // moving from nullable to non-null of the same underlying type is safe\n      isNonNullType(newType) && isChangeSafeForObjectOrInterfaceField(oldType, newType.ofType)\n    );\n  } else if (isListType(oldType)) {\n    return (\n      // if they're both lists, make sure the underlying types are compatible\n      isListType(newType) && isChangeSafeForObjectOrInterfaceField(oldType.ofType, newType.ofType) ||\n      // moving from nullable to non-null of the same underlying type is safe\n      isNonNullType(newType) && isChangeSafeForObjectOrInterfaceField(oldType, newType.ofType)\n    );\n  } else if (isNonNullType(oldType)) {\n    // if they're both non-null, make sure the underlying types are compatible\n    return isNonNullType(newType) && isChangeSafeForObjectOrInterfaceField(oldType.ofType, newType.ofType);\n  }\n  return false;\n}\n\nfunction isChangeSafeForInputObjectFieldOrFieldArg(oldType, newType) {\n  if (isNamedType(oldType)) {\n    // if they're both named types, see if their names are equivalent\n    return isNamedType(newType) && oldType.name === newType.name;\n  } else if (isListType(oldType)) {\n    // if they're both lists, make sure the underlying types are compatible\n    return isListType(newType) && isChangeSafeForInputObjectFieldOrFieldArg(oldType.ofType, newType.ofType);\n  } else if (isNonNullType(oldType)) {\n    return (\n      // if they're both non-null, make sure the underlying types are\n      // compatible\n      isNonNullType(newType) && isChangeSafeForInputObjectFieldOrFieldArg(oldType.ofType, newType.ofType) ||\n      // moving from non-null to nullable of the same underlying type is safe\n      !isNonNullType(newType) && isChangeSafeForInputObjectFieldOrFieldArg(oldType.ofType, newType)\n    );\n  }\n  return false;\n}\n\n/**\n * Given two schemas, returns an Array containing descriptions of any breaking\n * changes in the newSchema related to removing types from a union type.\n */\nexport function findTypesRemovedFromUnions(oldSchema, newSchema) {\n  var oldTypeMap = oldSchema.getTypeMap();\n  var newTypeMap = newSchema.getTypeMap();\n\n  var typesRemovedFromUnion = [];\n  Object.keys(oldTypeMap).forEach(function (typeName) {\n    var oldType = oldTypeMap[typeName];\n    var newType = newTypeMap[typeName];\n    if (!isUnionType(oldType) || !isUnionType(newType)) {\n      return;\n    }\n    var typeNamesInNewUnion = Object.create(null);\n    newType.getTypes().forEach(function (type) {\n      typeNamesInNewUnion[type.name] = true;\n    });\n    oldType.getTypes().forEach(function (type) {\n      if (!typeNamesInNewUnion[type.name]) {\n        typesRemovedFromUnion.push({\n          type: BreakingChangeType.TYPE_REMOVED_FROM_UNION,\n          description: type.name + ' was removed from union type ' + typeName + '.'\n        });\n      }\n    });\n  });\n  return typesRemovedFromUnion;\n}\n\n/**\n * Given two schemas, returns an Array containing descriptions of any dangerous\n * changes in the newSchema related to adding types to a union type.\n */\nexport function findTypesAddedToUnions(oldSchema, newSchema) {\n  var oldTypeMap = oldSchema.getTypeMap();\n  var newTypeMap = newSchema.getTypeMap();\n\n  var typesAddedToUnion = [];\n  Object.keys(newTypeMap).forEach(function (typeName) {\n    var oldType = oldTypeMap[typeName];\n    var newType = newTypeMap[typeName];\n    if (!isUnionType(oldType) || !isUnionType(newType)) {\n      return;\n    }\n    var typeNamesInOldUnion = Object.create(null);\n    oldType.getTypes().forEach(function (type) {\n      typeNamesInOldUnion[type.name] = true;\n    });\n    newType.getTypes().forEach(function (type) {\n      if (!typeNamesInOldUnion[type.name]) {\n        typesAddedToUnion.push({\n          type: DangerousChangeType.TYPE_ADDED_TO_UNION,\n          description: type.name + ' was added to union type ' + typeName + '.'\n        });\n      }\n    });\n  });\n  return typesAddedToUnion;\n}\n/**\n * Given two schemas, returns an Array containing descriptions of any breaking\n * changes in the newSchema related to removing values from an enum type.\n */\nexport function findValuesRemovedFromEnums(oldSchema, newSchema) {\n  var oldTypeMap = oldSchema.getTypeMap();\n  var newTypeMap = newSchema.getTypeMap();\n\n  var valuesRemovedFromEnums = [];\n  Object.keys(oldTypeMap).forEach(function (typeName) {\n    var oldType = oldTypeMap[typeName];\n    var newType = newTypeMap[typeName];\n    if (!isEnumType(oldType) || !isEnumType(newType)) {\n      return;\n    }\n    var valuesInNewEnum = Object.create(null);\n    newType.getValues().forEach(function (value) {\n      valuesInNewEnum[value.name] = true;\n    });\n    oldType.getValues().forEach(function (value) {\n      if (!valuesInNewEnum[value.name]) {\n        valuesRemovedFromEnums.push({\n          type: BreakingChangeType.VALUE_REMOVED_FROM_ENUM,\n          description: value.name + ' was removed from enum type ' + typeName + '.'\n        });\n      }\n    });\n  });\n  return valuesRemovedFromEnums;\n}\n\n/**\n * Given two schemas, returns an Array containing descriptions of any dangerous\n * changes in the newSchema related to adding values to an enum type.\n */\nexport function findValuesAddedToEnums(oldSchema, newSchema) {\n  var oldTypeMap = oldSchema.getTypeMap();\n  var newTypeMap = newSchema.getTypeMap();\n\n  var valuesAddedToEnums = [];\n  Object.keys(oldTypeMap).forEach(function (typeName) {\n    var oldType = oldTypeMap[typeName];\n    var newType = newTypeMap[typeName];\n    if (!isEnumType(oldType) || !isEnumType(newType)) {\n      return;\n    }\n\n    var valuesInOldEnum = Object.create(null);\n    oldType.getValues().forEach(function (value) {\n      valuesInOldEnum[value.name] = true;\n    });\n    newType.getValues().forEach(function (value) {\n      if (!valuesInOldEnum[value.name]) {\n        valuesAddedToEnums.push({\n          type: DangerousChangeType.VALUE_ADDED_TO_ENUM,\n          description: value.name + ' was added to enum type ' + typeName + '.'\n        });\n      }\n    });\n  });\n  return valuesAddedToEnums;\n}\n\nexport function findInterfacesRemovedFromObjectTypes(oldSchema, newSchema) {\n  var oldTypeMap = oldSchema.getTypeMap();\n  var newTypeMap = newSchema.getTypeMap();\n  var breakingChanges = [];\n\n  Object.keys(oldTypeMap).forEach(function (typeName) {\n    var oldType = oldTypeMap[typeName];\n    var newType = newTypeMap[typeName];\n    if (!isObjectType(oldType) || !isObjectType(newType)) {\n      return;\n    }\n\n    var oldInterfaces = oldType.getInterfaces();\n    var newInterfaces = newType.getInterfaces();\n    oldInterfaces.forEach(function (oldInterface) {\n      if (!newInterfaces.some(function (int) {\n        return int.name === oldInterface.name;\n      })) {\n        breakingChanges.push({\n          type: BreakingChangeType.INTERFACE_REMOVED_FROM_OBJECT,\n          description: typeName + ' no longer implements interface ' + (oldInterface.name + '.')\n        });\n      }\n    });\n  });\n  return breakingChanges;\n}\n\nexport function findInterfacesAddedToObjectTypes(oldSchema, newSchema) {\n  var oldTypeMap = oldSchema.getTypeMap();\n  var newTypeMap = newSchema.getTypeMap();\n  var interfacesAddedToObjectTypes = [];\n\n  Object.keys(newTypeMap).forEach(function (typeName) {\n    var oldType = oldTypeMap[typeName];\n    var newType = newTypeMap[typeName];\n    if (!isObjectType(oldType) || !isObjectType(newType)) {\n      return;\n    }\n\n    var oldInterfaces = oldType.getInterfaces();\n    var newInterfaces = newType.getInterfaces();\n    newInterfaces.forEach(function (newInterface) {\n      if (!oldInterfaces.some(function (int) {\n        return int.name === newInterface.name;\n      })) {\n        interfacesAddedToObjectTypes.push({\n          type: DangerousChangeType.INTERFACE_ADDED_TO_OBJECT,\n          description: newInterface.name + ' added to interfaces implemented ' + ('by ' + typeName + '.')\n        });\n      }\n    });\n  });\n  return interfacesAddedToObjectTypes;\n}\n\nexport function findRemovedDirectives(oldSchema, newSchema) {\n  var removedDirectives = [];\n\n  var newSchemaDirectiveMap = getDirectiveMapForSchema(newSchema);\n  oldSchema.getDirectives().forEach(function (directive) {\n    if (!newSchemaDirectiveMap[directive.name]) {\n      removedDirectives.push({\n        type: BreakingChangeType.DIRECTIVE_REMOVED,\n        description: directive.name + ' was removed'\n      });\n    }\n  });\n\n  return removedDirectives;\n}\n\nfunction findRemovedArgsForDirective(oldDirective, newDirective) {\n  var removedArgs = [];\n  var newArgMap = getArgumentMapForDirective(newDirective);\n\n  oldDirective.args.forEach(function (arg) {\n    if (!newArgMap[arg.name]) {\n      removedArgs.push(arg);\n    }\n  });\n\n  return removedArgs;\n}\n\nexport function findRemovedDirectiveArgs(oldSchema, newSchema) {\n  var removedDirectiveArgs = [];\n  var oldSchemaDirectiveMap = getDirectiveMapForSchema(oldSchema);\n\n  newSchema.getDirectives().forEach(function (newDirective) {\n    var oldDirective = oldSchemaDirectiveMap[newDirective.name];\n    if (!oldDirective) {\n      return;\n    }\n\n    findRemovedArgsForDirective(oldDirective, newDirective).forEach(function (arg) {\n      removedDirectiveArgs.push({\n        type: BreakingChangeType.DIRECTIVE_ARG_REMOVED,\n        description: arg.name + ' was removed from ' + newDirective.name\n      });\n    });\n  });\n\n  return removedDirectiveArgs;\n}\n\nfunction findAddedArgsForDirective(oldDirective, newDirective) {\n  var addedArgs = [];\n  var oldArgMap = getArgumentMapForDirective(oldDirective);\n\n  newDirective.args.forEach(function (arg) {\n    if (!oldArgMap[arg.name]) {\n      addedArgs.push(arg);\n    }\n  });\n\n  return addedArgs;\n}\n\nexport function findAddedNonNullDirectiveArgs(oldSchema, newSchema) {\n  var addedNonNullableArgs = [];\n  var oldSchemaDirectiveMap = getDirectiveMapForSchema(oldSchema);\n\n  newSchema.getDirectives().forEach(function (newDirective) {\n    var oldDirective = oldSchemaDirectiveMap[newDirective.name];\n    if (!oldDirective) {\n      return;\n    }\n\n    findAddedArgsForDirective(oldDirective, newDirective).forEach(function (arg) {\n      if (!isNonNullType(arg.type)) {\n        return;\n      }\n\n      addedNonNullableArgs.push({\n        type: BreakingChangeType.NON_NULL_DIRECTIVE_ARG_ADDED,\n        description: 'A non-null arg ' + arg.name + ' on directive ' + (newDirective.name + ' was added')\n      });\n    });\n  });\n\n  return addedNonNullableArgs;\n}\n\nexport function findRemovedLocationsForDirective(oldDirective, newDirective) {\n  var removedLocations = [];\n  var newLocationSet = new Set(newDirective.locations);\n\n  oldDirective.locations.forEach(function (oldLocation) {\n    if (!newLocationSet.has(oldLocation)) {\n      removedLocations.push(oldLocation);\n    }\n  });\n\n  return removedLocations;\n}\n\nexport function findRemovedDirectiveLocations(oldSchema, newSchema) {\n  var removedLocations = [];\n  var oldSchemaDirectiveMap = getDirectiveMapForSchema(oldSchema);\n\n  newSchema.getDirectives().forEach(function (newDirective) {\n    var oldDirective = oldSchemaDirectiveMap[newDirective.name];\n    if (!oldDirective) {\n      return;\n    }\n\n    findRemovedLocationsForDirective(oldDirective, newDirective).forEach(function (location) {\n      removedLocations.push({\n        type: BreakingChangeType.DIRECTIVE_LOCATION_REMOVED,\n        description: location + ' was removed from ' + newDirective.name\n      });\n    });\n  });\n\n  return removedLocations;\n}\n\nfunction getDirectiveMapForSchema(schema) {\n  return keyMap(schema.getDirectives(), function (dir) {\n    return dir.name;\n  });\n}\n\nfunction getArgumentMapForDirective(directive) {\n  return keyMap(directive.args, function (arg) {\n    return arg.name;\n  });\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { GraphQLError } from '../error/GraphQLError';\nimport { visit, visitWithTypeInfo } from '../language/visitor';\n\nimport { getNamedType } from '../type/definition';\nimport { GraphQLSchema } from '../type/schema';\nimport { TypeInfo } from './TypeInfo';\n\n/**\n * A validation rule which reports deprecated usages.\n *\n * Returns a list of GraphQLError instances describing each deprecated use.\n */\nexport function findDeprecatedUsages(schema, ast) {\n  var errors = [];\n  var typeInfo = new TypeInfo(schema);\n\n  visit(ast, visitWithTypeInfo(typeInfo, {\n    Field: function Field(node) {\n      var fieldDef = typeInfo.getFieldDef();\n      if (fieldDef && fieldDef.isDeprecated) {\n        var parentType = typeInfo.getParentType();\n        if (parentType) {\n          var reason = fieldDef.deprecationReason;\n          errors.push(new GraphQLError('The field ' + parentType.name + '.' + fieldDef.name + ' is deprecated.' + (reason ? ' ' + reason : ''), [node]));\n        }\n      }\n    },\n    EnumValue: function EnumValue(node) {\n      var enumVal = typeInfo.getEnumValue();\n      if (enumVal && enumVal.isDeprecated) {\n        var type = getNamedType(typeInfo.getInputType());\n        if (type) {\n          var reason = enumVal.deprecationReason;\n          errors.push(new GraphQLError('The enum value ' + type.name + '.' + enumVal.name + ' is deprecated.' + (reason ? ' ' + reason : ''), [node]));\n        }\n      }\n    }\n  }));\n\n  return errors;\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nexport default function find(list, predicate) {\n  for (var i = 0; i < list.length; i++) {\n    if (predicate(list[i])) {\n      return list[i];\n    }\n  }\n}","import { PLATFORM } from \"aurelia-pal\";\n\nexport const ROUTES = {\n    DASHBOARD: {\n        routes: [\"\", \"dashboard\"],\n        name: \"dashboard\",\n        moduleId: PLATFORM.moduleName(\"dashboard/dashboard\"),\n        title: \"Dashboard\"\n    }, \n    NAVIGATION: {\n        routes: [\"notifications\"],\n        name: \"notifications\",\n        moduleId: PLATFORM.moduleName(\"notifications/views/alert-notifications-book-view\"),\n        title: \"Notifications\"\n    },\n    CREATE_ORDER: {\n        routes: [\"create-order\"],\n        name: \"create-order\",\n        moduleId: PLATFORM.moduleName(\"orders/views/order-create-view\"),\n        title: \"Create Order\"\n    },\n    VIEW_ORDER: {\n        routes: [\"order\"],\n        name: \"order\",\n        moduleId: PLATFORM.moduleName(\"orders/views/order-view\"),\n        title: \"View Order\"\n    },\n    LIST_ORDERS: {\n        routes: [\"orders\"],\n        name: \"list-orders\",\n        moduleId: PLATFORM.moduleName(\"orders/views/order-list-view\"),\n        title: \"Orders\"\n    },\n    LIST_SHIPPING_ADDRESSES: {\n        routes: [\"shipping-addresses\"],\n        name: \"list-shipping-addresses\",\n        moduleId: PLATFORM.moduleName(\"shipping-addresses/views/shipping-address-list-view\"),\n        title: \"Shipping Addresses\"\n    },\n    VIEW_SHIPPING_ADDRESS: {\n        routes: [\"shipping-address\"],\n        name: \"shipping-address\",\n        moduleId: PLATFORM.moduleName(\"shipping-addresses/views/shipping-address-view\"),\n        title: \"View Shipping Address\"\n    },\n    VIEW_IMPORT_ORDERS: {\n        routes: [\"import-orders\"],\n        name: \"import-orders\",\n        moduleId: PLATFORM.moduleName(\"orders/views/import-orders-view\"),\n        title: \"Import Orders\"\n    },\n    ORDER_LIST_DASHBOARD: {\n        routes: [\"order-list-dashboard\"],\n        name: \"order-list-dashboard\",\n        moduleId: PLATFORM.moduleName(\"orders/views/order-list-dashboard\"),\n        title: \"Order List Dashboard\"\n    },\n    LIST_ORDER_BATCHES: {\n        routes: [\"order-batches\"],\n        name: \"list-batches\",\n        moduleId: PLATFORM.moduleName(\"orders/views/order-batch-list-view\"),\n        title: \"Order Batches\"\n    },\n    VIEW_ORDER_BATCH: {\n        routes: [\"order-batch\"],\n        name: \"order-batch\",\n        moduleId: PLATFORM.moduleName(\"orders/views/order-batch-view\"),\n        title: \"View Order Batch\"\n    },\n    LIST_CHANGE_ORDER: {\n        routes: [\"change-orders\"],\n        name: \"change-orders\",\n        moduleId: PLATFORM.moduleName(\"change-orders/views/change-order-list-view\"),\n        title: \"Change Orders\"\n    },\n    VIEW_CHANGE_ORDER: {\n        routes: [\"change-order\"],\n        name: \"change-order\",\n        moduleId: PLATFORM.moduleName(\"change-orders/views/change-order-view\"),\n        title: \"Change Order\"\n    },\n    CREATE_CHANGE_ORDER: {\n        routes: [\"create-change-order\"],\n        name: \"create-change-order\",\n        moduleId: PLATFORM.moduleName(\"change-orders/views/change-order-view\"),\n        title: \"Create Change Order\"\n    },\n    ITEMS_DASHBOARD: {\n        routes: [\"items-dashboard\"],\n        name: \"items-dashboard\",\n        moduleId: PLATFORM.moduleName(\"items/views/items-dashboard\"),\n        title: \"Items Dashboard\"\n    },\n    LIST_ITEMS: {\n        routes: [\"items\"],\n        name: \"list-items\",\n        moduleId: PLATFORM.moduleName(\"items/views/list-items-view\"),\n        title: \"Items\"\n    },\n    VIEW_ITEM: {\n        routes: [\"item\"],\n        name: \"view-item\",\n        moduleId: PLATFORM.moduleName(\"items/views/item-view\"),\n        title: \"Item\"\n    }, \n    COLD_CHAIN_DASHBOARD: {\n        routes: [\"cold-chain-dashboard\"],\n        name: \"cold-chain-dashboard\",\n        moduleId: PLATFORM.moduleName(\"cold-chain/views/cold-chain-dashboard\"),\n        title: \"Cold Chain Dashboard\"\n    },  \n    COLD_CHAIN_ZIPS: {\n        routes: [\"cold-chain-zips\"],\n        name: \"cold-chain-zips\",\n        moduleId: PLATFORM.moduleName(\"cold-chain/views/cold-chain-zips-view\"),\n        title: \"Cold Chain Zips\"\n    },\n    BILLING_DASHBOARD: {\n        routes: [\"billing-dashboard\"],\n        name: \"billing-dashboard\",\n        moduleId: PLATFORM.moduleName(\"billing/views/billing-dashboard\"),\n        title: \"Billing Dashboard\"\n    },\n    RATE_CALCULATOR: {\n        routes: [\"rate-calculator\"],\n        name: \"rate-calculator\",\n        moduleId: PLATFORM.moduleName(\"billing/views/rate-calculator\"),\n        title: \"Rate Calculator\"\n    },\n    SHIPPING_DASHBOARD: {\n        routes: [\"shipping-dashboard\"],\n        name: \"shipping-dashboard\",\n        moduleId: PLATFORM.moduleName(\"shipping/views/shipping-dashboard\"),\n        title: \"Shipping Dashboard\"\n    },  \n    SHIPPING_LIST: {\n        routes: [\"shipping-list\"],\n        name: \"shipping-list\",\n        moduleId: PLATFORM.moduleName(\"shipping/views/shipping-list-view\"),\n        title: \"Shipping List\"\n    },\n    ACTIVITY_DETAIL_REPORT: {\n        routes: [\"activity-detail-report\"],\n        name: \"activity-detail-report\",\n        moduleId: PLATFORM.moduleName(\"items/views/activity-detail-report\"),\n        title: \"Activity Detail Report\"\n    },\n    LIST_WINERY_TRANSFERS: {\n        routes: [\"winery-transfers\"],\n        name: \"list-winery-transfers\",\n        moduleId: PLATFORM.moduleName(\"items/views/winery-transfer-list-view\"),\n        title: \"Winery Transfers\"\n    },\n    VIEW_WINERY_TRANSFER: {\n        routes: [\"winery-transfer\"],\n        name: \"view-winery-transfer\",\n        moduleId: PLATFORM.moduleName(\"items/views/winery-transfer-view\"),\n        title: \"Winery Transfer\"\n    },\n    LIST_INVOICES: {\n        routes: [\"invoices\"],\n        name: \"list-invoices\",\n        moduleId: PLATFORM.moduleName(\"billing/views/invoice-list-view\"),\n        title: \"Invoices\"\n    },\n    VIEW_INVOICE: {\n        routes: [\"invoice\"],\n        name: \"view-invoice\",\n        moduleId: PLATFORM.moduleName(\"billing/views/invoice-view\"),\n        title: \"Invoice\"\n    },\n    LIST_CREDIT_MEMOS: {\n        routes: [\"credit-memos\"],\n        name: \"list-credit-memos\",\n        moduleId: PLATFORM.moduleName(\"billing/views/credit-memo-list-view\"),\n        title: \"Credit Memos\"\n    },\n    VIEW_CREDIT_MEMO: {\n        routes: [\"credit-memo\"],\n        name: \"view-credit-memo\",\n        moduleId: PLATFORM.moduleName(\"billing/views/credit-memo-view\"),\n        title: \"Credit Memo\"\n    },\n    RETURNS_DASHBOARD: {\n        routes: [\"returns-dashboard\"],\n        name: \"returns-dashboard\",\n        moduleId: PLATFORM.moduleName(\"returns/views/returns-dashboard\"),\n        title: \"Returns Dashboard\"\n    },\n    LIST_RETURNS: {\n        routes: [\"returns\"],\n        name: \"returns\",\n        moduleId: PLATFORM.moduleName(\"returns/views/list-returns-view\"),\n        title: \"Returns\"\n    },\n    VIEW_RETURN: {\n        routes: [\"return\"],\n        name: \"return\",\n        moduleId: PLATFORM.moduleName(\"returns/views/return-view\"),\n        title: \"Return\"\n    }\n};","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n/**\n * Given an invalid input string and a list of valid options, returns a filtered\n * list of valid options sorted based on their similarity with the input.\n */\nexport default function suggestionList(input, options) {\n  var optionsByDistance = Object.create(null);\n  var oLength = options.length;\n  var inputThreshold = input.length / 2;\n  for (var i = 0; i < oLength; i++) {\n    var distance = lexicalDistance(input, options[i]);\n    var threshold = Math.max(inputThreshold, options[i].length / 2, 1);\n    if (distance <= threshold) {\n      optionsByDistance[options[i]] = distance;\n    }\n  }\n  return Object.keys(optionsByDistance).sort(function (a, b) {\n    return optionsByDistance[a] - optionsByDistance[b];\n  });\n}\n\n/**\n * Computes the lexical distance between strings A and B.\n *\n * The \"distance\" between two strings is given by counting the minimum number\n * of edits needed to transform string A into string B. An edit can be an\n * insertion, deletion, or substitution of a single character, or a swap of two\n * adjacent characters.\n *\n * Includes a custom alteration from Damerau-Levenshtein to treat case changes\n * as a single edit which helps identify mis-cased values with an edit distance\n * of 1.\n *\n * This distance can be useful for detecting typos in input or sorting\n *\n * @param {string} a\n * @param {string} b\n * @return {int} distance in number of edits\n */\nfunction lexicalDistance(aStr, bStr) {\n  if (aStr === bStr) {\n    return 0;\n  }\n\n  var i = void 0;\n  var j = void 0;\n  var d = [];\n  var a = aStr.toLowerCase();\n  var b = bStr.toLowerCase();\n  var aLength = a.length;\n  var bLength = b.length;\n\n  // Any case change counts as a single edit\n  if (a === b) {\n    return 1;\n  }\n\n  for (i = 0; i <= aLength; i++) {\n    d[i] = [i];\n  }\n\n  for (j = 1; j <= bLength; j++) {\n    d[0][j] = j;\n  }\n\n  for (i = 1; i <= aLength; i++) {\n    for (j = 1; j <= bLength; j++) {\n      var cost = a[i - 1] === b[j - 1] ? 0 : 1;\n\n      d[i][j] = Math.min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost);\n\n      if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {\n        d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + cost);\n      }\n    }\n  }\n\n  return d[aLength][bLength];\n}","\n\n/**\n * Creates a keyed JS object from an array, given a function to produce the keys\n * and a function to produce the values from each item in the array.\n *\n *     const phoneBook = [\n *       { name: 'Jon', num: '555-1234' },\n *       { name: 'Jenny', num: '867-5309' }\n *     ]\n *\n *     // { Jon: '555-1234', Jenny: '867-5309' }\n *     const phonesByName = keyValMap(\n *       phoneBook,\n *       entry => entry.name,\n *       entry => entry.num\n *     )\n *\n */\nexport default function keyValMap(list, keyFn, valFn) {\n  return list.reduce(function (map, item) {\n    return map[keyFn(item)] = valFn(item), map;\n  }, Object.create(null));\n} /**\n   * Copyright (c) 2015-present, Facebook, Inc.\n   *\n   * This source code is licensed under the MIT license found in the\n   * LICENSE file in the root directory of this source tree.\n   *\n   * \n   */","\n\nexport default process && process.env.NODE_ENV !== 'production' ? // eslint-disable-next-line no-shadow\nfunction instanceOf(value, constructor) {\n  if (value instanceof constructor) {\n    return true;\n  }\n  if (value) {\n    var valueClass = value.constructor;\n    var className = constructor.name;\n    if (valueClass && valueClass.name === className) {\n      throw new Error('Cannot use ' + className + ' \"' + value + '\" from another module or realm.\\n\\nEnsure that there is only one instance of \"graphql\" in the node_modules\\ndirectory. If different versions of \"graphql\" are the dependencies of other\\nrelied on modules, use \"resolutions\" to ensure only one version is installed.\\n\\nhttps://yarnpkg.com/en/docs/selective-version-resolutions\\n\\nDuplicate \"graphql\" modules cannot be used at the same time since different\\nversions may have different capabilities and behavior. The data from one\\nversion used in the function from another could produce confusing and\\nspurious results.');\n    }\n  }\n  return false;\n} : // eslint-disable-next-line no-shadow\nfunction instanceOf(value, constructor) {\n  return value instanceof constructor;\n}; /**\n    * Copyright (c) 2015-present, Facebook, Inc.\n    *\n    * This source code is licensed under the MIT license found in the\n    * LICENSE file in the root directory of this source tree.\n    *\n    * \n    */\n\n/**\n * A replacement for instanceof which includes an error warning when multi-realm\n * constructors are detected.\n */","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { Source } from './source';\nimport { syntaxError } from '../error';\n\nimport { createLexer, TokenKind, getTokenDesc } from './lexer';\n\n\nimport { Kind } from './kinds';\nimport { DirectiveLocation } from './directiveLocation';\n\n/**\n * Configuration options to control parser behavior\n */\n\n\n/**\n * Given a GraphQL source, parses it into a Document.\n * Throws GraphQLError if a syntax error is encountered.\n */\nexport function parse(source, options) {\n  var sourceObj = typeof source === 'string' ? new Source(source) : source;\n  if (!(sourceObj instanceof Source)) {\n    throw new TypeError('Must provide Source. Received: ' + String(sourceObj));\n  }\n  var lexer = createLexer(sourceObj, options || {});\n  return parseDocument(lexer);\n}\n\n/**\n * Given a string containing a GraphQL value (ex. `[42]`), parse the AST for\n * that value.\n * Throws GraphQLError if a syntax error is encountered.\n *\n * This is useful within tools that operate upon GraphQL Values directly and\n * in isolation of complete GraphQL documents.\n *\n * Consider providing the results to the utility function: valueFromAST().\n */\nexport function parseValue(source, options) {\n  var sourceObj = typeof source === 'string' ? new Source(source) : source;\n  var lexer = createLexer(sourceObj, options || {});\n  expect(lexer, TokenKind.SOF);\n  var value = parseValueLiteral(lexer, false);\n  expect(lexer, TokenKind.EOF);\n  return value;\n}\n\n/**\n * Given a string containing a GraphQL Type (ex. `[Int!]`), parse the AST for\n * that type.\n * Throws GraphQLError if a syntax error is encountered.\n *\n * This is useful within tools that operate upon GraphQL Types directly and\n * in isolation of complete GraphQL documents.\n *\n * Consider providing the results to the utility function: typeFromAST().\n */\nexport function parseType(source, options) {\n  var sourceObj = typeof source === 'string' ? new Source(source) : source;\n  var lexer = createLexer(sourceObj, options || {});\n  expect(lexer, TokenKind.SOF);\n  var type = parseTypeReference(lexer);\n  expect(lexer, TokenKind.EOF);\n  return type;\n}\n\n/**\n * Converts a name lex token into a name parse node.\n */\nfunction parseName(lexer) {\n  var token = expect(lexer, TokenKind.NAME);\n  return {\n    kind: Kind.NAME,\n    value: token.value,\n    loc: loc(lexer, token)\n  };\n}\n\n// Implements the parsing rules in the Document section.\n\n/**\n * Document : Definition+\n */\nfunction parseDocument(lexer) {\n  var start = lexer.token;\n  expect(lexer, TokenKind.SOF);\n  var definitions = [];\n  do {\n    definitions.push(parseDefinition(lexer));\n  } while (!skip(lexer, TokenKind.EOF));\n\n  return {\n    kind: Kind.DOCUMENT,\n    definitions: definitions,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * Definition :\n *   - ExecutableDefinition\n *   - TypeSystemDefinition\n */\nfunction parseDefinition(lexer) {\n  if (peek(lexer, TokenKind.NAME)) {\n    switch (lexer.token.value) {\n      case 'query':\n      case 'mutation':\n      case 'subscription':\n      case 'fragment':\n        return parseExecutableDefinition(lexer);\n      case 'schema':\n      case 'scalar':\n      case 'type':\n      case 'interface':\n      case 'union':\n      case 'enum':\n      case 'input':\n      case 'extend':\n      case 'directive':\n        // Note: The schema definition language is an experimental addition.\n        return parseTypeSystemDefinition(lexer);\n    }\n  } else if (peek(lexer, TokenKind.BRACE_L)) {\n    return parseExecutableDefinition(lexer);\n  } else if (peekDescription(lexer)) {\n    // Note: The schema definition language is an experimental addition.\n    return parseTypeSystemDefinition(lexer);\n  }\n\n  throw unexpected(lexer);\n}\n\n/**\n * ExecutableDefinition :\n *   - OperationDefinition\n *   - FragmentDefinition\n */\nfunction parseExecutableDefinition(lexer) {\n  if (peek(lexer, TokenKind.NAME)) {\n    switch (lexer.token.value) {\n      case 'query':\n      case 'mutation':\n      case 'subscription':\n        return parseOperationDefinition(lexer);\n\n      case 'fragment':\n        return parseFragmentDefinition(lexer);\n    }\n  } else if (peek(lexer, TokenKind.BRACE_L)) {\n    return parseOperationDefinition(lexer);\n  }\n\n  throw unexpected(lexer);\n}\n\n// Implements the parsing rules in the Operations section.\n\n/**\n * OperationDefinition :\n *  - SelectionSet\n *  - OperationType Name? VariableDefinitions? Directives? SelectionSet\n */\nfunction parseOperationDefinition(lexer) {\n  var start = lexer.token;\n  if (peek(lexer, TokenKind.BRACE_L)) {\n    return {\n      kind: Kind.OPERATION_DEFINITION,\n      operation: 'query',\n      name: undefined,\n      variableDefinitions: [],\n      directives: [],\n      selectionSet: parseSelectionSet(lexer),\n      loc: loc(lexer, start)\n    };\n  }\n  var operation = parseOperationType(lexer);\n  var name = void 0;\n  if (peek(lexer, TokenKind.NAME)) {\n    name = parseName(lexer);\n  }\n  return {\n    kind: Kind.OPERATION_DEFINITION,\n    operation: operation,\n    name: name,\n    variableDefinitions: parseVariableDefinitions(lexer),\n    directives: parseDirectives(lexer, false),\n    selectionSet: parseSelectionSet(lexer),\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * OperationType : one of query mutation subscription\n */\nfunction parseOperationType(lexer) {\n  var operationToken = expect(lexer, TokenKind.NAME);\n  switch (operationToken.value) {\n    case 'query':\n      return 'query';\n    case 'mutation':\n      return 'mutation';\n    case 'subscription':\n      return 'subscription';\n  }\n\n  throw unexpected(lexer, operationToken);\n}\n\n/**\n * VariableDefinitions : ( VariableDefinition+ )\n */\nfunction parseVariableDefinitions(lexer) {\n  return peek(lexer, TokenKind.PAREN_L) ? many(lexer, TokenKind.PAREN_L, parseVariableDefinition, TokenKind.PAREN_R) : [];\n}\n\n/**\n * VariableDefinition : Variable : Type DefaultValue?\n */\nfunction parseVariableDefinition(lexer) {\n  var start = lexer.token;\n  return {\n    kind: Kind.VARIABLE_DEFINITION,\n    variable: parseVariable(lexer),\n    type: (expect(lexer, TokenKind.COLON), parseTypeReference(lexer)),\n    defaultValue: skip(lexer, TokenKind.EQUALS) ? parseValueLiteral(lexer, true) : undefined,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * Variable : $ Name\n */\nfunction parseVariable(lexer) {\n  var start = lexer.token;\n  expect(lexer, TokenKind.DOLLAR);\n  return {\n    kind: Kind.VARIABLE,\n    name: parseName(lexer),\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * SelectionSet : { Selection+ }\n */\nfunction parseSelectionSet(lexer) {\n  var start = lexer.token;\n  return {\n    kind: Kind.SELECTION_SET,\n    selections: many(lexer, TokenKind.BRACE_L, parseSelection, TokenKind.BRACE_R),\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * Selection :\n *   - Field\n *   - FragmentSpread\n *   - InlineFragment\n */\nfunction parseSelection(lexer) {\n  return peek(lexer, TokenKind.SPREAD) ? parseFragment(lexer) : parseField(lexer);\n}\n\n/**\n * Field : Alias? Name Arguments? Directives? SelectionSet?\n *\n * Alias : Name :\n */\nfunction parseField(lexer) {\n  var start = lexer.token;\n\n  var nameOrAlias = parseName(lexer);\n  var alias = void 0;\n  var name = void 0;\n  if (skip(lexer, TokenKind.COLON)) {\n    alias = nameOrAlias;\n    name = parseName(lexer);\n  } else {\n    name = nameOrAlias;\n  }\n\n  return {\n    kind: Kind.FIELD,\n    alias: alias,\n    name: name,\n    arguments: parseArguments(lexer, false),\n    directives: parseDirectives(lexer, false),\n    selectionSet: peek(lexer, TokenKind.BRACE_L) ? parseSelectionSet(lexer) : undefined,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * Arguments[Const] : ( Argument[?Const]+ )\n */\nfunction parseArguments(lexer, isConst) {\n  var item = isConst ? parseConstArgument : parseArgument;\n  return peek(lexer, TokenKind.PAREN_L) ? many(lexer, TokenKind.PAREN_L, item, TokenKind.PAREN_R) : [];\n}\n\n/**\n * Argument[Const] : Name : Value[?Const]\n */\nfunction parseArgument(lexer) {\n  var start = lexer.token;\n  return {\n    kind: Kind.ARGUMENT,\n    name: parseName(lexer),\n    value: (expect(lexer, TokenKind.COLON), parseValueLiteral(lexer, false)),\n    loc: loc(lexer, start)\n  };\n}\n\nfunction parseConstArgument(lexer) {\n  var start = lexer.token;\n  return {\n    kind: Kind.ARGUMENT,\n    name: parseName(lexer),\n    value: (expect(lexer, TokenKind.COLON), parseConstValue(lexer)),\n    loc: loc(lexer, start)\n  };\n}\n\n// Implements the parsing rules in the Fragments section.\n\n/**\n * Corresponds to both FragmentSpread and InlineFragment in the spec.\n *\n * FragmentSpread : ... FragmentName Directives?\n *\n * InlineFragment : ... TypeCondition? Directives? SelectionSet\n */\nfunction parseFragment(lexer) {\n  var start = lexer.token;\n  expect(lexer, TokenKind.SPREAD);\n  if (peek(lexer, TokenKind.NAME) && lexer.token.value !== 'on') {\n    return {\n      kind: Kind.FRAGMENT_SPREAD,\n      name: parseFragmentName(lexer),\n      directives: parseDirectives(lexer, false),\n      loc: loc(lexer, start)\n    };\n  }\n  var typeCondition = void 0;\n  if (lexer.token.value === 'on') {\n    lexer.advance();\n    typeCondition = parseNamedType(lexer);\n  }\n  return {\n    kind: Kind.INLINE_FRAGMENT,\n    typeCondition: typeCondition,\n    directives: parseDirectives(lexer, false),\n    selectionSet: parseSelectionSet(lexer),\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * FragmentDefinition :\n *   - fragment FragmentName on TypeCondition Directives? SelectionSet\n *\n * TypeCondition : NamedType\n */\nfunction parseFragmentDefinition(lexer) {\n  var start = lexer.token;\n  expectKeyword(lexer, 'fragment');\n  // Experimental support for defining variables within fragments changes\n  // the grammar of FragmentDefinition:\n  //   - fragment FragmentName VariableDefinitions? on TypeCondition Directives? SelectionSet\n  if (lexer.options.experimentalFragmentVariables) {\n    return {\n      kind: Kind.FRAGMENT_DEFINITION,\n      name: parseFragmentName(lexer),\n      variableDefinitions: parseVariableDefinitions(lexer),\n      typeCondition: (expectKeyword(lexer, 'on'), parseNamedType(lexer)),\n      directives: parseDirectives(lexer, false),\n      selectionSet: parseSelectionSet(lexer),\n      loc: loc(lexer, start)\n    };\n  }\n  return {\n    kind: Kind.FRAGMENT_DEFINITION,\n    name: parseFragmentName(lexer),\n    typeCondition: (expectKeyword(lexer, 'on'), parseNamedType(lexer)),\n    directives: parseDirectives(lexer, false),\n    selectionSet: parseSelectionSet(lexer),\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * FragmentName : Name but not `on`\n */\nfunction parseFragmentName(lexer) {\n  if (lexer.token.value === 'on') {\n    throw unexpected(lexer);\n  }\n  return parseName(lexer);\n}\n\n// Implements the parsing rules in the Values section.\n\n/**\n * Value[Const] :\n *   - [~Const] Variable\n *   - IntValue\n *   - FloatValue\n *   - StringValue\n *   - BooleanValue\n *   - NullValue\n *   - EnumValue\n *   - ListValue[?Const]\n *   - ObjectValue[?Const]\n *\n * BooleanValue : one of `true` `false`\n *\n * NullValue : `null`\n *\n * EnumValue : Name but not `true`, `false` or `null`\n */\nfunction parseValueLiteral(lexer, isConst) {\n  var token = lexer.token;\n  switch (token.kind) {\n    case TokenKind.BRACKET_L:\n      return parseList(lexer, isConst);\n    case TokenKind.BRACE_L:\n      return parseObject(lexer, isConst);\n    case TokenKind.INT:\n      lexer.advance();\n      return {\n        kind: Kind.INT,\n        value: token.value,\n        loc: loc(lexer, token)\n      };\n    case TokenKind.FLOAT:\n      lexer.advance();\n      return {\n        kind: Kind.FLOAT,\n        value: token.value,\n        loc: loc(lexer, token)\n      };\n    case TokenKind.STRING:\n    case TokenKind.BLOCK_STRING:\n      return parseStringLiteral(lexer);\n    case TokenKind.NAME:\n      if (token.value === 'true' || token.value === 'false') {\n        lexer.advance();\n        return {\n          kind: Kind.BOOLEAN,\n          value: token.value === 'true',\n          loc: loc(lexer, token)\n        };\n      } else if (token.value === 'null') {\n        lexer.advance();\n        return {\n          kind: Kind.NULL,\n          loc: loc(lexer, token)\n        };\n      }\n      lexer.advance();\n      return {\n        kind: Kind.ENUM,\n        value: token.value,\n        loc: loc(lexer, token)\n      };\n    case TokenKind.DOLLAR:\n      if (!isConst) {\n        return parseVariable(lexer);\n      }\n      break;\n  }\n  throw unexpected(lexer);\n}\n\nfunction parseStringLiteral(lexer) {\n  var token = lexer.token;\n  lexer.advance();\n  return {\n    kind: Kind.STRING,\n    value: token.value,\n    block: token.kind === TokenKind.BLOCK_STRING,\n    loc: loc(lexer, token)\n  };\n}\n\nexport function parseConstValue(lexer) {\n  return parseValueLiteral(lexer, true);\n}\n\nfunction parseValueValue(lexer) {\n  return parseValueLiteral(lexer, false);\n}\n\n/**\n * ListValue[Const] :\n *   - [ ]\n *   - [ Value[?Const]+ ]\n */\nfunction parseList(lexer, isConst) {\n  var start = lexer.token;\n  var item = isConst ? parseConstValue : parseValueValue;\n  return {\n    kind: Kind.LIST,\n    values: any(lexer, TokenKind.BRACKET_L, item, TokenKind.BRACKET_R),\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * ObjectValue[Const] :\n *   - { }\n *   - { ObjectField[?Const]+ }\n */\nfunction parseObject(lexer, isConst) {\n  var start = lexer.token;\n  expect(lexer, TokenKind.BRACE_L);\n  var fields = [];\n  while (!skip(lexer, TokenKind.BRACE_R)) {\n    fields.push(parseObjectField(lexer, isConst));\n  }\n  return {\n    kind: Kind.OBJECT,\n    fields: fields,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * ObjectField[Const] : Name : Value[?Const]\n */\nfunction parseObjectField(lexer, isConst) {\n  var start = lexer.token;\n  return {\n    kind: Kind.OBJECT_FIELD,\n    name: parseName(lexer),\n    value: (expect(lexer, TokenKind.COLON), parseValueLiteral(lexer, isConst)),\n    loc: loc(lexer, start)\n  };\n}\n\n// Implements the parsing rules in the Directives section.\n\n/**\n * Directives[Const] : Directive[?Const]+\n */\nfunction parseDirectives(lexer, isConst) {\n  var directives = [];\n  while (peek(lexer, TokenKind.AT)) {\n    directives.push(parseDirective(lexer, isConst));\n  }\n  return directives;\n}\n\n/**\n * Directive[Const] : @ Name Arguments[?Const]?\n */\nfunction parseDirective(lexer, isConst) {\n  var start = lexer.token;\n  expect(lexer, TokenKind.AT);\n  return {\n    kind: Kind.DIRECTIVE,\n    name: parseName(lexer),\n    arguments: parseArguments(lexer, isConst),\n    loc: loc(lexer, start)\n  };\n}\n\n// Implements the parsing rules in the Types section.\n\n/**\n * Type :\n *   - NamedType\n *   - ListType\n *   - NonNullType\n */\nexport function parseTypeReference(lexer) {\n  var start = lexer.token;\n  var type = void 0;\n  if (skip(lexer, TokenKind.BRACKET_L)) {\n    type = parseTypeReference(lexer);\n    expect(lexer, TokenKind.BRACKET_R);\n    type = {\n      kind: Kind.LIST_TYPE,\n      type: type,\n      loc: loc(lexer, start)\n    };\n  } else {\n    type = parseNamedType(lexer);\n  }\n  if (skip(lexer, TokenKind.BANG)) {\n    return {\n      kind: Kind.NON_NULL_TYPE,\n      type: type,\n      loc: loc(lexer, start)\n    };\n  }\n  return type;\n}\n\n/**\n * NamedType : Name\n */\nexport function parseNamedType(lexer) {\n  var start = lexer.token;\n  return {\n    kind: Kind.NAMED_TYPE,\n    name: parseName(lexer),\n    loc: loc(lexer, start)\n  };\n}\n\n// Implements the parsing rules in the Type Definition section.\n\n/**\n * TypeSystemDefinition :\n *   - SchemaDefinition\n *   - TypeDefinition\n *   - TypeExtension\n *   - DirectiveDefinition\n *\n * TypeDefinition :\n *   - ScalarTypeDefinition\n *   - ObjectTypeDefinition\n *   - InterfaceTypeDefinition\n *   - UnionTypeDefinition\n *   - EnumTypeDefinition\n *   - InputObjectTypeDefinition\n */\nfunction parseTypeSystemDefinition(lexer) {\n  // Many definitions begin with a description and require a lookahead.\n  var keywordToken = peekDescription(lexer) ? lexer.lookahead() : lexer.token;\n\n  if (keywordToken.kind === TokenKind.NAME) {\n    switch (keywordToken.value) {\n      case 'schema':\n        return parseSchemaDefinition(lexer);\n      case 'scalar':\n        return parseScalarTypeDefinition(lexer);\n      case 'type':\n        return parseObjectTypeDefinition(lexer);\n      case 'interface':\n        return parseInterfaceTypeDefinition(lexer);\n      case 'union':\n        return parseUnionTypeDefinition(lexer);\n      case 'enum':\n        return parseEnumTypeDefinition(lexer);\n      case 'input':\n        return parseInputObjectTypeDefinition(lexer);\n      case 'extend':\n        return parseTypeExtension(lexer);\n      case 'directive':\n        return parseDirectiveDefinition(lexer);\n    }\n  }\n\n  throw unexpected(lexer, keywordToken);\n}\n\nfunction peekDescription(lexer) {\n  return peek(lexer, TokenKind.STRING) || peek(lexer, TokenKind.BLOCK_STRING);\n}\n\n/**\n * Description : StringValue\n */\nfunction parseDescription(lexer) {\n  if (peekDescription(lexer)) {\n    return parseStringLiteral(lexer);\n  }\n}\n\n/**\n * SchemaDefinition : schema Directives[Const]? { OperationTypeDefinition+ }\n */\nfunction parseSchemaDefinition(lexer) {\n  var start = lexer.token;\n  expectKeyword(lexer, 'schema');\n  var directives = parseDirectives(lexer, true);\n  var operationTypes = many(lexer, TokenKind.BRACE_L, parseOperationTypeDefinition, TokenKind.BRACE_R);\n  return {\n    kind: Kind.SCHEMA_DEFINITION,\n    directives: directives,\n    operationTypes: operationTypes,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * OperationTypeDefinition : OperationType : NamedType\n */\nfunction parseOperationTypeDefinition(lexer) {\n  var start = lexer.token;\n  var operation = parseOperationType(lexer);\n  expect(lexer, TokenKind.COLON);\n  var type = parseNamedType(lexer);\n  return {\n    kind: Kind.OPERATION_TYPE_DEFINITION,\n    operation: operation,\n    type: type,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * ScalarTypeDefinition : Description? scalar Name Directives[Const]?\n */\nfunction parseScalarTypeDefinition(lexer) {\n  var start = lexer.token;\n  var description = parseDescription(lexer);\n  expectKeyword(lexer, 'scalar');\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  return {\n    kind: Kind.SCALAR_TYPE_DEFINITION,\n    description: description,\n    name: name,\n    directives: directives,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * ObjectTypeDefinition :\n *   Description?\n *   type Name ImplementsInterfaces? Directives[Const]? FieldsDefinition?\n */\nfunction parseObjectTypeDefinition(lexer) {\n  var start = lexer.token;\n  var description = parseDescription(lexer);\n  expectKeyword(lexer, 'type');\n  var name = parseName(lexer);\n  var interfaces = parseImplementsInterfaces(lexer);\n  var directives = parseDirectives(lexer, true);\n  var fields = parseFieldsDefinition(lexer);\n  return {\n    kind: Kind.OBJECT_TYPE_DEFINITION,\n    description: description,\n    name: name,\n    interfaces: interfaces,\n    directives: directives,\n    fields: fields,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * ImplementsInterfaces :\n *   - implements `&`? NamedType\n *   - ImplementsInterfaces & NamedType\n */\nfunction parseImplementsInterfaces(lexer) {\n  var types = [];\n  if (lexer.token.value === 'implements') {\n    lexer.advance();\n    // Optional leading ampersand\n    skip(lexer, TokenKind.AMP);\n    do {\n      types.push(parseNamedType(lexer));\n    } while (skip(lexer, TokenKind.AMP) ||\n    // Legacy support for the SDL?\n    lexer.options.allowLegacySDLImplementsInterfaces && peek(lexer, TokenKind.NAME));\n  }\n  return types;\n}\n\n/**\n * FieldsDefinition : { FieldDefinition+ }\n */\nfunction parseFieldsDefinition(lexer) {\n  // Legacy support for the SDL?\n  if (lexer.options.allowLegacySDLEmptyFields && peek(lexer, TokenKind.BRACE_L) && lexer.lookahead().kind === TokenKind.BRACE_R) {\n    lexer.advance();\n    lexer.advance();\n    return [];\n  }\n  return peek(lexer, TokenKind.BRACE_L) ? many(lexer, TokenKind.BRACE_L, parseFieldDefinition, TokenKind.BRACE_R) : [];\n}\n\n/**\n * FieldDefinition :\n *   - Description? Name ArgumentsDefinition? : Type Directives[Const]?\n */\nfunction parseFieldDefinition(lexer) {\n  var start = lexer.token;\n  var description = parseDescription(lexer);\n  var name = parseName(lexer);\n  var args = parseArgumentDefs(lexer);\n  expect(lexer, TokenKind.COLON);\n  var type = parseTypeReference(lexer);\n  var directives = parseDirectives(lexer, true);\n  return {\n    kind: Kind.FIELD_DEFINITION,\n    description: description,\n    name: name,\n    arguments: args,\n    type: type,\n    directives: directives,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * ArgumentsDefinition : ( InputValueDefinition+ )\n */\nfunction parseArgumentDefs(lexer) {\n  if (!peek(lexer, TokenKind.PAREN_L)) {\n    return [];\n  }\n  return many(lexer, TokenKind.PAREN_L, parseInputValueDef, TokenKind.PAREN_R);\n}\n\n/**\n * InputValueDefinition :\n *   - Description? Name : Type DefaultValue? Directives[Const]?\n */\nfunction parseInputValueDef(lexer) {\n  var start = lexer.token;\n  var description = parseDescription(lexer);\n  var name = parseName(lexer);\n  expect(lexer, TokenKind.COLON);\n  var type = parseTypeReference(lexer);\n  var defaultValue = void 0;\n  if (skip(lexer, TokenKind.EQUALS)) {\n    defaultValue = parseConstValue(lexer);\n  }\n  var directives = parseDirectives(lexer, true);\n  return {\n    kind: Kind.INPUT_VALUE_DEFINITION,\n    description: description,\n    name: name,\n    type: type,\n    defaultValue: defaultValue,\n    directives: directives,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * InterfaceTypeDefinition :\n *   - Description? interface Name Directives[Const]? FieldsDefinition?\n */\nfunction parseInterfaceTypeDefinition(lexer) {\n  var start = lexer.token;\n  var description = parseDescription(lexer);\n  expectKeyword(lexer, 'interface');\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  var fields = parseFieldsDefinition(lexer);\n  return {\n    kind: Kind.INTERFACE_TYPE_DEFINITION,\n    description: description,\n    name: name,\n    directives: directives,\n    fields: fields,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * UnionTypeDefinition :\n *   - Description? union Name Directives[Const]? UnionMemberTypes?\n */\nfunction parseUnionTypeDefinition(lexer) {\n  var start = lexer.token;\n  var description = parseDescription(lexer);\n  expectKeyword(lexer, 'union');\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  var types = parseUnionMemberTypes(lexer);\n  return {\n    kind: Kind.UNION_TYPE_DEFINITION,\n    description: description,\n    name: name,\n    directives: directives,\n    types: types,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * UnionMemberTypes :\n *   - = `|`? NamedType\n *   - UnionMemberTypes | NamedType\n */\nfunction parseUnionMemberTypes(lexer) {\n  var types = [];\n  if (skip(lexer, TokenKind.EQUALS)) {\n    // Optional leading pipe\n    skip(lexer, TokenKind.PIPE);\n    do {\n      types.push(parseNamedType(lexer));\n    } while (skip(lexer, TokenKind.PIPE));\n  }\n  return types;\n}\n\n/**\n * EnumTypeDefinition :\n *   - Description? enum Name Directives[Const]? EnumValuesDefinition?\n */\nfunction parseEnumTypeDefinition(lexer) {\n  var start = lexer.token;\n  var description = parseDescription(lexer);\n  expectKeyword(lexer, 'enum');\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  var values = parseEnumValuesDefinition(lexer);\n  return {\n    kind: Kind.ENUM_TYPE_DEFINITION,\n    description: description,\n    name: name,\n    directives: directives,\n    values: values,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * EnumValuesDefinition : { EnumValueDefinition+ }\n */\nfunction parseEnumValuesDefinition(lexer) {\n  return peek(lexer, TokenKind.BRACE_L) ? many(lexer, TokenKind.BRACE_L, parseEnumValueDefinition, TokenKind.BRACE_R) : [];\n}\n\n/**\n * EnumValueDefinition : Description? EnumValue Directives[Const]?\n *\n * EnumValue : Name\n */\nfunction parseEnumValueDefinition(lexer) {\n  var start = lexer.token;\n  var description = parseDescription(lexer);\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  return {\n    kind: Kind.ENUM_VALUE_DEFINITION,\n    description: description,\n    name: name,\n    directives: directives,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * InputObjectTypeDefinition :\n *   - Description? input Name Directives[Const]? InputFieldsDefinition?\n */\nfunction parseInputObjectTypeDefinition(lexer) {\n  var start = lexer.token;\n  var description = parseDescription(lexer);\n  expectKeyword(lexer, 'input');\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  var fields = parseInputFieldsDefinition(lexer);\n  return {\n    kind: Kind.INPUT_OBJECT_TYPE_DEFINITION,\n    description: description,\n    name: name,\n    directives: directives,\n    fields: fields,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * InputFieldsDefinition : { InputValueDefinition+ }\n */\nfunction parseInputFieldsDefinition(lexer) {\n  return peek(lexer, TokenKind.BRACE_L) ? many(lexer, TokenKind.BRACE_L, parseInputValueDef, TokenKind.BRACE_R) : [];\n}\n\n/**\n * TypeExtension :\n *   - ScalarTypeExtension\n *   - ObjectTypeExtension\n *   - InterfaceTypeExtension\n *   - UnionTypeExtension\n *   - EnumTypeExtension\n *   - InputObjectTypeDefinition\n */\nfunction parseTypeExtension(lexer) {\n  var keywordToken = lexer.lookahead();\n\n  if (keywordToken.kind === TokenKind.NAME) {\n    switch (keywordToken.value) {\n      case 'scalar':\n        return parseScalarTypeExtension(lexer);\n      case 'type':\n        return parseObjectTypeExtension(lexer);\n      case 'interface':\n        return parseInterfaceTypeExtension(lexer);\n      case 'union':\n        return parseUnionTypeExtension(lexer);\n      case 'enum':\n        return parseEnumTypeExtension(lexer);\n      case 'input':\n        return parseInputObjectTypeExtension(lexer);\n    }\n  }\n\n  throw unexpected(lexer, keywordToken);\n}\n\n/**\n * ScalarTypeExtension :\n *   - extend scalar Name Directives[Const]\n */\nfunction parseScalarTypeExtension(lexer) {\n  var start = lexer.token;\n  expectKeyword(lexer, 'extend');\n  expectKeyword(lexer, 'scalar');\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  if (directives.length === 0) {\n    throw unexpected(lexer);\n  }\n  return {\n    kind: Kind.SCALAR_TYPE_EXTENSION,\n    name: name,\n    directives: directives,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * ObjectTypeExtension :\n *  - extend type Name ImplementsInterfaces? Directives[Const]? FieldsDefinition\n *  - extend type Name ImplementsInterfaces? Directives[Const]\n *  - extend type Name ImplementsInterfaces\n */\nfunction parseObjectTypeExtension(lexer) {\n  var start = lexer.token;\n  expectKeyword(lexer, 'extend');\n  expectKeyword(lexer, 'type');\n  var name = parseName(lexer);\n  var interfaces = parseImplementsInterfaces(lexer);\n  var directives = parseDirectives(lexer, true);\n  var fields = parseFieldsDefinition(lexer);\n  if (interfaces.length === 0 && directives.length === 0 && fields.length === 0) {\n    throw unexpected(lexer);\n  }\n  return {\n    kind: Kind.OBJECT_TYPE_EXTENSION,\n    name: name,\n    interfaces: interfaces,\n    directives: directives,\n    fields: fields,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * InterfaceTypeExtension :\n *   - extend interface Name Directives[Const]? FieldsDefinition\n *   - extend interface Name Directives[Const]\n */\nfunction parseInterfaceTypeExtension(lexer) {\n  var start = lexer.token;\n  expectKeyword(lexer, 'extend');\n  expectKeyword(lexer, 'interface');\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  var fields = parseFieldsDefinition(lexer);\n  if (directives.length === 0 && fields.length === 0) {\n    throw unexpected(lexer);\n  }\n  return {\n    kind: Kind.INTERFACE_TYPE_EXTENSION,\n    name: name,\n    directives: directives,\n    fields: fields,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * UnionTypeExtension :\n *   - extend union Name Directives[Const]? UnionMemberTypes\n *   - extend union Name Directives[Const]\n */\nfunction parseUnionTypeExtension(lexer) {\n  var start = lexer.token;\n  expectKeyword(lexer, 'extend');\n  expectKeyword(lexer, 'union');\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  var types = parseUnionMemberTypes(lexer);\n  if (directives.length === 0 && types.length === 0) {\n    throw unexpected(lexer);\n  }\n  return {\n    kind: Kind.UNION_TYPE_EXTENSION,\n    name: name,\n    directives: directives,\n    types: types,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * EnumTypeExtension :\n *   - extend enum Name Directives[Const]? EnumValuesDefinition\n *   - extend enum Name Directives[Const]\n */\nfunction parseEnumTypeExtension(lexer) {\n  var start = lexer.token;\n  expectKeyword(lexer, 'extend');\n  expectKeyword(lexer, 'enum');\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  var values = parseEnumValuesDefinition(lexer);\n  if (directives.length === 0 && values.length === 0) {\n    throw unexpected(lexer);\n  }\n  return {\n    kind: Kind.ENUM_TYPE_EXTENSION,\n    name: name,\n    directives: directives,\n    values: values,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * InputObjectTypeExtension :\n *   - extend input Name Directives[Const]? InputFieldsDefinition\n *   - extend input Name Directives[Const]\n */\nfunction parseInputObjectTypeExtension(lexer) {\n  var start = lexer.token;\n  expectKeyword(lexer, 'extend');\n  expectKeyword(lexer, 'input');\n  var name = parseName(lexer);\n  var directives = parseDirectives(lexer, true);\n  var fields = parseInputFieldsDefinition(lexer);\n  if (directives.length === 0 && fields.length === 0) {\n    throw unexpected(lexer);\n  }\n  return {\n    kind: Kind.INPUT_OBJECT_TYPE_EXTENSION,\n    name: name,\n    directives: directives,\n    fields: fields,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * DirectiveDefinition :\n *   - Description? directive @ Name ArgumentsDefinition? on DirectiveLocations\n */\nfunction parseDirectiveDefinition(lexer) {\n  var start = lexer.token;\n  var description = parseDescription(lexer);\n  expectKeyword(lexer, 'directive');\n  expect(lexer, TokenKind.AT);\n  var name = parseName(lexer);\n  var args = parseArgumentDefs(lexer);\n  expectKeyword(lexer, 'on');\n  var locations = parseDirectiveLocations(lexer);\n  return {\n    kind: Kind.DIRECTIVE_DEFINITION,\n    description: description,\n    name: name,\n    arguments: args,\n    locations: locations,\n    loc: loc(lexer, start)\n  };\n}\n\n/**\n * DirectiveLocations :\n *   - `|`? DirectiveLocation\n *   - DirectiveLocations | DirectiveLocation\n */\nfunction parseDirectiveLocations(lexer) {\n  // Optional leading pipe\n  skip(lexer, TokenKind.PIPE);\n  var locations = [];\n  do {\n    locations.push(parseDirectiveLocation(lexer));\n  } while (skip(lexer, TokenKind.PIPE));\n  return locations;\n}\n\n/*\n * DirectiveLocation :\n *   - ExecutableDirectiveLocation\n *   - TypeSystemDirectiveLocation\n *\n * ExecutableDirectiveLocation : one of\n *   `QUERY`\n *   `MUTATION`\n *   `SUBSCRIPTION`\n *   `FIELD`\n *   `FRAGMENT_DEFINITION`\n *   `FRAGMENT_SPREAD`\n *   `INLINE_FRAGMENT`\n *\n * TypeSystemDirectiveLocation : one of\n *   `SCHEMA`\n *   `SCALAR`\n *   `OBJECT`\n *   `FIELD_DEFINITION`\n *   `ARGUMENT_DEFINITION`\n *   `INTERFACE`\n *   `UNION`\n *   `ENUM`\n *   `ENUM_VALUE`\n *   `INPUT_OBJECT`\n *   `INPUT_FIELD_DEFINITION`\n */\nfunction parseDirectiveLocation(lexer) {\n  var start = lexer.token;\n  var name = parseName(lexer);\n  if (DirectiveLocation.hasOwnProperty(name.value)) {\n    return name;\n  }\n  throw unexpected(lexer, start);\n}\n\n// Core parsing utility functions\n\n/**\n * Returns a location object, used to identify the place in\n * the source that created a given parsed object.\n */\nfunction loc(lexer, startToken) {\n  if (!lexer.options.noLocation) {\n    return new Loc(startToken, lexer.lastToken, lexer.source);\n  }\n}\n\nfunction Loc(startToken, endToken, source) {\n  this.start = startToken.start;\n  this.end = endToken.end;\n  this.startToken = startToken;\n  this.endToken = endToken;\n  this.source = source;\n}\n\n// Print a simplified form when appearing in JSON/util.inspect.\nLoc.prototype.toJSON = Loc.prototype.inspect = function toJSON() {\n  return { start: this.start, end: this.end };\n};\n\n/**\n * Determines if the next token is of a given kind\n */\nfunction peek(lexer, kind) {\n  return lexer.token.kind === kind;\n}\n\n/**\n * If the next token is of the given kind, return true after advancing\n * the lexer. Otherwise, do not change the parser state and return false.\n */\nfunction skip(lexer, kind) {\n  var match = lexer.token.kind === kind;\n  if (match) {\n    lexer.advance();\n  }\n  return match;\n}\n\n/**\n * If the next token is of the given kind, return that token after advancing\n * the lexer. Otherwise, do not change the parser state and throw an error.\n */\nfunction expect(lexer, kind) {\n  var token = lexer.token;\n  if (token.kind === kind) {\n    lexer.advance();\n    return token;\n  }\n  throw syntaxError(lexer.source, token.start, 'Expected ' + kind + ', found ' + getTokenDesc(token));\n}\n\n/**\n * If the next token is a keyword with the given value, return that token after\n * advancing the lexer. Otherwise, do not change the parser state and return\n * false.\n */\nfunction expectKeyword(lexer, value) {\n  var token = lexer.token;\n  if (token.kind === TokenKind.NAME && token.value === value) {\n    lexer.advance();\n    return token;\n  }\n  throw syntaxError(lexer.source, token.start, 'Expected \"' + value + '\", found ' + getTokenDesc(token));\n}\n\n/**\n * Helper function for creating an error when an unexpected lexed token\n * is encountered.\n */\nfunction unexpected(lexer, atToken) {\n  var token = atToken || lexer.token;\n  return syntaxError(lexer.source, token.start, 'Unexpected ' + getTokenDesc(token));\n}\n\n/**\n * Returns a possibly empty list of parse nodes, determined by\n * the parseFn. This list begins with a lex token of openKind\n * and ends with a lex token of closeKind. Advances the parser\n * to the next lex token after the closing token.\n */\nfunction any(lexer, openKind, parseFn, closeKind) {\n  expect(lexer, openKind);\n  var nodes = [];\n  while (!skip(lexer, closeKind)) {\n    nodes.push(parseFn(lexer));\n  }\n  return nodes;\n}\n\n/**\n * Returns a non-empty list of parse nodes, determined by\n * the parseFn. This list begins with a lex token of openKind\n * and ends with a lex token of closeKind. Advances the parser\n * to the next lex token after the closing token.\n */\nfunction many(lexer, openKind, parseFn, closeKind) {\n  expect(lexer, openKind);\n  var nodes = [parseFn(lexer)];\n  while (!skip(lexer, closeKind)) {\n    nodes.push(parseFn(lexer));\n  }\n  return nodes;\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { isObjectType, isListType, isNonNullType, isAbstractType } from '../type/definition';\n\n\n/**\n * Provided two types, return true if the types are equal (invariant).\n */\nexport function isEqualType(typeA, typeB) {\n  // Equivalent types are equal.\n  if (typeA === typeB) {\n    return true;\n  }\n\n  // If either type is non-null, the other must also be non-null.\n  if (isNonNullType(typeA) && isNonNullType(typeB)) {\n    return isEqualType(typeA.ofType, typeB.ofType);\n  }\n\n  // If either type is a list, the other must also be a list.\n  if (isListType(typeA) && isListType(typeB)) {\n    return isEqualType(typeA.ofType, typeB.ofType);\n  }\n\n  // Otherwise the types are not equal.\n  return false;\n}\n\n/**\n * Provided a type and a super type, return true if the first type is either\n * equal or a subset of the second super type (covariant).\n */\nexport function isTypeSubTypeOf(schema, maybeSubType, superType) {\n  // Equivalent type is a valid subtype\n  if (maybeSubType === superType) {\n    return true;\n  }\n\n  // If superType is non-null, maybeSubType must also be non-null.\n  if (isNonNullType(superType)) {\n    if (isNonNullType(maybeSubType)) {\n      return isTypeSubTypeOf(schema, maybeSubType.ofType, superType.ofType);\n    }\n    return false;\n  }\n  if (isNonNullType(maybeSubType)) {\n    // If superType is nullable, maybeSubType may be non-null or nullable.\n    return isTypeSubTypeOf(schema, maybeSubType.ofType, superType);\n  }\n\n  // If superType type is a list, maybeSubType type must also be a list.\n  if (isListType(superType)) {\n    if (isListType(maybeSubType)) {\n      return isTypeSubTypeOf(schema, maybeSubType.ofType, superType.ofType);\n    }\n    return false;\n  }\n  if (isListType(maybeSubType)) {\n    // If superType is not a list, maybeSubType must also be not a list.\n    return false;\n  }\n\n  // If superType type is an abstract type, maybeSubType type may be a currently\n  // possible object type.\n  if (isAbstractType(superType) && isObjectType(maybeSubType) && schema.isPossibleType(superType, maybeSubType)) {\n    return true;\n  }\n\n  // Otherwise, the child type is not a valid subtype of the parent type.\n  return false;\n}\n\n/**\n * Provided two composite types, determine if they \"overlap\". Two composite\n * types overlap when the Sets of possible concrete types for each intersect.\n *\n * This is often used to determine if a fragment of a given type could possibly\n * be visited in a context of another type.\n *\n * This function is commutative.\n */\nexport function doTypesOverlap(schema, typeA, typeB) {\n  // So flow is aware this is constant\n  var _typeB = typeB;\n\n  // Equivalent types overlap\n  if (typeA === _typeB) {\n    return true;\n  }\n\n  if (isAbstractType(typeA)) {\n    if (isAbstractType(_typeB)) {\n      // If both types are abstract, then determine if there is any intersection\n      // between possible concrete types of each.\n      return schema.getPossibleTypes(typeA).some(function (type) {\n        return schema.isPossibleType(_typeB, type);\n      });\n    }\n    // Determine if the latter type is a possible concrete type of the former.\n    return schema.isPossibleType(typeA, _typeB);\n  }\n\n  if (isAbstractType(_typeB)) {\n    // Determine if the former type is a possible concrete type of the latter.\n    return schema.isPossibleType(_typeB, typeA);\n  }\n\n  // Otherwise the types do not overlap.\n  return false;\n}","import { autoinject } from \"aurelia-framework\";\nimport { DefaultService } from \"shared-service/default-service\";\nimport { Order, OrderItem, OrderReference, convertResponseToOrderReference, convertResponseToOrder, convertResponseToOrderLine } from \"orders/models/order\";\nimport moment from 'moment';\nimport { CreateRecordService } from \"shared-service/create-record-service\";\nimport { CreateRecordRequest } from \"shared-models/create-record-request\";\nimport { SearchService } from \"shared-service/search-service\";\nimport { GetRecordService } from \"shared-service/get-record-service\";\nimport { GetRecordsService } from \"shared-service/get-records-service\";\nimport { SearchResult } from \"shared-models/search-result\";\nimport { SearchRequest } from \"shared-models/search-request\";\nimport { GetRecordsRequest } from \"shared-models/get-records-request\";\nimport { GetRecordRequest } from \"shared-models/get-record-request\";\n\n@autoinject\nexport class OrderService extends DefaultService {   \n    private static readonly RECORD_TYPE = \"sale.order\";\n    private static readonly ITEM_RECORD_TYPE = \"sale.order.line\";\n\n    constructor(\n        private searchService: SearchService, \n        private getRecordService: GetRecordService, \n        private getRecordsService: GetRecordsService, \n        private createRecordService: CreateRecordService) {\n        super(OrderService.name);\n    }\n\n    async createRecord(order: Order): Promise<number> {\n        let createOrderRequest = new CreateRecordRequest({\n            recordType: OrderService.RECORD_TYPE,\n            recordData: {\n                \"winery_order_number\": order.wineryOrderNumber,\n                \"shipping_carrier\": order.carrier ? order.carrier.id : null,\n                \"shipping_method\": order.shippingMethod ? order.shippingMethod.id : null,\n                \"future_ship_date\": order.futureShipDate,\n                \"special_shipping_instructions\": order.shippingInstructions,\n                \"gift_message\": order.giftMessage,\n                \"include_ice_packs\": order.includeIce,\n                \"shipping_attention\": order.shippingAddress.attention,\n                \"shipping_addressee\": order.shippingAddress.addressee,\n                \"shipping_street\": order.shippingAddress.address1,\n                \"shipping_street2\": order.shippingAddress.address2,\n                \"shipping_zip\": order.shippingAddress.zip,\n                \"shipping_city\": order.shippingAddress.city,\n                \"shipping_state\": order.shippingAddress.state ? order.shippingAddress.state.id : null,\n                \"shipping_country\": order.shippingAddress.country ? order.shippingAddress.country.id : null,\n                \"shipping_phone\": order.shippingAddress.phone,\n                \"recipient_emails\": order.email,\n                \"items\": order.items\n            }\n        });\n        return await this.createRecordService.createRecord(createOrderRequest);        \n    }\n\n    async searchRecords(searchRequestData: {page?: number, pageSize?: number, filter?: string, fieldFilters?: any[]}): Promise<SearchResult>{\n        let searchRequest = new SearchRequest({\n            recordType: OrderService.RECORD_TYPE,\n            pageSize: searchRequestData.pageSize || 50,\n            page: searchRequestData.page || 1,\n            filter: searchRequestData.filter || \"\",\n            fieldFilters: searchRequestData.fieldFilters || []\n        });\n        return await this.searchService.searchRecords(searchRequest, convertResponseToOrderReference);\n    }\n\n    async searchByLineRecords(searchRequestData: {page?: number, pageSize?: number, filter?: string, fieldFilters?: any[]}): Promise<SearchResult>{\n        let searchRequest = new SearchRequest({\n            recordType: OrderService.ITEM_RECORD_TYPE,\n            pageSize: searchRequestData.pageSize || 50,\n            page: searchRequestData.page || 1,\n            filter: \"\",\n            fieldFilters: searchRequestData.fieldFilters || []\n        });\n        return await this.searchService.searchRecords(searchRequest, convertResponseToOrderLine);\n    }\n\n    async getAllLineRecords(fieldFilters: any[]=[]): Promise<OrderItem[]>{\n        let allOrderLines = [];\n        let page = 1;\n        let pageSize = 5000;\n        let initialSearch = await this.searchByLineRecords({page: page, pageSize: pageSize, fieldFilters: fieldFilters});\n        allOrderLines = allOrderLines.concat(initialSearch.records as OrderItem[]);\n        var totalPageCount = initialSearch.pageCount;\n        if(totalPageCount > 1){\n            while(page < totalPageCount){                \n                page++;\n                let nextSearch = await this.searchByLineRecords({page: page, pageSize: pageSize, fieldFilters: fieldFilters});\n                allOrderLines = allOrderLines.concat(nextSearch.records as OrderItem[]);             \n            }           \n        }   \n        return allOrderLines;\n    }\n\n    async getAllRecords(fieldFilters: any[]=[]): Promise<OrderReference[]>{\n        let orderReferences = [] as OrderReference[];\n        let page = 1;\n        let pageSize = 5000;\n        let initialSearch = await this.searchRecords({page: page, pageSize: pageSize, fieldFilters: fieldFilters});\n        orderReferences = orderReferences.concat(initialSearch.records as OrderReference[]);\n        var totalPageCount = initialSearch.pageCount;\n        if(totalPageCount > 1){\n            while(page < totalPageCount){\n                page++;\n                let nextSearch = await this.searchRecords({page: page, pageSize: pageSize, fieldFilters: fieldFilters});\n                orderReferences = orderReferences.concat(nextSearch.records as OrderReference[]);\n            }           \n        }        \n        return orderReferences;\n    }\n\n    async getRecord(orderId: number): Promise<Order>{\n        let getRecordRequest = new GetRecordRequest({\n            recordType: OrderService.RECORD_TYPE,\n            recordId: orderId\n        });\n        let getRecordResponse = await this.getRecordService.getRecord(getRecordRequest, convertResponseToOrder);\n        return getRecordResponse.record;\n    }\n\n    async getRecordsByOrderNumber(wineryOrderNumber: string): Promise<OrderReference[]>{\n        let getRecordsRequest = new GetRecordsRequest({\n            recordType: OrderService.RECORD_TYPE,\n            fieldReference: \"winery_order_number\",\n            fieldReferenceValue: wineryOrderNumber\n        });\n        let getRecordsResponse = await this.getRecordsService.getRecords(getRecordsRequest, convertResponseToOrderReference);\n        return getRecordsResponse.records;\n    }\n}","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // 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\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // 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.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","import { CognitoUser } from \"@aws-amplify/auth\";\n\nexport enum LOGIN_STATUS{\n    NONE = \"\",\n    SUCCESS = \"SUCCESS\",\n    FAILED = \"FAILED\",\n    NEWPASSWORD = \"NEW_PASSWORD_REQUIRED\"\n}\n\nexport class LoginTokens{\n    accessToken: string;\n    idToken: string;\n    refreshToken: string;\n\n    constructor(data?: {accessToken?: string, idToken?: string, refreshToken?: string}){\n        data = data || {accessToken: \"\", idToken: \"\", refreshToken: \"\"};  \n        this.accessToken = data.accessToken || \"\";\n        this.idToken = data.idToken || \"\";\n        this.refreshToken = data.refreshToken || \"\";  \n    }\n}\n\nexport class LoginResponse{\n    status: LOGIN_STATUS;\n    message: string;\n    email: string;\n    user: CognitoUser | any;\n    tokens: LoginTokens;\n\n    constructor(data?: {status?: LOGIN_STATUS, message?: string, email?: string, user?: any, tokens?: LoginTokens}){\n        data = data || {status: LOGIN_STATUS.NONE, message: \"\", email: \"\", tokens: null};\n        this.status = data.status || LOGIN_STATUS.NONE;\n        this.message = data.message || \"\";\n        this.email = data.email || \"\";\n        this.user = data.user || \"\";\n        this.tokens = data.tokens || null;\n    }\n\n    get isSuccessful(): boolean{\n        return this.status === LOGIN_STATUS.SUCCESS;\n    }\n\n    get needNewPassword(): boolean{\n        return this.status === LOGIN_STATUS.NEWPASSWORD;\n    }\n}","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\n\n\nimport { DOM, FEATURE } from 'aurelia-pal';\n\nvar hasSetImmediate = typeof setImmediate === 'function';\nvar stackSeparator = '\\nEnqueued in TaskQueue by:\\n';\nvar microStackSeparator = '\\nEnqueued in MicroTaskQueue by:\\n';\n\nfunction makeRequestFlushFromMutationObserver(flush) {\n  var toggle = 1;\n  var observer = DOM.createMutationObserver(flush);\n  var node = DOM.createTextNode('');\n  observer.observe(node, { characterData: true });\n  return function requestFlush() {\n    toggle = -toggle;\n    node.data = toggle;\n  };\n}\n\nfunction makeRequestFlushFromTimer(flush) {\n  return function requestFlush() {\n    var timeoutHandle = setTimeout(handleFlushTimer, 0);\n\n    var intervalHandle = setInterval(handleFlushTimer, 50);\n    function handleFlushTimer() {\n      clearTimeout(timeoutHandle);\n      clearInterval(intervalHandle);\n      flush();\n    }\n  };\n}\n\nfunction onError(error, task, longStacks) {\n  if (longStacks && task.stack && (typeof error === 'undefined' ? 'undefined' : _typeof(error)) === 'object' && error !== null) {\n    error.stack = filterFlushStack(error.stack) + task.stack;\n  }\n\n  if ('onError' in task) {\n    task.onError(error);\n  } else if (hasSetImmediate) {\n    setImmediate(function () {\n      throw error;\n    });\n  } else {\n    setTimeout(function () {\n      throw error;\n    }, 0);\n  }\n}\n\nexport var TaskQueue = function () {\n  function TaskQueue() {\n    var _this = this;\n\n    \n\n    this.flushing = false;\n    this.longStacks = false;\n\n    this.microTaskQueue = [];\n    this.microTaskQueueCapacity = 1024;\n    this.taskQueue = [];\n\n    if (FEATURE.mutationObserver) {\n      this.requestFlushMicroTaskQueue = makeRequestFlushFromMutationObserver(function () {\n        return _this.flushMicroTaskQueue();\n      });\n    } else {\n      this.requestFlushMicroTaskQueue = makeRequestFlushFromTimer(function () {\n        return _this.flushMicroTaskQueue();\n      });\n    }\n\n    this.requestFlushTaskQueue = makeRequestFlushFromTimer(function () {\n      return _this.flushTaskQueue();\n    });\n  }\n\n  TaskQueue.prototype._flushQueue = function _flushQueue(queue, capacity) {\n    var index = 0;\n    var task = void 0;\n\n    try {\n      this.flushing = true;\n      while (index < queue.length) {\n        task = queue[index];\n        if (this.longStacks) {\n          this.stack = typeof task.stack === 'string' ? task.stack : undefined;\n        }\n        task.call();\n        index++;\n\n        if (index > capacity) {\n          for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {\n            queue[scan] = queue[scan + index];\n          }\n\n          queue.length -= index;\n          index = 0;\n        }\n      }\n    } catch (error) {\n      onError(error, task, this.longStacks);\n    } finally {\n      this.flushing = false;\n    }\n  };\n\n  TaskQueue.prototype.queueMicroTask = function queueMicroTask(task) {\n    if (this.microTaskQueue.length < 1) {\n      this.requestFlushMicroTaskQueue();\n    }\n\n    if (this.longStacks) {\n      task.stack = this.prepareQueueStack(microStackSeparator);\n    }\n\n    this.microTaskQueue.push(task);\n  };\n\n  TaskQueue.prototype.queueTask = function queueTask(task) {\n    if (this.taskQueue.length < 1) {\n      this.requestFlushTaskQueue();\n    }\n\n    if (this.longStacks) {\n      task.stack = this.prepareQueueStack(stackSeparator);\n    }\n\n    this.taskQueue.push(task);\n  };\n\n  TaskQueue.prototype.flushTaskQueue = function flushTaskQueue() {\n    var queue = this.taskQueue;\n    this.taskQueue = [];\n    this._flushQueue(queue, Number.MAX_VALUE);\n  };\n\n  TaskQueue.prototype.flushMicroTaskQueue = function flushMicroTaskQueue() {\n    var queue = this.microTaskQueue;\n    this._flushQueue(queue, this.microTaskQueueCapacity);\n    queue.length = 0;\n  };\n\n  TaskQueue.prototype.prepareQueueStack = function prepareQueueStack(separator) {\n    var stack = separator + filterQueueStack(captureStack());\n\n    if (typeof this.stack === 'string') {\n      stack = filterFlushStack(stack) + this.stack;\n    }\n\n    return stack;\n  };\n\n  return TaskQueue;\n}();\n\nfunction captureStack() {\n  var error = new Error();\n\n  if (error.stack) {\n    return error.stack;\n  }\n\n  try {\n    throw error;\n  } catch (e) {\n    return e.stack;\n  }\n}\n\nfunction filterQueueStack(stack) {\n  return stack.replace(/^[\\s\\S]*?\\bqueue(Micro)?Task\\b[^\\n]*\\n/, '');\n}\n\nfunction filterFlushStack(stack) {\n  var index = stack.lastIndexOf('flushMicroTaskQueue');\n\n  if (index < 0) {\n    index = stack.lastIndexOf('flushTaskQueue');\n    if (index < 0) {\n      return stack;\n    }\n  }\n\n  index = stack.lastIndexOf('\\n', index);\n\n  return index < 0 ? stack : stack.substr(0, index);\n}","\nexport function AggregateError(message, innerError, skipIfAlreadyAggregate) {\n  if (innerError) {\n    if (innerError.innerError && skipIfAlreadyAggregate) {\n      return innerError;\n    }\n\n    var separator = '\\n------------------------------------------------\\n';\n\n    message += separator + 'Inner Error:\\n';\n\n    if (typeof innerError === 'string') {\n      message += 'Message: ' + innerError;\n    } else {\n      if (innerError.message) {\n        message += 'Message: ' + innerError.message;\n      } else {\n        message += 'Unknown Inner Error Type. Displaying Inner Error as JSON:\\n ' + JSON.stringify(innerError, null, '  ');\n      }\n\n      if (innerError.stack) {\n        message += '\\nInner Error Stack:\\n' + innerError.stack;\n        message += '\\nEnd Inner Error Stack';\n      }\n    }\n\n    message += separator;\n  }\n\n  var e = new Error(message);\n  if (innerError) {\n    e.innerError = innerError;\n  }\n\n  return e;\n}\n\nexport var FEATURE = {};\n\nexport var PLATFORM = {\n  noop: function noop() {},\n  eachModule: function eachModule() {},\n  moduleName: function (_moduleName) {\n    function moduleName(_x) {\n      return _moduleName.apply(this, arguments);\n    }\n\n    moduleName.toString = function () {\n      return _moduleName.toString();\n    };\n\n    return moduleName;\n  }(function (moduleName) {\n    return moduleName;\n  })\n};\n\nPLATFORM.global = function () {\n  if (typeof self !== 'undefined') {\n    return self;\n  }\n\n  if (typeof global !== 'undefined') {\n    return global;\n  }\n\n  return new Function('return this')();\n}();\n\nexport var DOM = {};\nexport var isInitialized = false;\n\nexport function initializePAL(callback) {\n  if (isInitialized) {\n    return;\n  }\n  isInitialized = true;\n  if (typeof Object.getPropertyDescriptor !== 'function') {\n    Object.getPropertyDescriptor = function (subject, name) {\n      var pd = Object.getOwnPropertyDescriptor(subject, name);\n      var proto = Object.getPrototypeOf(subject);\n      while (typeof pd === 'undefined' && proto !== null) {\n        pd = Object.getOwnPropertyDescriptor(proto, name);\n        proto = Object.getPrototypeOf(proto);\n      }\n      return pd;\n    };\n  }\n\n  callback(PLATFORM, FEATURE, DOM);\n}\nexport function reset() {\n  isInitialized = false;\n}","import { autoinject } from \"aurelia-dependency-injection\";\nimport { Logger } from \"aurelia-logging\";\nimport { LoginPassport } from \"login/models/login-passport\";\nimport { LoginResponse, LOGIN_STATUS } from \"login/models/login-response\";\nimport { Auth} from 'aws-amplify';\nimport { CognitoUser } from \"@aws-amplify/auth\";\nimport { LogManager } from \"aurelia-framework\";\n\n@autoinject\nexport class LoginService {\n    private logger: Logger;\n\n    constructor() {\n        this.logger = LogManager.getLogger(LoginService.name);\n    }   \n\n    async setNewPassword(loginPassport: LoginPassport, newPassword: string, user: CognitoUser | any) {\n        try {\n            await Auth.completeNewPassword(\n                user,              \n                newPassword,\n                {}\n            );\n            return new LoginResponse({\n                email: loginPassport.email,\n                user: user,\n                status: LOGIN_STATUS.SUCCESS\n            });\n        } catch (err) {\n            return new LoginResponse({\n                email: loginPassport.email,\n                status: LOGIN_STATUS.FAILED,\n                message: err.message\n            });\n        }\n    }\n\n    async sendForgotPasswordCode(email: string): Promise<void> {\n        await Auth.forgotPassword(email);\n    }\n\n    async sendNewPasswordWithCode(email: string, code: string, newPassword: string): Promise<void>{\n        await Auth.forgotPasswordSubmit(email, code, newPassword);\n    }\n\n    async login(loginPassport: LoginPassport): Promise<LoginResponse> {\n        try {\n            const user = await Auth.signIn(loginPassport.email, loginPassport.password);\n            let status = LOGIN_STATUS.SUCCESS;\n            if (user.challengeName) {\n                status = LOGIN_STATUS.NONE;\n                if (user.challengeName === 'NEW_PASSWORD_REQUIRED') {\n                    status = LOGIN_STATUS.NEWPASSWORD;\n                }\n            }\n            return new LoginResponse({\n                email: loginPassport.email,\n                user: user,\n                status: status\n            });\n\n        } catch (err) {\n            return new LoginResponse({\n                email: loginPassport.email,\n                status: LOGIN_STATUS.FAILED,\n                message: err.message\n            });\n        }\n\n    }\n\n    async logout(): Promise<void> {\n        return new Promise((resolve, reject) => {\n            Auth.signOut({ global: true })\n            .then(data => {this.logger.debug(`Logout Success :: ${data}`); resolve()})\n            .catch(err => {this.logger.error(`Logout Error :: ${err}`); reject();});\n          });\n    }\n}","import { autoinject } from \"aurelia-framework\";\nimport { DefaultService } from \"shared-service/default-service\";\nimport { SearchService } from \"shared-service/search-service\";\nimport { SearchRequest } from \"shared-models/search-request\";\nimport { SearchResult } from \"shared-models/search-result\";\nimport { GetRecordsService } from \"shared-service/get-records-service\";\nimport { GetRecordService } from \"shared-service/get-record-service\";\nimport { BillingRate } from \"billing/models/billing-rate\";\nimport { ZoneRange } from \"billing/models/zones\";\nimport { GetRecordsRequest } from \"shared-models/get-records-request\";\nimport { MatchedRate, RateCalculatorRequest, RateCalculatorResponse } from \"billing/models/rate-calculator\";\nimport { Invoice, InvoiceItem } from \"billing/models/invoice\";\nimport { GetRecordRequest } from \"shared-models/get-record-request\";\nimport { CreditMemo } from \"billing/models/credit-memo\";\n\n@autoinject\nexport class BillingService extends DefaultService{\n    private static readonly INVOICE_RECORD_TYPE = \"account.move\";\n    private static readonly CREDIT_MEMO_RECORD_TYPE = \"vf_credit_memo\";\n    private static readonly BILLING_RATE_TYPE = \"vf_billing_rate\";\n    private static readonly ZONE_RANGE_TYPE = \"vf_zone_range\";\n    private static readonly RATE_CALCULATOR_TYPE = \"vf_rate_calculator\";\n\n    constructor(private searchService: SearchService, private getRecordService: GetRecordService, private getRecordsService: GetRecordsService){\n        super(BillingService.name);        \n    }\n\n    async searchInvoices(searchRequestData: {page?: number, pageSize?: number, filter?: string, fieldFilters?: any[]}): Promise<SearchResult>{\n        let searchRequest = new SearchRequest({\n            recordType: BillingService.INVOICE_RECORD_TYPE,\n            pageSize: searchRequestData.pageSize || 50,\n            page: searchRequestData.page || 1,\n            filter: searchRequestData.filter || \"\",\n            fieldFilters: searchRequestData.fieldFilters || []\n        });\n        return await this.searchService.searchRecords(searchRequest, this._convertResponseToInvoice)\n    }\n\n    async getAllInvoices(fieldFilters: any[]=[]): Promise<Invoice[]>{\n        let allRecords = [] as Invoice[];\n        let page = 1;\n        let pageSize = 5000;\n        let initialSearch = await this.searchInvoices({page: page, pageSize: pageSize, fieldFilters: fieldFilters});\n        allRecords = allRecords.concat(initialSearch.records as Invoice[]);\n        var totalPageCount = initialSearch.pageCount;\n        if(totalPageCount > 1){\n            while(page < totalPageCount){\n                page++;\n                let nextSearch = await this.searchInvoices({page: page, pageSize: pageSize, fieldFilters: fieldFilters});\n                allRecords = allRecords.concat(nextSearch.records as Invoice[]);\n            }           \n        }        \n        return allRecords;\n    }\n\n    async getInvoice(id: number): Promise<Invoice>{\n        let getRecordRequest = new GetRecordRequest({\n            recordType: BillingService.INVOICE_RECORD_TYPE,\n            recordId: id\n        });\n        let getRecordResponse = await this.getRecordService.getRecord(getRecordRequest, this._convertResponseToInvoice, this);\n        return getRecordResponse.record;\n    }\n\n    async searchCreditMemos(searchRequestData: {page?: number, pageSize?: number, filter?: string, fieldFilters?: any[]}): Promise<SearchResult>{\n        let searchRequest = new SearchRequest({\n            recordType: BillingService.CREDIT_MEMO_RECORD_TYPE,\n            pageSize: searchRequestData.pageSize || 50,\n            page: searchRequestData.page || 1,\n            filter: searchRequestData.filter || \"\",\n            fieldFilters: searchRequestData.fieldFilters || []\n        });\n        return await this.searchService.searchRecords(searchRequest, this._convertResponseToCreditmemo)\n    }\n\n    async getAllCreditMemos(fieldFilters: any[]=[]): Promise<CreditMemo[]>{\n        let allRecords = [] as CreditMemo[];\n        let page = 1;\n        let pageSize = 5000;\n        let initialSearch = await this.searchInvoices({page: page, pageSize: pageSize, fieldFilters: fieldFilters});\n        allRecords = allRecords.concat(initialSearch.records as CreditMemo[]);\n        var totalPageCount = initialSearch.pageCount;\n        if(totalPageCount > 1){\n            while(page < totalPageCount){\n                page++;\n                let nextSearch = await this.searchInvoices({page: page, pageSize: pageSize, fieldFilters: fieldFilters});\n                allRecords = allRecords.concat(nextSearch.records as CreditMemo[]);\n            }           \n        }        \n        return allRecords;\n    }\n\n    async getCreditMemo(id: number): Promise<CreditMemo>{\n        let getRecordRequest = new GetRecordRequest({\n            recordType: BillingService.CREDIT_MEMO_RECORD_TYPE,\n            recordId: id\n        });\n        let getRecordResponse = await this.getRecordService.getRecord(getRecordRequest, this._convertResponseToCreditmemo, this);\n        return getRecordResponse.record;\n    }\n\n    async getRateCalculatorResponse(request: RateCalculatorRequest): Promise<RateCalculatorResponse[]>{\n        let getRecordsRequest = new GetRecordsRequest({\n            recordType: BillingService.RATE_CALCULATOR_TYPE,\n            additionalFields: request\n        });\n        let getRecordsResponse = await this.getRecordsService.getRecords(getRecordsRequest, this._convertResponseToRateCalculator);\n        return getRecordsResponse.records;\n    }\n\n    async searchBillingRates(page: number, filter: string, pageSize:number = 50): Promise<SearchResult>{\n        page = page || 1;\n        filter = filter || \"\";\n        let searchRequest = new SearchRequest({\n            recordType: BillingService.BILLING_RATE_TYPE,\n            pageSize: pageSize,\n            page: page,\n            filter: filter\n        });\n        return await this.searchService.searchRecords(searchRequest, this._convertResponseToBillingRate);\n    }\n\n    async searchZoneRanges(page: number, filter: string, pageSize:number = 50): Promise<SearchResult>{\n        page = page || 1;\n        filter = filter || \"\";\n        let searchRequest = new SearchRequest({\n            recordType: BillingService.ZONE_RANGE_TYPE,\n            pageSize: pageSize,\n            page: page,\n            filter: filter\n        });\n        return await this.searchService.searchRecords(searchRequest, this._convertResponseToZoneRange);\n    }\n\n    async getAllBillingRates(): Promise<BillingRate[]>{\n        let allBillingRates = [];\n        let page = 1;\n        let pageSize = 5000;\n        let initialSearch = await this.searchBillingRates(page, \"\", pageSize);\n        allBillingRates = allBillingRates.concat(initialSearch.records as BillingRate[]);\n        var totalPageCount = initialSearch.pageCount;\n        if(totalPageCount > 1){\n            while(page < totalPageCount){                \n                page++;\n                let nextSearch = await this.searchBillingRates(page, \"\", pageSize);\n                allBillingRates = allBillingRates.concat(nextSearch.records as BillingRate[]);             \n            }           \n        }        \n        return allBillingRates;\n    }\n\n    async getAllZoneRanges(): Promise<ZoneRange[]>{\n        let allBillingRates = [];\n        let page = 1;\n        let pageSize = 5000;\n        let initialSearch = await this.searchZoneRanges(page, \"\", pageSize);\n        allBillingRates = allBillingRates.concat(initialSearch.records as ZoneRange[]);\n        var totalPageCount = initialSearch.pageCount;\n        if(totalPageCount > 1){\n            while(page < totalPageCount){                \n                page++;\n                let nextSearch = await this.searchZoneRanges(page, \"\", pageSize);\n                allBillingRates = allBillingRates.concat(nextSearch.records as ZoneRange[]);             \n            }           \n        }        \n        return allBillingRates;\n    }\n\n    _convertResponseToRateCalculator(response: any): RateCalculatorResponse{\n        return new RateCalculatorResponse({           \n            matchedRates: (response[\"matched_rates\"] || []).map((matchedRate) =>{\n                return new MatchedRate({\n                    billingRate: matchedRate[\"billing_rate\"],\n                    quantity: matchedRate[\"quantity\"]\n                });\n            }),\n            shippingMethods: (response[\"shipping_methods\"] || \"\").split(\",\"),\n            totalCharge: response[\"total_charge\"]            \n        });\n    }\n\n    _convertResponseToBillingRate(response: any): BillingRate{\n        return new BillingRate({\n            id: response[\"id\"],\n            name: response[\"name\"],\n            isDefaultRate: response[\"is_default_rate\"],\n            startDate: response[\"start_date\"],\n            endDate: response[\"end_date\"],\n            bottleSizeIds: response[\"bottle_sizes\"],\n            bottleSizeNames: (response[\"bottle_size_names\"] || \"\").split(\",\"),\n            wineryIds: response[\"wineries\"],\n            wineryNames: (response[\"winery_names\"] || \"\").split(\",\"),\n            zone: response[\"zone\"],\n            shippingMethodIds: response[\"shipping_methods\"],\n            shippingMethodNames: (response[\"shipping_method_names\"] || \"\").split(\",\"),\n            quantity: response[\"quantity\"],\n            charge: response[\"charge\"]\n            \n        });\n    }\n\n    _convertResponseToZoneRange(response: any): ZoneRange{\n        return new ZoneRange({\n            id: response[\"id\"],\n            name: response[\"name\"],\n            billingZone: response[\"billing_zone\"],\n            carriers: response[\"carriers\"],\n            country: response[\"country\"],\n            state: response[\"state\"],\n            zipStart: response[\"zip_start\"],\n            zipEnd: response[\"zip_end\"]\n            \n        });\n    }\n\n    _convertResponseToInvoice(response): Invoice{\n        let invoice = new Invoice({\n            id: response[\"id\"],\n            name: response[\"name\"],\n            date: response[\"invoice_date\"],\n            dueDate: response[\"invoice_date_due\"],\n            amountTotal: response[\"amount_total\"],\n            amountDue: response[\"amount_residual\"],\n            reference: response[\"ref\"],\n            paymentState: response[\"invoice_payment_state\"],\n            term: response[\"invoice_payment_term_id\"],\n            inboundFileName: response[\"inbound_export_name\"],\n            inboundFile: atob(response[\"inbound_export\"]),\n            outboundFileName: response[\"outbound_export_name\"],\n            outboundFile: atob(response[\"outbound_export\"]),\n            storageFileName: response[\"storage_export_name\"],\n            storageFile: atob(response[\"storage_export\"]),\n            addressCorrFileName: response[\"address_corr_export_name\"],\n            addressCorrFile: atob(response[\"address_corr_export\"]),\n            returnsFileName: response[\"returns_export_name\"],\n            returnsFile: atob(response[\"returns_export\"]),       \n        });\n        invoice.items = (response[\"items\"] || []).map((item) => new InvoiceItem({\n            id: item[\"id\"],\n            name: item[\"id\"],\n            itemId: item[\"product_id\"][\"id\"],\n            itemName: item[\"product_id\"][\"name\"],\n            quantity: item[\"quantity\"],\n            totalCharges: item[\"price_unit\"]\n        }));\n        return invoice;\n    }\n\n    _convertResponseToCreditmemo(response): CreditMemo {\n        let creditMemo = new CreditMemo({\n            id: response[\"id\"],\n            name: response[\"name\"],\n            createdDate: response[\"created_date\"],\n            approvedDate: response[\"approved_date\"],\n            deniedDate: response[\"denied_date\"],\n            status: response[\"status\"],\n            refundType: response[\"refund_type\"],\n            wineryOrder: response[\"winery_order\"],\n            recipientName: response[\"recipient_name\"],\n            wineryOrderNumber: response[\"winery_order_number\"],               \n            vfOrderNumber: response[\"vf_order_number\"],               \n            trackingNumbers: response[\"tracking_numbers\"],               \n            checkOrInvoiceNumber: response[\"check_or_invoice_num\"],               \n            vfInvoiceNumber: response[\"vinfillment_invoice_num\"],               \n            notes: response[\"notes\"],               \n            creditAmount: response[\"credit_amount\"],\n        });\n        return creditMemo;\n    }\n}","import { IRecordReference, RecordReference } from \"shared-models/record-reference\";\nimport { StateReference, CountryReference, IStateReference, ICountryReference } from \"../../orders/models/country-record\";\nimport { computedFrom } from \"aurelia-framework\";\n\nexport interface IShippingAddress extends IRecordReference { \n    createdByUser?: IRecordReference,\n    lastUpdatedByUser?: IRecordReference,\n    isResidential?: boolean, \n    attention?: string, \n    addressee?: string, \n    street?: string, \n    street2?: string, \n    zipcode?: string, \n    city?: string, \n    state?: IStateReference, \n    country?: ICountryReference,\n    phone?: string, \n    emails?: string };\nexport class ShippingAddress extends RecordReference {\n    createdByUser?: RecordReference;\n    lastUpdatedByUser?: RecordReference;\n    isResidential?: boolean;\n    attention?: string;\n    addressee?: string;\n    street?: string;\n    street2?: string;\n    zipcode?: string;\n    city?: string;\n    state?: StateReference;\n    country?: CountryReference;\n    phone?: string;\n    emails?: string;\n\n    constructor(data: IShippingAddress) {\n        super(data)\n        this.createdByUser = data.createdByUser ? new RecordReference(data.createdByUser) : null;\n        this.lastUpdatedByUser = data.lastUpdatedByUser ? new RecordReference(data.lastUpdatedByUser) : null;\n        this.isResidential = data.isResidential || false;\n        this.attention = data.attention || \"\";\n        this.addressee = data.addressee || \"\";\n        this.street = data.street || \"\";\n        this.street2 = data.street2 || \"\";\n        this.zipcode = data.zipcode || \"\";\n        this.city = data.city || \"\";\n        this.state = data.state ? new StateReference(data.state) : null;\n        this.country = data.country ? new CountryReference(data.country) : null;\n        this.phone = data.phone || \"\";\n        this.emails = data.emails || \"\";\n    }\n\n    _addNewLine(data) {\n        return data ? data + \"\\r\\n\" : \"\";\n    }\n\n    _addBankSpaceAfter(data) {\n        return data ? data + \" \" : \"\"\n    }\n\n    @computedFrom('country')\n    get countryName(): string {\n        return this.country ? this.country.name : \"\";\n    }\n\n    @computedFrom('state')\n    get stateName(): string {\n        return this.state ? this.state.name : \"\";\n    }\n\n    @computedFrom('attention', 'addressee', 'street', 'street2', 'city', 'state', 'zipcode', 'country', 'phone', 'emails')\n    get addressForm(): string {        \n        return this._addNewLine(this.attention) +\n            this._addNewLine(this.addressee) +\n            this._addNewLine(this.street) +\n            this._addNewLine(this.street2) +\n            this._addBankSpaceAfter(this.city) + this._addBankSpaceAfter(this.stateName) + this._addBankSpaceAfter(this.zipcode) + \"\\r\\n\" +\n            this._addNewLine(this.countryName) +\n            this._addNewLine(this.phone) +\n            this._addNewLine(this.emails);\n    }\n}","import { IItemReference, ItemReference } from \"items/models/item-record\";\nimport { IRecordReference, RecordReference } from \"shared-models/record-reference\";\nimport { BillingRate } from \"./billing-rate\";\n\nexport interface IRateCalculatorRequest {\n    shipmethodid?: number,\n    zoneid?: number,\n    items?: RateCalculatorRequestItem[]};\n\nexport class RateCalculatorRequest{    \n    shipmethodid: number;\n    zoneid: number;\n    items: RateCalculatorRequestItem[];    \n    constructor(data: IRateCalculatorRequest){\n        data = data || {}\n        this.shipmethodid = data.shipmethodid || null;\n        this.zoneid = data.zoneid || null;\n        this.items = (data.items || []).map((item) => new RateCalculatorRequestItem(item));   \n    }\n}\n\nexport interface IRateCalculatorRequestItem {id?: number, addedLine?: boolean, itemReference?: IItemReference, quantity?: number};\nexport class RateCalculatorRequestItem {\n    id: number;\n    addedLine: boolean;\n    itemReference: ItemReference;\n    quantity: number;\n    constructor(data: IRateCalculatorRequestItem){\n        data = data || {}\n        this.id = data.id;\n        this.addedLine = data.addedLine || false;\n        this.itemReference = data.itemReference ? new ItemReference(data.itemReference): null;\n        this.quantity = typeof data.quantity === \"string\" ? parseInt(data.quantity, 10) : data.quantity;      \n    }\n}\n\nexport interface IRateCalculatorRequest {matchedRates?: MatchedRate[], shippingMethods?: String[], totalCharge?: number};\nexport class RateCalculatorResponse{    \n    matchedRates: MatchedRate[];\n    shippingMethods: String[];\n    totalCharge: number;\n    constructor(data: IRateCalculatorRequest){\n        data = data || {}\n        this.matchedRates = (this.matchedRates || []).map((matchedRate) => new MatchedRate(matchedRate));\n        this.shippingMethods = data.shippingMethods || [];        \n        this.totalCharge = data.totalCharge || 0;\n    }\n\n    isColdChain(): boolean{\n        if(this.shippingMethods.indexOf(\"Cold Chain\") > -1){\n            return true;\n        }\n        return false;\n    }\n}\n\nexport interface IMatchedRate {billingRate?: BillingRate, quantity?: number};\nexport class MatchedRate{    \n    billingRate: BillingRate;\n    quantity: number;    \n    constructor(data: IMatchedRate){\n        data = data || {}\n        this.billingRate = data.billingRate ? new BillingRate(data.billingRate): null;\n        this.quantity = data.quantity || 0;\n    }\n}","var util = require('./util');\n\n// browser specific modules\nutil.crypto.lib = require('./browserCryptoLib');\nutil.Buffer = require('buffer/').Buffer;\nutil.url = require('url/');\nutil.querystring = require('querystring/');\nutil.realClock = require('./realclock/browserClock');\nutil.environment = 'js';\nutil.createEventStream = require('./event-stream/buffered-create-event-stream').createEventStream;\nutil.isBrowser = function() { return true; };\nutil.isNode = function() { return false; };\n\nvar AWS = require('./core');\n\n/**\n * @api private\n */\nmodule.exports = AWS;\n\nrequire('./credentials');\nrequire('./credentials/credential_provider_chain');\nrequire('./credentials/temporary_credentials');\nrequire('./credentials/chainable_temporary_credentials');\nrequire('./credentials/web_identity_credentials');\nrequire('./credentials/cognito_identity_credentials');\nrequire('./credentials/saml_credentials');\n\n// Load the DOMParser XML parser\nAWS.XML.Parser = require('./xml/browser_parser');\n\n// Load the XHR HttpClient\nrequire('./http/xhr');\n\nif (typeof process === 'undefined') {\n  process = {\n    browser: true\n  };\n}\n","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { isObjectType, isInterfaceType, isUnionType, isEnumType, isInputObjectType, isNonNullType, isNamedType, isInputType, isOutputType } from './definition';\n\nimport { isDirective } from './directives';\n\nimport { isIntrospectionType } from './introspection';\nimport { isSchema } from './schema';\n\nimport find from '../jsutils/find';\nimport invariant from '../jsutils/invariant';\nimport objectValues from '../jsutils/objectValues';\nimport { GraphQLError } from '../error/GraphQLError';\n\nimport { isValidNameError } from '../utilities/assertValidName';\nimport { isEqualType, isTypeSubTypeOf } from '../utilities/typeComparators';\n\n/**\n * Implements the \"Type Validation\" sub-sections of the specification's\n * \"Type System\" section.\n *\n * Validation runs synchronously, returning an array of encountered errors, or\n * an empty array if no errors were encountered and the Schema is valid.\n */\nexport function validateSchema(schema) {\n  // First check to ensure the provided value is in fact a GraphQLSchema.\n  !isSchema(schema) ? invariant(0, 'Expected ' + String(schema) + ' to be a GraphQL schema.') : void 0;\n\n  // If this Schema has already been validated, return the previous results.\n  if (schema.__validationErrors) {\n    return schema.__validationErrors;\n  }\n\n  // Validate the schema, producing a list of errors.\n  var context = new SchemaValidationContext(schema);\n  validateRootTypes(context);\n  validateDirectives(context);\n  validateTypes(context);\n\n  // Persist the results of validation before returning to ensure validation\n  // does not run multiple times for this schema.\n  var errors = context.getErrors();\n  schema.__validationErrors = errors;\n  return errors;\n}\n\n/**\n * Utility function which asserts a schema is valid by throwing an error if\n * it is invalid.\n */\nexport function assertValidSchema(schema) {\n  var errors = validateSchema(schema);\n  if (errors.length !== 0) {\n    throw new Error(errors.map(function (error) {\n      return error.message;\n    }).join('\\n\\n'));\n  }\n}\n\nvar SchemaValidationContext = function () {\n  function SchemaValidationContext(schema) {\n    _classCallCheck(this, SchemaValidationContext);\n\n    this._errors = [];\n    this.schema = schema;\n  }\n\n  SchemaValidationContext.prototype.reportError = function reportError(message, nodes) {\n    var _nodes = (Array.isArray(nodes) ? nodes : [nodes]).filter(Boolean);\n    this.addError(new GraphQLError(message, _nodes));\n  };\n\n  SchemaValidationContext.prototype.addError = function addError(error) {\n    this._errors.push(error);\n  };\n\n  SchemaValidationContext.prototype.getErrors = function getErrors() {\n    return this._errors;\n  };\n\n  return SchemaValidationContext;\n}();\n\nfunction validateRootTypes(context) {\n  var schema = context.schema;\n  var queryType = schema.getQueryType();\n  if (!queryType) {\n    context.reportError('Query root type must be provided.', schema.astNode);\n  } else if (!isObjectType(queryType)) {\n    context.reportError('Query root type must be Object type, it cannot be ' + String(queryType) + '.', getOperationTypeNode(schema, queryType, 'query'));\n  }\n\n  var mutationType = schema.getMutationType();\n  if (mutationType && !isObjectType(mutationType)) {\n    context.reportError('Mutation root type must be Object type if provided, it cannot be ' + (String(mutationType) + '.'), getOperationTypeNode(schema, mutationType, 'mutation'));\n  }\n\n  var subscriptionType = schema.getSubscriptionType();\n  if (subscriptionType && !isObjectType(subscriptionType)) {\n    context.reportError('Subscription root type must be Object type if provided, it cannot be ' + (String(subscriptionType) + '.'), getOperationTypeNode(schema, subscriptionType, 'subscription'));\n  }\n}\n\nfunction getOperationTypeNode(schema, type, operation) {\n  var astNode = schema.astNode;\n  var operationTypeNode = astNode && astNode.operationTypes.find(function (operationType) {\n    return operationType.operation === operation;\n  });\n  return operationTypeNode ? operationTypeNode.type : type && type.astNode;\n}\n\nfunction validateDirectives(context) {\n  var directives = context.schema.getDirectives();\n  directives.forEach(function (directive) {\n    // Ensure all directives are in fact GraphQL directives.\n    if (!isDirective(directive)) {\n      context.reportError('Expected directive but got: ' + String(directive) + '.', directive && directive.astNode);\n      return;\n    }\n\n    // Ensure they are named correctly.\n    validateName(context, directive);\n\n    // TODO: Ensure proper locations.\n\n    // Ensure the arguments are valid.\n    var argNames = Object.create(null);\n    directive.args.forEach(function (arg) {\n      var argName = arg.name;\n\n      // Ensure they are named correctly.\n      validateName(context, arg);\n\n      // Ensure they are unique per directive.\n      if (argNames[argName]) {\n        context.reportError('Argument @' + directive.name + '(' + argName + ':) can only be defined once.', getAllDirectiveArgNodes(directive, argName));\n        return; // continue loop\n      }\n      argNames[argName] = true;\n\n      // Ensure the type is an input type.\n      if (!isInputType(arg.type)) {\n        context.reportError('The type of @' + directive.name + '(' + argName + ':) must be Input Type ' + ('but got: ' + String(arg.type) + '.'), getDirectiveArgTypeNode(directive, argName));\n      }\n    });\n  });\n}\n\nfunction validateName(context, node) {\n  // If a schema explicitly allows some legacy name which is no longer valid,\n  // allow it to be assumed valid.\n  if (context.schema.__allowedLegacyNames && context.schema.__allowedLegacyNames.indexOf(node.name) !== -1) {\n    return;\n  }\n  // Ensure names are valid, however introspection types opt out.\n  var error = isValidNameError(node.name, node.astNode || undefined);\n  if (error) {\n    context.addError(error);\n  }\n}\n\nfunction validateTypes(context) {\n  var typeMap = context.schema.getTypeMap();\n  objectValues(typeMap).forEach(function (type) {\n    // Ensure all provided types are in fact GraphQL type.\n    if (!isNamedType(type)) {\n      context.reportError('Expected GraphQL named type but got: ' + String(type) + '.', type && type.astNode);\n      return;\n    }\n\n    // Ensure it is named correctly (excluding introspection types).\n    if (!isIntrospectionType(type)) {\n      validateName(context, type);\n    }\n\n    if (isObjectType(type)) {\n      // Ensure fields are valid\n      validateFields(context, type);\n\n      // Ensure objects implement the interfaces they claim to.\n      validateObjectInterfaces(context, type);\n    } else if (isInterfaceType(type)) {\n      // Ensure fields are valid.\n      validateFields(context, type);\n    } else if (isUnionType(type)) {\n      // Ensure Unions include valid member types.\n      validateUnionMembers(context, type);\n    } else if (isEnumType(type)) {\n      // Ensure Enums have valid values.\n      validateEnumValues(context, type);\n    } else if (isInputObjectType(type)) {\n      // Ensure Input Object fields are valid.\n      validateInputFields(context, type);\n    }\n  });\n}\n\nfunction validateFields(context, type) {\n  var fields = objectValues(type.getFields());\n\n  // Objects and Interfaces both must define one or more fields.\n  if (fields.length === 0) {\n    context.reportError('Type ' + type.name + ' must define one or more fields.', getAllObjectOrInterfaceNodes(type));\n  }\n\n  fields.forEach(function (field) {\n    // Ensure they are named correctly.\n    validateName(context, field);\n\n    // Ensure they were defined at most once.\n    var fieldNodes = getAllFieldNodes(type, field.name);\n    if (fieldNodes.length > 1) {\n      context.reportError('Field ' + type.name + '.' + field.name + ' can only be defined once.', fieldNodes);\n      return; // continue loop\n    }\n\n    // Ensure the type is an output type\n    if (!isOutputType(field.type)) {\n      context.reportError('The type of ' + type.name + '.' + field.name + ' must be Output Type ' + ('but got: ' + String(field.type) + '.'), getFieldTypeNode(type, field.name));\n    }\n\n    // Ensure the arguments are valid\n    var argNames = Object.create(null);\n    field.args.forEach(function (arg) {\n      var argName = arg.name;\n\n      // Ensure they are named correctly.\n      validateName(context, arg);\n\n      // Ensure they are unique per field.\n      if (argNames[argName]) {\n        context.reportError('Field argument ' + type.name + '.' + field.name + '(' + argName + ':) can only ' + 'be defined once.', getAllFieldArgNodes(type, field.name, argName));\n      }\n      argNames[argName] = true;\n\n      // Ensure the type is an input type\n      if (!isInputType(arg.type)) {\n        context.reportError('The type of ' + type.name + '.' + field.name + '(' + argName + ':) must be Input ' + ('Type but got: ' + String(arg.type) + '.'), getFieldArgTypeNode(type, field.name, argName));\n      }\n    });\n  });\n}\n\nfunction validateObjectInterfaces(context, object) {\n  var implementedTypeNames = Object.create(null);\n  object.getInterfaces().forEach(function (iface) {\n    if (implementedTypeNames[iface.name]) {\n      context.reportError('Type ' + object.name + ' can only implement ' + iface.name + ' once.', getAllImplementsInterfaceNodes(object, iface));\n      return; // continue loop\n    }\n    implementedTypeNames[iface.name] = true;\n    validateObjectImplementsInterface(context, object, iface);\n  });\n}\n\nfunction validateObjectImplementsInterface(context, object, iface) {\n  if (!isInterfaceType(iface)) {\n    context.reportError('Type ' + String(object) + ' must only implement Interface types, ' + ('it cannot implement ' + String(iface) + '.'), getImplementsInterfaceNode(object, iface));\n    return;\n  }\n\n  var objectFieldMap = object.getFields();\n  var ifaceFieldMap = iface.getFields();\n\n  // Assert each interface field is implemented.\n  Object.keys(ifaceFieldMap).forEach(function (fieldName) {\n    var objectField = objectFieldMap[fieldName];\n    var ifaceField = ifaceFieldMap[fieldName];\n\n    // Assert interface field exists on object.\n    if (!objectField) {\n      context.reportError('Interface field ' + iface.name + '.' + fieldName + ' expected but ' + (object.name + ' does not provide it.'), [getFieldNode(iface, fieldName), object.astNode]);\n      // Continue loop over fields.\n      return;\n    }\n\n    // Assert interface field type is satisfied by object field type, by being\n    // a valid subtype. (covariant)\n    if (!isTypeSubTypeOf(context.schema, objectField.type, ifaceField.type)) {\n      context.reportError('Interface field ' + iface.name + '.' + fieldName + ' expects type ' + (String(ifaceField.type) + ' but ' + object.name + '.' + fieldName + ' ') + ('is type ' + String(objectField.type) + '.'), [getFieldTypeNode(iface, fieldName), getFieldTypeNode(object, fieldName)]);\n    }\n\n    // Assert each interface field arg is implemented.\n    ifaceField.args.forEach(function (ifaceArg) {\n      var argName = ifaceArg.name;\n      var objectArg = find(objectField.args, function (arg) {\n        return arg.name === argName;\n      });\n\n      // Assert interface field arg exists on object field.\n      if (!objectArg) {\n        context.reportError('Interface field argument ' + iface.name + '.' + fieldName + '(' + argName + ':) ' + ('expected but ' + object.name + '.' + fieldName + ' does not provide it.'), [getFieldArgNode(iface, fieldName, argName), getFieldNode(object, fieldName)]);\n        // Continue loop over arguments.\n        return;\n      }\n\n      // Assert interface field arg type matches object field arg type.\n      // (invariant)\n      // TODO: change to contravariant?\n      if (!isEqualType(ifaceArg.type, objectArg.type)) {\n        context.reportError('Interface field argument ' + iface.name + '.' + fieldName + '(' + argName + ':) ' + ('expects type ' + String(ifaceArg.type) + ' but ') + (object.name + '.' + fieldName + '(' + argName + ':) is type ') + (String(objectArg.type) + '.'), [getFieldArgTypeNode(iface, fieldName, argName), getFieldArgTypeNode(object, fieldName, argName)]);\n      }\n\n      // TODO: validate default values?\n    });\n\n    // Assert additional arguments must not be required.\n    objectField.args.forEach(function (objectArg) {\n      var argName = objectArg.name;\n      var ifaceArg = find(ifaceField.args, function (arg) {\n        return arg.name === argName;\n      });\n      if (!ifaceArg && isNonNullType(objectArg.type)) {\n        context.reportError('Object field argument ' + object.name + '.' + fieldName + '(' + argName + ':) ' + ('is of required type ' + String(objectArg.type) + ' but is not also ') + ('provided by the Interface field ' + iface.name + '.' + fieldName + '.'), [getFieldArgTypeNode(object, fieldName, argName), getFieldNode(iface, fieldName)]);\n      }\n    });\n  });\n}\n\nfunction validateUnionMembers(context, union) {\n  var memberTypes = union.getTypes();\n\n  if (memberTypes.length === 0) {\n    context.reportError('Union type ' + union.name + ' must define one or more member types.', union.astNode);\n  }\n\n  var includedTypeNames = Object.create(null);\n  memberTypes.forEach(function (memberType) {\n    if (includedTypeNames[memberType.name]) {\n      context.reportError('Union type ' + union.name + ' can only include type ' + (memberType.name + ' once.'), getUnionMemberTypeNodes(union, memberType.name));\n      return; // continue loop\n    }\n    includedTypeNames[memberType.name] = true;\n    if (!isObjectType(memberType)) {\n      context.reportError('Union type ' + union.name + ' can only include Object types, ' + ('it cannot include ' + String(memberType) + '.'), getUnionMemberTypeNodes(union, String(memberType)));\n    }\n  });\n}\n\nfunction validateEnumValues(context, enumType) {\n  var enumValues = enumType.getValues();\n\n  if (enumValues.length === 0) {\n    context.reportError('Enum type ' + enumType.name + ' must define one or more values.', enumType.astNode);\n  }\n\n  enumValues.forEach(function (enumValue) {\n    var valueName = enumValue.name;\n\n    // Ensure no duplicates.\n    var allNodes = getEnumValueNodes(enumType, valueName);\n    if (allNodes && allNodes.length > 1) {\n      context.reportError('Enum type ' + enumType.name + ' can include value ' + valueName + ' only once.', allNodes);\n    }\n\n    // Ensure valid name.\n    validateName(context, enumValue);\n    if (valueName === 'true' || valueName === 'false' || valueName === 'null') {\n      context.reportError('Enum type ' + enumType.name + ' cannot include value: ' + valueName + '.', enumValue.astNode);\n    }\n  });\n}\n\nfunction validateInputFields(context, inputObj) {\n  var fields = objectValues(inputObj.getFields());\n\n  if (fields.length === 0) {\n    context.reportError('Input Object type ' + inputObj.name + ' must define one or more fields.', inputObj.astNode);\n  }\n\n  // Ensure the arguments are valid\n  fields.forEach(function (field) {\n    // Ensure they are named correctly.\n    validateName(context, field);\n\n    // TODO: Ensure they are unique per field.\n\n    // Ensure the type is an input type\n    if (!isInputType(field.type)) {\n      context.reportError('The type of ' + inputObj.name + '.' + field.name + ' must be Input Type ' + ('but got: ' + String(field.type) + '.'), field.astNode && field.astNode.type);\n    }\n  });\n}\n\nfunction getAllObjectNodes(type) {\n  return type.astNode ? type.extensionASTNodes ? [type.astNode].concat(type.extensionASTNodes) : [type.astNode] : type.extensionASTNodes || [];\n}\n\nfunction getAllObjectOrInterfaceNodes(type) {\n  return type.astNode ? type.extensionASTNodes ? [type.astNode].concat(type.extensionASTNodes) : [type.astNode] : type.extensionASTNodes || [];\n}\n\nfunction getImplementsInterfaceNode(type, iface) {\n  return getAllImplementsInterfaceNodes(type, iface)[0];\n}\n\nfunction getAllImplementsInterfaceNodes(type, iface) {\n  var implementsNodes = [];\n  var astNodes = getAllObjectNodes(type);\n  for (var i = 0; i < astNodes.length; i++) {\n    var _astNode = astNodes[i];\n    if (_astNode && _astNode.interfaces) {\n      _astNode.interfaces.forEach(function (node) {\n        if (node.name.value === iface.name) {\n          implementsNodes.push(node);\n        }\n      });\n    }\n  }\n  return implementsNodes;\n}\n\nfunction getFieldNode(type, fieldName) {\n  return getAllFieldNodes(type, fieldName)[0];\n}\n\nfunction getAllFieldNodes(type, fieldName) {\n  var fieldNodes = [];\n  var astNodes = getAllObjectOrInterfaceNodes(type);\n  for (var i = 0; i < astNodes.length; i++) {\n    var _astNode2 = astNodes[i];\n    if (_astNode2 && _astNode2.fields) {\n      _astNode2.fields.forEach(function (node) {\n        if (node.name.value === fieldName) {\n          fieldNodes.push(node);\n        }\n      });\n    }\n  }\n  return fieldNodes;\n}\n\nfunction getFieldTypeNode(type, fieldName) {\n  var fieldNode = getFieldNode(type, fieldName);\n  return fieldNode && fieldNode.type;\n}\n\nfunction getFieldArgNode(type, fieldName, argName) {\n  return getAllFieldArgNodes(type, fieldName, argName)[0];\n}\n\nfunction getAllFieldArgNodes(type, fieldName, argName) {\n  var argNodes = [];\n  var fieldNode = getFieldNode(type, fieldName);\n  if (fieldNode && fieldNode.arguments) {\n    fieldNode.arguments.forEach(function (node) {\n      if (node.name.value === argName) {\n        argNodes.push(node);\n      }\n    });\n  }\n  return argNodes;\n}\n\nfunction getFieldArgTypeNode(type, fieldName, argName) {\n  var fieldArgNode = getFieldArgNode(type, fieldName, argName);\n  return fieldArgNode && fieldArgNode.type;\n}\n\nfunction getAllDirectiveArgNodes(directive, argName) {\n  var argNodes = [];\n  var directiveNode = directive.astNode;\n  if (directiveNode && directiveNode.arguments) {\n    directiveNode.arguments.forEach(function (node) {\n      if (node.name.value === argName) {\n        argNodes.push(node);\n      }\n    });\n  }\n  return argNodes;\n}\n\nfunction getDirectiveArgTypeNode(directive, argName) {\n  var argNode = getAllDirectiveArgNodes(directive, argName)[0];\n  return argNode && argNode.type;\n}\n\nfunction getUnionMemberTypeNodes(union, typeName) {\n  return union.astNode && union.astNode.types && union.astNode.types.filter(function (type) {\n    return type.name.value === typeName;\n  });\n}\n\nfunction getEnumValueNodes(enumType, valueName) {\n  return enumType.astNode && enumType.astNode.values && enumType.astNode.values.filter(function (value) {\n    return value.name.value === valueName;\n  });\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { Kind } from '../language/kinds';\nimport { isObjectType, isInterfaceType, isEnumType, isInputObjectType, isListType, isCompositeType, isInputType, isOutputType, getNullableType, getNamedType } from '../type/definition';\n\nimport { SchemaMetaFieldDef, TypeMetaFieldDef, TypeNameMetaFieldDef } from '../type/introspection';\n\nimport { typeFromAST } from './typeFromAST';\nimport find from '../jsutils/find';\n\n/**\n * TypeInfo is a utility class which, given a GraphQL schema, can keep track\n * of the current field and type definitions at any point in a GraphQL document\n * AST during a recursive descent by calling `enter(node)` and `leave(node)`.\n */\nexport var TypeInfo = function () {\n  function TypeInfo(schema,\n  // NOTE: this experimental optional second parameter is only needed in order\n  // to support non-spec-compliant codebases. You should never need to use it.\n  getFieldDefFn,\n  // Initial type may be provided in rare cases to facilitate traversals\n  initialType) {\n    _classCallCheck(this, TypeInfo);\n\n    this._schema = schema;\n    this._typeStack = [];\n    this._parentTypeStack = [];\n    this._inputTypeStack = [];\n    this._fieldDefStack = [];\n    this._directive = null;\n    this._argument = null;\n    this._enumValue = null;\n    this._getFieldDef = getFieldDefFn || getFieldDef;\n    if (initialType) {\n      if (isInputType(initialType)) {\n        this._inputTypeStack.push(initialType);\n      }\n      if (isCompositeType(initialType)) {\n        this._parentTypeStack.push(initialType);\n      }\n      if (isOutputType(initialType)) {\n        this._typeStack.push(initialType);\n      }\n    }\n  }\n\n  TypeInfo.prototype.getType = function getType() {\n    if (this._typeStack.length > 0) {\n      return this._typeStack[this._typeStack.length - 1];\n    }\n  };\n\n  TypeInfo.prototype.getParentType = function getParentType() {\n    if (this._parentTypeStack.length > 0) {\n      return this._parentTypeStack[this._parentTypeStack.length - 1];\n    }\n  };\n\n  TypeInfo.prototype.getInputType = function getInputType() {\n    if (this._inputTypeStack.length > 0) {\n      return this._inputTypeStack[this._inputTypeStack.length - 1];\n    }\n  };\n\n  TypeInfo.prototype.getParentInputType = function getParentInputType() {\n    if (this._inputTypeStack.length > 1) {\n      return this._inputTypeStack[this._inputTypeStack.length - 2];\n    }\n  };\n\n  TypeInfo.prototype.getFieldDef = function getFieldDef() {\n    if (this._fieldDefStack.length > 0) {\n      return this._fieldDefStack[this._fieldDefStack.length - 1];\n    }\n  };\n\n  TypeInfo.prototype.getDirective = function getDirective() {\n    return this._directive;\n  };\n\n  TypeInfo.prototype.getArgument = function getArgument() {\n    return this._argument;\n  };\n\n  TypeInfo.prototype.getEnumValue = function getEnumValue() {\n    return this._enumValue;\n  };\n\n  // Flow does not yet handle this case.\n\n\n  TypeInfo.prototype.enter = function enter(node /* ASTNode */) {\n    var schema = this._schema;\n    // Note: many of the types below are explicitly typed as \"mixed\" to drop\n    // any assumptions of a valid schema to ensure runtime types are properly\n    // checked before continuing since TypeInfo is used as part of validation\n    // which occurs before guarantees of schema and document validity.\n    switch (node.kind) {\n      case Kind.SELECTION_SET:\n        var namedType = getNamedType(this.getType());\n        this._parentTypeStack.push(isCompositeType(namedType) ? namedType : undefined);\n        break;\n      case Kind.FIELD:\n        var parentType = this.getParentType();\n        var fieldDef = void 0;\n        var fieldType = void 0;\n        if (parentType) {\n          fieldDef = this._getFieldDef(schema, parentType, node);\n          if (fieldDef) {\n            fieldType = fieldDef.type;\n          }\n        }\n        this._fieldDefStack.push(fieldDef);\n        this._typeStack.push(isOutputType(fieldType) ? fieldType : undefined);\n        break;\n      case Kind.DIRECTIVE:\n        this._directive = schema.getDirective(node.name.value);\n        break;\n      case Kind.OPERATION_DEFINITION:\n        var type = void 0;\n        if (node.operation === 'query') {\n          type = schema.getQueryType();\n        } else if (node.operation === 'mutation') {\n          type = schema.getMutationType();\n        } else if (node.operation === 'subscription') {\n          type = schema.getSubscriptionType();\n        }\n        this._typeStack.push(isObjectType(type) ? type : undefined);\n        break;\n      case Kind.INLINE_FRAGMENT:\n      case Kind.FRAGMENT_DEFINITION:\n        var typeConditionAST = node.typeCondition;\n        var outputType = typeConditionAST ? typeFromAST(schema, typeConditionAST) : getNamedType(this.getType());\n        this._typeStack.push(isOutputType(outputType) ? outputType : undefined);\n        break;\n      case Kind.VARIABLE_DEFINITION:\n        var inputType = typeFromAST(schema, node.type);\n        this._inputTypeStack.push(isInputType(inputType) ? inputType : undefined);\n        break;\n      case Kind.ARGUMENT:\n        var argDef = void 0;\n        var argType = void 0;\n        var fieldOrDirective = this.getDirective() || this.getFieldDef();\n        if (fieldOrDirective) {\n          argDef = find(fieldOrDirective.args, function (arg) {\n            return arg.name === node.name.value;\n          });\n          if (argDef) {\n            argType = argDef.type;\n          }\n        }\n        this._argument = argDef;\n        this._inputTypeStack.push(isInputType(argType) ? argType : undefined);\n        break;\n      case Kind.LIST:\n        var listType = getNullableType(this.getInputType());\n        var itemType = isListType(listType) ? listType.ofType : listType;\n        this._inputTypeStack.push(isInputType(itemType) ? itemType : undefined);\n        break;\n      case Kind.OBJECT_FIELD:\n        var objectType = getNamedType(this.getInputType());\n        var inputFieldType = void 0;\n        if (isInputObjectType(objectType)) {\n          var inputField = objectType.getFields()[node.name.value];\n          if (inputField) {\n            inputFieldType = inputField.type;\n          }\n        }\n        this._inputTypeStack.push(isInputType(inputFieldType) ? inputFieldType : undefined);\n        break;\n      case Kind.ENUM:\n        var enumType = getNamedType(this.getInputType());\n        var enumValue = void 0;\n        if (isEnumType(enumType)) {\n          enumValue = enumType.getValue(node.value);\n        }\n        this._enumValue = enumValue;\n        break;\n    }\n  };\n\n  TypeInfo.prototype.leave = function leave(node) {\n    switch (node.kind) {\n      case Kind.SELECTION_SET:\n        this._parentTypeStack.pop();\n        break;\n      case Kind.FIELD:\n        this._fieldDefStack.pop();\n        this._typeStack.pop();\n        break;\n      case Kind.DIRECTIVE:\n        this._directive = null;\n        break;\n      case Kind.OPERATION_DEFINITION:\n      case Kind.INLINE_FRAGMENT:\n      case Kind.FRAGMENT_DEFINITION:\n        this._typeStack.pop();\n        break;\n      case Kind.VARIABLE_DEFINITION:\n        this._inputTypeStack.pop();\n        break;\n      case Kind.ARGUMENT:\n        this._argument = null;\n        this._inputTypeStack.pop();\n        break;\n      case Kind.LIST:\n      case Kind.OBJECT_FIELD:\n        this._inputTypeStack.pop();\n        break;\n      case Kind.ENUM:\n        this._enumValue = null;\n        break;\n    }\n  };\n\n  return TypeInfo;\n}();\n\n/**\n * Not exactly the same as the executor's definition of getFieldDef, in this\n * statically evaluated environment we do not always have an Object type,\n * and need to handle Interface and Union types.\n */\nfunction getFieldDef(schema, parentType, fieldNode) {\n  var name = fieldNode.name.value;\n  if (name === SchemaMetaFieldDef.name && schema.getQueryType() === parentType) {\n    return SchemaMetaFieldDef;\n  }\n  if (name === TypeMetaFieldDef.name && schema.getQueryType() === parentType) {\n    return TypeMetaFieldDef;\n  }\n  if (name === TypeNameMetaFieldDef.name && isCompositeType(parentType)) {\n    return TypeNameMetaFieldDef;\n  }\n  if (isObjectType(parentType) || isInterfaceType(parentType)) {\n    return parentType.getFields()[name];\n  }\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport keyMap from '../jsutils/keyMap';\nimport isInvalid from '../jsutils/isInvalid';\nimport objectValues from '../jsutils/objectValues';\n\nimport { Kind } from '../language/kinds';\nimport { isScalarType, isEnumType, isInputObjectType, isListType, isNonNullType } from '../type/definition';\n\n\n/**\n * Produces a JavaScript value given a GraphQL Value AST.\n *\n * A GraphQL type must be provided, which will be used to interpret different\n * GraphQL Value literals.\n *\n * Returns `undefined` when the value could not be validly coerced according to\n * the provided type.\n *\n * | GraphQL Value        | JSON Value    |\n * | -------------------- | ------------- |\n * | Input Object         | Object        |\n * | List                 | Array         |\n * | Boolean              | Boolean       |\n * | String               | String        |\n * | Int / Float          | Number        |\n * | Enum Value           | Mixed         |\n * | NullValue            | null          |\n *\n */\nexport function valueFromAST(valueNode, type, variables) {\n  if (!valueNode) {\n    // When there is no node, then there is also no value.\n    // Importantly, this is different from returning the value null.\n    return;\n  }\n\n  if (isNonNullType(type)) {\n    if (valueNode.kind === Kind.NULL) {\n      return; // Invalid: intentionally return no value.\n    }\n    return valueFromAST(valueNode, type.ofType, variables);\n  }\n\n  if (valueNode.kind === Kind.NULL) {\n    // This is explicitly returning the value null.\n    return null;\n  }\n\n  if (valueNode.kind === Kind.VARIABLE) {\n    var variableName = valueNode.name.value;\n    if (!variables || isInvalid(variables[variableName])) {\n      // No valid return value.\n      return;\n    }\n    // Note: we're not doing any checking that this variable is correct. We're\n    // assuming that this query has been validated and the variable usage here\n    // is of the correct type.\n    return variables[variableName];\n  }\n\n  if (isListType(type)) {\n    var itemType = type.ofType;\n    if (valueNode.kind === Kind.LIST) {\n      var coercedValues = [];\n      var itemNodes = valueNode.values;\n      for (var i = 0; i < itemNodes.length; i++) {\n        if (isMissingVariable(itemNodes[i], variables)) {\n          // If an array contains a missing variable, it is either coerced to\n          // null or if the item type is non-null, it considered invalid.\n          if (isNonNullType(itemType)) {\n            return; // Invalid: intentionally return no value.\n          }\n          coercedValues.push(null);\n        } else {\n          var itemValue = valueFromAST(itemNodes[i], itemType, variables);\n          if (isInvalid(itemValue)) {\n            return; // Invalid: intentionally return no value.\n          }\n          coercedValues.push(itemValue);\n        }\n      }\n      return coercedValues;\n    }\n    var coercedValue = valueFromAST(valueNode, itemType, variables);\n    if (isInvalid(coercedValue)) {\n      return; // Invalid: intentionally return no value.\n    }\n    return [coercedValue];\n  }\n\n  if (isInputObjectType(type)) {\n    if (valueNode.kind !== Kind.OBJECT) {\n      return; // Invalid: intentionally return no value.\n    }\n    var coercedObj = Object.create(null);\n    var fieldNodes = keyMap(valueNode.fields, function (field) {\n      return field.name.value;\n    });\n    var fields = objectValues(type.getFields());\n    for (var _i = 0; _i < fields.length; _i++) {\n      var field = fields[_i];\n      var fieldNode = fieldNodes[field.name];\n      if (!fieldNode || isMissingVariable(fieldNode.value, variables)) {\n        if (!isInvalid(field.defaultValue)) {\n          coercedObj[field.name] = field.defaultValue;\n        } else if (isNonNullType(field.type)) {\n          return; // Invalid: intentionally return no value.\n        }\n        continue;\n      }\n      var fieldValue = valueFromAST(fieldNode.value, field.type, variables);\n      if (isInvalid(fieldValue)) {\n        return; // Invalid: intentionally return no value.\n      }\n      coercedObj[field.name] = fieldValue;\n    }\n    return coercedObj;\n  }\n\n  if (isEnumType(type)) {\n    if (valueNode.kind !== Kind.ENUM) {\n      return; // Invalid: intentionally return no value.\n    }\n    var enumValue = type.getValue(valueNode.value);\n    if (!enumValue) {\n      return; // Invalid: intentionally return no value.\n    }\n    return enumValue.value;\n  }\n\n  if (isScalarType(type)) {\n    // Scalars fulfill parsing a literal value via parseLiteral().\n    // Invalid values represent a failure to parse correctly, in which case\n    // no value is returned.\n    var result = void 0;\n    try {\n      result = type.parseLiteral(valueNode, variables);\n    } catch (_error) {\n      return; // Invalid: intentionally return no value.\n    }\n    if (isInvalid(result)) {\n      return; // Invalid: intentionally return no value.\n    }\n    return result;\n  }\n\n  /* istanbul ignore next */\n  throw new Error('Unknown type: ' + type + '.');\n}\n\n// Returns true if the provided valueNode is a variable which is not defined\n// in the set of variables.\nfunction isMissingVariable(valueNode, variables) {\n  return valueNode.kind === Kind.VARIABLE && (!variables || isInvalid(variables[valueNode.name.value]));\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n/**\n * Returns true if a value is null, undefined, or NaN.\n */\nexport default function isNullish(value) {\n  return value === null || value === undefined || value !== value;\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { GraphQLError } from '../error';\nimport find from '../jsutils/find';\nimport isInvalid from '../jsutils/isInvalid';\nimport keyMap from '../jsutils/keyMap';\nimport { coerceValue } from '../utilities/coerceValue';\nimport { typeFromAST } from '../utilities/typeFromAST';\nimport { valueFromAST } from '../utilities/valueFromAST';\nimport { Kind } from '../language/kinds';\nimport { print } from '../language/printer';\nimport { isInputType, isNonNullType } from '../type/definition';\n\n\n/**\n * Prepares an object map of variableValues of the correct type based on the\n * provided variable definitions and arbitrary input. If the input cannot be\n * parsed to match the variable definitions, a GraphQLError will be thrown.\n *\n * Note: The returned value is a plain Object with a prototype, since it is\n * exposed to user code. Care should be taken to not pull values from the\n * Object prototype.\n */\nexport function getVariableValues(schema, varDefNodes, inputs) {\n  var errors = [];\n  var coercedValues = {};\n  for (var i = 0; i < varDefNodes.length; i++) {\n    var varDefNode = varDefNodes[i];\n    var varName = varDefNode.variable.name.value;\n    var varType = typeFromAST(schema, varDefNode.type);\n    if (!isInputType(varType)) {\n      errors.push(new GraphQLError('Variable \"$' + varName + '\" expected value of type ' + ('\"' + print(varDefNode.type) + '\" which cannot be used as an input type.'), [varDefNode.type]));\n    } else {\n      var value = inputs[varName];\n      if (isInvalid(value)) {\n        if (isNonNullType(varType)) {\n          errors.push(new GraphQLError('Variable \"$' + varName + '\" of required type ' + ('\"' + String(varType) + '\" was not provided.'), [varDefNode]));\n        } else if (varDefNode.defaultValue) {\n          coercedValues[varName] = valueFromAST(varDefNode.defaultValue, varType);\n        }\n      } else {\n        var _coerced = coerceValue(value, varType, varDefNode);\n        var coercionErrors = _coerced.errors;\n        if (coercionErrors) {\n          (function () {\n            var messagePrelude = 'Variable \"$' + varName + '\" got invalid value ' + JSON.stringify(value) + '; ';\n            coercionErrors.forEach(function (error) {\n              error.message = messagePrelude + error.message;\n            });\n            errors.push.apply(errors, coercionErrors);\n          })();\n        } else {\n          coercedValues[varName] = _coerced.value;\n        }\n      }\n    }\n  }\n  return errors.length === 0 ? { errors: undefined, coerced: coercedValues } : { errors: errors, coerced: undefined };\n}\n\n/**\n * Prepares an object map of argument values given a list of argument\n * definitions and list of argument AST nodes.\n *\n * Note: The returned value is a plain Object with a prototype, since it is\n * exposed to user code. Care should be taken to not pull values from the\n * Object prototype.\n */\nexport function getArgumentValues(def, node, variableValues) {\n  var coercedValues = {};\n  var argDefs = def.args;\n  var argNodes = node.arguments;\n  if (!argDefs || !argNodes) {\n    return coercedValues;\n  }\n  var argNodeMap = keyMap(argNodes, function (arg) {\n    return arg.name.value;\n  });\n  for (var i = 0; i < argDefs.length; i++) {\n    var argDef = argDefs[i];\n    var name = argDef.name;\n    var argType = argDef.type;\n    var argumentNode = argNodeMap[name];\n    var defaultValue = argDef.defaultValue;\n    if (!argumentNode) {\n      if (!isInvalid(defaultValue)) {\n        coercedValues[name] = defaultValue;\n      } else if (isNonNullType(argType)) {\n        throw new GraphQLError('Argument \"' + name + '\" of required type ' + ('\"' + String(argType) + '\" was not provided.'), [node]);\n      }\n    } else if (argumentNode.value.kind === Kind.VARIABLE) {\n      var variableName = argumentNode.value.name.value;\n      if (variableValues && Object.prototype.hasOwnProperty.call(variableValues, variableName) && !isInvalid(variableValues[variableName])) {\n        // Note: this does not check that this variable value is correct.\n        // This assumes that this query has been validated and the variable\n        // usage here is of the correct type.\n        coercedValues[name] = variableValues[variableName];\n      } else if (!isInvalid(defaultValue)) {\n        coercedValues[name] = defaultValue;\n      } else if (isNonNullType(argType)) {\n        throw new GraphQLError('Argument \"' + name + '\" of required type \"' + String(argType) + '\" was ' + ('provided the variable \"$' + variableName + '\" which was not provided ') + 'a runtime value.', [argumentNode.value]);\n      }\n    } else {\n      var valueNode = argumentNode.value;\n      var coercedValue = valueFromAST(valueNode, argType, variableValues);\n      if (isInvalid(coercedValue)) {\n        // Note: ValuesOfCorrectType validation should catch this before\n        // execution. This is a runtime check to ensure execution does not\n        // continue with an invalid argument value.\n        throw new GraphQLError('Argument \"' + name + '\" has invalid value ' + print(valueNode) + '.', [argumentNode.value]);\n      }\n      coercedValues[name] = coercedValue;\n    }\n  }\n  return coercedValues;\n}\n\n/**\n * Prepares an object map of argument values given a directive definition\n * and a AST node which may contain directives. Optionally also accepts a map\n * of variable values.\n *\n * If the directive does not exist on the node, returns undefined.\n *\n * Note: The returned value is a plain Object with a prototype, since it is\n * exposed to user code. Care should be taken to not pull values from the\n * Object prototype.\n */\nexport function getDirectiveValues(directiveDef, node, variableValues) {\n  var directiveNode = node.directives && find(node.directives, function (directive) {\n    return directive.name.value === directiveDef.name;\n  });\n\n  if (directiveNode) {\n    return getArgumentValues(directiveDef, directiveNode, variableValues);\n  }\n}","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\n\n\nimport { PLATFORM } from 'aurelia-pal';\n\nfunction isObject(val) {\n  return val && (typeof val === 'function' || (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object');\n}\n\nexport var metadata = {\n  resource: 'aurelia:resource',\n  paramTypes: 'design:paramtypes',\n  propertyType: 'design:type',\n  properties: 'design:properties',\n  get: function get(metadataKey, target, targetKey) {\n    if (!isObject(target)) {\n      return undefined;\n    }\n    var result = metadata.getOwn(metadataKey, target, targetKey);\n    return result === undefined ? metadata.get(metadataKey, Object.getPrototypeOf(target), targetKey) : result;\n  },\n  getOwn: function getOwn(metadataKey, target, targetKey) {\n    if (!isObject(target)) {\n      return undefined;\n    }\n    return Reflect.getOwnMetadata(metadataKey, target, targetKey);\n  },\n  define: function define(metadataKey, metadataValue, target, targetKey) {\n    Reflect.defineMetadata(metadataKey, metadataValue, target, targetKey);\n  },\n  getOrCreateOwn: function getOrCreateOwn(metadataKey, Type, target, targetKey) {\n    var result = metadata.getOwn(metadataKey, target, targetKey);\n\n    if (result === undefined) {\n      result = new Type();\n      Reflect.defineMetadata(metadataKey, result, target, targetKey);\n    }\n\n    return result;\n  }\n};\n\nvar originStorage = new Map();\nvar unknownOrigin = Object.freeze({ moduleId: undefined, moduleMember: undefined });\n\nexport var Origin = function () {\n  function Origin(moduleId, moduleMember) {\n    \n\n    this.moduleId = moduleId;\n    this.moduleMember = moduleMember;\n  }\n\n  Origin.get = function get(fn) {\n    var origin = originStorage.get(fn);\n\n    if (origin === undefined) {\n      PLATFORM.eachModule(function (key, value) {\n        if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {\n          for (var name in value) {\n            var exp = value[name];\n            if (exp === fn) {\n              originStorage.set(fn, origin = new Origin(key, name));\n              return true;\n            }\n          }\n        }\n\n        if (value === fn) {\n          originStorage.set(fn, origin = new Origin(key, 'default'));\n          return true;\n        }\n\n        return false;\n      });\n    }\n\n    return origin || unknownOrigin;\n  };\n\n  Origin.set = function set(fn, origin) {\n    originStorage.set(fn, origin);\n  };\n\n  return Origin;\n}();\n\nexport function decorators() {\n  for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) {\n    rest[_key] = arguments[_key];\n  }\n\n  var applicator = function applicator(target, key, descriptor) {\n    var i = rest.length;\n\n    if (key) {\n      descriptor = descriptor || {\n        value: target[key],\n        writable: true,\n        configurable: true,\n        enumerable: true\n      };\n\n      while (i--) {\n        descriptor = rest[i](target, key, descriptor) || descriptor;\n      }\n\n      Object.defineProperty(target, key, descriptor);\n    } else {\n      while (i--) {\n        target = rest[i](target) || target;\n      }\n    }\n\n    return target;\n  };\n\n  applicator.on = applicator;\n  return applicator;\n}\n\nexport function deprecated(optionsOrTarget, maybeKey, maybeDescriptor) {\n  function decorator(target, key, descriptor) {\n    var methodSignature = target.constructor.name + '#' + key;\n    var options = maybeKey ? {} : optionsOrTarget || {};\n    var message = 'DEPRECATION - ' + methodSignature;\n\n    if (typeof descriptor.value !== 'function') {\n      throw new SyntaxError('Only methods can be marked as deprecated.');\n    }\n\n    if (options.message) {\n      message += ' - ' + options.message;\n    }\n\n    return _extends({}, descriptor, {\n      value: function deprecationWrapper() {\n        if (options.error) {\n          throw new Error(message);\n        } else {\n          console.warn(message);\n        }\n\n        return descriptor.value.apply(this, arguments);\n      }\n    });\n  }\n\n  return maybeKey ? decorator(optionsOrTarget, maybeKey, maybeDescriptor) : decorator;\n}\n\nexport function mixin(behavior) {\n  var instanceKeys = Object.keys(behavior);\n\n  function _mixin(possible) {\n    var decorator = function decorator(target) {\n      var resolvedTarget = typeof target === 'function' ? target.prototype : target;\n\n      var i = instanceKeys.length;\n      while (i--) {\n        var property = instanceKeys[i];\n        Object.defineProperty(resolvedTarget, property, {\n          value: behavior[property],\n          writable: true\n        });\n      }\n    };\n\n    return possible ? decorator(possible) : decorator;\n  }\n\n  return _mixin;\n}\n\nfunction alwaysValid() {\n  return true;\n}\nfunction noCompose() {}\n\nfunction ensureProtocolOptions(options) {\n  if (options === undefined) {\n    options = {};\n  } else if (typeof options === 'function') {\n    options = {\n      validate: options\n    };\n  }\n\n  if (!options.validate) {\n    options.validate = alwaysValid;\n  }\n\n  if (!options.compose) {\n    options.compose = noCompose;\n  }\n\n  return options;\n}\n\nfunction createProtocolValidator(validate) {\n  return function (target) {\n    var result = validate(target);\n    return result === true;\n  };\n}\n\nfunction createProtocolAsserter(name, validate) {\n  return function (target) {\n    var result = validate(target);\n    if (result !== true) {\n      throw new Error(result || name + ' was not correctly implemented.');\n    }\n  };\n}\n\nexport function protocol(name, options) {\n  options = ensureProtocolOptions(options);\n\n  var result = function result(target) {\n    var resolvedTarget = typeof target === 'function' ? target.prototype : target;\n\n    options.compose(resolvedTarget);\n    result.assert(resolvedTarget);\n\n    Object.defineProperty(resolvedTarget, 'protocol:' + name, {\n      enumerable: false,\n      configurable: false,\n      writable: false,\n      value: true\n    });\n  };\n\n  result.validate = createProtocolValidator(options.validate);\n  result.assert = createProtocolAsserter(name, options.validate);\n\n  return result;\n}\n\nprotocol.create = function (name, options) {\n  options = ensureProtocolOptions(options);\n  var hidden = 'protocol:' + name;\n  var result = function result(target) {\n    var decorator = protocol(name, options);\n    return target ? decorator(target) : decorator;\n  };\n\n  result.decorates = function (obj) {\n    return obj[hidden] === true;\n  };\n  result.validate = createProtocolValidator(options.validate);\n  result.assert = createProtocolAsserter(name, options.validate);\n\n  return result;\n};","import { autoinject } from \"aurelia-framework\";\nimport { DefaultService } from \"shared-service/default-service\";\nimport { CreateRecordRequest } from \"shared-models/create-record-request\";\n\n@autoinject\nexport class CreateRecordService extends DefaultService{\n    private static readonly URI = \"create-record\";\n\n    constructor(){\n        super(CreateRecordService.name);\n    }\n\n    async createRecord(getRecordRequest: CreateRecordRequest): Promise<number>{\n        return await this.post(CreateRecordService.URI, getRecordRequest);\n    }\n}","export interface ICreateRecordRequest {recordType: string, recordData: any};\nexport class CreateRecordRequest{\n    recordType: string;\n    recordData: any;\n    \n    constructor(data: ICreateRecordRequest){\n        this.recordType = data.recordType;\n        this.recordData = data.recordData;\n    }\n}","import { autoinject } from \"aurelia-framework\";\nimport { DefaultService } from \"shared-service/default-service\";\nimport { ShippingAddress } from \"shipping-addresses/models/shipping-address-record\";\nimport { SearchService } from \"shared-service/search-service\";\nimport { SearchRequest } from \"shared-models/search-request\";\nimport { SearchResult } from \"shared-models/search-result\";\nimport { GetRecordService } from \"shared-service/get-record-service\";\nimport { GetRecordRequest } from \"shared-models/get-record-request\";\nimport { CreateRecordService } from \"shared-service/create-record-service\";\nimport { UpdateRecordService } from \"shared-service/update-record-service\";\nimport { CreateRecordRequest } from \"shared-models/create-record-request\";\nimport { UpdateRecordRequest } from \"shared-models/update-record-request\";\n\n@autoinject\nexport class ShippingAddressService extends DefaultService{\n    private static readonly RECORD_TYPE = \"vf_winery_shipping_address\";\n\n    constructor(\n        private searchService: SearchService, \n        private getRecordService: GetRecordService, \n        private updateRecordService: UpdateRecordService, \n        private createRecordService: CreateRecordService){\n        super(ShippingAddressService.name);\n    }\n\n    sortAddress(address1, address2){\n        return (address1.name || \"\").toLowerCase().localeCompare((address2.name || \"\").toLowerCase());\n    }\n\n    async searchRecords(searchRequestData: {page?: number, pageSize?: number, filter?: string, fieldFilters?: any[]}): Promise<SearchResult>{\n        let searchRequest = new SearchRequest({\n            recordType: ShippingAddressService.RECORD_TYPE,\n            pageSize: searchRequestData.pageSize || 50,\n            page: searchRequestData.page || 1,\n            filter: searchRequestData.filter || \"\",\n            fieldFilters: searchRequestData.fieldFilters || []\n        });\n        let searchResponse =  await this.searchService.searchRecords(searchRequest, this._convertResponseToAddress);\n        searchResponse.records = searchResponse.records.sort(this.sortAddress);\n        return searchResponse;\n    }\n\n    async getAllRecords(fieldFilters: any[]=[]): Promise<ShippingAddress[]>{\n        let allItems = [] as ShippingAddress[];\n        let page = 1;\n        let pageSize = 5000;\n        let initialSearch = await this.searchRecords({page: page, pageSize: pageSize, fieldFilters: fieldFilters});\n        allItems = allItems.concat(initialSearch.records as ShippingAddress[]);\n        var totalPageCount = initialSearch.pageCount;\n        if(totalPageCount > 1){\n            while(page < totalPageCount){\n                page++;\n                let nextSearch = await this.searchRecords({page: page, pageSize: pageSize, fieldFilters: fieldFilters});\n                allItems = allItems.concat(nextSearch.records as ShippingAddress[]);\n            }           \n        }\n        allItems = allItems.sort(this.sortAddress);   \n        return allItems;\n    }\n\n    async getRecord(addressId: number): Promise<ShippingAddress>{\n        let getRecordRequest = new GetRecordRequest({\n            recordType: ShippingAddressService.RECORD_TYPE,\n            recordId: addressId\n        });\n        let getRecordResponse = await this.getRecordService.getRecord(getRecordRequest, this._convertResponseToAddress);\n        return getRecordResponse.record;\n    }\n\n    async createRecord(addressRecord: ShippingAddress): Promise<number>{\n        let createRecordRequest = new CreateRecordRequest({\n            recordType: ShippingAddressService.RECORD_TYPE,\n            recordData: addressRecord\n        });\n        return await this.createRecordService.createRecord(createRecordRequest);\n    }\n\n    async updateRecord(addressId: number, addressRecord: ShippingAddress): Promise<number>{\n        let updateRecordRequest = new UpdateRecordRequest({\n            recordType: ShippingAddressService.RECORD_TYPE,\n            recordId: addressId,\n            recordData: addressRecord\n        });\n        return await this.updateRecordService.updateRecord(updateRecordRequest);\n    }\n\n    _convertResponseToAddress(shippingAddressResponse): ShippingAddress{\n        return new ShippingAddress({\n            id: shippingAddressResponse[\"id\"],\n            name: shippingAddressResponse[\"name\"],\n            createdByUser: shippingAddressResponse[\"created_by_user\"],\n            lastUpdatedByUser: shippingAddressResponse[\"last_updated_by_user\"],\n            isResidential: shippingAddressResponse[\"is_residential\"],\n            attention: shippingAddressResponse[\"attention\"],\n            addressee: shippingAddressResponse[\"addressee\"],\n            street: shippingAddressResponse[\"street\"],\n            street2: shippingAddressResponse[\"street2\"],\n            zipcode: shippingAddressResponse[\"zipcode\"],\n            city: shippingAddressResponse[\"city\"],\n            state: shippingAddressResponse[\"state\"],\n            country: shippingAddressResponse[\"country\"],\n            phone: shippingAddressResponse[\"phone\"],\n            emails: shippingAddressResponse[\"emails\"]\n        });\n    }\n}","import { autoinject } from \"aurelia-framework\";\nimport { DefaultService } from \"shared-service/default-service\";\nimport { CountryReference, StateReference } from \"orders/models/country-record\";\nimport { SearchService } from \"shared-service/search-service\";\nimport { SearchRequest } from \"shared-models/search-request\";\nimport { SearchResult } from \"shared-models/search-result\";\nimport { GetRecordsRequest } from \"shared-models/get-records-request\";\nimport { GetRecordsService } from \"shared-service/get-records-service\";\nimport { GetRecordRequest } from \"shared-models/get-record-request\";\nimport { GetRecordService } from \"shared-service/get-record-service\";\n\n@autoinject\nexport class CountryService extends DefaultService{\n    private static readonly COUNTRY_RECORD_TYPE = \"res.country\";\n\n    constructor(private searchService: SearchService, private getRecordService: GetRecordService, private getRecordsService: GetRecordsService){\n        super(CountryService.name);        \n    }\n\n    async searchCountryRecords(page: number, filter: string): Promise<SearchResult>{\n        page = page || 1;\n        filter = filter || \"\";\n        let searchRequest = new SearchRequest({\n            recordType: CountryService.COUNTRY_RECORD_TYPE,\n            pageSize: 50,\n            page: page,\n            filter: filter\n        });\n        return await this.searchService.searchRecords(searchRequest, this._convertResponseToCountry)\n    }\n\n    async getCountryRecord(countryId: number): Promise<CountryReference>{\n        let getRecordRequest = new GetRecordRequest({\n            recordType: CountryService.COUNTRY_RECORD_TYPE,\n            recordId: countryId\n        });\n        let getRecordResponse = await this.getRecordService.getRecord(getRecordRequest, this._convertResponseToCountry);\n        return getRecordResponse.record;\n    }\n\n    async getAllCountryRecords(): Promise<CountryReference[]>{\n        let getRecordsRequest = new GetRecordsRequest({\n            recordType: CountryService.COUNTRY_RECORD_TYPE\n        });\n        let getRecordsResponse = await this.getRecordsService.getRecords(getRecordsRequest, this._convertResponseToCountry);       \n        return getRecordsResponse.records;\n    }\n\n    _convertResponseToCountry(countryResponse: any): CountryReference{\n        return new CountryReference({\n            id: countryResponse[\"id\"],\n            name: countryResponse[\"name\"],\n            doNotShip: countryResponse[\"cannot_ship_to\"],\n            states: countryResponse[\"states\"]\n        });\n    }\n\n    _convertResponseToState(stateResponse: any): StateReference{\n        return new StateReference({\n            id: stateResponse[\"id\"],\n            name: stateResponse[\"name\"],\n            country: stateResponse[\"country_id\"],\n            doNotShip: stateResponse[\"cannot_ship_to\"]\n        });\n    }\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport orList from './orList';\n\n/**\n * Given [ A, B, C ] return '\"A\", \"B\", or \"C\"'.\n */\nexport default function quotedOrList(items) {\n  return orList(items.map(function (item) {\n    return '\"' + item + '\"';\n  }));\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar MAX_LENGTH = 5;\n\n/**\n * Given [ A, B, C ] return 'A, B, or C'.\n */\nexport default function orList(items) {\n  var selected = items.slice(0, MAX_LENGTH);\n  return selected.reduce(function (list, quoted, index) {\n    return list + (selected.length > 2 ? ', ' : ' ') + (index === selected.length - 1 ? 'or ' : '') + quoted;\n  });\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from '../jsutils/invariant';\n\nimport { GraphQLError } from '../error';\nimport { visit, visitInParallel, visitWithTypeInfo } from '../language/visitor';\nimport { Kind } from '../language/kinds';\n\nimport { GraphQLSchema } from '../type/schema';\n\nimport { assertValidSchema } from '../type/validate';\nimport { TypeInfo } from '../utilities/TypeInfo';\nimport { specifiedRules } from './specifiedRules';\n\n/**\n * Implements the \"Validation\" section of the spec.\n *\n * Validation runs synchronously, returning an array of encountered errors, or\n * an empty array if no errors were encountered and the document is valid.\n *\n * A list of specific validation rules may be provided. If not provided, the\n * default list of rules defined by the GraphQL specification will be used.\n *\n * Each validation rules is a function which returns a visitor\n * (see the language/visitor API). Visitor methods are expected to return\n * GraphQLErrors, or Arrays of GraphQLErrors when invalid.\n *\n * Optionally a custom TypeInfo instance may be provided. If not provided, one\n * will be created from the provided schema.\n */\nexport function validate(schema, ast, rules, typeInfo) {\n  !ast ? invariant(0, 'Must provide document') : void 0;\n  // If the schema used for validation is invalid, throw an error.\n  assertValidSchema(schema);\n  return visitUsingRules(schema, typeInfo || new TypeInfo(schema), ast, rules || specifiedRules);\n}\n\n/**\n * This uses a specialized visitor which runs multiple visitors in parallel,\n * while maintaining the visitor skip and break API.\n *\n * @internal\n */\nfunction visitUsingRules(schema, typeInfo, documentAST, rules) {\n  var context = new ValidationContext(schema, documentAST, typeInfo);\n  var visitors = rules.map(function (rule) {\n    return rule(context);\n  });\n  // Visit the whole document with each instance of all provided rules.\n  visit(documentAST, visitWithTypeInfo(typeInfo, visitInParallel(visitors)));\n  return context.getErrors();\n}\n\n/**\n * An instance of this class is passed as the \"this\" context to all validators,\n * allowing access to commonly useful contextual information from within a\n * validation rule.\n */\nexport var ValidationContext = function () {\n  function ValidationContext(schema, ast, typeInfo) {\n    _classCallCheck(this, ValidationContext);\n\n    this._schema = schema;\n    this._ast = ast;\n    this._typeInfo = typeInfo;\n    this._errors = [];\n    this._fragmentSpreads = new Map();\n    this._recursivelyReferencedFragments = new Map();\n    this._variableUsages = new Map();\n    this._recursiveVariableUsages = new Map();\n  }\n\n  ValidationContext.prototype.reportError = function reportError(error) {\n    this._errors.push(error);\n  };\n\n  ValidationContext.prototype.getErrors = function getErrors() {\n    return this._errors;\n  };\n\n  ValidationContext.prototype.getSchema = function getSchema() {\n    return this._schema;\n  };\n\n  ValidationContext.prototype.getDocument = function getDocument() {\n    return this._ast;\n  };\n\n  ValidationContext.prototype.getFragment = function getFragment(name) {\n    var fragments = this._fragments;\n    if (!fragments) {\n      this._fragments = fragments = this.getDocument().definitions.reduce(function (frags, statement) {\n        if (statement.kind === Kind.FRAGMENT_DEFINITION) {\n          frags[statement.name.value] = statement;\n        }\n        return frags;\n      }, Object.create(null));\n    }\n    return fragments[name];\n  };\n\n  ValidationContext.prototype.getFragmentSpreads = function getFragmentSpreads(node) {\n    var spreads = this._fragmentSpreads.get(node);\n    if (!spreads) {\n      spreads = [];\n      var setsToVisit = [node];\n      while (setsToVisit.length !== 0) {\n        var set = setsToVisit.pop();\n        for (var i = 0; i < set.selections.length; i++) {\n          var selection = set.selections[i];\n          if (selection.kind === Kind.FRAGMENT_SPREAD) {\n            spreads.push(selection);\n          } else if (selection.selectionSet) {\n            setsToVisit.push(selection.selectionSet);\n          }\n        }\n      }\n      this._fragmentSpreads.set(node, spreads);\n    }\n    return spreads;\n  };\n\n  ValidationContext.prototype.getRecursivelyReferencedFragments = function getRecursivelyReferencedFragments(operation) {\n    var fragments = this._recursivelyReferencedFragments.get(operation);\n    if (!fragments) {\n      fragments = [];\n      var collectedNames = Object.create(null);\n      var nodesToVisit = [operation.selectionSet];\n      while (nodesToVisit.length !== 0) {\n        var _node = nodesToVisit.pop();\n        var spreads = this.getFragmentSpreads(_node);\n        for (var i = 0; i < spreads.length; i++) {\n          var fragName = spreads[i].name.value;\n          if (collectedNames[fragName] !== true) {\n            collectedNames[fragName] = true;\n            var fragment = this.getFragment(fragName);\n            if (fragment) {\n              fragments.push(fragment);\n              nodesToVisit.push(fragment.selectionSet);\n            }\n          }\n        }\n      }\n      this._recursivelyReferencedFragments.set(operation, fragments);\n    }\n    return fragments;\n  };\n\n  ValidationContext.prototype.getVariableUsages = function getVariableUsages(node) {\n    var usages = this._variableUsages.get(node);\n    if (!usages) {\n      var newUsages = [];\n      var typeInfo = new TypeInfo(this._schema);\n      visit(node, visitWithTypeInfo(typeInfo, {\n        VariableDefinition: function VariableDefinition() {\n          return false;\n        },\n        Variable: function Variable(variable) {\n          newUsages.push({ node: variable, type: typeInfo.getInputType() });\n        }\n      }));\n      usages = newUsages;\n      this._variableUsages.set(node, usages);\n    }\n    return usages;\n  };\n\n  ValidationContext.prototype.getRecursiveVariableUsages = function getRecursiveVariableUsages(operation) {\n    var usages = this._recursiveVariableUsages.get(operation);\n    if (!usages) {\n      usages = this.getVariableUsages(operation);\n      var fragments = this.getRecursivelyReferencedFragments(operation);\n      for (var i = 0; i < fragments.length; i++) {\n        Array.prototype.push.apply(usages, this.getVariableUsages(fragments[i]));\n      }\n      this._recursiveVariableUsages.set(operation, usages);\n    }\n    return usages;\n  };\n\n  ValidationContext.prototype.getType = function getType() {\n    return this._typeInfo.getType();\n  };\n\n  ValidationContext.prototype.getParentType = function getParentType() {\n    return this._typeInfo.getParentType();\n  };\n\n  ValidationContext.prototype.getInputType = function getInputType() {\n    return this._typeInfo.getInputType();\n  };\n\n  ValidationContext.prototype.getParentInputType = function getParentInputType() {\n    return this._typeInfo.getParentInputType();\n  };\n\n  ValidationContext.prototype.getFieldDef = function getFieldDef() {\n    return this._typeInfo.getFieldDef();\n  };\n\n  ValidationContext.prototype.getDirective = function getDirective() {\n    return this._typeInfo.getDirective();\n  };\n\n  ValidationContext.prototype.getArgument = function getArgument() {\n    return this._typeInfo.getArgument();\n  };\n\n  return ValidationContext;\n}();","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { forEach, isCollection } from 'iterall';\n\nimport isNullish from '../jsutils/isNullish';\nimport isInvalid from '../jsutils/isInvalid';\nimport objectValues from '../jsutils/objectValues';\n\nimport { Kind } from '../language/kinds';\n\nimport { isScalarType, isEnumType, isInputObjectType, isListType, isNonNullType } from '../type/definition';\nimport { GraphQLID } from '../type/scalars';\n\n/**\n * Produces a GraphQL Value AST given a JavaScript value.\n *\n * A GraphQL type must be provided, which will be used to interpret different\n * JavaScript values.\n *\n * | JSON Value    | GraphQL Value        |\n * | ------------- | -------------------- |\n * | Object        | Input Object         |\n * | Array         | List                 |\n * | Boolean       | Boolean              |\n * | String        | String / Enum Value  |\n * | Number        | Int / Float          |\n * | Mixed         | Enum Value           |\n * | null          | NullValue            |\n *\n */\nexport function astFromValue(value, type) {\n  // Ensure flow knows that we treat function params as const.\n  var _value = value;\n\n  if (isNonNullType(type)) {\n    var astValue = astFromValue(_value, type.ofType);\n    if (astValue && astValue.kind === Kind.NULL) {\n      return null;\n    }\n    return astValue;\n  }\n\n  // only explicit null, not undefined, NaN\n  if (_value === null) {\n    return { kind: Kind.NULL };\n  }\n\n  // undefined, NaN\n  if (isInvalid(_value)) {\n    return null;\n  }\n\n  // Convert JavaScript array to GraphQL list. If the GraphQLType is a list, but\n  // the value is not an array, convert the value using the list's item type.\n  if (isListType(type)) {\n    var itemType = type.ofType;\n    if (isCollection(_value)) {\n      var valuesNodes = [];\n      forEach(_value, function (item) {\n        var itemNode = astFromValue(item, itemType);\n        if (itemNode) {\n          valuesNodes.push(itemNode);\n        }\n      });\n      return { kind: Kind.LIST, values: valuesNodes };\n    }\n    return astFromValue(_value, itemType);\n  }\n\n  // Populate the fields of the input object by creating ASTs from each value\n  // in the JavaScript object according to the fields in the input type.\n  if (isInputObjectType(type)) {\n    if (_value === null || (typeof _value === 'undefined' ? 'undefined' : _typeof(_value)) !== 'object') {\n      return null;\n    }\n    var fields = objectValues(type.getFields());\n    var fieldNodes = [];\n    fields.forEach(function (field) {\n      var fieldValue = astFromValue(_value[field.name], field.type);\n      if (fieldValue) {\n        fieldNodes.push({\n          kind: Kind.OBJECT_FIELD,\n          name: { kind: Kind.NAME, value: field.name },\n          value: fieldValue\n        });\n      }\n    });\n    return { kind: Kind.OBJECT, fields: fieldNodes };\n  }\n\n  if (isScalarType(type) || isEnumType(type)) {\n    // Since value is an internally represented value, it must be serialized\n    // to an externally represented value before converting into an AST.\n    var serialized = type.serialize(_value);\n    if (isNullish(serialized)) {\n      return null;\n    }\n\n    // Others serialize based on their corresponding JavaScript scalar types.\n    if (typeof serialized === 'boolean') {\n      return { kind: Kind.BOOLEAN, value: serialized };\n    }\n\n    // JavaScript numbers can be Int or Float values.\n    if (typeof serialized === 'number') {\n      var stringNum = String(serialized);\n      return integerStringRegExp.test(stringNum) ? { kind: Kind.INT, value: stringNum } : { kind: Kind.FLOAT, value: stringNum };\n    }\n\n    if (typeof serialized === 'string') {\n      // Enum types use Enum literals.\n      if (isEnumType(type)) {\n        return { kind: Kind.ENUM, value: serialized };\n      }\n\n      // ID types can use Int literals.\n      if (type === GraphQLID && integerStringRegExp.test(serialized)) {\n        return { kind: Kind.INT, value: serialized };\n      }\n\n      return {\n        kind: Kind.STRING,\n        value: serialized\n      };\n    }\n\n    throw new TypeError('Cannot convert value to AST: ' + String(serialized));\n  }\n\n  /* istanbul ignore next */\n  throw new Error('Unknown type: ' + type + '.');\n}\n\n/**\n * IntValue:\n *   - NegativeSign? 0\n *   - NegativeSign? NonZeroDigit ( Digit+ )?\n */\nvar integerStringRegExp = /^-?(0|[1-9][0-9]*)$/;","\n\n/**\n * Takes a Source and a UTF-8 character offset, and returns the corresponding\n * line and column as a SourceLocation.\n */\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nexport function getLocation(source, position) {\n  var lineRegexp = /\\r\\n|[\\n\\r]/g;\n  var line = 1;\n  var column = position + 1;\n  var match = void 0;\n  while ((match = lineRegexp.exec(source.body)) && match.index < position) {\n    line += 1;\n    column = position + 1 - (match.index + match[0].length);\n  }\n  return { line: line, column: column };\n}\n\n/**\n * Represents a location in a Source.\n */","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from '../jsutils/invariant';\n\n/**\n * A representation of source input to GraphQL.\n * `name` and `locationOffset` are optional. They are useful for clients who\n * store GraphQL documents in source files; for example, if the GraphQL input\n * starts at line 40 in a file named Foo.graphql, it might be useful for name to\n * be \"Foo.graphql\" and location to be `{ line: 40, column: 0 }`.\n * line and column in locationOffset are 1-indexed\n */\nexport var Source = function Source(body, name, locationOffset) {\n  _classCallCheck(this, Source);\n\n  this.body = body;\n  this.name = name || 'GraphQL request';\n  this.locationOffset = locationOffset || { line: 1, column: 1 };\n  !(this.locationOffset.line > 0) ? invariant(0, 'line in locationOffset is 1-indexed and must be positive') : void 0;\n  !(this.locationOffset.column > 0) ? invariant(0, 'column in locationOffset is 1-indexed and must be positive') : void 0;\n};","\nimport { GraphQLError } from './GraphQLError';\n\n/**\n * Produces a GraphQLError representing a syntax error, containing useful\n * descriptive information about the syntax error's position in the source.\n */\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nexport function syntaxError(source, position, description) {\n  return new GraphQLError('Syntax Error: ' + description, undefined, source, [position]);\n}","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from '../jsutils/invariant';\n\n\n/**\n * Given a GraphQLError, format it according to the rules described by the\n * Response Format, Errors section of the GraphQL Specification.\n */\nexport function formatError(error) {\n  !error ? invariant(0, 'Received null or undefined error.') : void 0;\n  return _extends({}, error.extensions, {\n    message: error.message || 'An unknown error occurred.',\n    locations: error.locations,\n    path: error.path\n  });\n}","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nexport { GraphQLError } from './GraphQLError';\nexport { syntaxError } from './syntaxError';\nexport { locatedError } from './locatedError';\nexport { printError } from './printError';\nexport { formatError } from './formatError';","import { IItemReference, ItemReference } from \"items/models/item-record\";\nimport { IRecordReference, RecordReference } from \"shared-models/record-reference\";\n\nexport interface IActivityDetailRequest {\n    allTimeInventory?: boolean,\n    dateFrom?: Date,\n    dateTo?: Date,\n    itemIds?: number[]\n}\n\nexport class ActivityDetailRequest{    \n    allTimeInventory: boolean;\n    dateFrom: Date;\n    dateTo: Date;\n    itemIds: number[];\n    constructor(data: IActivityDetailRequest){\n        data = data || {}\n        this.allTimeInventory = data.allTimeInventory || false;\n        this.dateFrom = data.dateFrom ? new Date(data.dateFrom) : null;\n        this.dateTo = data.dateTo ? new Date(data.dateTo) : null;\n        this.itemIds = data.itemIds || [];\n    }\n}\n\n\nexport interface IActivityDetailResponse {fileDataBase64?: string};\nexport class ActivityDetailResponse{    \n    fileDataBase64: string;\n    constructor(data: IActivityDetailResponse){\n        data = data || {}       \n        this.fileDataBase64 = data.fileDataBase64;\n    }\n}\n\ninterface IItemLine { item?: IItemReference, quantity?: number, lineNumber: number, addedLine?: boolean };\nexport class ItemLine {\n  item: ItemReference;\n  quantity: number;\n  lineNumber: number;\n  addedLine: boolean;\n\n  constructor(data: IItemLine) {\n    this.item = data.item ? new ItemReference(data.item): null;\n    this.lineNumber = data.lineNumber;\n    this.quantity = data.quantity;\n    this.addedLine = false;\n  }\n}","import { IRecordReference, RecordReference } from \"shared-models/record-reference\";\nimport { ChangeOrderRequest } from \"./change-order-request\";\nimport { Order } from \"orders/models/order\";\n\nexport interface IChangeOrder extends IRecordReference { \n    createdBy?: IRecordReference,\n    lastUpdatedByUser?: IRecordReference,\n    createDate?: Date, \n    status?: string, \n    order?: RecordReference, \n    wineryOrderNumber?: string, \n    vinfillmentNotes?: string, \n    deniedReasons?: string, \n    changeRequestsTypes?: string, \n    changeRequests?: ChangeOrderRequest[]};\nexport class ChangeOrder extends RecordReference {\n    createdBy?: RecordReference;\n    lastUpdatedByUser?: RecordReference;\n    createDate?: Date;\n    status?: string;  \n    order?: RecordReference;\n    wineryOrderNumber?: string;\n    vinfillmentNotes?: string;\n    deniedReasons?: string;\n    changeRequestsTypes?: string;\n    changeRequests?: ChangeOrderRequest[];\n\n    constructor(data: IChangeOrder) {\n        super(data)\n        this.createdBy = data.createdBy ? new RecordReference(data.createdBy) : null;\n        this.lastUpdatedByUser = data.lastUpdatedByUser ? new RecordReference(data.lastUpdatedByUser) : null;\n        this.createDate = data.createDate;\n        this.status = data.status || \"\";\n        this.order = data.order ? new Order(data.order) : null;       \n        this.wineryOrderNumber = data.wineryOrderNumber;       \n        this.vinfillmentNotes = data.vinfillmentNotes || \"\";\n        this.deniedReasons = data.deniedReasons || \"\";\n        this.changeRequestsTypes = data.changeRequestsTypes || \"\";\n        this.changeRequests = (data.changeRequests || []).map((changeRequest)=>new ChangeOrderRequest(changeRequest));\n    }\n\n    isPendingApproval(): boolean{\n        if(this.status === \"Pending Approval\"){\n            return true;\n        }\n        return false;\n    }\n\n    isDenied(): boolean{\n        if(this.status === \"Denied\"){\n            return true;\n        }\n        return false;\n    }\n\n    isApproved(): boolean{\n        if(this.status === \"Approved\"){\n            return true;\n        }\n        return false;\n    }\n\n    isCancelled(): boolean{\n        if(this.status === \"Cancelled\"){\n            return true;\n        }\n        return false;\n    }\n\n    convertToData(): any{\n        let changeRequestsData = this.changeRequests.map((changeRequest) => {\n            return changeRequest.convertToData();\n        });\n        return {\n            \"winery_order\": this.order.id,\n            \"notes_for_vinfillment\": this.vinfillmentNotes,\n            \"status\": this.status,\n            \"change_requests\": changeRequestsData\n        }\n    }\n}","import { computedFrom } from \"aurelia-binding\";\n\ninterface IAlertNotificationRead {dateRead: Date; contact: string};\nexport class AlertNotificationRead{\n    dateRead: Date;\n    contact: string;\n    constructor(data: IAlertNotificationRead){\n        this.dateRead = data.dateRead;\n        this.contact = data.contact;\n    }\n}\ninterface IAlertNotfication {message?: string; title?: string, date?: Date, isRead?: boolean, contactsRead?: IAlertNotificationRead[]};\nexport class AlertNotification{\n    title: string;\n    message: string;\n    date: Date;\n    contactsRead: AlertNotificationRead[];\n    constructor(data?: IAlertNotfication){\n        data = data || {};\n        this.message = data.message || \"\";\n        this.title = data.title || \"\";\n        this.date = data.date || new Date();\n        this.contactsRead = (data.contactsRead || [])\n                                .map(contactRead => new AlertNotificationRead(contactRead));\n    }\n\n    @computedFrom('contactsRead.length')\n    get isRead(): boolean{\n        return this.contactsRead.length > 0;\n    }\n}\n\ninterface IAlertNotificationSelection {alertNotification: IAlertNotfication; isChecked?: boolean};\nexport class AlertNotificationSelection{\n    alertNotification: AlertNotification;\n    isChecked: boolean;\n\n    constructor(data: IAlertNotificationSelection){\n        this.alertNotification = new AlertNotification(data.alertNotification);\n        this.isChecked = data.isChecked || false;\n    }\n\n    static buildFromNotifications(alertNotification: IAlertNotfication[]): AlertNotificationSelection[]{\n        return alertNotification.map(notification => new AlertNotificationSelection({\n            alertNotification: notification\n        }));\n    }\n\n    changeIsChecked(){\n        this.isChecked = this.isChecked ? false: true;\n    }\n\n    @computedFrom(\"alertNotification.title\")\n    get title(): string{\n        return this.alertNotification.title;\n    }\n\n    @computedFrom(\"alertNotification.message\")\n    get message(): string{\n        return this.alertNotification.message;\n    }\n\n    @computedFrom(\"alertNotification.date\")\n    get date(): Date{\n        return this.alertNotification.date;\n    }\n\n    @computedFrom(\"alertNotification.contactsRead.length\")\n    get isRead(): boolean{\n        return this.alertNotification.isRead;\n    }\n\n}","/*!\n * JavaScript Cookie v2.2.0\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader = false;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api (key, value, attributes) {\n\t\t\tvar result;\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Write\n\n\t\t\tif (arguments.length > 1) {\n\t\t\t\tattributes = extend({\n\t\t\t\t\tpath: '/'\n\t\t\t\t}, api.defaults, attributes);\n\n\t\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\t\tvar expires = new Date();\n\t\t\t\t\texpires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);\n\t\t\t\t\tattributes.expires = expires;\n\t\t\t\t}\n\n\t\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\t\ttry {\n\t\t\t\t\tresult = JSON.stringify(value);\n\t\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\t\tvalue = result;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\n\t\t\t\tif (!converter.write) {\n\t\t\t\t\tvalue = encodeURIComponent(String(value))\n\t\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = converter.write(value, key);\n\t\t\t\t}\n\n\t\t\t\tkey = encodeURIComponent(String(key));\n\t\t\t\tkey = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);\n\t\t\t\tkey = key.replace(/[\\(\\)]/g, escape);\n\n\t\t\t\tvar stringifiedAttributes = '';\n\n\t\t\t\tfor (var attributeName in attributes) {\n\t\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName];\n\t\t\t\t}\n\t\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t\t}\n\n\t\t\t// Read\n\n\t\t\tif (!key) {\n\t\t\t\tresult = {};\n\t\t\t}\n\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t\t// calling \"get()\"\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar rdecode = /(%[0-9A-Z]{2})+/g;\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!this.json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = parts[0].replace(rdecode, decodeURIComponent);\n\t\t\t\t\tcookie = converter.read ?\n\t\t\t\t\t\tconverter.read(cookie, name) : converter(cookie, name) ||\n\t\t\t\t\t\tcookie.replace(rdecode, decodeURIComponent);\n\n\t\t\t\t\tif (this.json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tresult = cookie;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!key) {\n\t\t\t\t\t\tresult[name] = cookie;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tapi.set = api;\n\t\tapi.get = function (key) {\n\t\t\treturn api.call(api, key);\n\t\t};\n\t\tapi.getJSON = function () {\n\t\t\treturn api.apply({\n\t\t\t\tjson: true\n\t\t\t}, [].slice.call(arguments));\n\t\t};\n\t\tapi.defaults = {};\n\n\t\tapi.remove = function (key, attributes) {\n\t\t\tapi(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","\"use strict\";\n/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n *     http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar MIME_MAP = [\n    { type: 'text/plain', ext: 'txt' },\n    { type: 'text/html', ext: 'html' },\n    { type: 'text/javascript', ext: 'js' },\n    { type: 'text/css', ext: 'css' },\n    { type: 'text/csv', ext: 'csv' },\n    { type: 'text/yaml', ext: 'yml' },\n    { type: 'text/yaml', ext: 'yaml' },\n    { type: 'text/calendar', ext: 'ics' },\n    { type: 'text/calendar', ext: 'ical' },\n    { type: 'image/png', ext: 'png' },\n    { type: 'image/gif', ext: 'gif' },\n    { type: 'image/jpeg', ext: 'jpg' },\n    { type: 'image/jpeg', ext: 'jpeg' },\n    { type: 'image/bmp', ext: 'bmp' },\n    { type: 'image/x-icon', ext: 'ico' },\n    { type: 'image/tiff', ext: 'tif' },\n    { type: 'image/tiff', ext: 'tiff' },\n    { type: 'image/svg+xml', ext: 'svg' },\n    { type: 'application/json', ext: 'json' },\n    { type: 'application/xml', ext: 'xml' },\n    { type: 'application/x-sh', ext: 'sh' },\n    { type: 'application/zip', ext: 'zip' },\n    { type: 'application/x-rar-compressed', ext: 'rar' },\n    { type: 'application/x-tar', ext: 'tar' },\n    { type: 'application/x-bzip', ext: 'bz' },\n    { type: 'application/x-bzip2', ext: 'bz2' },\n    { type: 'application/pdf', ext: 'pdf' },\n    { type: 'application/java-archive', ext: 'jar' },\n    { type: 'application/msword', ext: 'doc' },\n    { type: 'application/vnd.ms-excel', ext: 'xls' },\n    { type: 'application/vnd.ms-excel', ext: 'xlsx' },\n    { type: 'message/rfc822', ext: 'eml' }\n];\nvar JS = /** @class */ (function () {\n    function JS() {\n    }\n    JS.isEmpty = function (obj) {\n        return Object.keys(obj).length === 0;\n    };\n    JS.sortByField = function (list, field, dir) {\n        if (!list || !list.sort) {\n            return false;\n        }\n        var dirX = (dir && dir === 'desc') ? -1 : 1;\n        list.sort(function (a, b) {\n            var a_val = a[field];\n            var b_val = b[field];\n            if (typeof b_val === 'undefined') {\n                return (typeof a_val === 'undefined') ? 0 : 1 * dirX;\n            }\n            if (typeof a_val === 'undefined') {\n                return -1 * dirX;\n            }\n            if (a_val < b_val) {\n                return -1 * dirX;\n            }\n            if (a_val > b_val) {\n                return 1 * dirX;\n            }\n            return 0;\n        });\n        return true;\n    };\n    JS.objectLessAttributes = function (obj, less) {\n        var ret = Object.assign({}, obj);\n        if (less) {\n            if (typeof less === 'string') {\n                delete ret[less];\n            }\n            else {\n                less.forEach(function (attr) {\n                    delete ret[attr];\n                });\n            }\n        }\n        return ret;\n    };\n    JS.filenameToContentType = function (filename, defVal) {\n        if (defVal === void 0) { defVal = 'application/octet-stream'; }\n        var name = filename.toLowerCase();\n        var filtered = MIME_MAP.filter(function (mime) { return name.endsWith('.' + mime.ext); });\n        return filtered.length > 0 ? filtered[0].type : defVal;\n    };\n    JS.isTextFile = function (contentType) {\n        var type = contentType.toLowerCase();\n        if (type.startsWith('text/')) {\n            return true;\n        }\n        return ('application/json' === type ||\n            'application/xml' === type ||\n            'application/sh' === type);\n    };\n    /**\n     * generate random string\n     */\n    JS.generateRandomString = function () {\n        var result = '';\n        var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n        for (var i = 32; i > 0; i -= 1) {\n            result += chars[Math.floor(Math.random() * chars.length)];\n        }\n        return result;\n    };\n    JS.makeQuerablePromise = function (promise) {\n        if (promise.isResolved)\n            return promise;\n        var isPending = true;\n        var isRejected = false;\n        var isFullfilled = false;\n        var result = promise.then(function (data) {\n            isFullfilled = true;\n            isPending = false;\n            return data;\n        }, function (e) {\n            isRejected = true;\n            isPending = false;\n            throw e;\n        });\n        result.isFullfilled = function () { return isFullfilled; };\n        result.isPending = function () { return isPending; };\n        result.isRejected = function () { return isRejected; };\n        return result;\n    };\n    JS.browserOrNode = function () {\n        var isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n        var isNode = typeof process !== 'undefined' &&\n            process.versions != null &&\n            process.versions.node != null;\n        return {\n            isBrowser: isBrowser,\n            isNode: isNode\n        };\n    };\n    /**\n     * transfer the first letter of the keys to lowercase\n     * @param {Object} obj - the object need to be transferred\n     * @param {Array} whiteListForItself - whitelist itself from being transferred\n     * @param {Array} whiteListForChildren - whitelist its children keys from being transferred\n     */\n    JS.transferKeyToLowerCase = function (obj, whiteListForItself, whiteListForChildren) {\n        if (whiteListForItself === void 0) { whiteListForItself = []; }\n        if (whiteListForChildren === void 0) { whiteListForChildren = []; }\n        if (!JS.isStrictObject(obj))\n            return obj;\n        var ret = {};\n        for (var key in obj) {\n            if (obj.hasOwnProperty(key)) {\n                var transferedKey = whiteListForItself.includes(key) ?\n                    key : key[0].toLowerCase() + key.slice(1);\n                ret[transferedKey] = whiteListForChildren.includes(key) ?\n                    obj[key]\n                    :\n                        JS.transferKeyToLowerCase(obj[key], whiteListForItself, whiteListForChildren);\n            }\n        }\n        return ret;\n    };\n    /**\n     * transfer the first letter of the keys to lowercase\n     * @param {Object} obj - the object need to be transferred\n     * @param {Array} whiteListForItself - whitelist itself from being transferred\n     * @param {Array} whiteListForChildren - whitelist its children keys from being transferred\n     */\n    JS.transferKeyToUpperCase = function (obj, whiteListForItself, whiteListForChildren) {\n        if (whiteListForItself === void 0) { whiteListForItself = []; }\n        if (whiteListForChildren === void 0) { whiteListForChildren = []; }\n        if (!JS.isStrictObject(obj))\n            return obj;\n        var ret = {};\n        for (var key in obj) {\n            if (obj.hasOwnProperty(key)) {\n                var transferedKey = whiteListForItself.includes(key) ?\n                    key : key[0].toUpperCase() + key.slice(1);\n                ret[transferedKey] = whiteListForChildren.includes(key) ?\n                    obj[key]\n                    :\n                        JS.transferKeyToUpperCase(obj[key], whiteListForItself, whiteListForChildren);\n            }\n        }\n        return ret;\n    };\n    /**\n     * Return true if the object is a strict object\n     * which means it's not Array, Function, Number, String, Boolean or Null\n     * @param obj the Object\n     */\n    JS.isStrictObject = function (obj) {\n        return ((obj instanceof Object) &&\n            !(obj instanceof Array) &&\n            !(obj instanceof Function) &&\n            !(obj instanceof Number) &&\n            !(obj instanceof String) &&\n            !(obj instanceof Boolean));\n    };\n    return JS;\n}());\nexports.default = JS;\n//# sourceMappingURL=JS.js.map","\nimport { GraphQLError } from '../../error'; /**\n                                             * Copyright (c) 2015-present, Facebook, Inc.\n                                             *\n                                             * This source code is licensed under the MIT license found in the\n                                             * LICENSE file in the root directory of this source tree.\n                                             *\n                                             * \n                                             */\n\nimport { print } from '../../language/printer';\n\nimport { isScalarType, isEnumType, isInputObjectType, isListType, isNonNullType, getNullableType, getNamedType } from '../../type/definition';\n\nimport isInvalid from '../../jsutils/isInvalid';\nimport keyMap from '../../jsutils/keyMap';\nimport orList from '../../jsutils/orList';\nimport suggestionList from '../../jsutils/suggestionList';\n\nexport function badValueMessage(typeName, valueName, message) {\n  return 'Expected type ' + typeName + ', found ' + valueName + (message ? '; ' + message : '.');\n}\n\nexport function requiredFieldMessage(typeName, fieldName, fieldTypeName) {\n  return 'Field ' + typeName + '.' + fieldName + ' of required type ' + (fieldTypeName + ' was not provided.');\n}\n\nexport function unknownFieldMessage(typeName, fieldName, message) {\n  return 'Field \"' + fieldName + '\" is not defined by type ' + typeName + (message ? '; ' + message : '.');\n}\n\n/**\n * Value literals of correct type\n *\n * A GraphQL document is only valid if all value literals are of the type\n * expected at their position.\n */\nexport function ValuesOfCorrectType(context) {\n  return {\n    NullValue: function NullValue(node) {\n      var type = context.getInputType();\n      if (isNonNullType(type)) {\n        context.reportError(new GraphQLError(badValueMessage(String(type), print(node)), node));\n      }\n    },\n    ListValue: function ListValue(node) {\n      // Note: TypeInfo will traverse into a list's item type, so look to the\n      // parent input type to check if it is a list.\n      var type = getNullableType(context.getParentInputType());\n      if (!isListType(type)) {\n        isValidScalar(context, node);\n        return false; // Don't traverse further.\n      }\n    },\n    ObjectValue: function ObjectValue(node) {\n      var type = getNamedType(context.getInputType());\n      if (!isInputObjectType(type)) {\n        isValidScalar(context, node);\n        return false; // Don't traverse further.\n      }\n      // Ensure every required field exists.\n      var inputFields = type.getFields();\n      var fieldNodeMap = keyMap(node.fields, function (field) {\n        return field.name.value;\n      });\n      Object.keys(inputFields).forEach(function (fieldName) {\n        var fieldType = inputFields[fieldName].type;\n        var fieldNode = fieldNodeMap[fieldName];\n        if (!fieldNode && isNonNullType(fieldType)) {\n          context.reportError(new GraphQLError(requiredFieldMessage(type.name, fieldName, String(fieldType)), node));\n        }\n      });\n    },\n    ObjectField: function ObjectField(node) {\n      var parentType = getNamedType(context.getParentInputType());\n      var fieldType = context.getInputType();\n      if (!fieldType && isInputObjectType(parentType)) {\n        var suggestions = suggestionList(node.name.value, Object.keys(parentType.getFields()));\n        var didYouMean = suggestions.length !== 0 ? 'Did you mean ' + orList(suggestions) + '?' : undefined;\n        context.reportError(new GraphQLError(unknownFieldMessage(parentType.name, node.name.value, didYouMean), node));\n      }\n    },\n    EnumValue: function EnumValue(node) {\n      var type = getNamedType(context.getInputType());\n      if (!isEnumType(type)) {\n        isValidScalar(context, node);\n      } else if (!type.getValue(node.value)) {\n        context.reportError(new GraphQLError(badValueMessage(type.name, print(node), enumTypeSuggestion(type, node)), node));\n      }\n    },\n\n    IntValue: function IntValue(node) {\n      return isValidScalar(context, node);\n    },\n    FloatValue: function FloatValue(node) {\n      return isValidScalar(context, node);\n    },\n    StringValue: function StringValue(node) {\n      return isValidScalar(context, node);\n    },\n    BooleanValue: function BooleanValue(node) {\n      return isValidScalar(context, node);\n    }\n  };\n}\n\n/**\n * Any value literal may be a valid representation of a Scalar, depending on\n * that scalar type.\n */\nfunction isValidScalar(context, node) {\n  // Report any error at the full type expected by the location.\n  var locationType = context.getInputType();\n  if (!locationType) {\n    return;\n  }\n\n  var type = getNamedType(locationType);\n\n  if (!isScalarType(type)) {\n    context.reportError(new GraphQLError(badValueMessage(String(locationType), print(node), enumTypeSuggestion(type, node)), node));\n    return;\n  }\n\n  // Scalars determine if a literal value is valid via parseLiteral() which\n  // may throw or return an invalid value to indicate failure.\n  try {\n    var parseResult = type.parseLiteral(node, undefined /* variables */);\n    if (isInvalid(parseResult)) {\n      context.reportError(new GraphQLError(badValueMessage(String(locationType), print(node)), node));\n    }\n  } catch (error) {\n    // Ensure a reference to the original error is maintained.\n    context.reportError(new GraphQLError(badValueMessage(String(locationType), print(node), error.message), node, undefined, undefined, undefined, error));\n  }\n}\n\nfunction enumTypeSuggestion(type, node) {\n  if (isEnumType(type)) {\n    var suggestions = suggestionList(print(node), type.getValues().map(function (value) {\n      return value.name;\n    }));\n    if (suggestions.length !== 0) {\n      return 'Did you mean the enum value ' + orList(suggestions) + '?';\n    }\n  }\n}","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { forEach, isCollection } from 'iterall';\nimport isInvalid from '../jsutils/isInvalid';\nimport isNullish from '../jsutils/isNullish';\nimport orList from '../jsutils/orList';\nimport suggestionList from '../jsutils/suggestionList';\nimport { GraphQLError } from '../error';\n\nimport { isScalarType, isEnumType, isInputObjectType, isListType, isNonNullType } from '../type/definition';\n\n\n/**\n * Coerces a JavaScript value given a GraphQL Type.\n *\n * Returns either a value which is valid for the provided type or a list of\n * encountered coercion errors.\n *\n */\nexport function coerceValue(value, type, blameNode, path) {\n  // A value must be provided if the type is non-null.\n  if (isNonNullType(type)) {\n    if (isNullish(value)) {\n      return ofErrors([coercionError('Expected non-nullable type ' + String(type) + ' not to be null', blameNode, path)]);\n    }\n    return coerceValue(value, type.ofType, blameNode, path);\n  }\n\n  if (isNullish(value)) {\n    // Explicitly return the value null.\n    return ofValue(null);\n  }\n\n  if (isScalarType(type)) {\n    // Scalars determine if a value is valid via parseValue(), which can\n    // throw to indicate failure. If it throws, maintain a reference to\n    // the original error.\n    try {\n      var parseResult = type.parseValue(value);\n      if (isInvalid(parseResult)) {\n        return ofErrors([coercionError('Expected type ' + type.name, blameNode, path)]);\n      }\n      return ofValue(parseResult);\n    } catch (error) {\n      return ofErrors([coercionError('Expected type ' + type.name, blameNode, path, error.message, error)]);\n    }\n  }\n\n  if (isEnumType(type)) {\n    if (typeof value === 'string') {\n      var enumValue = type.getValue(value);\n      if (enumValue) {\n        return ofValue(enumValue.value);\n      }\n    }\n    var suggestions = suggestionList(String(value), type.getValues().map(function (enumValue) {\n      return enumValue.name;\n    }));\n    var didYouMean = suggestions.length !== 0 ? 'did you mean ' + orList(suggestions) + '?' : undefined;\n    return ofErrors([coercionError('Expected type ' + type.name, blameNode, path, didYouMean)]);\n  }\n\n  if (isListType(type)) {\n    var itemType = type.ofType;\n    if (isCollection(value)) {\n      var _errors = void 0;\n      var coercedValue = [];\n      forEach(value, function (itemValue, index) {\n        var coercedItem = coerceValue(itemValue, itemType, blameNode, atPath(path, index));\n        if (coercedItem.errors) {\n          _errors = add(_errors, coercedItem.errors);\n        } else if (!_errors) {\n          coercedValue.push(coercedItem.value);\n        }\n      });\n      return _errors ? ofErrors(_errors) : ofValue(coercedValue);\n    }\n    // Lists accept a non-list value as a list of one.\n    var coercedItem = coerceValue(value, itemType, blameNode);\n    return coercedItem.errors ? coercedItem : ofValue([coercedItem.value]);\n  }\n\n  if (isInputObjectType(type)) {\n    if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) !== 'object') {\n      return ofErrors([coercionError('Expected type ' + type.name + ' to be an object', blameNode, path)]);\n    }\n    var _errors2 = void 0;\n    var _coercedValue = {};\n    var fields = type.getFields();\n\n    // Ensure every defined field is valid.\n    for (var fieldName in fields) {\n      if (hasOwnProperty.call(fields, fieldName)) {\n        var field = fields[fieldName];\n        var fieldValue = value[fieldName];\n        if (isInvalid(fieldValue)) {\n          if (!isInvalid(field.defaultValue)) {\n            _coercedValue[fieldName] = field.defaultValue;\n          } else if (isNonNullType(field.type)) {\n            _errors2 = add(_errors2, coercionError('Field ' + printPath(atPath(path, fieldName)) + ' of required ' + ('type ' + String(field.type) + ' was not provided'), blameNode));\n          }\n        } else {\n          var coercedField = coerceValue(fieldValue, field.type, blameNode, atPath(path, fieldName));\n          if (coercedField.errors) {\n            _errors2 = add(_errors2, coercedField.errors);\n          } else if (!_errors2) {\n            _coercedValue[fieldName] = coercedField.value;\n          }\n        }\n      }\n    }\n\n    // Ensure every provided field is defined.\n    for (var _fieldName in value) {\n      if (hasOwnProperty.call(value, _fieldName)) {\n        if (!fields[_fieldName]) {\n          var _suggestions = suggestionList(_fieldName, Object.keys(fields));\n          var _didYouMean = _suggestions.length !== 0 ? 'did you mean ' + orList(_suggestions) + '?' : undefined;\n          _errors2 = add(_errors2, coercionError('Field \"' + _fieldName + '\" is not defined by type ' + type.name, blameNode, path, _didYouMean));\n        }\n      }\n    }\n\n    return _errors2 ? ofErrors(_errors2) : ofValue(_coercedValue);\n  }\n\n  /* istanbul ignore next */\n  throw new Error('Unexpected type: ' + type + '.');\n}\n\nfunction ofValue(value) {\n  return { errors: undefined, value: value };\n}\n\nfunction ofErrors(errors) {\n  return { errors: errors, value: undefined };\n}\n\nfunction add(errors, moreErrors) {\n  return (errors || []).concat(moreErrors);\n}\n\nfunction atPath(prev, key) {\n  return { prev: prev, key: key };\n}\n\nfunction coercionError(message, blameNode, path, subMessage, originalError) {\n  var pathStr = printPath(path);\n  // Return a GraphQLError instance\n  return new GraphQLError(message + (pathStr ? ' at ' + pathStr : '') + (subMessage ? '; ' + subMessage : '.'), blameNode, undefined, undefined, undefined, originalError);\n}\n\n// Build a string describing the path into the value where the error was found\nfunction printPath(path) {\n  var pathStr = '';\n  var currentPath = path;\n  while (currentPath) {\n    pathStr = (typeof currentPath.key === 'string' ? '.' + currentPath.key : '[' + String(currentPath.key) + ']') + pathStr;\n    currentPath = currentPath.prev;\n  }\n  return pathStr ? 'value' + pathStr : '';\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;","import { Auth } from 'aws-amplify';\nimport { CognitoUserSession, CognitoUser } from 'amazon-cognito-identity-js';\nimport { computedFrom } from 'aurelia-binding';\nimport { Logger } from \"aurelia-logging\";\nimport { LogManager, autoinject, Container } from 'aurelia-framework';\nimport { User, Winery } from './user';\nimport { LoginService } from 'login/services/login-service';\nimport { Router } from 'aurelia-router';\n\n@autoinject\nexport class UserSession{\n    static readonly ADDITIONAL_ELAPSED_SECONDS = 3000;\n    protected router: Router;\n    private logger: Logger;\n    user: User;\n    currentWinery: Winery;\n\n    constructor(private loginService: LoginService){\n        this.router = Container.instance.get(Router);\n        this.logger = LogManager.getLogger(UserSession.name);\n    }\n\n    @computedFrom('')\n    get currentTimeInSeconds(): number{\n        return ((new Date()).getTime()) / 1000;\n    }    \n    \n    async logout() {\n        this.logger.info(\"Logging Out\");\n        await this.loginService.logout();\n        this.router.navigateToRoute('dashboard', {}, { trigger: true, replace: true });\n        location.reload();\n    }\n\n    async getTimeLeftInSeconds(): Promise<number>{        \n        let cognitoSession = await this.getCognitoSession();\n        let expiration = cognitoSession.getAccessToken().getExpiration();\n        let currentTime = Math.max(Date.now() / 1000);\n        return Math.ceil(Math.max(expiration - currentTime,0));\n    }\n\n    async getTimeLeftInMinutes(): Promise<number>{        \n        let timeLeftSeconds = await this.getTimeLeftInSeconds();\n        return timeLeftSeconds === 0 ? 0 : Math.ceil(timeLeftSeconds/60);\n    }\n\n    async getCognitoSession(): Promise<CognitoUserSession>{\n        return await Auth.currentSession();\n    }\n\n    async getCognitoUser(): Promise<CognitoUser>{\n        return await Auth.currentAuthenticatedUser({bypassCache: true});\n    }\n\n    async isValidSession(): Promise<boolean>{\n        let cognitoSession = await this.getCognitoSession();\n        return cognitoSession.isValid();\n    }     \n\n    async refreshToken(){\n        try{\n            let cognitoSession = await this.getCognitoSession();\n            let user = await this.getCognitoUser();\n            user.refreshSession(cognitoSession.getRefreshToken(), (err, session: CognitoUserSession) => {\n                if(err){\n                    this.logger.error(`Could not refresh token ${err}`);\n                    throw err;\n                }\n                this.logger.debug(`Refreshed token`);  \n            });\n        } catch(err){\n            await this.loginService.logout();\n            location.reload();\n        }\n        \n    }\n}","import { autoinject } from \"aurelia-framework\";\nimport { DefaultService } from \"shared-service/default-service\";\nimport { CarrierReference } from \"orders/models/carrier-record\";\nimport { GetRecordsRequest } from \"shared-models/get-records-request\";\nimport { GetRecordsService } from \"shared-service/get-records-service\";\n\n@autoinject\nexport class CarrierService extends DefaultService{\n    private static readonly RECORD_TYPE = \"vf_shipping_carrier\";\n\n    constructor(private getRecordsService: GetRecordsService){\n        super(CarrierService.name);\n    }\n\n    async getRecords(): Promise<CarrierReference[]>{\n        let getRecordsRequest = new GetRecordsRequest({\n            recordType: CarrierService.RECORD_TYPE\n        });\n        let getRecordsResponse = await this.getRecordsService.getRecords(getRecordsRequest, this._convertResponseToCarrier);       \n        return getRecordsResponse.records;\n    }\n\n    _convertResponseToCarrier(carrierResponse: any): CarrierReference{\n        return new CarrierReference({\n            id: carrierResponse[\"id\"],\n            name: carrierResponse[\"name\"],\n            shippingMethods: carrierResponse[\"shippingMethods\"]\n        });\n    }\n}","import { autoinject } from \"aurelia-framework\";\nimport { DefaultService } from \"shared-service/default-service\";\nimport { ColdChainZip } from \"cold-chain/models/cold-chain-zip\";\nimport { SearchService } from \"shared-service/search-service\";\nimport { SearchRequest } from \"shared-models/search-request\";\nimport { SearchResult } from \"shared-models/search-result\";\nimport { GetRecordsRequest } from \"shared-models/get-records-request\";\nimport { GetRecordsService } from \"shared-service/get-records-service\";\nimport { GetRecordRequest } from \"shared-models/get-record-request\";\nimport { GetRecordService } from \"shared-service/get-record-service\";\n\n@autoinject\nexport class ColdChainService extends DefaultService{\n    private static readonly COLD_CHAIN_ZIP_RECORD_TYPE = \"vf_cc_comp_zip\";\n\n    constructor(private searchService: SearchService, private getRecordService: GetRecordService, private getRecordsService: GetRecordsService){\n        super(ColdChainService.name);        \n    }\n\n    async searchColdChainZips(page: number, filter: string, pageSize:number = 50): Promise<SearchResult>{\n        page = page || 1;\n        filter = filter || \"\";\n        let searchRequest = new SearchRequest({\n            recordType: ColdChainService.COLD_CHAIN_ZIP_RECORD_TYPE,\n            pageSize: pageSize,\n            page: page,\n            filter: filter\n        });\n        return await this.searchService.searchRecords(searchRequest, this._convertResponseToColdChainZip)\n    }\n\n    async getColdChainZip(coldChainZipId: number): Promise<ColdChainZip>{\n        let getRecordRequest = new GetRecordRequest({\n            recordType: ColdChainService.COLD_CHAIN_ZIP_RECORD_TYPE,\n            recordId: coldChainZipId\n        });\n        let getRecordResponse = await this.getRecordService.getRecord(getRecordRequest, this._convertResponseToColdChainZip);\n        return getRecordResponse.record;\n    }\n\n    async getAllColdChainZips(): Promise<ColdChainZip[]>{\n        let allColdChainZips = [];\n        let page = 1;\n        let pageSize = 5000;\n        let initialSearch = await this.searchColdChainZips(page, \"\", pageSize);\n        allColdChainZips = allColdChainZips.concat(initialSearch.records as ColdChainZip[]);\n        var totalPageCount = initialSearch.pageCount;\n        if(totalPageCount > 1){\n            while(page < totalPageCount){                \n                page++;\n                let nextSearch = await this.searchColdChainZips(page, \"\", pageSize);\n                allColdChainZips = allColdChainZips.concat(nextSearch.records as ColdChainZip[]);             \n            }           \n        }        \n        return allColdChainZips;\n    }\n\n    _convertResponseToColdChainZip(coldChainResponse: any): ColdChainZip{\n        return new ColdChainZip({\n            id: coldChainResponse[\"id\"],\n            name: coldChainResponse[\"name\"],\n            zipcode: coldChainResponse[\"name\"],\n            city: coldChainResponse[\"city\"],\n            state: coldChainResponse[\"state\"],\n            deliveryDay: coldChainResponse[\"delivery_day\"],\n            deliveryTime: coldChainResponse[\"delivery_time\"],\n            hub: coldChainResponse[\"hub\"],\n            route: coldChainResponse[\"route\"],\n            zone: coldChainResponse[\"zone\"]\n        });\n    }\n}","import { StandardView } from 'shared-ui/views/standard-view';\nimport { autoinject } from 'aurelia-framework';\nimport { ScreenViewUtility } from 'shared-ui/utility/screen-view-utility';\nimport { UserService } from 'user/service/user-service';\nimport { UserSession } from 'user/models/user-session';\nimport { ErrorMessageUtility } from 'shared-ui/error-message/error-message-utility';\nimport { Winery } from 'user/models/user';\n\n@autoinject\nexport class App extends StandardView {\n  showSideBar: boolean;\n\n  constructor(private userService: UserService) {    \n    super(App.name);\n  }\n\n  async activate(params, routeData) {\n    super.activate(params, routeData);\n  }\n\n  async attached() {\n    this.disableView()\n    window.addEventListener(\"unhandledrejection\", (e) => {\n      this.logger.info(\"unhandledrejection\");\n      this.errorMessageUtil.showErrorMessage(e[\"detail\"][\"reason\"]);\n      this.enableView();\n    });\n    window.addEventListener(\"rejectionhandled\", (e) => {\n      this.logger.info(\"rejectionhandled\");\n      this.errorMessageUtil.showErrorMessage(e[\"detail\"][\"reason\"]);\n      this.enableView();\n    });\n    this.userSession.user = await this.userService.getCurrentUser();  \n    if(this.userSession.user){\n      this.logger.info(`this.userSession.currentWinery :: ${this.userSession.currentWinery}`);\n      if(this.userSession.currentWinery) {\n        let newWineryIds = this.userSession.user.availableWineries.map((winery)=>winery.id);\n        this.logger.info(`newWineryIds :: ${newWineryIds}`);\n        if((this.userSession.currentWinery.id != this.userSession.user.defaultWinery.id) || (newWineryIds.indexOf(this.userSession.currentWinery.id ) === 0)){\n          this.userSession.currentWinery = this.userSession.user.defaultWinery;\n        }\n      } else {\n        this.userSession.currentWinery = this.userSession.user.defaultWinery;\n      }    \n    } else{\n      if(!this.userSession.user){\n        this.errorMessageUtil.showErrorMessage(\"User not found. Please contact Vinfillment\");\n      }\n    }\n    this.showSideBar = false;\n    super.attached();\n    this.enableView();\n  }\n  \n}\n","module.exports = \"<template> <require from=./navigation/side-nav-bar/side-nav-bar></require> <require from=./navigation/top-nav-bar/top-nav-bar></require> <require from=./navigation/bottom-nav-bar/bottom-nav-bar></require> <require from=./shared-ui/screen-size/screen-size-view></require> <require from=./shared-ui/views/disable-view></require> <require from=./shared-ui/error-message/error-message-view></require> <require from=./user/views/user-session-alert-view></require> <screen-size-view></screen-size-view> <disable-view></disable-view> <user-session-alert-view></user-session-alert-view> <top-nav-bar if.bind=!showSideBar containerless></top-nav-bar> <div class=\\\"ui bottom attached segment pushable\\\" id=app-segment> <side-nav-bar containerless show-side-bar.two-way=showSideBar></side-nav-bar> <div class=pusher> <div class=\\\"ui container\\\" id=router-content style=margin-top:5em> <div class=\\\"ui ${router.isNavigating ? 'active' : ''} inverted dimmer\\\"> <div class=\\\"ui centered inline massive text primary loader\\\">Loading</div> </div> <error-message-view></error-message-view> <router-view></router-view> </div> </div> </div> <style>#app-segment{overflow-x:visible;background-color:#f0f0f7}</style> </template>\";","import { AureliaConfiguration } from './aurelia-configuration';\r\nexport function configure(aurelia, configCallback) {\r\n    var instance = aurelia.container.get(AureliaConfiguration);\r\n    var promise = null;\r\n    if (configCallback !== undefined && typeof (configCallback) === 'function') {\r\n        promise = Promise.resolve(configCallback(instance));\r\n    }\r\n    else {\r\n        promise = Promise.resolve();\r\n    }\r\n    return promise\r\n        .then(function () {\r\n        return instance.loadConfig();\r\n    });\r\n}\r\nexport { AureliaConfiguration };\r\n//# sourceMappingURL=index.js.map","\n\nimport * as LogManager from 'aurelia-logging';\n\nvar logger = LogManager.getLogger('event-aggregator');\n\nvar Handler = function () {\n  function Handler(messageType, callback) {\n    \n\n    this.messageType = messageType;\n    this.callback = callback;\n  }\n\n  Handler.prototype.handle = function handle(message) {\n    if (message instanceof this.messageType) {\n      this.callback.call(null, message);\n    }\n  };\n\n  return Handler;\n}();\n\nfunction invokeCallback(callback, data, event) {\n  try {\n    callback(data, event);\n  } catch (e) {\n    logger.error(e);\n  }\n}\n\nfunction invokeHandler(handler, data) {\n  try {\n    handler.handle(data);\n  } catch (e) {\n    logger.error(e);\n  }\n}\n\nexport var EventAggregator = function () {\n  function EventAggregator() {\n    \n\n    this.eventLookup = {};\n    this.messageHandlers = [];\n  }\n\n  EventAggregator.prototype.publish = function publish(event, data) {\n    var subscribers = void 0;\n    var i = void 0;\n\n    if (!event) {\n      throw new Error('Event was invalid.');\n    }\n\n    if (typeof event === 'string') {\n      subscribers = this.eventLookup[event];\n      if (subscribers) {\n        subscribers = subscribers.slice();\n        i = subscribers.length;\n\n        while (i--) {\n          invokeCallback(subscribers[i], data, event);\n        }\n      }\n    } else {\n      subscribers = this.messageHandlers.slice();\n      i = subscribers.length;\n\n      while (i--) {\n        invokeHandler(subscribers[i], event);\n      }\n    }\n  };\n\n  EventAggregator.prototype.subscribe = function subscribe(event, callback) {\n    var handler = void 0;\n    var subscribers = void 0;\n\n    if (!event) {\n      throw new Error('Event channel/type was invalid.');\n    }\n\n    if (typeof event === 'string') {\n      handler = callback;\n      subscribers = this.eventLookup[event] || (this.eventLookup[event] = []);\n    } else {\n      handler = new Handler(event, callback);\n      subscribers = this.messageHandlers;\n    }\n\n    subscribers.push(handler);\n\n    return {\n      dispose: function dispose() {\n        var idx = subscribers.indexOf(handler);\n        if (idx !== -1) {\n          subscribers.splice(idx, 1);\n        }\n      }\n    };\n  };\n\n  EventAggregator.prototype.subscribeOnce = function subscribeOnce(event, callback) {\n    var sub = this.subscribe(event, function (a, b) {\n      sub.dispose();\n      return callback(a, b);\n    });\n\n    return sub;\n  };\n\n  return EventAggregator;\n}();\n\nexport function includeEventsIn(obj) {\n  var ea = new EventAggregator();\n\n  obj.subscribeOnce = function (event, callback) {\n    return ea.subscribeOnce(event, callback);\n  };\n\n  obj.subscribe = function (event, callback) {\n    return ea.subscribe(event, callback);\n  };\n\n  obj.publish = function (event, data) {\n    ea.publish(event, data);\n  };\n\n  return ea;\n}\n\nexport function configure(config) {\n  config.instance(EventAggregator, includeEventsIn(config.aurelia));\n}","import { History } from 'aurelia-history';\nimport { DOM, PLATFORM } from 'aurelia-pal';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\n\nvar LinkHandler = (function () {\r\n    function LinkHandler() {\r\n    }\r\n    LinkHandler.prototype.activate = function (history) { };\r\n    LinkHandler.prototype.deactivate = function () { };\r\n    return LinkHandler;\r\n}());\r\nvar DefaultLinkHandler = (function (_super) {\r\n    __extends(DefaultLinkHandler, _super);\r\n    function DefaultLinkHandler() {\r\n        var _this = _super.call(this) || this;\r\n        _this.handler = function (e) {\r\n            var _a = DefaultLinkHandler.getEventInfo(e), shouldHandleEvent = _a.shouldHandleEvent, href = _a.href;\r\n            if (shouldHandleEvent) {\r\n                e.preventDefault();\r\n                _this.history.navigate(href);\r\n            }\r\n        };\r\n        return _this;\r\n    }\r\n    DefaultLinkHandler.prototype.activate = function (history) {\r\n        if (history._hasPushState) {\r\n            this.history = history;\r\n            DOM.addEventListener('click', this.handler, true);\r\n        }\r\n    };\r\n    DefaultLinkHandler.prototype.deactivate = function () {\r\n        DOM.removeEventListener('click', this.handler, true);\r\n    };\r\n    DefaultLinkHandler.getEventInfo = function (event) {\r\n        var $event = event;\r\n        var info = {\r\n            shouldHandleEvent: false,\r\n            href: null,\r\n            anchor: null\r\n        };\r\n        var target = DefaultLinkHandler.findClosestAnchor($event.target);\r\n        if (!target || !DefaultLinkHandler.targetIsThisWindow(target)) {\r\n            return info;\r\n        }\r\n        if (hasAttribute(target, 'download')\r\n            || hasAttribute(target, 'router-ignore')\r\n            || hasAttribute(target, 'data-router-ignore')) {\r\n            return info;\r\n        }\r\n        if ($event.altKey || $event.ctrlKey || $event.metaKey || $event.shiftKey) {\r\n            return info;\r\n        }\r\n        var href = target.getAttribute('href');\r\n        info.anchor = target;\r\n        info.href = href;\r\n        var leftButtonClicked = $event.which === 1;\r\n        var isRelative = href && !(href.charAt(0) === '#' || (/^[a-z]+:/i).test(href));\r\n        info.shouldHandleEvent = leftButtonClicked && isRelative;\r\n        return info;\r\n    };\r\n    DefaultLinkHandler.findClosestAnchor = function (el) {\r\n        while (el) {\r\n            if (el.tagName === 'A') {\r\n                return el;\r\n            }\r\n            el = el.parentNode;\r\n        }\r\n    };\r\n    DefaultLinkHandler.targetIsThisWindow = function (target) {\r\n        var targetWindow = target.getAttribute('target');\r\n        var win = PLATFORM.global;\r\n        return !targetWindow ||\r\n            targetWindow === win.name ||\r\n            targetWindow === '_self';\r\n    };\r\n    return DefaultLinkHandler;\r\n}(LinkHandler));\r\nvar hasAttribute = function (el, attr) { return el.hasAttribute(attr); };\n\nvar BrowserHistory = (function (_super) {\r\n    __extends(BrowserHistory, _super);\r\n    function BrowserHistory(linkHandler) {\r\n        var _this = _super.call(this) || this;\r\n        _this._isActive = false;\r\n        _this._checkUrlCallback = _this._checkUrl.bind(_this);\r\n        _this.location = PLATFORM.location;\r\n        _this.history = PLATFORM.history;\r\n        _this.linkHandler = linkHandler;\r\n        return _this;\r\n    }\r\n    BrowserHistory.prototype.activate = function (options) {\r\n        if (this._isActive) {\r\n            throw new Error('History has already been activated.');\r\n        }\r\n        var $history = this.history;\r\n        var wantsPushState = !!options.pushState;\r\n        this._isActive = true;\r\n        var normalizedOptions = this.options = Object.assign({}, { root: '/' }, this.options, options);\r\n        var rootUrl = this.root = ('/' + normalizedOptions.root + '/').replace(rootStripper, '/');\r\n        var wantsHashChange = this._wantsHashChange = normalizedOptions.hashChange !== false;\r\n        var hasPushState = this._hasPushState = !!(normalizedOptions.pushState && $history && $history.pushState);\r\n        var eventName;\r\n        if (hasPushState) {\r\n            eventName = 'popstate';\r\n        }\r\n        else if (wantsHashChange) {\r\n            eventName = 'hashchange';\r\n        }\r\n        PLATFORM.addEventListener(eventName, this._checkUrlCallback);\r\n        if (wantsHashChange && wantsPushState) {\r\n            var $location = this.location;\r\n            var atRoot = $location.pathname.replace(/[^\\/]$/, '$&/') === rootUrl;\r\n            if (!hasPushState && !atRoot) {\r\n                var fragment = this.fragment = this._getFragment(null, true);\r\n                $location.replace(rootUrl + $location.search + '#' + fragment);\r\n                return true;\r\n            }\r\n            else if (hasPushState && atRoot && $location.hash) {\r\n                var fragment = this.fragment = this._getHash().replace(routeStripper, '');\r\n                $history.replaceState({}, DOM.title, rootUrl + fragment + $location.search);\r\n            }\r\n        }\r\n        if (!this.fragment) {\r\n            this.fragment = this._getFragment('');\r\n        }\r\n        this.linkHandler.activate(this);\r\n        if (!normalizedOptions.silent) {\r\n            return this._loadUrl('');\r\n        }\r\n    };\r\n    BrowserHistory.prototype.deactivate = function () {\r\n        var handler = this._checkUrlCallback;\r\n        PLATFORM.removeEventListener('popstate', handler);\r\n        PLATFORM.removeEventListener('hashchange', handler);\r\n        this._isActive = false;\r\n        this.linkHandler.deactivate();\r\n    };\r\n    BrowserHistory.prototype.getAbsoluteRoot = function () {\r\n        var $location = this.location;\r\n        var origin = createOrigin($location.protocol, $location.hostname, $location.port);\r\n        return \"\" + origin + this.root;\r\n    };\r\n    BrowserHistory.prototype.navigate = function (fragment, _a) {\r\n        var _b = _a === void 0 ? {} : _a, _c = _b.trigger, trigger = _c === void 0 ? true : _c, _d = _b.replace, replace = _d === void 0 ? false : _d;\r\n        var location = this.location;\r\n        if (fragment && absoluteUrl.test(fragment)) {\r\n            location.href = fragment;\r\n            return true;\r\n        }\r\n        if (!this._isActive) {\r\n            return false;\r\n        }\r\n        fragment = this._getFragment(fragment || '');\r\n        if (this.fragment === fragment && !replace) {\r\n            return false;\r\n        }\r\n        this.fragment = fragment;\r\n        var url = this.root + fragment;\r\n        if (fragment === '' && url !== '/') {\r\n            url = url.slice(0, -1);\r\n        }\r\n        if (this._hasPushState) {\r\n            url = url.replace('//', '/');\r\n            this.history[replace ? 'replaceState' : 'pushState']({}, DOM.title, url);\r\n        }\r\n        else if (this._wantsHashChange) {\r\n            updateHash(location, fragment, replace);\r\n        }\r\n        else {\r\n            location.assign(url);\r\n        }\r\n        if (trigger) {\r\n            return this._loadUrl(fragment);\r\n        }\r\n        return true;\r\n    };\r\n    BrowserHistory.prototype.navigateBack = function () {\r\n        this.history.back();\r\n    };\r\n    BrowserHistory.prototype.setTitle = function (title) {\r\n        DOM.title = title;\r\n    };\r\n    BrowserHistory.prototype.setState = function (key, value) {\r\n        var $history = this.history;\r\n        var state = Object.assign({}, $history.state);\r\n        var _a = this.location, pathname = _a.pathname, search = _a.search, hash = _a.hash;\r\n        state[key] = value;\r\n        $history.replaceState(state, null, \"\" + pathname + search + hash);\r\n    };\r\n    BrowserHistory.prototype.getState = function (key) {\r\n        var state = Object.assign({}, this.history.state);\r\n        return state[key];\r\n    };\r\n    BrowserHistory.prototype.getHistoryIndex = function () {\r\n        var historyIndex = this.getState('HistoryIndex');\r\n        if (historyIndex === undefined) {\r\n            historyIndex = this.history.length - 1;\r\n            this.setState('HistoryIndex', historyIndex);\r\n        }\r\n        return historyIndex;\r\n    };\r\n    BrowserHistory.prototype.go = function (movement) {\r\n        this.history.go(movement);\r\n    };\r\n    BrowserHistory.prototype._getHash = function () {\r\n        return this.location.hash.substr(1);\r\n    };\r\n    BrowserHistory.prototype._getFragment = function (fragment, forcePushState) {\r\n        var rootUrl;\r\n        if (!fragment) {\r\n            if (this._hasPushState || !this._wantsHashChange || forcePushState) {\r\n                var location_1 = this.location;\r\n                fragment = location_1.pathname + location_1.search;\r\n                rootUrl = this.root.replace(trailingSlash, '');\r\n                if (!fragment.indexOf(rootUrl)) {\r\n                    fragment = fragment.substr(rootUrl.length);\r\n                }\r\n            }\r\n            else {\r\n                fragment = this._getHash();\r\n            }\r\n        }\r\n        return '/' + fragment.replace(routeStripper, '');\r\n    };\r\n    BrowserHistory.prototype._checkUrl = function () {\r\n        var current = this._getFragment('');\r\n        if (current !== this.fragment) {\r\n            this._loadUrl('');\r\n        }\r\n    };\r\n    BrowserHistory.prototype._loadUrl = function (fragmentOverride) {\r\n        var fragment = this.fragment = this._getFragment(fragmentOverride);\r\n        return this.options.routeHandler ?\r\n            this.options.routeHandler(fragment) :\r\n            false;\r\n    };\r\n    BrowserHistory.inject = [LinkHandler];\r\n    return BrowserHistory;\r\n}(History));\r\nvar routeStripper = /^#?\\/*|\\s+$/g;\r\nvar rootStripper = /^\\/+|\\/+$/g;\r\nvar trailingSlash = /\\/$/;\r\nvar absoluteUrl = /^([a-z][a-z0-9+\\-.]*:)?\\/\\//i;\r\nfunction updateHash($location, fragment, replace) {\r\n    if (replace) {\r\n        var href = $location.href.replace(/(javascript:|#).*$/, '');\r\n        $location.replace(href + '#' + fragment);\r\n    }\r\n    else {\r\n        $location.hash = '#' + fragment;\r\n    }\r\n}\r\nfunction createOrigin(protocol, hostname, port) {\r\n    return protocol + \"//\" + hostname + (port ? ':' + port : '');\r\n}\n\nfunction configure(config) {\r\n    var $config = config;\r\n    $config.singleton(History, BrowserHistory);\r\n    $config.transient(LinkHandler, DefaultLinkHandler);\r\n}\n\nexport { BrowserHistory, DefaultLinkHandler, LinkHandler, configure };\n//# sourceMappingURL=aurelia-history-browser.js.map\n","\n\nexport var ConsoleAppender = function () {\n  function ConsoleAppender() {\n    \n  }\n\n  ConsoleAppender.prototype.debug = function debug(logger) {\n    var _console;\n\n    for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      rest[_key - 1] = arguments[_key];\n    }\n\n    (_console = console).debug.apply(_console, [\"DEBUG [\" + logger.id + \"]\"].concat(rest));\n  };\n\n  ConsoleAppender.prototype.info = function info(logger) {\n    var _console2;\n\n    for (var _len2 = arguments.length, rest = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      rest[_key2 - 1] = arguments[_key2];\n    }\n\n    (_console2 = console).info.apply(_console2, [\"INFO [\" + logger.id + \"]\"].concat(rest));\n  };\n\n  ConsoleAppender.prototype.warn = function warn(logger) {\n    var _console3;\n\n    for (var _len3 = arguments.length, rest = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n      rest[_key3 - 1] = arguments[_key3];\n    }\n\n    (_console3 = console).warn.apply(_console3, [\"WARN [\" + logger.id + \"]\"].concat(rest));\n  };\n\n  ConsoleAppender.prototype.error = function error(logger) {\n    var _console4;\n\n    for (var _len4 = arguments.length, rest = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n      rest[_key4 - 1] = arguments[_key4];\n    }\n\n    (_console4 = console).error.apply(_console4, [\"ERROR [\" + logger.id + \"]\"].concat(rest));\n  };\n\n  return ConsoleAppender;\n}();","var _class, _temp, _dec, _class2, _dec2, _class3, _class4, _temp2, _class5, _temp3;\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\nimport * as LogManager from 'aurelia-logging';\nimport { camelCase, SVGAnalyzer, bindingMode, connectable, enqueueBindingConnect, sourceContext, Parser, ObserverLocator, EventManager, ListenerExpression, BindingExpression, CallExpression, delegationStrategy, NameExpression, LiteralString } from 'aurelia-binding';\nimport { BehaviorInstruction, BindingLanguage } from 'aurelia-templating';\n\nexport var AttributeMap = (_temp = _class = function () {\n  function AttributeMap(svg) {\n    \n\n    this.elements = Object.create(null);\n    this.allElements = Object.create(null);\n\n    this.svg = svg;\n\n    this.registerUniversal('accesskey', 'accessKey');\n    this.registerUniversal('contenteditable', 'contentEditable');\n    this.registerUniversal('tabindex', 'tabIndex');\n    this.registerUniversal('textcontent', 'textContent');\n    this.registerUniversal('innerhtml', 'innerHTML');\n    this.registerUniversal('scrolltop', 'scrollTop');\n    this.registerUniversal('scrollleft', 'scrollLeft');\n    this.registerUniversal('readonly', 'readOnly');\n\n    this.register('label', 'for', 'htmlFor');\n\n    this.register('img', 'usemap', 'useMap');\n\n    this.register('input', 'maxlength', 'maxLength');\n    this.register('input', 'minlength', 'minLength');\n    this.register('input', 'formaction', 'formAction');\n    this.register('input', 'formenctype', 'formEncType');\n    this.register('input', 'formmethod', 'formMethod');\n    this.register('input', 'formnovalidate', 'formNoValidate');\n    this.register('input', 'formtarget', 'formTarget');\n\n    this.register('textarea', 'maxlength', 'maxLength');\n\n    this.register('td', 'rowspan', 'rowSpan');\n    this.register('td', 'colspan', 'colSpan');\n    this.register('th', 'rowspan', 'rowSpan');\n    this.register('th', 'colspan', 'colSpan');\n  }\n\n  AttributeMap.prototype.register = function register(elementName, attributeName, propertyName) {\n    elementName = elementName.toLowerCase();\n    attributeName = attributeName.toLowerCase();\n    var element = this.elements[elementName] = this.elements[elementName] || Object.create(null);\n    element[attributeName] = propertyName;\n  };\n\n  AttributeMap.prototype.registerUniversal = function registerUniversal(attributeName, propertyName) {\n    attributeName = attributeName.toLowerCase();\n    this.allElements[attributeName] = propertyName;\n  };\n\n  AttributeMap.prototype.map = function map(elementName, attributeName) {\n    if (this.svg.isStandardSvgAttribute(elementName, attributeName)) {\n      return attributeName;\n    }\n    elementName = elementName.toLowerCase();\n    attributeName = attributeName.toLowerCase();\n    var element = this.elements[elementName];\n    if (element !== undefined && attributeName in element) {\n      return element[attributeName];\n    }\n    if (attributeName in this.allElements) {\n      return this.allElements[attributeName];\n    }\n\n    if (/(?:^data-)|(?:^aria-)|:/.test(attributeName)) {\n      return attributeName;\n    }\n    return camelCase(attributeName);\n  };\n\n  return AttributeMap;\n}(), _class.inject = [SVGAnalyzer], _temp);\n\nexport var InterpolationBindingExpression = function () {\n  function InterpolationBindingExpression(observerLocator, targetProperty, parts, mode, lookupFunctions, attribute) {\n    \n\n    this.observerLocator = observerLocator;\n    this.targetProperty = targetProperty;\n    this.parts = parts;\n    this.mode = mode;\n    this.lookupFunctions = lookupFunctions;\n    this.attribute = this.attrToRemove = attribute;\n    this.discrete = false;\n  }\n\n  InterpolationBindingExpression.prototype.createBinding = function createBinding(target) {\n    if (this.parts.length === 3) {\n      return new ChildInterpolationBinding(target, this.observerLocator, this.parts[1], this.mode, this.lookupFunctions, this.targetProperty, this.parts[0], this.parts[2]);\n    }\n    return new InterpolationBinding(this.observerLocator, this.parts, target, this.targetProperty, this.mode, this.lookupFunctions);\n  };\n\n  return InterpolationBindingExpression;\n}();\n\nfunction validateTarget(target, propertyName) {\n  if (propertyName === 'style') {\n    LogManager.getLogger('templating-binding').info('Internet Explorer does not support interpolation in \"style\" attributes.  Use the style attribute\\'s alias, \"css\" instead.');\n  } else if (target.parentElement && target.parentElement.nodeName === 'TEXTAREA' && propertyName === 'textContent') {\n    throw new Error('Interpolation binding cannot be used in the content of a textarea element.  Use <textarea value.bind=\"expression\"></textarea> instead.');\n  }\n}\n\nexport var InterpolationBinding = function () {\n  function InterpolationBinding(observerLocator, parts, target, targetProperty, mode, lookupFunctions) {\n    \n\n    validateTarget(target, targetProperty);\n    this.observerLocator = observerLocator;\n    this.parts = parts;\n    this.target = target;\n    this.targetProperty = targetProperty;\n    this.targetAccessor = observerLocator.getAccessor(target, targetProperty);\n    this.mode = mode;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  InterpolationBinding.prototype.interpolate = function interpolate() {\n    if (this.isBound) {\n      var value = '';\n      var parts = this.parts;\n      for (var i = 0, ii = parts.length; i < ii; i++) {\n        value += i % 2 === 0 ? parts[i] : this['childBinding' + i].value;\n      }\n      this.targetAccessor.setValue(value, this.target, this.targetProperty);\n    }\n  };\n\n  InterpolationBinding.prototype.updateOneTimeBindings = function updateOneTimeBindings() {\n    for (var i = 1, ii = this.parts.length; i < ii; i += 2) {\n      var child = this['childBinding' + i];\n      if (child.mode === bindingMode.oneTime) {\n        child.call();\n      }\n    }\n  };\n\n  InterpolationBinding.prototype.bind = function bind(source) {\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n    this.source = source;\n\n    var parts = this.parts;\n    for (var i = 1, ii = parts.length; i < ii; i += 2) {\n      var binding = new ChildInterpolationBinding(this, this.observerLocator, parts[i], this.mode, this.lookupFunctions);\n      binding.bind(source);\n      this['childBinding' + i] = binding;\n    }\n\n    this.isBound = true;\n    this.interpolate();\n  };\n\n  InterpolationBinding.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    this.source = null;\n    var parts = this.parts;\n    for (var i = 1, ii = parts.length; i < ii; i += 2) {\n      var name = 'childBinding' + i;\n      this[name].unbind();\n    }\n  };\n\n  return InterpolationBinding;\n}();\n\nexport var ChildInterpolationBinding = (_dec = connectable(), _dec(_class2 = function () {\n  function ChildInterpolationBinding(target, observerLocator, sourceExpression, mode, lookupFunctions, targetProperty, left, right) {\n    \n\n    if (target instanceof InterpolationBinding) {\n      this.parent = target;\n    } else {\n      validateTarget(target, targetProperty);\n      this.target = target;\n      this.targetProperty = targetProperty;\n      this.targetAccessor = observerLocator.getAccessor(target, targetProperty);\n    }\n    this.observerLocator = observerLocator;\n    this.sourceExpression = sourceExpression;\n    this.mode = mode;\n    this.lookupFunctions = lookupFunctions;\n    this.left = left;\n    this.right = right;\n  }\n\n  ChildInterpolationBinding.prototype.updateTarget = function updateTarget(value) {\n    value = value === null || value === undefined ? '' : value.toString();\n    if (value !== this.value) {\n      this.value = value;\n      if (this.parent) {\n        this.parent.interpolate();\n      } else {\n        this.targetAccessor.setValue(this.left + value + this.right, this.target, this.targetProperty);\n      }\n    }\n  };\n\n  ChildInterpolationBinding.prototype.call = function call() {\n    if (!this.isBound) {\n      return;\n    }\n\n    this.rawValue = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\n    this.updateTarget(this.rawValue);\n\n    if (this.mode !== bindingMode.oneTime) {\n      this._version++;\n      this.sourceExpression.connect(this, this.source);\n      if (this.rawValue instanceof Array) {\n        this.observeArray(this.rawValue);\n      }\n      this.unobserve(false);\n    }\n  };\n\n  ChildInterpolationBinding.prototype.bind = function bind(source) {\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n    this.isBound = true;\n    this.source = source;\n\n    var sourceExpression = this.sourceExpression;\n    if (sourceExpression.bind) {\n      sourceExpression.bind(this, source, this.lookupFunctions);\n    }\n\n    this.rawValue = sourceExpression.evaluate(source, this.lookupFunctions);\n    this.updateTarget(this.rawValue);\n\n    if (this.mode === bindingMode.oneWay) {\n      enqueueBindingConnect(this);\n    }\n  };\n\n  ChildInterpolationBinding.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    var sourceExpression = this.sourceExpression;\n    if (sourceExpression.unbind) {\n      sourceExpression.unbind(this, this.source);\n    }\n    this.source = null;\n    this.value = null;\n    this.rawValue = null;\n    this.unobserve(true);\n  };\n\n  ChildInterpolationBinding.prototype.connect = function connect(evaluate) {\n    if (!this.isBound) {\n      return;\n    }\n    if (evaluate) {\n      this.rawValue = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\n      this.updateTarget(this.rawValue);\n    }\n    this.sourceExpression.connect(this, this.source);\n    if (this.rawValue instanceof Array) {\n      this.observeArray(this.rawValue);\n    }\n  };\n\n  return ChildInterpolationBinding;\n}()) || _class2);\n\nexport var LetExpression = function () {\n  function LetExpression(observerLocator, targetProperty, sourceExpression, lookupFunctions, toBindingContext) {\n    \n\n    this.observerLocator = observerLocator;\n    this.sourceExpression = sourceExpression;\n    this.targetProperty = targetProperty;\n    this.lookupFunctions = lookupFunctions;\n    this.toBindingContext = toBindingContext;\n  }\n\n  LetExpression.prototype.createBinding = function createBinding() {\n    return new LetBinding(this.observerLocator, this.sourceExpression, this.targetProperty, this.lookupFunctions, this.toBindingContext);\n  };\n\n  return LetExpression;\n}();\n\nexport var LetBinding = (_dec2 = connectable(), _dec2(_class3 = function () {\n  function LetBinding(observerLocator, sourceExpression, targetProperty, lookupFunctions, toBindingContext) {\n    \n\n    this.observerLocator = observerLocator;\n    this.sourceExpression = sourceExpression;\n    this.targetProperty = targetProperty;\n    this.lookupFunctions = lookupFunctions;\n    this.source = null;\n    this.target = null;\n    this.toBindingContext = toBindingContext;\n  }\n\n  LetBinding.prototype.updateTarget = function updateTarget() {\n    var value = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\n    this.target[this.targetProperty] = value;\n  };\n\n  LetBinding.prototype.call = function call(context) {\n    if (!this.isBound) {\n      return;\n    }\n    if (context === sourceContext) {\n      this.updateTarget();\n      return;\n    }\n    throw new Error('Unexpected call context ' + context);\n  };\n\n  LetBinding.prototype.bind = function bind(source) {\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n\n    this.isBound = true;\n    this.source = source;\n    this.target = this.toBindingContext ? source.bindingContext : source.overrideContext;\n\n    if (this.sourceExpression.bind) {\n      this.sourceExpression.bind(this, source, this.lookupFunctions);\n    }\n\n    enqueueBindingConnect(this);\n  };\n\n  LetBinding.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    if (this.sourceExpression.unbind) {\n      this.sourceExpression.unbind(this, this.source);\n    }\n    this.source = null;\n    this.target = null;\n    this.unobserve(true);\n  };\n\n  LetBinding.prototype.connect = function connect() {\n    if (!this.isBound) {\n      return;\n    }\n    this.updateTarget();\n    this.sourceExpression.connect(this, this.source);\n  };\n\n  return LetBinding;\n}()) || _class3);\n\nexport var LetInterpolationBindingExpression = function () {\n  function LetInterpolationBindingExpression(observerLocator, targetProperty, parts, lookupFunctions, toBindingContext) {\n    \n\n    this.observerLocator = observerLocator;\n    this.targetProperty = targetProperty;\n    this.parts = parts;\n    this.lookupFunctions = lookupFunctions;\n    this.toBindingContext = toBindingContext;\n  }\n\n  LetInterpolationBindingExpression.prototype.createBinding = function createBinding() {\n    return new LetInterpolationBinding(this.observerLocator, this.targetProperty, this.parts, this.lookupFunctions, this.toBindingContext);\n  };\n\n  return LetInterpolationBindingExpression;\n}();\n\nexport var LetInterpolationBinding = function () {\n  function LetInterpolationBinding(observerLocator, targetProperty, parts, lookupFunctions, toBindingContext) {\n    \n\n    this.observerLocator = observerLocator;\n    this.parts = parts;\n    this.targetProperty = targetProperty;\n    this.lookupFunctions = lookupFunctions;\n    this.toBindingContext = toBindingContext;\n    this.target = null;\n  }\n\n  LetInterpolationBinding.prototype.bind = function bind(source) {\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n\n    this.isBound = true;\n    this.source = source;\n    this.target = this.toBindingContext ? source.bindingContext : source.overrideContext;\n\n    this.interpolationBinding = this.createInterpolationBinding();\n    this.interpolationBinding.bind(source);\n  };\n\n  LetInterpolationBinding.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    this.source = null;\n    this.target = null;\n    this.interpolationBinding.unbind();\n    this.interpolationBinding = null;\n  };\n\n  LetInterpolationBinding.prototype.createInterpolationBinding = function createInterpolationBinding() {\n    if (this.parts.length === 3) {\n      return new ChildInterpolationBinding(this.target, this.observerLocator, this.parts[1], bindingMode.oneWay, this.lookupFunctions, this.targetProperty, this.parts[0], this.parts[2]);\n    }\n    return new InterpolationBinding(this.observerLocator, this.parts, this.target, this.targetProperty, bindingMode.oneWay, this.lookupFunctions);\n  };\n\n  return LetInterpolationBinding;\n}();\n\nexport var SyntaxInterpreter = (_temp2 = _class4 = function () {\n  function SyntaxInterpreter(parser, observerLocator, eventManager, attributeMap) {\n    \n\n    this.parser = parser;\n    this.observerLocator = observerLocator;\n    this.eventManager = eventManager;\n    this.attributeMap = attributeMap;\n  }\n\n  SyntaxInterpreter.prototype.interpret = function interpret(resources, element, info, existingInstruction, context) {\n    if (info.command in this) {\n      return this[info.command](resources, element, info, existingInstruction, context);\n    }\n\n    return this.handleUnknownCommand(resources, element, info, existingInstruction, context);\n  };\n\n  SyntaxInterpreter.prototype.handleUnknownCommand = function handleUnknownCommand(resources, element, info, existingInstruction, context) {\n    LogManager.getLogger('templating-binding').warn('Unknown binding command.', info);\n    return existingInstruction;\n  };\n\n  SyntaxInterpreter.prototype.determineDefaultBindingMode = function determineDefaultBindingMode(element, attrName, context) {\n    var tagName = element.tagName.toLowerCase();\n\n    if (tagName === 'input' && (attrName === 'value' || attrName === 'files') && element.type !== 'checkbox' && element.type !== 'radio' || tagName === 'input' && attrName === 'checked' && (element.type === 'checkbox' || element.type === 'radio') || (tagName === 'textarea' || tagName === 'select') && attrName === 'value' || (attrName === 'textcontent' || attrName === 'innerhtml') && element.contentEditable === 'true' || attrName === 'scrolltop' || attrName === 'scrollleft') {\n      return bindingMode.twoWay;\n    }\n\n    if (context && attrName in context.attributes && context.attributes[attrName] && context.attributes[attrName].defaultBindingMode >= bindingMode.oneTime) {\n      return context.attributes[attrName].defaultBindingMode;\n    }\n\n    return bindingMode.oneWay;\n  };\n\n  SyntaxInterpreter.prototype.bind = function bind(resources, element, info, existingInstruction, context) {\n    var instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\n\n    instruction.attributes[info.attrName] = new BindingExpression(this.observerLocator, this.attributeMap.map(element.tagName, info.attrName), this.parser.parse(info.attrValue), info.defaultBindingMode === undefined || info.defaultBindingMode === null ? this.determineDefaultBindingMode(element, info.attrName, context) : info.defaultBindingMode, resources.lookupFunctions);\n\n    return instruction;\n  };\n\n  SyntaxInterpreter.prototype.trigger = function trigger(resources, element, info) {\n    return new ListenerExpression(this.eventManager, info.attrName, this.parser.parse(info.attrValue), delegationStrategy.none, true, resources.lookupFunctions);\n  };\n\n  SyntaxInterpreter.prototype.capture = function capture(resources, element, info) {\n    return new ListenerExpression(this.eventManager, info.attrName, this.parser.parse(info.attrValue), delegationStrategy.capturing, true, resources.lookupFunctions);\n  };\n\n  SyntaxInterpreter.prototype.delegate = function delegate(resources, element, info) {\n    return new ListenerExpression(this.eventManager, info.attrName, this.parser.parse(info.attrValue), delegationStrategy.bubbling, true, resources.lookupFunctions);\n  };\n\n  SyntaxInterpreter.prototype.call = function call(resources, element, info, existingInstruction) {\n    var instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\n\n    instruction.attributes[info.attrName] = new CallExpression(this.observerLocator, info.attrName, this.parser.parse(info.attrValue), resources.lookupFunctions);\n\n    return instruction;\n  };\n\n  SyntaxInterpreter.prototype.options = function options(resources, element, info, existingInstruction, context) {\n    var instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\n    var attrValue = info.attrValue;\n    var language = this.language;\n    var name = null;\n    var target = '';\n    var current = void 0;\n    var i = void 0;\n    var ii = void 0;\n    var inString = false;\n    var inEscape = false;\n    var foundName = false;\n\n    for (i = 0, ii = attrValue.length; i < ii; ++i) {\n      current = attrValue[i];\n\n      if (current === ';' && !inString) {\n        if (!foundName) {\n          name = this._getPrimaryPropertyName(resources, context);\n        }\n        info = language.inspectAttribute(resources, '?', name, target.trim());\n        language.createAttributeInstruction(resources, element, info, instruction, context);\n\n        if (!instruction.attributes[info.attrName]) {\n          instruction.attributes[info.attrName] = info.attrValue;\n        }\n\n        target = '';\n        name = null;\n      } else if (current === ':' && name === null) {\n        foundName = true;\n        name = target.trim();\n        target = '';\n      } else if (current === '\\\\') {\n        target += current;\n        inEscape = true;\n        continue;\n      } else {\n        target += current;\n\n        if (name !== null && inEscape === false && current === '\\'') {\n          inString = !inString;\n        }\n      }\n\n      inEscape = false;\n    }\n\n    if (!foundName) {\n      name = this._getPrimaryPropertyName(resources, context);\n    }\n\n    if (name !== null) {\n      info = language.inspectAttribute(resources, '?', name, target.trim());\n      language.createAttributeInstruction(resources, element, info, instruction, context);\n\n      if (!instruction.attributes[info.attrName]) {\n        instruction.attributes[info.attrName] = info.attrValue;\n      }\n    }\n\n    return instruction;\n  };\n\n  SyntaxInterpreter.prototype._getPrimaryPropertyName = function _getPrimaryPropertyName(resources, context) {\n    var type = resources.getAttribute(context.attributeName);\n    if (type && type.primaryProperty) {\n      return type.primaryProperty.attribute;\n    }\n    return null;\n  };\n\n  SyntaxInterpreter.prototype['for'] = function _for(resources, element, info, existingInstruction) {\n    var parts = void 0;\n    var keyValue = void 0;\n    var instruction = void 0;\n    var attrValue = void 0;\n    var isDestructuring = void 0;\n\n    attrValue = info.attrValue;\n    isDestructuring = attrValue.match(/^ *[[].+[\\]]/);\n    parts = isDestructuring ? attrValue.split('of ') : attrValue.split(' of ');\n\n    if (parts.length !== 2) {\n      throw new Error('Incorrect syntax for \"for\". The form is: \"$local of $items\" or \"[$key, $value] of $items\".');\n    }\n\n    instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\n\n    if (isDestructuring) {\n      keyValue = parts[0].replace(/[[\\]]/g, '').replace(/,/g, ' ').replace(/\\s+/g, ' ').trim().split(' ');\n      instruction.attributes.key = keyValue[0];\n      instruction.attributes.value = keyValue[1];\n    } else {\n      instruction.attributes.local = parts[0];\n    }\n\n    instruction.attributes.items = new BindingExpression(this.observerLocator, 'items', this.parser.parse(parts[1]), bindingMode.oneWay, resources.lookupFunctions);\n\n    return instruction;\n  };\n\n  SyntaxInterpreter.prototype['two-way'] = function twoWay(resources, element, info, existingInstruction) {\n    var instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\n\n    instruction.attributes[info.attrName] = new BindingExpression(this.observerLocator, this.attributeMap.map(element.tagName, info.attrName), this.parser.parse(info.attrValue), bindingMode.twoWay, resources.lookupFunctions);\n\n    return instruction;\n  };\n\n  SyntaxInterpreter.prototype['to-view'] = function toView(resources, element, info, existingInstruction) {\n    var instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\n\n    instruction.attributes[info.attrName] = new BindingExpression(this.observerLocator, this.attributeMap.map(element.tagName, info.attrName), this.parser.parse(info.attrValue), bindingMode.toView, resources.lookupFunctions);\n\n    return instruction;\n  };\n\n  SyntaxInterpreter.prototype['from-view'] = function fromView(resources, element, info, existingInstruction) {\n    var instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\n\n    instruction.attributes[info.attrName] = new BindingExpression(this.observerLocator, this.attributeMap.map(element.tagName, info.attrName), this.parser.parse(info.attrValue), bindingMode.fromView, resources.lookupFunctions);\n\n    return instruction;\n  };\n\n  SyntaxInterpreter.prototype['one-time'] = function oneTime(resources, element, info, existingInstruction) {\n    var instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\n\n    instruction.attributes[info.attrName] = new BindingExpression(this.observerLocator, this.attributeMap.map(element.tagName, info.attrName), this.parser.parse(info.attrValue), bindingMode.oneTime, resources.lookupFunctions);\n\n    return instruction;\n  };\n\n  return SyntaxInterpreter;\n}(), _class4.inject = [Parser, ObserverLocator, EventManager, AttributeMap], _temp2);\n\nSyntaxInterpreter.prototype['one-way'] = SyntaxInterpreter.prototype['to-view'];\n\nvar info = {};\n\nexport var TemplatingBindingLanguage = (_temp3 = _class5 = function (_BindingLanguage) {\n  _inherits(TemplatingBindingLanguage, _BindingLanguage);\n\n  function TemplatingBindingLanguage(parser, observerLocator, syntaxInterpreter, attributeMap) {\n    \n\n    var _this = _possibleConstructorReturn(this, _BindingLanguage.call(this));\n\n    _this.parser = parser;\n    _this.observerLocator = observerLocator;\n    _this.syntaxInterpreter = syntaxInterpreter;\n    _this.emptyStringExpression = _this.parser.parse('\\'\\'');\n    syntaxInterpreter.language = _this;\n    _this.attributeMap = attributeMap;\n    _this.toBindingContextAttr = 'to-binding-context';\n    return _this;\n  }\n\n  TemplatingBindingLanguage.prototype.inspectAttribute = function inspectAttribute(resources, elementName, attrName, attrValue) {\n    var parts = attrName.split('.');\n\n    info.defaultBindingMode = null;\n\n    if (parts.length === 2) {\n      info.attrName = parts[0].trim();\n      info.attrValue = attrValue;\n      info.command = parts[1].trim();\n\n      if (info.command === 'ref') {\n        info.expression = new NameExpression(this.parser.parse(attrValue), info.attrName, resources.lookupFunctions);\n        info.command = null;\n        info.attrName = 'ref';\n      } else {\n        info.expression = null;\n      }\n    } else if (attrName === 'ref') {\n      info.attrName = attrName;\n      info.attrValue = attrValue;\n      info.command = null;\n      info.expression = new NameExpression(this.parser.parse(attrValue), 'element', resources.lookupFunctions);\n    } else {\n      info.attrName = attrName;\n      info.attrValue = attrValue;\n      info.command = null;\n      var interpolationParts = this.parseInterpolation(resources, attrValue);\n      if (interpolationParts === null) {\n        info.expression = null;\n      } else {\n        info.expression = new InterpolationBindingExpression(this.observerLocator, this.attributeMap.map(elementName, attrName), interpolationParts, bindingMode.oneWay, resources.lookupFunctions, attrName);\n      }\n    }\n\n    return info;\n  };\n\n  TemplatingBindingLanguage.prototype.createAttributeInstruction = function createAttributeInstruction(resources, element, theInfo, existingInstruction, context) {\n    var instruction = void 0;\n\n    if (theInfo.expression) {\n      if (theInfo.attrName === 'ref') {\n        return theInfo.expression;\n      }\n\n      instruction = existingInstruction || BehaviorInstruction.attribute(theInfo.attrName);\n      instruction.attributes[theInfo.attrName] = theInfo.expression;\n    } else if (theInfo.command) {\n      instruction = this.syntaxInterpreter.interpret(resources, element, theInfo, existingInstruction, context);\n    }\n\n    return instruction;\n  };\n\n  TemplatingBindingLanguage.prototype.createLetExpressions = function createLetExpressions(resources, letElement) {\n    var expressions = [];\n    var attributes = letElement.attributes;\n\n    var attr = void 0;\n\n    var parts = void 0;\n    var attrName = void 0;\n    var attrValue = void 0;\n    var command = void 0;\n    var toBindingContextAttr = this.toBindingContextAttr;\n    var toBindingContext = letElement.hasAttribute(toBindingContextAttr);\n    for (var i = 0, ii = attributes.length; ii > i; ++i) {\n      attr = attributes[i];\n      attrName = attr.name;\n      attrValue = attr.nodeValue;\n      parts = attrName.split('.');\n\n      if (attrName === toBindingContextAttr) {\n        continue;\n      }\n\n      if (parts.length === 2) {\n        command = parts[1];\n        if (command !== 'bind') {\n          LogManager.getLogger('templating-binding-language').warn('Detected invalid let command. Expected \"' + parts[0] + '.bind\", given \"' + attrName + '\"');\n          continue;\n        }\n        expressions.push(new LetExpression(this.observerLocator, camelCase(parts[0]), this.parser.parse(attrValue), resources.lookupFunctions, toBindingContext));\n      } else {\n        attrName = camelCase(attrName);\n        parts = this.parseInterpolation(resources, attrValue);\n        if (parts === null) {\n          LogManager.getLogger('templating-binding-language').warn('Detected string literal in let bindings. Did you mean \"' + attrName + '.bind=' + attrValue + '\" or \"' + attrName + '=${' + attrValue + '}\" ?');\n        }\n        if (parts) {\n          expressions.push(new LetInterpolationBindingExpression(this.observerLocator, attrName, parts, resources.lookupFunctions, toBindingContext));\n        } else {\n          expressions.push(new LetExpression(this.observerLocator, attrName, new LiteralString(attrValue), resources.lookupFunctions, toBindingContext));\n        }\n      }\n    }\n    return expressions;\n  };\n\n  TemplatingBindingLanguage.prototype.inspectTextContent = function inspectTextContent(resources, value) {\n    var parts = this.parseInterpolation(resources, value);\n    if (parts === null) {\n      return null;\n    }\n    return new InterpolationBindingExpression(this.observerLocator, 'textContent', parts, bindingMode.oneWay, resources.lookupFunctions, 'textContent');\n  };\n\n  TemplatingBindingLanguage.prototype.parseInterpolation = function parseInterpolation(resources, value) {\n    var i = value.indexOf('${', 0);\n    var ii = value.length;\n    var char = void 0;\n    var pos = 0;\n    var open = 0;\n    var quote = null;\n    var interpolationStart = void 0;\n    var parts = void 0;\n    var partIndex = 0;\n\n    while (i >= 0 && i < ii - 2) {\n      open = 1;\n      interpolationStart = i;\n      i += 2;\n\n      do {\n        char = value[i];\n        i++;\n\n        if (char === \"'\" || char === '\"') {\n          if (quote === null) {\n            quote = char;\n          } else if (quote === char) {\n            quote = null;\n          }\n          continue;\n        }\n\n        if (char === '\\\\') {\n          i++;\n          continue;\n        }\n\n        if (quote !== null) {\n          continue;\n        }\n\n        if (char === '{') {\n          open++;\n        } else if (char === '}') {\n          open--;\n        }\n      } while (open > 0 && i < ii);\n\n      if (open === 0) {\n        parts = parts || [];\n        if (value[interpolationStart - 1] === '\\\\' && value[interpolationStart - 2] !== '\\\\') {\n          parts[partIndex] = value.substring(pos, interpolationStart - 1) + value.substring(interpolationStart, i);\n          partIndex++;\n          parts[partIndex] = this.emptyStringExpression;\n          partIndex++;\n        } else {\n          parts[partIndex] = value.substring(pos, interpolationStart);\n          partIndex++;\n          parts[partIndex] = this.parser.parse(value.substring(interpolationStart + 2, i - 1));\n          partIndex++;\n        }\n        pos = i;\n        i = value.indexOf('${', i);\n      } else {\n        break;\n      }\n    }\n\n    if (partIndex === 0) {\n      return null;\n    }\n\n    parts[partIndex] = value.substr(pos);\n    return parts;\n  };\n\n  return TemplatingBindingLanguage;\n}(BindingLanguage), _class5.inject = [Parser, ObserverLocator, SyntaxInterpreter, AttributeMap], _temp3);\n\nexport function configure(config) {\n  config.container.registerSingleton(BindingLanguage, TemplatingBindingLanguage);\n  config.container.registerAlias(BindingLanguage, TemplatingBindingLanguage);\n}","import { Container, inject, Optional } from 'aurelia-dependency-injection';\nimport { DOM, FEATURE } from 'aurelia-pal';\nimport { TaskQueue } from 'aurelia-task-queue';\nimport { CompositionEngine, ViewSlot, ViewResources, bindable, noView, customElement, customAttribute, templateController, BoundViewFactory, TargetInstruction, Animator, resource, useView, useShadowDOM, ViewEngine } from 'aurelia-templating';\nimport { createOverrideContext, bindingMode, BindingBehavior, ValueConverter, sourceContext, mergeSplice, ObserverLocator, valueConverter, DataAttributeObserver, bindingBehavior, targetContext, EventSubscriber } from 'aurelia-binding';\nimport { getLogger } from 'aurelia-logging';\nimport { Loader } from 'aurelia-loader';\nimport { relativeToFile } from 'aurelia-path';\nimport { mixin } from 'aurelia-metadata';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nfunction __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\n\nvar ActivationStrategy;\r\n(function (ActivationStrategy) {\r\n    ActivationStrategy[\"InvokeLifecycle\"] = \"invoke-lifecycle\";\r\n    ActivationStrategy[\"Replace\"] = \"replace\";\r\n})(ActivationStrategy || (ActivationStrategy = {}));\r\nvar Compose = (function () {\r\n    function Compose(element, container, compositionEngine, viewSlot, viewResources, taskQueue) {\r\n        this.activationStrategy = ActivationStrategy.InvokeLifecycle;\r\n        this.element = element;\r\n        this.container = container;\r\n        this.compositionEngine = compositionEngine;\r\n        this.viewSlot = viewSlot;\r\n        this.viewResources = viewResources;\r\n        this.taskQueue = taskQueue;\r\n        this.currentController = null;\r\n        this.currentViewModel = null;\r\n        this.changes = Object.create(null);\r\n    }\r\n    Compose.inject = function () {\r\n        return [DOM.Element, Container, CompositionEngine, ViewSlot, ViewResources, TaskQueue];\r\n    };\r\n    Compose.prototype.created = function (owningView) {\r\n        this.owningView = owningView;\r\n    };\r\n    Compose.prototype.bind = function (bindingContext, overrideContext) {\r\n        this.bindingContext = bindingContext;\r\n        this.overrideContext = overrideContext;\r\n        var changes = this.changes;\r\n        changes.view = this.view;\r\n        changes.viewModel = this.viewModel;\r\n        changes.model = this.model;\r\n        if (!this.pendingTask) {\r\n            processChanges(this);\r\n        }\r\n    };\r\n    Compose.prototype.unbind = function () {\r\n        this.changes = Object.create(null);\r\n        this.bindingContext = null;\r\n        this.overrideContext = null;\r\n        var returnToCache = true;\r\n        var skipAnimation = true;\r\n        this.viewSlot.removeAll(returnToCache, skipAnimation);\r\n    };\r\n    Compose.prototype.modelChanged = function (newValue, oldValue) {\r\n        this.changes.model = newValue;\r\n        requestUpdate(this);\r\n    };\r\n    Compose.prototype.viewChanged = function (newValue, oldValue) {\r\n        this.changes.view = newValue;\r\n        requestUpdate(this);\r\n    };\r\n    Compose.prototype.viewModelChanged = function (newValue, oldValue) {\r\n        this.changes.viewModel = newValue;\r\n        requestUpdate(this);\r\n    };\r\n    __decorate([\r\n        bindable\r\n    ], Compose.prototype, \"model\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], Compose.prototype, \"view\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], Compose.prototype, \"viewModel\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], Compose.prototype, \"activationStrategy\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], Compose.prototype, \"swapOrder\", void 0);\r\n    Compose = __decorate([\r\n        noView,\r\n        customElement('compose')\r\n    ], Compose);\r\n    return Compose;\r\n}());\r\nfunction isEmpty(obj) {\r\n    for (var _ in obj) {\r\n        return false;\r\n    }\r\n    return true;\r\n}\r\nfunction tryActivateViewModel(vm, model) {\r\n    if (vm && typeof vm.activate === 'function') {\r\n        return Promise.resolve(vm.activate(model));\r\n    }\r\n}\r\nfunction createInstruction(composer, instruction) {\r\n    return Object.assign(instruction, {\r\n        bindingContext: composer.bindingContext,\r\n        overrideContext: composer.overrideContext,\r\n        owningView: composer.owningView,\r\n        container: composer.container,\r\n        viewSlot: composer.viewSlot,\r\n        viewResources: composer.viewResources,\r\n        currentController: composer.currentController,\r\n        host: composer.element,\r\n        swapOrder: composer.swapOrder\r\n    });\r\n}\r\nfunction processChanges(composer) {\r\n    var changes = composer.changes;\r\n    composer.changes = Object.create(null);\r\n    if (needsReInitialization(composer, changes)) {\r\n        var instruction = {\r\n            view: composer.view,\r\n            viewModel: composer.currentViewModel || composer.viewModel,\r\n            model: composer.model\r\n        };\r\n        instruction = Object.assign(instruction, changes);\r\n        instruction = createInstruction(composer, instruction);\r\n        composer.pendingTask = composer.compositionEngine.compose(instruction).then(function (controller) {\r\n            composer.currentController = controller;\r\n            composer.currentViewModel = controller ? controller.viewModel : null;\r\n        });\r\n    }\r\n    else {\r\n        composer.pendingTask = tryActivateViewModel(composer.currentViewModel, changes.model);\r\n        if (!composer.pendingTask) {\r\n            return;\r\n        }\r\n    }\r\n    composer.pendingTask = composer.pendingTask\r\n        .then(function () {\r\n        completeCompositionTask(composer);\r\n    }, function (reason) {\r\n        completeCompositionTask(composer);\r\n        throw reason;\r\n    });\r\n}\r\nfunction completeCompositionTask(composer) {\r\n    composer.pendingTask = null;\r\n    if (!isEmpty(composer.changes)) {\r\n        processChanges(composer);\r\n    }\r\n}\r\nfunction requestUpdate(composer) {\r\n    if (composer.pendingTask || composer.updateRequested) {\r\n        return;\r\n    }\r\n    composer.updateRequested = true;\r\n    composer.taskQueue.queueMicroTask(function () {\r\n        composer.updateRequested = false;\r\n        processChanges(composer);\r\n    });\r\n}\r\nfunction needsReInitialization(composer, changes) {\r\n    var activationStrategy = composer.activationStrategy;\r\n    var vm = composer.currentViewModel;\r\n    if (vm && typeof vm.determineActivationStrategy === 'function') {\r\n        activationStrategy = vm.determineActivationStrategy();\r\n    }\r\n    return 'view' in changes\r\n        || 'viewModel' in changes\r\n        || activationStrategy === ActivationStrategy.Replace;\r\n}\n\nvar IfCore = (function () {\r\n    function IfCore(viewFactory, viewSlot) {\r\n        this.viewFactory = viewFactory;\r\n        this.viewSlot = viewSlot;\r\n        this.view = null;\r\n        this.bindingContext = null;\r\n        this.overrideContext = null;\r\n        this.showing = false;\r\n        this.cache = true;\r\n    }\r\n    IfCore.prototype.bind = function (bindingContext, overrideContext) {\r\n        this.bindingContext = bindingContext;\r\n        this.overrideContext = overrideContext;\r\n    };\r\n    IfCore.prototype.unbind = function () {\r\n        if (this.view === null) {\r\n            return;\r\n        }\r\n        this.view.unbind();\r\n        if (!this.viewFactory.isCaching) {\r\n            return;\r\n        }\r\n        if (this.showing) {\r\n            this.showing = false;\r\n            this.viewSlot.remove(this.view, true, true);\r\n        }\r\n        else {\r\n            this.view.returnToCache();\r\n        }\r\n        this.view = null;\r\n    };\r\n    IfCore.prototype._show = function () {\r\n        if (this.showing) {\r\n            if (!this.view.isBound) {\r\n                this.view.bind(this.bindingContext, this.overrideContext);\r\n            }\r\n            return;\r\n        }\r\n        if (this.view === null) {\r\n            this.view = this.viewFactory.create();\r\n        }\r\n        if (!this.view.isBound) {\r\n            this.view.bind(this.bindingContext, this.overrideContext);\r\n        }\r\n        this.showing = true;\r\n        return this.viewSlot.add(this.view);\r\n    };\r\n    IfCore.prototype._hide = function () {\r\n        var _this = this;\r\n        if (!this.showing) {\r\n            return;\r\n        }\r\n        this.showing = false;\r\n        var removed = this.viewSlot.remove(this.view);\r\n        if (removed instanceof Promise) {\r\n            return removed.then(function () {\r\n                _this._unbindView();\r\n            });\r\n        }\r\n        this._unbindView();\r\n    };\r\n    IfCore.prototype._unbindView = function () {\r\n        var cache = this.cache === 'false' ? false : !!this.cache;\r\n        this.view.unbind();\r\n        if (!cache) {\r\n            this.view = null;\r\n        }\r\n    };\r\n    return IfCore;\r\n}());\n\nvar If = (function (_super) {\r\n    __extends(If, _super);\r\n    function If() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.cache = true;\r\n        return _this;\r\n    }\r\n    If.prototype.bind = function (bindingContext, overrideContext) {\r\n        _super.prototype.bind.call(this, bindingContext, overrideContext);\r\n        if (this.condition) {\r\n            this._show();\r\n        }\r\n        else {\r\n            this._hide();\r\n        }\r\n    };\r\n    If.prototype.conditionChanged = function (newValue) {\r\n        this._update(newValue);\r\n    };\r\n    If.prototype._update = function (show) {\r\n        var _this = this;\r\n        if (this.animating) {\r\n            return;\r\n        }\r\n        var promise;\r\n        if (this.elseVm) {\r\n            promise = show ? this._swap(this.elseVm, this) : this._swap(this, this.elseVm);\r\n        }\r\n        else {\r\n            promise = show ? this._show() : this._hide();\r\n        }\r\n        if (promise) {\r\n            this.animating = true;\r\n            promise.then(function () {\r\n                _this.animating = false;\r\n                if (_this.condition !== _this.showing) {\r\n                    _this._update(_this.condition);\r\n                }\r\n            });\r\n        }\r\n    };\r\n    If.prototype._swap = function (remove, add) {\r\n        switch (this.swapOrder) {\r\n            case 'before':\r\n                return Promise.resolve(add._show()).then(function () { return remove._hide(); });\r\n            case 'with':\r\n                return Promise.all([remove._hide(), add._show()]);\r\n            default:\r\n                var promise = remove._hide();\r\n                return promise ? promise.then(function () { return add._show(); }) : add._show();\r\n        }\r\n    };\r\n    __decorate([\r\n        bindable({ primaryProperty: true })\r\n    ], If.prototype, \"condition\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], If.prototype, \"swapOrder\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], If.prototype, \"cache\", void 0);\r\n    If = __decorate([\r\n        customAttribute('if'),\r\n        templateController,\r\n        inject(BoundViewFactory, ViewSlot)\r\n    ], If);\r\n    return If;\r\n}(IfCore));\n\nvar Else = (function (_super) {\r\n    __extends(Else, _super);\r\n    function Else(viewFactory, viewSlot) {\r\n        var _this = _super.call(this, viewFactory, viewSlot) || this;\r\n        _this._registerInIf();\r\n        return _this;\r\n    }\r\n    Else.prototype.bind = function (bindingContext, overrideContext) {\r\n        _super.prototype.bind.call(this, bindingContext, overrideContext);\r\n        if (this.ifVm.condition) {\r\n            this._hide();\r\n        }\r\n        else {\r\n            this._show();\r\n        }\r\n    };\r\n    Else.prototype._registerInIf = function () {\r\n        var previous = this.viewSlot.anchor.previousSibling;\r\n        while (previous && !previous.au) {\r\n            previous = previous.previousSibling;\r\n        }\r\n        if (!previous || !previous.au.if) {\r\n            throw new Error(\"Can't find matching If for Else custom attribute.\");\r\n        }\r\n        this.ifVm = previous.au.if.viewModel;\r\n        this.ifVm.elseVm = this;\r\n    };\r\n    Else = __decorate([\r\n        customAttribute('else'),\r\n        templateController,\r\n        inject(BoundViewFactory, ViewSlot)\r\n    ], Else);\r\n    return Else;\r\n}(IfCore));\n\nvar With = (function () {\r\n    function With(viewFactory, viewSlot) {\r\n        this.viewFactory = viewFactory;\r\n        this.viewSlot = viewSlot;\r\n        this.parentOverrideContext = null;\r\n        this.view = null;\r\n    }\r\n    With.prototype.bind = function (bindingContext, overrideContext) {\r\n        this.parentOverrideContext = overrideContext;\r\n        this.valueChanged(this.value);\r\n    };\r\n    With.prototype.valueChanged = function (newValue) {\r\n        var overrideContext = createOverrideContext(newValue, this.parentOverrideContext);\r\n        var view = this.view;\r\n        if (!view) {\r\n            view = this.view = this.viewFactory.create();\r\n            view.bind(newValue, overrideContext);\r\n            this.viewSlot.add(view);\r\n        }\r\n        else {\r\n            view.bind(newValue, overrideContext);\r\n        }\r\n    };\r\n    With.prototype.unbind = function () {\r\n        var view = this.view;\r\n        this.parentOverrideContext = null;\r\n        if (view) {\r\n            view.unbind();\r\n        }\r\n    };\r\n    With = __decorate([\r\n        customAttribute('with'),\r\n        templateController,\r\n        inject(BoundViewFactory, ViewSlot)\r\n    ], With);\r\n    return With;\r\n}());\n\nvar oneTime = bindingMode.oneTime;\r\nfunction updateOverrideContexts(views, startIndex) {\r\n    var length = views.length;\r\n    if (startIndex > 0) {\r\n        startIndex = startIndex - 1;\r\n    }\r\n    for (; startIndex < length; ++startIndex) {\r\n        updateOverrideContext(views[startIndex].overrideContext, startIndex, length);\r\n    }\r\n}\r\nfunction createFullOverrideContext(repeat, data, index, length, key) {\r\n    var bindingContext = {};\r\n    var overrideContext = createOverrideContext(bindingContext, repeat.scope.overrideContext);\r\n    if (typeof key !== 'undefined') {\r\n        bindingContext[repeat.key] = key;\r\n        bindingContext[repeat.value] = data;\r\n    }\r\n    else {\r\n        bindingContext[repeat.local] = data;\r\n    }\r\n    updateOverrideContext(overrideContext, index, length);\r\n    return overrideContext;\r\n}\r\nfunction updateOverrideContext(overrideContext, index, length) {\r\n    var first = (index === 0);\r\n    var last = (index === length - 1);\r\n    var even = index % 2 === 0;\r\n    overrideContext.$index = index;\r\n    overrideContext.$first = first;\r\n    overrideContext.$last = last;\r\n    overrideContext.$middle = !(first || last);\r\n    overrideContext.$odd = !even;\r\n    overrideContext.$even = even;\r\n}\r\nfunction getItemsSourceExpression(instruction, attrName) {\r\n    return instruction.behaviorInstructions\r\n        .filter(function (bi) { return bi.originalAttrName === attrName; })[0]\r\n        .attributes\r\n        .items\r\n        .sourceExpression;\r\n}\r\nfunction unwrapExpression(expression) {\r\n    var unwrapped = false;\r\n    while (expression instanceof BindingBehavior) {\r\n        expression = expression.expression;\r\n    }\r\n    while (expression instanceof ValueConverter) {\r\n        expression = expression.expression;\r\n        unwrapped = true;\r\n    }\r\n    return unwrapped ? expression : null;\r\n}\r\nfunction isOneTime(expression) {\r\n    while (expression instanceof BindingBehavior) {\r\n        if (expression.name === 'oneTime') {\r\n            return true;\r\n        }\r\n        expression = expression.expression;\r\n    }\r\n    return false;\r\n}\r\nfunction updateOneTimeBinding(binding) {\r\n    if (binding.call && binding.mode === oneTime) {\r\n        binding.call(sourceContext);\r\n    }\r\n    else if (binding.updateOneTimeBindings) {\r\n        binding.updateOneTimeBindings();\r\n    }\r\n}\r\nfunction indexOf(array, item, matcher, startIndex) {\r\n    if (!matcher) {\r\n        return array.indexOf(item);\r\n    }\r\n    var length = array.length;\r\n    for (var index = startIndex || 0; index < length; index++) {\r\n        if (matcher(array[index], item)) {\r\n            return index;\r\n        }\r\n    }\r\n    return -1;\r\n}\n\nvar ArrayRepeatStrategy = (function () {\r\n    function ArrayRepeatStrategy() {\r\n    }\r\n    ArrayRepeatStrategy.prototype.getCollectionObserver = function (observerLocator, items) {\r\n        return observerLocator.getArrayObserver(items);\r\n    };\r\n    ArrayRepeatStrategy.prototype.instanceChanged = function (repeat, items) {\r\n        var _this = this;\r\n        var $repeat = repeat;\r\n        var itemsLength = items.length;\r\n        if (!items || itemsLength === 0) {\r\n            $repeat.removeAllViews(true, !$repeat.viewsRequireLifecycle);\r\n            return;\r\n        }\r\n        var children = $repeat.views();\r\n        var viewsLength = children.length;\r\n        if (viewsLength === 0) {\r\n            this._standardProcessInstanceChanged($repeat, items);\r\n            return;\r\n        }\r\n        if ($repeat.viewsRequireLifecycle) {\r\n            var childrenSnapshot = children.slice(0);\r\n            var itemNameInBindingContext = $repeat.local;\r\n            var matcher_1 = $repeat.matcher();\r\n            var itemsPreviouslyInViews_1 = [];\r\n            var viewsToRemove = [];\r\n            for (var index = 0; index < viewsLength; index++) {\r\n                var view = childrenSnapshot[index];\r\n                var oldItem = view.bindingContext[itemNameInBindingContext];\r\n                if (indexOf(items, oldItem, matcher_1) === -1) {\r\n                    viewsToRemove.push(view);\r\n                }\r\n                else {\r\n                    itemsPreviouslyInViews_1.push(oldItem);\r\n                }\r\n            }\r\n            var updateViews = void 0;\r\n            var removePromise = void 0;\r\n            if (itemsPreviouslyInViews_1.length > 0) {\r\n                removePromise = $repeat.removeViews(viewsToRemove, true, !$repeat.viewsRequireLifecycle);\r\n                updateViews = function () {\r\n                    for (var index = 0; index < itemsLength; index++) {\r\n                        var item = items[index];\r\n                        var indexOfView = indexOf(itemsPreviouslyInViews_1, item, matcher_1, index);\r\n                        var view = void 0;\r\n                        if (indexOfView === -1) {\r\n                            var overrideContext = createFullOverrideContext($repeat, items[index], index, itemsLength);\r\n                            $repeat.insertView(index, overrideContext.bindingContext, overrideContext);\r\n                            itemsPreviouslyInViews_1.splice(index, 0, undefined);\r\n                        }\r\n                        else if (indexOfView === index) {\r\n                            view = children[indexOfView];\r\n                            itemsPreviouslyInViews_1[indexOfView] = undefined;\r\n                        }\r\n                        else {\r\n                            view = children[indexOfView];\r\n                            $repeat.moveView(indexOfView, index);\r\n                            itemsPreviouslyInViews_1.splice(indexOfView, 1);\r\n                            itemsPreviouslyInViews_1.splice(index, 0, undefined);\r\n                        }\r\n                        if (view) {\r\n                            updateOverrideContext(view.overrideContext, index, itemsLength);\r\n                        }\r\n                    }\r\n                    _this._inPlaceProcessItems($repeat, items);\r\n                };\r\n            }\r\n            else {\r\n                removePromise = $repeat.removeAllViews(true, !$repeat.viewsRequireLifecycle);\r\n                updateViews = function () { return _this._standardProcessInstanceChanged($repeat, items); };\r\n            }\r\n            if (removePromise instanceof Promise) {\r\n                removePromise.then(updateViews);\r\n            }\r\n            else {\r\n                updateViews();\r\n            }\r\n        }\r\n        else {\r\n            this._inPlaceProcessItems($repeat, items);\r\n        }\r\n    };\r\n    ArrayRepeatStrategy.prototype._standardProcessInstanceChanged = function (repeat, items) {\r\n        for (var i = 0, ii = items.length; i < ii; i++) {\r\n            var overrideContext = createFullOverrideContext(repeat, items[i], i, ii);\r\n            repeat.addView(overrideContext.bindingContext, overrideContext);\r\n        }\r\n    };\r\n    ArrayRepeatStrategy.prototype._inPlaceProcessItems = function (repeat, items) {\r\n        var itemsLength = items.length;\r\n        var viewsLength = repeat.viewCount();\r\n        while (viewsLength > itemsLength) {\r\n            viewsLength--;\r\n            repeat.removeView(viewsLength, true, !repeat.viewsRequireLifecycle);\r\n        }\r\n        var local = repeat.local;\r\n        for (var i = 0; i < viewsLength; i++) {\r\n            var view = repeat.view(i);\r\n            var last = i === itemsLength - 1;\r\n            var middle = i !== 0 && !last;\r\n            var bindingContext = view.bindingContext;\r\n            var overrideContext = view.overrideContext;\r\n            if (bindingContext[local] === items[i]\r\n                && overrideContext.$middle === middle\r\n                && overrideContext.$last === last) {\r\n                continue;\r\n            }\r\n            bindingContext[local] = items[i];\r\n            overrideContext.$middle = middle;\r\n            overrideContext.$last = last;\r\n            repeat.updateBindings(view);\r\n        }\r\n        for (var i = viewsLength; i < itemsLength; i++) {\r\n            var overrideContext = createFullOverrideContext(repeat, items[i], i, itemsLength);\r\n            repeat.addView(overrideContext.bindingContext, overrideContext);\r\n        }\r\n    };\r\n    ArrayRepeatStrategy.prototype.instanceMutated = function (repeat, array, splices) {\r\n        var _this = this;\r\n        if (repeat.__queuedSplices) {\r\n            for (var i = 0, ii = splices.length; i < ii; ++i) {\r\n                var _a = splices[i], index = _a.index, removed = _a.removed, addedCount = _a.addedCount;\r\n                mergeSplice(repeat.__queuedSplices, index, removed, addedCount);\r\n            }\r\n            repeat.__array = array.slice(0);\r\n            return;\r\n        }\r\n        var maybePromise = this._runSplices(repeat, array.slice(0), splices);\r\n        if (maybePromise instanceof Promise) {\r\n            var queuedSplices_1 = repeat.__queuedSplices = [];\r\n            var runQueuedSplices_1 = function () {\r\n                if (!queuedSplices_1.length) {\r\n                    repeat.__queuedSplices = undefined;\r\n                    repeat.__array = undefined;\r\n                    return;\r\n                }\r\n                var nextPromise = _this._runSplices(repeat, repeat.__array, queuedSplices_1) || Promise.resolve();\r\n                queuedSplices_1 = repeat.__queuedSplices = [];\r\n                nextPromise.then(runQueuedSplices_1);\r\n            };\r\n            maybePromise.then(runQueuedSplices_1);\r\n        }\r\n    };\r\n    ArrayRepeatStrategy.prototype._runSplices = function (repeat, array, splices) {\r\n        var _this = this;\r\n        var removeDelta = 0;\r\n        var rmPromises = [];\r\n        for (var i = 0, ii = splices.length; i < ii; ++i) {\r\n            var splice = splices[i];\r\n            var removed = splice.removed;\r\n            for (var j = 0, jj = removed.length; j < jj; ++j) {\r\n                var viewOrPromise = repeat.removeView(splice.index + removeDelta + rmPromises.length, true);\r\n                if (viewOrPromise instanceof Promise) {\r\n                    rmPromises.push(viewOrPromise);\r\n                }\r\n            }\r\n            removeDelta -= splice.addedCount;\r\n        }\r\n        if (rmPromises.length > 0) {\r\n            return Promise.all(rmPromises).then(function () {\r\n                var spliceIndexLow = _this._handleAddedSplices(repeat, array, splices);\r\n                updateOverrideContexts(repeat.views(), spliceIndexLow);\r\n            });\r\n        }\r\n        var spliceIndexLow = this._handleAddedSplices(repeat, array, splices);\r\n        updateOverrideContexts(repeat.views(), spliceIndexLow);\r\n        return undefined;\r\n    };\r\n    ArrayRepeatStrategy.prototype._handleAddedSplices = function (repeat, array, splices) {\r\n        var spliceIndex;\r\n        var spliceIndexLow;\r\n        var arrayLength = array.length;\r\n        for (var i = 0, ii = splices.length; i < ii; ++i) {\r\n            var splice = splices[i];\r\n            var addIndex = spliceIndex = splice.index;\r\n            var end = splice.index + splice.addedCount;\r\n            if (typeof spliceIndexLow === 'undefined' || spliceIndexLow === null || spliceIndexLow > splice.index) {\r\n                spliceIndexLow = spliceIndex;\r\n            }\r\n            for (; addIndex < end; ++addIndex) {\r\n                var overrideContext = createFullOverrideContext(repeat, array[addIndex], addIndex, arrayLength);\r\n                repeat.insertView(addIndex, overrideContext.bindingContext, overrideContext);\r\n            }\r\n        }\r\n        return spliceIndexLow;\r\n    };\r\n    return ArrayRepeatStrategy;\r\n}());\n\nvar MapRepeatStrategy = (function () {\r\n    function MapRepeatStrategy() {\r\n    }\r\n    MapRepeatStrategy.prototype.getCollectionObserver = function (observerLocator, items) {\r\n        return observerLocator.getMapObserver(items);\r\n    };\r\n    MapRepeatStrategy.prototype.instanceChanged = function (repeat, items) {\r\n        var _this = this;\r\n        var removePromise = repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);\r\n        if (removePromise instanceof Promise) {\r\n            removePromise.then(function () { return _this._standardProcessItems(repeat, items); });\r\n            return;\r\n        }\r\n        this._standardProcessItems(repeat, items);\r\n    };\r\n    MapRepeatStrategy.prototype._standardProcessItems = function (repeat, items) {\r\n        var index = 0;\r\n        var overrideContext;\r\n        items.forEach(function (value, key) {\r\n            overrideContext = createFullOverrideContext(repeat, value, index, items.size, key);\r\n            repeat.addView(overrideContext.bindingContext, overrideContext);\r\n            ++index;\r\n        });\r\n    };\r\n    MapRepeatStrategy.prototype.instanceMutated = function (repeat, map, records) {\r\n        var key;\r\n        var i;\r\n        var ii;\r\n        var overrideContext;\r\n        var removeIndex;\r\n        var addIndex;\r\n        var record;\r\n        var rmPromises = [];\r\n        var viewOrPromise;\r\n        for (i = 0, ii = records.length; i < ii; ++i) {\r\n            record = records[i];\r\n            key = record.key;\r\n            switch (record.type) {\r\n                case 'update':\r\n                    removeIndex = this._getViewIndexByKey(repeat, key);\r\n                    viewOrPromise = repeat.removeView(removeIndex, true, !repeat.viewsRequireLifecycle);\r\n                    if (viewOrPromise instanceof Promise) {\r\n                        rmPromises.push(viewOrPromise);\r\n                    }\r\n                    overrideContext = createFullOverrideContext(repeat, map.get(key), removeIndex, map.size, key);\r\n                    repeat.insertView(removeIndex, overrideContext.bindingContext, overrideContext);\r\n                    break;\r\n                case 'add':\r\n                    addIndex = repeat.viewCount() <= map.size - 1 ? repeat.viewCount() : map.size - 1;\r\n                    overrideContext = createFullOverrideContext(repeat, map.get(key), addIndex, map.size, key);\r\n                    repeat.insertView(map.size - 1, overrideContext.bindingContext, overrideContext);\r\n                    break;\r\n                case 'delete':\r\n                    if (record.oldValue === undefined) {\r\n                        return;\r\n                    }\r\n                    removeIndex = this._getViewIndexByKey(repeat, key);\r\n                    viewOrPromise = repeat.removeView(removeIndex, true, !repeat.viewsRequireLifecycle);\r\n                    if (viewOrPromise instanceof Promise) {\r\n                        rmPromises.push(viewOrPromise);\r\n                    }\r\n                    break;\r\n                case 'clear':\r\n                    repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);\r\n                    break;\r\n                default:\r\n                    continue;\r\n            }\r\n        }\r\n        if (rmPromises.length > 0) {\r\n            Promise.all(rmPromises).then(function () {\r\n                updateOverrideContexts(repeat.views(), 0);\r\n            });\r\n        }\r\n        else {\r\n            updateOverrideContexts(repeat.views(), 0);\r\n        }\r\n    };\r\n    MapRepeatStrategy.prototype._getViewIndexByKey = function (repeat, key) {\r\n        var i;\r\n        var ii;\r\n        var child;\r\n        for (i = 0, ii = repeat.viewCount(); i < ii; ++i) {\r\n            child = repeat.view(i);\r\n            if (child.bindingContext[repeat.key] === key) {\r\n                return i;\r\n            }\r\n        }\r\n        return undefined;\r\n    };\r\n    return MapRepeatStrategy;\r\n}());\n\nvar NullRepeatStrategy = (function () {\r\n    function NullRepeatStrategy() {\r\n    }\r\n    NullRepeatStrategy.prototype.instanceChanged = function (repeat, items) {\r\n        repeat.removeAllViews(true);\r\n    };\r\n    NullRepeatStrategy.prototype.getCollectionObserver = function (observerLocator, items) {\r\n    };\r\n    return NullRepeatStrategy;\r\n}());\n\nvar NumberRepeatStrategy = (function () {\r\n    function NumberRepeatStrategy() {\r\n    }\r\n    NumberRepeatStrategy.prototype.getCollectionObserver = function () {\r\n        return null;\r\n    };\r\n    NumberRepeatStrategy.prototype.instanceChanged = function (repeat, value) {\r\n        var _this = this;\r\n        var removePromise = repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);\r\n        if (removePromise instanceof Promise) {\r\n            removePromise.then(function () { return _this._standardProcessItems(repeat, value); });\r\n            return;\r\n        }\r\n        this._standardProcessItems(repeat, value);\r\n    };\r\n    NumberRepeatStrategy.prototype._standardProcessItems = function (repeat, value) {\r\n        var childrenLength = repeat.viewCount();\r\n        var i;\r\n        var ii;\r\n        var overrideContext;\r\n        var viewsToRemove;\r\n        value = Math.floor(value);\r\n        viewsToRemove = childrenLength - value;\r\n        if (viewsToRemove > 0) {\r\n            if (viewsToRemove > childrenLength) {\r\n                viewsToRemove = childrenLength;\r\n            }\r\n            for (i = 0, ii = viewsToRemove; i < ii; ++i) {\r\n                repeat.removeView(childrenLength - (i + 1), true, !repeat.viewsRequireLifecycle);\r\n            }\r\n            return;\r\n        }\r\n        for (i = childrenLength, ii = value; i < ii; ++i) {\r\n            overrideContext = createFullOverrideContext(repeat, i, i, ii);\r\n            repeat.addView(overrideContext.bindingContext, overrideContext);\r\n        }\r\n        updateOverrideContexts(repeat.views(), 0);\r\n    };\r\n    return NumberRepeatStrategy;\r\n}());\n\nvar SetRepeatStrategy = (function () {\r\n    function SetRepeatStrategy() {\r\n    }\r\n    SetRepeatStrategy.prototype.getCollectionObserver = function (observerLocator, items) {\r\n        return observerLocator.getSetObserver(items);\r\n    };\r\n    SetRepeatStrategy.prototype.instanceChanged = function (repeat, items) {\r\n        var _this = this;\r\n        var removePromise = repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);\r\n        if (removePromise instanceof Promise) {\r\n            removePromise.then(function () { return _this._standardProcessItems(repeat, items); });\r\n            return;\r\n        }\r\n        this._standardProcessItems(repeat, items);\r\n    };\r\n    SetRepeatStrategy.prototype._standardProcessItems = function (repeat, items) {\r\n        var index = 0;\r\n        var overrideContext;\r\n        items.forEach(function (value) {\r\n            overrideContext = createFullOverrideContext(repeat, value, index, items.size);\r\n            repeat.addView(overrideContext.bindingContext, overrideContext);\r\n            ++index;\r\n        });\r\n    };\r\n    SetRepeatStrategy.prototype.instanceMutated = function (repeat, set, records) {\r\n        var value;\r\n        var i;\r\n        var ii;\r\n        var overrideContext;\r\n        var removeIndex;\r\n        var record;\r\n        var rmPromises = [];\r\n        var viewOrPromise;\r\n        for (i = 0, ii = records.length; i < ii; ++i) {\r\n            record = records[i];\r\n            value = record.value;\r\n            switch (record.type) {\r\n                case 'add':\r\n                    var size = Math.max(set.size - 1, 0);\r\n                    overrideContext = createFullOverrideContext(repeat, value, size, set.size);\r\n                    repeat.insertView(size, overrideContext.bindingContext, overrideContext);\r\n                    break;\r\n                case 'delete':\r\n                    removeIndex = this._getViewIndexByValue(repeat, value);\r\n                    viewOrPromise = repeat.removeView(removeIndex, true, !repeat.viewsRequireLifecycle);\r\n                    if (viewOrPromise instanceof Promise) {\r\n                        rmPromises.push(viewOrPromise);\r\n                    }\r\n                    break;\r\n                case 'clear':\r\n                    repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);\r\n                    break;\r\n                default:\r\n                    continue;\r\n            }\r\n        }\r\n        if (rmPromises.length > 0) {\r\n            Promise.all(rmPromises).then(function () {\r\n                updateOverrideContexts(repeat.views(), 0);\r\n            });\r\n        }\r\n        else {\r\n            updateOverrideContexts(repeat.views(), 0);\r\n        }\r\n    };\r\n    SetRepeatStrategy.prototype._getViewIndexByValue = function (repeat, value) {\r\n        var i;\r\n        var ii;\r\n        var child;\r\n        for (i = 0, ii = repeat.viewCount(); i < ii; ++i) {\r\n            child = repeat.view(i);\r\n            if (child.bindingContext[repeat.local] === value) {\r\n                return i;\r\n            }\r\n        }\r\n        return undefined;\r\n    };\r\n    return SetRepeatStrategy;\r\n}());\n\nvar RepeatStrategyLocator = (function () {\r\n    function RepeatStrategyLocator() {\r\n        this.matchers = [];\r\n        this.strategies = [];\r\n        this.addStrategy(function (items) { return items === null || items === undefined; }, new NullRepeatStrategy());\r\n        this.addStrategy(function (items) { return items instanceof Array; }, new ArrayRepeatStrategy());\r\n        this.addStrategy(function (items) { return items instanceof Map; }, new MapRepeatStrategy());\r\n        this.addStrategy(function (items) { return items instanceof Set; }, new SetRepeatStrategy());\r\n        this.addStrategy(function (items) { return typeof items === 'number'; }, new NumberRepeatStrategy());\r\n    }\r\n    RepeatStrategyLocator.prototype.addStrategy = function (matcher, strategy) {\r\n        this.matchers.push(matcher);\r\n        this.strategies.push(strategy);\r\n    };\r\n    RepeatStrategyLocator.prototype.getStrategy = function (items) {\r\n        var matchers = this.matchers;\r\n        for (var i = 0, ii = matchers.length; i < ii; ++i) {\r\n            if (matchers[i](items)) {\r\n                return this.strategies[i];\r\n            }\r\n        }\r\n        return null;\r\n    };\r\n    return RepeatStrategyLocator;\r\n}());\n\nvar lifecycleOptionalBehaviors = ['focus', 'if', 'else', 'repeat', 'show', 'hide', 'with'];\r\nfunction behaviorRequiresLifecycle(instruction) {\r\n    var t = instruction.type;\r\n    var name = t.elementName !== null ? t.elementName : t.attributeName;\r\n    return lifecycleOptionalBehaviors.indexOf(name) === -1 && (t.handlesAttached || t.handlesBind || t.handlesCreated || t.handlesDetached || t.handlesUnbind)\r\n        || t.viewFactory && viewsRequireLifecycle(t.viewFactory)\r\n        || instruction.viewFactory && viewsRequireLifecycle(instruction.viewFactory);\r\n}\r\nfunction targetRequiresLifecycle(instruction) {\r\n    var behaviors = instruction.behaviorInstructions;\r\n    if (behaviors) {\r\n        var i = behaviors.length;\r\n        while (i--) {\r\n            if (behaviorRequiresLifecycle(behaviors[i])) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n    return instruction.viewFactory && viewsRequireLifecycle(instruction.viewFactory);\r\n}\r\nfunction viewsRequireLifecycle(viewFactory) {\r\n    if ('_viewsRequireLifecycle' in viewFactory) {\r\n        return viewFactory._viewsRequireLifecycle;\r\n    }\r\n    viewFactory._viewsRequireLifecycle = false;\r\n    if (viewFactory.viewFactory) {\r\n        viewFactory._viewsRequireLifecycle = viewsRequireLifecycle(viewFactory.viewFactory);\r\n        return viewFactory._viewsRequireLifecycle;\r\n    }\r\n    if (viewFactory.template.querySelector('.au-animate')) {\r\n        viewFactory._viewsRequireLifecycle = true;\r\n        return true;\r\n    }\r\n    for (var id in viewFactory.instructions) {\r\n        if (targetRequiresLifecycle(viewFactory.instructions[id])) {\r\n            viewFactory._viewsRequireLifecycle = true;\r\n            return true;\r\n        }\r\n    }\r\n    viewFactory._viewsRequireLifecycle = false;\r\n    return false;\r\n}\n\nvar AbstractRepeater = (function () {\r\n    function AbstractRepeater(options) {\r\n        Object.assign(this, {\r\n            local: 'items',\r\n            viewsRequireLifecycle: true\r\n        }, options);\r\n    }\r\n    AbstractRepeater.prototype.viewCount = function () {\r\n        throw new Error('subclass must implement `viewCount`');\r\n    };\r\n    AbstractRepeater.prototype.views = function () {\r\n        throw new Error('subclass must implement `views`');\r\n    };\r\n    AbstractRepeater.prototype.view = function (index) {\r\n        throw new Error('subclass must implement `view`');\r\n    };\r\n    AbstractRepeater.prototype.matcher = function () {\r\n        throw new Error('subclass must implement `matcher`');\r\n    };\r\n    AbstractRepeater.prototype.addView = function (bindingContext, overrideContext) {\r\n        throw new Error('subclass must implement `addView`');\r\n    };\r\n    AbstractRepeater.prototype.insertView = function (index, bindingContext, overrideContext) {\r\n        throw new Error('subclass must implement `insertView`');\r\n    };\r\n    AbstractRepeater.prototype.moveView = function (sourceIndex, targetIndex) {\r\n        throw new Error('subclass must implement `moveView`');\r\n    };\r\n    AbstractRepeater.prototype.removeAllViews = function (returnToCache, skipAnimation) {\r\n        throw new Error('subclass must implement `removeAllViews`');\r\n    };\r\n    AbstractRepeater.prototype.removeViews = function (viewsToRemove, returnToCache, skipAnimation) {\r\n        throw new Error('subclass must implement `removeView`');\r\n    };\r\n    AbstractRepeater.prototype.removeView = function (index, returnToCache, skipAnimation) {\r\n        throw new Error('subclass must implement `removeView`');\r\n    };\r\n    AbstractRepeater.prototype.updateBindings = function (view) {\r\n        throw new Error('subclass must implement `updateBindings`');\r\n    };\r\n    return AbstractRepeater;\r\n}());\n\nvar Repeat = (function (_super) {\r\n    __extends(Repeat, _super);\r\n    function Repeat(viewFactory, instruction, viewSlot, viewResources, observerLocator, strategyLocator) {\r\n        var _this = _super.call(this, {\r\n            local: 'item',\r\n            viewsRequireLifecycle: viewsRequireLifecycle(viewFactory)\r\n        }) || this;\r\n        _this.viewFactory = viewFactory;\r\n        _this.instruction = instruction;\r\n        _this.viewSlot = viewSlot;\r\n        _this.lookupFunctions = viewResources.lookupFunctions;\r\n        _this.observerLocator = observerLocator;\r\n        _this.key = 'key';\r\n        _this.value = 'value';\r\n        _this.strategyLocator = strategyLocator;\r\n        _this.ignoreMutation = false;\r\n        _this.sourceExpression = getItemsSourceExpression(_this.instruction, 'repeat.for');\r\n        _this.isOneTime = isOneTime(_this.sourceExpression);\r\n        _this.viewsRequireLifecycle = viewsRequireLifecycle(viewFactory);\r\n        return _this;\r\n    }\r\n    Repeat_1 = Repeat;\r\n    Repeat.prototype.call = function (context, changes) {\r\n        this[context](this.items, changes);\r\n    };\r\n    Repeat.prototype.bind = function (bindingContext, overrideContext) {\r\n        this.scope = { bindingContext: bindingContext, overrideContext: overrideContext };\r\n        this.matcherBinding = this._captureAndRemoveMatcherBinding();\r\n        this.itemsChanged();\r\n    };\r\n    Repeat.prototype.unbind = function () {\r\n        this.scope = null;\r\n        this.items = null;\r\n        this.matcherBinding = null;\r\n        this.viewSlot.removeAll(true, true);\r\n        this._unsubscribeCollection();\r\n    };\r\n    Repeat.prototype._unsubscribeCollection = function () {\r\n        if (this.collectionObserver) {\r\n            this.collectionObserver.unsubscribe(this.callContext, this);\r\n            this.collectionObserver = null;\r\n            this.callContext = null;\r\n        }\r\n    };\r\n    Repeat.prototype.itemsChanged = function () {\r\n        var _this = this;\r\n        this._unsubscribeCollection();\r\n        if (!this.scope) {\r\n            return;\r\n        }\r\n        var items = this.items;\r\n        this.strategy = this.strategyLocator.getStrategy(items);\r\n        if (!this.strategy) {\r\n            throw new Error(\"Value for '\" + this.sourceExpression + \"' is non-repeatable\");\r\n        }\r\n        if (!this.isOneTime && !this._observeInnerCollection()) {\r\n            this._observeCollection();\r\n        }\r\n        this.ignoreMutation = true;\r\n        this.strategy.instanceChanged(this, items);\r\n        this.observerLocator.taskQueue.queueMicroTask(function () {\r\n            _this.ignoreMutation = false;\r\n        });\r\n    };\r\n    Repeat.prototype._getInnerCollection = function () {\r\n        var expression = unwrapExpression(this.sourceExpression);\r\n        if (!expression) {\r\n            return null;\r\n        }\r\n        return expression.evaluate(this.scope, null);\r\n    };\r\n    Repeat.prototype.handleCollectionMutated = function (collection, changes) {\r\n        if (!this.collectionObserver) {\r\n            return;\r\n        }\r\n        if (this.ignoreMutation) {\r\n            return;\r\n        }\r\n        this.strategy.instanceMutated(this, collection, changes);\r\n    };\r\n    Repeat.prototype.handleInnerCollectionMutated = function (collection, changes) {\r\n        var _this = this;\r\n        if (!this.collectionObserver) {\r\n            return;\r\n        }\r\n        if (this.ignoreMutation) {\r\n            return;\r\n        }\r\n        this.ignoreMutation = true;\r\n        var newItems = this.sourceExpression.evaluate(this.scope, this.lookupFunctions);\r\n        this.observerLocator.taskQueue.queueMicroTask(function () { return _this.ignoreMutation = false; });\r\n        if (newItems === this.items) {\r\n            this.itemsChanged();\r\n        }\r\n        else {\r\n            this.items = newItems;\r\n        }\r\n    };\r\n    Repeat.prototype._observeInnerCollection = function () {\r\n        var items = this._getInnerCollection();\r\n        var strategy = this.strategyLocator.getStrategy(items);\r\n        if (!strategy) {\r\n            return false;\r\n        }\r\n        this.collectionObserver = strategy.getCollectionObserver(this.observerLocator, items);\r\n        if (!this.collectionObserver) {\r\n            return false;\r\n        }\r\n        this.callContext = 'handleInnerCollectionMutated';\r\n        this.collectionObserver.subscribe(this.callContext, this);\r\n        return true;\r\n    };\r\n    Repeat.prototype._observeCollection = function () {\r\n        var items = this.items;\r\n        this.collectionObserver = this.strategy.getCollectionObserver(this.observerLocator, items);\r\n        if (this.collectionObserver) {\r\n            this.callContext = 'handleCollectionMutated';\r\n            this.collectionObserver.subscribe(this.callContext, this);\r\n        }\r\n    };\r\n    Repeat.prototype._captureAndRemoveMatcherBinding = function () {\r\n        var viewFactory = this.viewFactory.viewFactory;\r\n        if (viewFactory) {\r\n            var template = viewFactory.template;\r\n            var instructions = viewFactory.instructions;\r\n            if (Repeat_1.useInnerMatcher) {\r\n                return extractMatcherBindingExpression(instructions);\r\n            }\r\n            if (template.children.length > 1) {\r\n                return undefined;\r\n            }\r\n            var repeatedElement = template.firstElementChild;\r\n            if (!repeatedElement.hasAttribute('au-target-id')) {\r\n                return undefined;\r\n            }\r\n            var repeatedElementTargetId = repeatedElement.getAttribute('au-target-id');\r\n            return extractMatcherBindingExpression(instructions, repeatedElementTargetId);\r\n        }\r\n        return undefined;\r\n    };\r\n    Repeat.prototype.viewCount = function () { return this.viewSlot.children.length; };\r\n    Repeat.prototype.views = function () { return this.viewSlot.children; };\r\n    Repeat.prototype.view = function (index) { return this.viewSlot.children[index]; };\r\n    Repeat.prototype.matcher = function () {\r\n        var matcherBinding = this.matcherBinding;\r\n        return matcherBinding\r\n            ? matcherBinding.sourceExpression.evaluate(this.scope, matcherBinding.lookupFunctions)\r\n            : null;\r\n    };\r\n    Repeat.prototype.addView = function (bindingContext, overrideContext) {\r\n        var view = this.viewFactory.create();\r\n        view.bind(bindingContext, overrideContext);\r\n        this.viewSlot.add(view);\r\n    };\r\n    Repeat.prototype.insertView = function (index, bindingContext, overrideContext) {\r\n        var view = this.viewFactory.create();\r\n        view.bind(bindingContext, overrideContext);\r\n        this.viewSlot.insert(index, view);\r\n    };\r\n    Repeat.prototype.moveView = function (sourceIndex, targetIndex) {\r\n        this.viewSlot.move(sourceIndex, targetIndex);\r\n    };\r\n    Repeat.prototype.removeAllViews = function (returnToCache, skipAnimation) {\r\n        return this.viewSlot.removeAll(returnToCache, skipAnimation);\r\n    };\r\n    Repeat.prototype.removeViews = function (viewsToRemove, returnToCache, skipAnimation) {\r\n        return this.viewSlot.removeMany(viewsToRemove, returnToCache, skipAnimation);\r\n    };\r\n    Repeat.prototype.removeView = function (index, returnToCache, skipAnimation) {\r\n        return this.viewSlot.removeAt(index, returnToCache, skipAnimation);\r\n    };\r\n    Repeat.prototype.updateBindings = function (view) {\r\n        var $view = view;\r\n        var j = $view.bindings.length;\r\n        while (j--) {\r\n            updateOneTimeBinding($view.bindings[j]);\r\n        }\r\n        j = $view.controllers.length;\r\n        while (j--) {\r\n            var k = $view.controllers[j].boundProperties.length;\r\n            while (k--) {\r\n                var binding = $view.controllers[j].boundProperties[k].binding;\r\n                updateOneTimeBinding(binding);\r\n            }\r\n        }\r\n    };\r\n    var Repeat_1;\r\n    Repeat.useInnerMatcher = true;\r\n    __decorate([\r\n        bindable\r\n    ], Repeat.prototype, \"items\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], Repeat.prototype, \"local\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], Repeat.prototype, \"key\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], Repeat.prototype, \"value\", void 0);\r\n    Repeat = Repeat_1 = __decorate([\r\n        customAttribute('repeat'),\r\n        templateController,\r\n        inject(BoundViewFactory, TargetInstruction, ViewSlot, ViewResources, ObserverLocator, RepeatStrategyLocator)\r\n    ], Repeat);\r\n    return Repeat;\r\n}(AbstractRepeater));\r\nvar extractMatcherBindingExpression = function (instructions, targetedElementId) {\r\n    var instructionIds = Object.keys(instructions);\r\n    for (var i = 0; i < instructionIds.length; i++) {\r\n        var instructionId = instructionIds[i];\r\n        if (targetedElementId !== undefined && instructionId !== targetedElementId) {\r\n            continue;\r\n        }\r\n        var expressions = instructions[instructionId].expressions;\r\n        if (expressions) {\r\n            for (var ii = 0; ii < expressions.length; ii++) {\r\n                if (expressions[ii].targetProperty === 'matcher') {\r\n                    var matcherBindingExpression = expressions[ii];\r\n                    expressions.splice(ii, 1);\r\n                    return matcherBindingExpression;\r\n                }\r\n            }\r\n        }\r\n    }\r\n};\n\nvar aureliaHideClassName = 'aurelia-hide';\r\nvar aureliaHideClass = \".\" + aureliaHideClassName + \" { display:none !important; }\";\r\nfunction injectAureliaHideStyleAtHead() {\r\n    DOM.injectStyles(aureliaHideClass);\r\n}\r\nfunction injectAureliaHideStyleAtBoundary(domBoundary) {\r\n    if (FEATURE.shadowDOM && domBoundary && !domBoundary.hasAureliaHideStyle) {\r\n        domBoundary.hasAureliaHideStyle = true;\r\n        DOM.injectStyles(aureliaHideClass, domBoundary);\r\n    }\r\n}\n\nvar Show = (function () {\r\n    function Show(element, animator, domBoundary) {\r\n        this.element = element;\r\n        this.animator = animator;\r\n        this.domBoundary = domBoundary;\r\n    }\r\n    Show.inject = function () {\r\n        return [DOM.Element, Animator, Optional.of(DOM.boundary, true)];\r\n    };\r\n    Show.prototype.created = function () {\r\n        injectAureliaHideStyleAtBoundary(this.domBoundary);\r\n    };\r\n    Show.prototype.valueChanged = function (newValue) {\r\n        var element = this.element;\r\n        var animator = this.animator;\r\n        if (newValue) {\r\n            animator.removeClass(element, aureliaHideClassName);\r\n        }\r\n        else {\r\n            animator.addClass(element, aureliaHideClassName);\r\n        }\r\n    };\r\n    Show.prototype.bind = function (bindingContext) {\r\n        this.valueChanged(this.value);\r\n    };\r\n    Show = __decorate([\r\n        customAttribute('show')\r\n    ], Show);\r\n    return Show;\r\n}());\n\nvar Hide = (function () {\r\n    function Hide(element, animator, domBoundary) {\r\n        this.element = element;\r\n        this.animator = animator;\r\n        this.domBoundary = domBoundary;\r\n    }\r\n    Hide.inject = function () {\r\n        return [DOM.Element, Animator, Optional.of(DOM.boundary, true)];\r\n    };\r\n    Hide.prototype.created = function () {\r\n        injectAureliaHideStyleAtBoundary(this.domBoundary);\r\n    };\r\n    Hide.prototype.valueChanged = function (newValue) {\r\n        if (newValue) {\r\n            this.animator.addClass(this.element, aureliaHideClassName);\r\n        }\r\n        else {\r\n            this.animator.removeClass(this.element, aureliaHideClassName);\r\n        }\r\n    };\r\n    Hide.prototype.bind = function (bindingContext) {\r\n        this.valueChanged(this.value);\r\n    };\r\n    Hide.prototype.value = function (value) {\r\n        throw new Error('Method not implemented.');\r\n    };\r\n    Hide = __decorate([\r\n        customAttribute('hide')\r\n    ], Hide);\r\n    return Hide;\r\n}());\n\nvar SCRIPT_REGEX = /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi;\r\nvar needsToWarn = true;\r\nvar HTMLSanitizer = (function () {\r\n    function HTMLSanitizer() {\r\n    }\r\n    HTMLSanitizer.prototype.sanitize = function (input) {\r\n        if (needsToWarn) {\r\n            needsToWarn = false;\r\n            getLogger('html-sanitizer')\r\n                .warn(\"CAUTION: The default HTMLSanitizer does NOT provide security against a wide variety of sophisticated XSS attacks,\\nand should not be relied on for sanitizing input from unknown sources.\\nPlease see https://aurelia.io/docs/binding/basics#element-content for instructions on how to use a secure solution like DOMPurify or sanitize-html.\");\r\n        }\r\n        return input.replace(SCRIPT_REGEX, '');\r\n    };\r\n    return HTMLSanitizer;\r\n}());\n\nvar SanitizeHTMLValueConverter = (function () {\r\n    function SanitizeHTMLValueConverter(sanitizer) {\r\n        this.sanitizer = sanitizer;\r\n    }\r\n    SanitizeHTMLValueConverter.prototype.toView = function (untrustedMarkup) {\r\n        if (untrustedMarkup === null || untrustedMarkup === undefined) {\r\n            return null;\r\n        }\r\n        return this.sanitizer.sanitize(untrustedMarkup);\r\n    };\r\n    SanitizeHTMLValueConverter = __decorate([\r\n        valueConverter('sanitizeHTML'),\r\n        inject(HTMLSanitizer)\r\n    ], SanitizeHTMLValueConverter);\r\n    return SanitizeHTMLValueConverter;\r\n}());\n\nvar Replaceable = (function () {\r\n    function Replaceable(viewFactory, viewSlot) {\r\n        this.viewFactory = viewFactory;\r\n        this.viewSlot = viewSlot;\r\n        this.view = null;\r\n    }\r\n    Replaceable.prototype.bind = function (bindingContext, overrideContext) {\r\n        if (this.view === null) {\r\n            this.view = this.viewFactory.create();\r\n            this.viewSlot.add(this.view);\r\n        }\r\n        this.view.bind(bindingContext, overrideContext);\r\n    };\r\n    Replaceable.prototype.unbind = function () {\r\n        this.view.unbind();\r\n    };\r\n    Replaceable = __decorate([\r\n        customAttribute('replaceable'),\r\n        templateController,\r\n        inject(BoundViewFactory, ViewSlot)\r\n    ], Replaceable);\r\n    return Replaceable;\r\n}());\n\nvar Focus = (function () {\r\n    function Focus(element, taskQueue) {\r\n        this.element = element;\r\n        this.taskQueue = taskQueue;\r\n        this.isAttached = false;\r\n        this.needsApply = false;\r\n    }\r\n    Focus.inject = function () {\r\n        return [DOM.Element, TaskQueue];\r\n    };\r\n    Focus.prototype.valueChanged = function (newValue) {\r\n        if (this.isAttached) {\r\n            this._apply();\r\n        }\r\n        else {\r\n            this.needsApply = true;\r\n        }\r\n    };\r\n    Focus.prototype._apply = function () {\r\n        var _this = this;\r\n        if (this.value) {\r\n            this.taskQueue.queueMicroTask(function () {\r\n                if (_this.value) {\r\n                    _this.element.focus();\r\n                }\r\n            });\r\n        }\r\n        else {\r\n            this.element.blur();\r\n        }\r\n    };\r\n    Focus.prototype.attached = function () {\r\n        this.isAttached = true;\r\n        if (this.needsApply) {\r\n            this.needsApply = false;\r\n            this._apply();\r\n        }\r\n        this.element.addEventListener('focus', this);\r\n        this.element.addEventListener('blur', this);\r\n    };\r\n    Focus.prototype.detached = function () {\r\n        this.isAttached = false;\r\n        this.element.removeEventListener('focus', this);\r\n        this.element.removeEventListener('blur', this);\r\n    };\r\n    Focus.prototype.handleEvent = function (e) {\r\n        if (e.type === 'focus') {\r\n            this.value = true;\r\n        }\r\n        else if (DOM.activeElement !== this.element) {\r\n            this.value = false;\r\n        }\r\n    };\r\n    Focus = __decorate([\r\n        customAttribute('focus', bindingMode.twoWay)\r\n    ], Focus);\r\n    return Focus;\r\n}());\n\nvar cssUrlMatcher = /url\\((?!['\"]data)([^)]+)\\)/gi;\r\nfunction fixupCSSUrls(address, css) {\r\n    if (typeof css !== 'string') {\r\n        throw new Error(\"Failed loading required CSS file: \" + address);\r\n    }\r\n    return css.replace(cssUrlMatcher, function (match, p1) {\r\n        var quote = p1.charAt(0);\r\n        if (quote === '\\'' || quote === '\"') {\r\n            p1 = p1.substr(1, p1.length - 2);\r\n        }\r\n        return 'url(\\'' + relativeToFile(p1, address) + '\\')';\r\n    });\r\n}\r\nvar CSSResource = (function () {\r\n    function CSSResource(address) {\r\n        this.address = address;\r\n        this._scoped = null;\r\n        this._global = false;\r\n        this._alreadyGloballyInjected = false;\r\n    }\r\n    CSSResource.prototype.initialize = function (container, Target) {\r\n        this._scoped = new Target(this);\r\n    };\r\n    CSSResource.prototype.register = function (registry, name) {\r\n        if (name === 'scoped') {\r\n            registry.registerViewEngineHooks(this._scoped);\r\n        }\r\n        else {\r\n            this._global = true;\r\n        }\r\n    };\r\n    CSSResource.prototype.load = function (container) {\r\n        var _this = this;\r\n        return container.get(Loader)\r\n            .loadText(this.address)\r\n            .catch(function (err) { return null; })\r\n            .then(function (text) {\r\n            text = fixupCSSUrls(_this.address, text);\r\n            _this._scoped.css = text;\r\n            if (_this._global) {\r\n                _this._alreadyGloballyInjected = true;\r\n                DOM.injectStyles(text);\r\n            }\r\n        });\r\n    };\r\n    return CSSResource;\r\n}());\r\nvar CSSViewEngineHooks = (function () {\r\n    function CSSViewEngineHooks(owner) {\r\n        this.owner = owner;\r\n        this.css = null;\r\n    }\r\n    CSSViewEngineHooks.prototype.beforeCompile = function (content, resources, instruction) {\r\n        if (instruction.targetShadowDOM) {\r\n            DOM.injectStyles(this.css, content, true);\r\n        }\r\n        else if (FEATURE.scopedCSS) {\r\n            var styleNode = DOM.injectStyles(this.css, content, true);\r\n            styleNode.setAttribute('scoped', 'scoped');\r\n        }\r\n        else if (this._global && !this.owner._alreadyGloballyInjected) {\r\n            DOM.injectStyles(this.css);\r\n            this.owner._alreadyGloballyInjected = true;\r\n        }\r\n    };\r\n    return CSSViewEngineHooks;\r\n}());\r\nfunction _createCSSResource(address) {\r\n    var ViewCSS = (function (_super) {\r\n        __extends(ViewCSS, _super);\r\n        function ViewCSS() {\r\n            return _super !== null && _super.apply(this, arguments) || this;\r\n        }\r\n        ViewCSS = __decorate([\r\n            resource(new CSSResource(address))\r\n        ], ViewCSS);\r\n        return ViewCSS;\r\n    }(CSSViewEngineHooks));\r\n    return ViewCSS;\r\n}\n\nvar AttrBindingBehavior = (function () {\r\n    function AttrBindingBehavior() {\r\n    }\r\n    AttrBindingBehavior.prototype.bind = function (binding, source) {\r\n        binding.targetObserver = new DataAttributeObserver(binding.target, binding.targetProperty);\r\n    };\r\n    AttrBindingBehavior.prototype.unbind = function (binding, source) {\r\n    };\r\n    AttrBindingBehavior = __decorate([\r\n        bindingBehavior('attr')\r\n    ], AttrBindingBehavior);\r\n    return AttrBindingBehavior;\r\n}());\n\nvar modeBindingBehavior = {\r\n    bind: function (binding, source, lookupFunctions) {\r\n        binding.originalMode = binding.mode;\r\n        binding.mode = this.mode;\r\n    },\r\n    unbind: function (binding, source) {\r\n        binding.mode = binding.originalMode;\r\n        binding.originalMode = null;\r\n    }\r\n};\r\nvar OneTimeBindingBehavior = (function () {\r\n    function OneTimeBindingBehavior() {\r\n        this.mode = bindingMode.oneTime;\r\n    }\r\n    OneTimeBindingBehavior = __decorate([\r\n        mixin(modeBindingBehavior),\r\n        bindingBehavior('oneTime')\r\n    ], OneTimeBindingBehavior);\r\n    return OneTimeBindingBehavior;\r\n}());\r\nvar OneWayBindingBehavior = (function () {\r\n    function OneWayBindingBehavior() {\r\n        this.mode = bindingMode.toView;\r\n    }\r\n    OneWayBindingBehavior = __decorate([\r\n        mixin(modeBindingBehavior),\r\n        bindingBehavior('oneWay')\r\n    ], OneWayBindingBehavior);\r\n    return OneWayBindingBehavior;\r\n}());\r\nvar ToViewBindingBehavior = (function () {\r\n    function ToViewBindingBehavior() {\r\n        this.mode = bindingMode.toView;\r\n    }\r\n    ToViewBindingBehavior = __decorate([\r\n        mixin(modeBindingBehavior),\r\n        bindingBehavior('toView')\r\n    ], ToViewBindingBehavior);\r\n    return ToViewBindingBehavior;\r\n}());\r\nvar FromViewBindingBehavior = (function () {\r\n    function FromViewBindingBehavior() {\r\n        this.mode = bindingMode.fromView;\r\n    }\r\n    FromViewBindingBehavior = __decorate([\r\n        mixin(modeBindingBehavior),\r\n        bindingBehavior('fromView')\r\n    ], FromViewBindingBehavior);\r\n    return FromViewBindingBehavior;\r\n}());\r\nvar TwoWayBindingBehavior = (function () {\r\n    function TwoWayBindingBehavior() {\r\n        this.mode = bindingMode.twoWay;\r\n    }\r\n    TwoWayBindingBehavior = __decorate([\r\n        mixin(modeBindingBehavior),\r\n        bindingBehavior('twoWay')\r\n    ], TwoWayBindingBehavior);\r\n    return TwoWayBindingBehavior;\r\n}());\n\nfunction throttle(newValue) {\r\n    var _this = this;\r\n    var state = this.throttleState;\r\n    var elapsed = +new Date() - state.last;\r\n    if (elapsed >= state.delay) {\r\n        clearTimeout(state.timeoutId);\r\n        state.timeoutId = null;\r\n        state.last = +new Date();\r\n        this.throttledMethod(newValue);\r\n        return;\r\n    }\r\n    state.newValue = newValue;\r\n    if (state.timeoutId === null) {\r\n        state.timeoutId = setTimeout(function () {\r\n            state.timeoutId = null;\r\n            state.last = +new Date();\r\n            _this.throttledMethod(state.newValue);\r\n        }, state.delay - elapsed);\r\n    }\r\n}\r\nvar ThrottleBindingBehavior = (function () {\r\n    function ThrottleBindingBehavior() {\r\n    }\r\n    ThrottleBindingBehavior.prototype.bind = function (binding, source, delay) {\r\n        if (delay === void 0) { delay = 200; }\r\n        var methodToThrottle = 'updateTarget';\r\n        if (binding.callSource) {\r\n            methodToThrottle = 'callSource';\r\n        }\r\n        else if (binding.updateSource && binding.mode === bindingMode.twoWay) {\r\n            methodToThrottle = 'updateSource';\r\n        }\r\n        binding.throttledMethod = binding[methodToThrottle];\r\n        binding.throttledMethod.originalName = methodToThrottle;\r\n        binding[methodToThrottle] = throttle;\r\n        binding.throttleState = {\r\n            delay: delay,\r\n            last: 0,\r\n            timeoutId: null\r\n        };\r\n    };\r\n    ThrottleBindingBehavior.prototype.unbind = function (binding, source) {\r\n        var methodToRestore = binding.throttledMethod.originalName;\r\n        binding[methodToRestore] = binding.throttledMethod;\r\n        binding.throttledMethod = null;\r\n        clearTimeout(binding.throttleState.timeoutId);\r\n        binding.throttleState = null;\r\n    };\r\n    ThrottleBindingBehavior = __decorate([\r\n        bindingBehavior('throttle')\r\n    ], ThrottleBindingBehavior);\r\n    return ThrottleBindingBehavior;\r\n}());\n\nvar unset = {};\r\nfunction debounceCallSource(event) {\r\n    var _this = this;\r\n    var state = this.debounceState;\r\n    clearTimeout(state.timeoutId);\r\n    state.timeoutId = setTimeout(function () { return _this.debouncedMethod(event); }, state.delay);\r\n}\r\nfunction debounceCall(context, newValue, oldValue) {\r\n    var _this = this;\r\n    var state = this.debounceState;\r\n    clearTimeout(state.timeoutId);\r\n    if (context !== state.callContextToDebounce) {\r\n        state.oldValue = unset;\r\n        this.debouncedMethod(context, newValue, oldValue);\r\n        return;\r\n    }\r\n    if (state.oldValue === unset) {\r\n        state.oldValue = oldValue;\r\n    }\r\n    state.timeoutId = setTimeout(function () {\r\n        var _oldValue = state.oldValue;\r\n        state.oldValue = unset;\r\n        _this.debouncedMethod(context, newValue, _oldValue);\r\n    }, state.delay);\r\n}\r\nvar DebounceBindingBehavior = (function () {\r\n    function DebounceBindingBehavior() {\r\n    }\r\n    DebounceBindingBehavior.prototype.bind = function (binding, source, delay) {\r\n        if (delay === void 0) { delay = 200; }\r\n        var isCallSource = binding.callSource !== undefined;\r\n        var methodToDebounce = isCallSource ? 'callSource' : 'call';\r\n        var debouncer = isCallSource ? debounceCallSource : debounceCall;\r\n        var mode = binding.mode;\r\n        var callContextToDebounce = mode === bindingMode.twoWay || mode === bindingMode.fromView ? targetContext : sourceContext;\r\n        binding.debouncedMethod = binding[methodToDebounce];\r\n        binding.debouncedMethod.originalName = methodToDebounce;\r\n        binding[methodToDebounce] = debouncer;\r\n        binding.debounceState = {\r\n            callContextToDebounce: callContextToDebounce,\r\n            delay: delay,\r\n            timeoutId: 0,\r\n            oldValue: unset\r\n        };\r\n    };\r\n    DebounceBindingBehavior.prototype.unbind = function (binding, source) {\r\n        var methodToRestore = binding.debouncedMethod.originalName;\r\n        binding[methodToRestore] = binding.debouncedMethod;\r\n        binding.debouncedMethod = null;\r\n        clearTimeout(binding.debounceState.timeoutId);\r\n        binding.debounceState = null;\r\n    };\r\n    DebounceBindingBehavior = __decorate([\r\n        bindingBehavior('debounce')\r\n    ], DebounceBindingBehavior);\r\n    return DebounceBindingBehavior;\r\n}());\n\nfunction findOriginalEventTarget(event) {\r\n    return (event.path && event.path[0]) || (event.deepPath && event.deepPath[0]) || event.target;\r\n}\r\nfunction handleSelfEvent(event) {\r\n    var target = findOriginalEventTarget(event);\r\n    if (this.target !== target) {\r\n        return;\r\n    }\r\n    this.selfEventCallSource(event);\r\n}\r\nvar SelfBindingBehavior = (function () {\r\n    function SelfBindingBehavior() {\r\n    }\r\n    SelfBindingBehavior.prototype.bind = function (binding, source) {\r\n        if (!binding.callSource || !binding.targetEvent) {\r\n            throw new Error('Self binding behavior only supports event.');\r\n        }\r\n        binding.selfEventCallSource = binding.callSource;\r\n        binding.callSource = handleSelfEvent;\r\n    };\r\n    SelfBindingBehavior.prototype.unbind = function (binding, source) {\r\n        binding.callSource = binding.selfEventCallSource;\r\n        binding.selfEventCallSource = null;\r\n    };\r\n    SelfBindingBehavior = __decorate([\r\n        bindingBehavior('self')\r\n    ], SelfBindingBehavior);\r\n    return SelfBindingBehavior;\r\n}());\n\nvar BindingSignaler = (function () {\r\n    function BindingSignaler() {\r\n        this.signals = {};\r\n    }\r\n    BindingSignaler.prototype.signal = function (name) {\r\n        var bindings = this.signals[name];\r\n        if (!bindings) {\r\n            return;\r\n        }\r\n        var i = bindings.length;\r\n        while (i--) {\r\n            bindings[i].call(sourceContext);\r\n        }\r\n    };\r\n    return BindingSignaler;\r\n}());\n\nvar SignalBindingBehavior = (function () {\r\n    function SignalBindingBehavior(bindingSignaler) {\r\n        this.signals = bindingSignaler.signals;\r\n    }\r\n    SignalBindingBehavior.inject = function () { return [BindingSignaler]; };\r\n    SignalBindingBehavior.prototype.bind = function (binding, source) {\r\n        var names = [];\r\n        for (var _i = 2; _i < arguments.length; _i++) {\r\n            names[_i - 2] = arguments[_i];\r\n        }\r\n        if (!binding.updateTarget) {\r\n            throw new Error('Only property bindings and string interpolation bindings can be signaled.  Trigger, delegate and call bindings cannot be signaled.');\r\n        }\r\n        var signals = this.signals;\r\n        if (names.length === 1) {\r\n            var name_1 = names[0];\r\n            var bindings = signals[name_1] || (signals[name_1] = []);\r\n            bindings.push(binding);\r\n            binding.signalName = name_1;\r\n        }\r\n        else if (names.length > 1) {\r\n            var i = names.length;\r\n            while (i--) {\r\n                var name_2 = names[i];\r\n                var bindings = signals[name_2] || (signals[name_2] = []);\r\n                bindings.push(binding);\r\n            }\r\n            binding.signalName = names;\r\n        }\r\n        else {\r\n            throw new Error('Signal name is required.');\r\n        }\r\n    };\r\n    SignalBindingBehavior.prototype.unbind = function (binding, source) {\r\n        var signals = this.signals;\r\n        var name = binding.signalName;\r\n        binding.signalName = null;\r\n        if (Array.isArray(name)) {\r\n            var names = name;\r\n            var i = names.length;\r\n            while (i--) {\r\n                var n = names[i];\r\n                var bindings = signals[n];\r\n                bindings.splice(bindings.indexOf(binding), 1);\r\n            }\r\n        }\r\n        else {\r\n            var bindings = signals[name];\r\n            bindings.splice(bindings.indexOf(binding), 1);\r\n        }\r\n    };\r\n    SignalBindingBehavior = __decorate([\r\n        bindingBehavior('signal')\r\n    ], SignalBindingBehavior);\r\n    return SignalBindingBehavior;\r\n}());\n\nvar eventNamesRequired = 'The updateTrigger binding behavior requires at least one event name argument: eg <input value.bind=\"firstName & updateTrigger:\\'blur\\'\">';\r\nvar notApplicableMessage = 'The updateTrigger binding behavior can only be applied to two-way/ from-view bindings on input/select elements.';\r\nvar UpdateTriggerBindingBehavior = (function () {\r\n    function UpdateTriggerBindingBehavior() {\r\n    }\r\n    UpdateTriggerBindingBehavior.prototype.bind = function (binding, source) {\r\n        var events = [];\r\n        for (var _i = 2; _i < arguments.length; _i++) {\r\n            events[_i - 2] = arguments[_i];\r\n        }\r\n        if (events.length === 0) {\r\n            throw new Error(eventNamesRequired);\r\n        }\r\n        if (binding.mode !== bindingMode.twoWay && binding.mode !== bindingMode.fromView) {\r\n            throw new Error(notApplicableMessage);\r\n        }\r\n        var targetObserver = binding.observerLocator.getObserver(binding.target, binding.targetProperty);\r\n        if (!targetObserver.handler) {\r\n            throw new Error(notApplicableMessage);\r\n        }\r\n        binding.targetObserver = targetObserver;\r\n        targetObserver.originalHandler = binding.targetObserver.handler;\r\n        var handler = new EventSubscriber(events);\r\n        targetObserver.handler = handler;\r\n    };\r\n    UpdateTriggerBindingBehavior.prototype.unbind = function (binding, source) {\r\n        var targetObserver = binding.targetObserver;\r\n        targetObserver.handler.dispose();\r\n        targetObserver.handler = targetObserver.originalHandler;\r\n        targetObserver.originalHandler = null;\r\n    };\r\n    UpdateTriggerBindingBehavior = __decorate([\r\n        bindingBehavior('updateTrigger')\r\n    ], UpdateTriggerBindingBehavior);\r\n    return UpdateTriggerBindingBehavior;\r\n}());\n\nfunction _createDynamicElement(_a) {\r\n    var name = _a.name, viewUrl = _a.viewUrl, bindableNames = _a.bindableNames, useShadowDOMmode = _a.useShadowDOMmode;\r\n    var DynamicElement = (function () {\r\n        function DynamicElement() {\r\n        }\r\n        DynamicElement.prototype.bind = function (bindingContext) {\r\n            this.$parent = bindingContext;\r\n        };\r\n        DynamicElement = __decorate([\r\n            customElement(name),\r\n            useView(viewUrl)\r\n        ], DynamicElement);\r\n        return DynamicElement;\r\n    }());\r\n    for (var i = 0, ii = bindableNames.length; i < ii; ++i) {\r\n        bindable(bindableNames[i])(DynamicElement);\r\n    }\r\n    switch (useShadowDOMmode) {\r\n        case 'open':\r\n            useShadowDOM({ mode: 'open' })(DynamicElement);\r\n            break;\r\n        case 'closed':\r\n            useShadowDOM({ mode: 'closed' })(DynamicElement);\r\n            break;\r\n        case '':\r\n            useShadowDOM(DynamicElement);\r\n            break;\r\n        case null:\r\n            break;\r\n        default:\r\n            getLogger('aurelia-html-only-element')\r\n                .warn(\"Expected 'use-shadow-dom' value to be \\\"close\\\", \\\"open\\\" or \\\"\\\", received \" + useShadowDOMmode);\r\n            break;\r\n    }\r\n    return DynamicElement;\r\n}\n\nfunction getElementName(address) {\r\n    return /([^\\/^\\?]+)\\.html/i.exec(address)[1].toLowerCase();\r\n}\r\nfunction configure(config) {\r\n    var viewEngine = config.container.get(ViewEngine);\r\n    var loader = config.aurelia.loader;\r\n    viewEngine.addResourcePlugin('.html', {\r\n        'fetch': function (viewUrl) {\r\n            return loader.loadTemplate(viewUrl).then(function (registryEntry) {\r\n                var _a;\r\n                var bindableNames = registryEntry.template.getAttribute('bindable');\r\n                var useShadowDOMmode = registryEntry.template.getAttribute('use-shadow-dom');\r\n                var name = getElementName(viewUrl);\r\n                if (bindableNames) {\r\n                    bindableNames = bindableNames.split(',').map(function (x) { return x.trim(); });\r\n                    registryEntry.template.removeAttribute('bindable');\r\n                }\r\n                else {\r\n                    bindableNames = [];\r\n                }\r\n                return _a = {}, _a[name] = _createDynamicElement({ name: name, viewUrl: viewUrl, bindableNames: bindableNames, useShadowDOMmode: useShadowDOMmode }), _a;\r\n            });\r\n        }\r\n    });\r\n}\n\nfunction configure$1(config) {\r\n    injectAureliaHideStyleAtHead();\r\n    config.globalResources(Compose, If, Else, With, Repeat, Show, Hide, Replaceable, Focus, SanitizeHTMLValueConverter, OneTimeBindingBehavior, OneWayBindingBehavior, ToViewBindingBehavior, FromViewBindingBehavior, TwoWayBindingBehavior, ThrottleBindingBehavior, DebounceBindingBehavior, SelfBindingBehavior, SignalBindingBehavior, UpdateTriggerBindingBehavior, AttrBindingBehavior);\r\n    configure(config);\r\n    var viewEngine = config.container.get(ViewEngine);\r\n    var styleResourcePlugin = {\r\n        fetch: function (address) {\r\n            var _a;\r\n            return _a = {}, _a[address] = _createCSSResource(address), _a;\r\n        }\r\n    };\r\n    ['.css', '.less', '.sass', '.scss', '.styl'].forEach(function (ext) { return viewEngine.addResourcePlugin(ext, styleResourcePlugin); });\r\n}\n\nexport { AbstractRepeater, ArrayRepeatStrategy, AttrBindingBehavior, BindingSignaler, Compose, DebounceBindingBehavior, Else, Focus, FromViewBindingBehavior, HTMLSanitizer, Hide, If, MapRepeatStrategy, NullRepeatStrategy, NumberRepeatStrategy, OneTimeBindingBehavior, OneWayBindingBehavior, Repeat, RepeatStrategyLocator, Replaceable, SanitizeHTMLValueConverter, SelfBindingBehavior, SetRepeatStrategy, Show, SignalBindingBehavior, ThrottleBindingBehavior, ToViewBindingBehavior, TwoWayBindingBehavior, UpdateTriggerBindingBehavior, With, configure$1 as configure, createFullOverrideContext, getItemsSourceExpression, isOneTime, unwrapExpression, updateOneTimeBinding, updateOverrideContext, viewsRequireLifecycle };\n//# sourceMappingURL=aurelia-templating-resources.js.map\n","import { Router, RouteLoader, AppRouter } from 'aurelia-router';\nimport { Origin } from 'aurelia-metadata';\nimport { relativeToFile } from 'aurelia-path';\nimport { BehaviorInstruction, ShadowDOM, ViewSlot, ViewLocator, CompositionTransaction, CompositionEngine, SwapStrategies, inlineView, customElement, useView } from 'aurelia-templating';\nimport { Container } from 'aurelia-dependency-injection';\nimport { createOverrideContext } from 'aurelia-binding';\nimport { DOM } from 'aurelia-pal';\nimport { getLogger } from 'aurelia-logging';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\n\nvar EmptyLayoutViewModel = /** @class */ (function () {\r\n    function EmptyLayoutViewModel() {\r\n    }\r\n    return EmptyLayoutViewModel;\r\n}());\r\n/**\r\n * Implementation of Aurelia Router ViewPort. Responsible for loading route, composing and swapping routes views\r\n */\r\nvar RouterView = /** @class */ (function () {\r\n    function RouterView(element, container, viewSlot, router, viewLocator, compositionTransaction, compositionEngine) {\r\n        this.element = element;\r\n        this.container = container;\r\n        this.viewSlot = viewSlot;\r\n        this.router = router;\r\n        this.viewLocator = viewLocator;\r\n        this.compositionTransaction = compositionTransaction;\r\n        this.compositionEngine = compositionEngine;\r\n        // add this <router-view/> to router view ports lookup based on name attribute\r\n        // when this router is the root router-view\r\n        // also trigger AppRouter registerViewPort extra flow\r\n        this.router.registerViewPort(this, this.element.getAttribute('name'));\r\n        // Each <router-view/> process its instruction as a composition transaction\r\n        // there are differences between intial composition and subsequent compositions\r\n        // also there are differences between root composition and child <router-view/> composition\r\n        // mark the first composition transaction with a property initialComposition to distinguish it\r\n        // when the root <router-view/> gets new instruction for the first time\r\n        if (!('initialComposition' in compositionTransaction)) {\r\n            compositionTransaction.initialComposition = true;\r\n            this.compositionTransactionNotifier = compositionTransaction.enlist();\r\n        }\r\n    }\r\n    /**@internal */\r\n    RouterView.inject = function () {\r\n        return [DOM.Element, Container, ViewSlot, Router, ViewLocator, CompositionTransaction, CompositionEngine];\r\n    };\r\n    RouterView.prototype.created = function (owningView) {\r\n        this.owningView = owningView;\r\n    };\r\n    RouterView.prototype.bind = function (bindingContext, overrideContext) {\r\n        // router needs to get access to view model of current route parent\r\n        // doing it in generic way via viewModel property on container\r\n        this.container.viewModel = bindingContext;\r\n        this.overrideContext = overrideContext;\r\n    };\r\n    /**\r\n     * Implementation of `aurelia-router` ViewPort interface, responsible for templating related part in routing Pipeline\r\n     */\r\n    RouterView.prototype.process = function ($viewPortInstruction, waitToSwap) {\r\n        var _this = this;\r\n        // have strong typings without exposing it in public typings, this is to ensure maximum backward compat\r\n        var viewPortInstruction = $viewPortInstruction;\r\n        var component = viewPortInstruction.component;\r\n        var childContainer = component.childContainer;\r\n        var viewModel = component.viewModel;\r\n        var viewModelResource = component.viewModelResource;\r\n        var metadata = viewModelResource.metadata;\r\n        var config = component.router.currentInstruction.config;\r\n        var viewPortConfig = config.viewPorts ? (config.viewPorts[viewPortInstruction.name] || {}) : {};\r\n        childContainer.get(RouterViewLocator)._notify(this);\r\n        // layoutInstruction is our layout viewModel\r\n        var layoutInstruction = {\r\n            viewModel: viewPortConfig.layoutViewModel || config.layoutViewModel || this.layoutViewModel,\r\n            view: viewPortConfig.layoutView || config.layoutView || this.layoutView,\r\n            model: viewPortConfig.layoutModel || config.layoutModel || this.layoutModel,\r\n            router: viewPortInstruction.component.router,\r\n            childContainer: childContainer,\r\n            viewSlot: this.viewSlot\r\n        };\r\n        // viewport will be a thin wrapper around composition engine\r\n        // to process instruction/configuration from users\r\n        // preparing all information related to a composition process\r\n        // first by getting view strategy of a ViewPortComponent View\r\n        var viewStrategy = this.viewLocator.getViewStrategy(component.view || viewModel);\r\n        if (viewStrategy && component.view) {\r\n            viewStrategy.makeRelativeTo(Origin.get(component.router.container.viewModel.constructor).moduleId);\r\n        }\r\n        // using metadata of a custom element view model to load appropriate view-factory instance\r\n        return metadata\r\n            .load(childContainer, viewModelResource.value, null, viewStrategy, true)\r\n            // for custom element, viewFactory typing is always ViewFactory\r\n            // for custom attribute, it will be HtmlBehaviorResource\r\n            .then(function (viewFactory) {\r\n            // if this is not the first time that this <router-view/> is composing its instruction\r\n            // try to capture ownership of the composition transaction\r\n            // child <router-view/> will not be able to capture, since root <router-view/> typically captures\r\n            // the ownership token\r\n            if (!_this.compositionTransactionNotifier) {\r\n                _this.compositionTransactionOwnershipToken = _this.compositionTransaction.tryCapture();\r\n            }\r\n            if (layoutInstruction.viewModel || layoutInstruction.view) {\r\n                viewPortInstruction.layoutInstruction = layoutInstruction;\r\n            }\r\n            var viewPortComponentBehaviorInstruction = BehaviorInstruction.dynamic(_this.element, viewModel, viewFactory);\r\n            viewPortInstruction.controller = metadata.create(childContainer, viewPortComponentBehaviorInstruction);\r\n            if (waitToSwap) {\r\n                return null;\r\n            }\r\n            _this.swap(viewPortInstruction);\r\n        });\r\n    };\r\n    RouterView.prototype.swap = function ($viewPortInstruction) {\r\n        var _this = this;\r\n        // have strong typings without exposing it in public typings, this is to ensure maximum backward compat\r\n        var viewPortInstruction = $viewPortInstruction;\r\n        var viewPortController = viewPortInstruction.controller;\r\n        var layoutInstruction = viewPortInstruction.layoutInstruction;\r\n        var previousView = this.view;\r\n        // Final step of swapping a <router-view/> ViewPortComponent\r\n        var work = function () {\r\n            var swapStrategy = SwapStrategies[_this.swapOrder] || SwapStrategies.after;\r\n            var viewSlot = _this.viewSlot;\r\n            swapStrategy(viewSlot, previousView, function () { return Promise.resolve(viewSlot.add(_this.view)); }).then(function () {\r\n                _this._notify();\r\n            });\r\n        };\r\n        // Ensure all users setups have been completed\r\n        var ready = function (owningView_or_layoutView) {\r\n            viewPortController.automate(_this.overrideContext, owningView_or_layoutView);\r\n            var transactionOwnerShipToken = _this.compositionTransactionOwnershipToken;\r\n            // if this router-view is the root <router-view/> of a normal startup via aurelia.setRoot\r\n            // attemp to take control of the transaction\r\n            // if ownership can be taken\r\n            // wait for transaction to complete before swapping\r\n            if (transactionOwnerShipToken) {\r\n                return transactionOwnerShipToken\r\n                    .waitForCompositionComplete()\r\n                    .then(function () {\r\n                    _this.compositionTransactionOwnershipToken = null;\r\n                    return work();\r\n                });\r\n            }\r\n            // otherwise, just swap\r\n            return work();\r\n        };\r\n        // If there is layout instruction, new to compose layout before processing ViewPortComponent\r\n        // layout controller/view/view-model is composed using composition engine APIs\r\n        if (layoutInstruction) {\r\n            if (!layoutInstruction.viewModel) {\r\n                // createController chokes if there's no viewmodel, so create a dummy one\r\n                // but avoid using a POJO as it creates unwanted metadata in Object constructor\r\n                layoutInstruction.viewModel = new EmptyLayoutViewModel();\r\n            }\r\n            // using composition engine to create compose layout\r\n            return this.compositionEngine\r\n                // first create controller from layoutInstruction\r\n                // and treat it as CompositionContext\r\n                // then emulate slot projection with ViewPortComponent view\r\n                .createController(layoutInstruction)\r\n                .then(function (layoutController) {\r\n                var layoutView = layoutController.view;\r\n                ShadowDOM.distributeView(viewPortController.view, layoutController.slots || layoutView.slots);\r\n                // when there is a layout\r\n                // view hierarchy is: <router-view/> owner view -> layout view -> ViewPortComponent view\r\n                layoutController.automate(createOverrideContext(layoutInstruction.viewModel), _this.owningView);\r\n                layoutView.children.push(viewPortController.view);\r\n                return layoutView || layoutController;\r\n            })\r\n                .then(function (newView) {\r\n                _this.view = newView;\r\n                return ready(newView);\r\n            });\r\n        }\r\n        // if there is no layout, then get ViewPortComponent view ready as view property\r\n        // and process controller/swapping\r\n        // when there is no layout\r\n        // view hierarchy is: <router-view/> owner view -> ViewPortComponent view\r\n        this.view = viewPortController.view;\r\n        return ready(this.owningView);\r\n    };\r\n    /**\r\n     * Notify composition transaction that this router has finished processing\r\n     * Happens when this <router-view/> is the root router-view\r\n     * @internal\r\n     */\r\n    RouterView.prototype._notify = function () {\r\n        var notifier = this.compositionTransactionNotifier;\r\n        if (notifier) {\r\n            notifier.done();\r\n            this.compositionTransactionNotifier = null;\r\n        }\r\n    };\r\n    /**\r\n     * @internal Actively avoid using decorator to reduce the amount of code generated\r\n     *\r\n     * There is no view to compose by default in a router view\r\n     * This custom element is responsible for composing its own view, based on current config\r\n     */\r\n    RouterView.$view = null;\r\n    /**\r\n     * @internal Actively avoid using decorator to reduce the amount of code generated\r\n     */\r\n    RouterView.$resource = {\r\n        name: 'router-view',\r\n        bindables: ['swapOrder', 'layoutView', 'layoutViewModel', 'layoutModel', 'inherit-binding-context']\r\n    };\r\n    return RouterView;\r\n}());\r\n/**\r\n* Locator which finds the nearest RouterView, relative to the current dependency injection container.\r\n*/\r\nvar RouterViewLocator = /** @class */ (function () {\r\n    /**\r\n    * Creates an instance of the RouterViewLocator class.\r\n    */\r\n    function RouterViewLocator() {\r\n        var _this = this;\r\n        this.promise = new Promise(function (resolve) { return _this.resolve = resolve; });\r\n    }\r\n    /**\r\n    * Finds the nearest RouterView instance.\r\n    * @returns A promise that will be resolved with the located RouterView instance.\r\n    */\r\n    RouterViewLocator.prototype.findNearest = function () {\r\n        return this.promise;\r\n    };\r\n    /**@internal */\r\n    RouterViewLocator.prototype._notify = function (routerView) {\r\n        this.resolve(routerView);\r\n    };\r\n    return RouterViewLocator;\r\n}());\n\n/**@internal exported for unit testing */\r\nvar EmptyClass = /** @class */ (function () {\r\n    function EmptyClass() {\r\n    }\r\n    return EmptyClass;\r\n}());\r\ninlineView('<template></template>')(EmptyClass);\r\n/**\r\n * Default implementation of `RouteLoader` used for loading component based on a route config\r\n */\r\nvar TemplatingRouteLoader = /** @class */ (function (_super) {\r\n    __extends(TemplatingRouteLoader, _super);\r\n    function TemplatingRouteLoader(compositionEngine) {\r\n        var _this = _super.call(this) || this;\r\n        _this.compositionEngine = compositionEngine;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Resolve a view model from a RouteConfig\r\n     * Throws when there is neither \"moduleId\" nor \"viewModel\" property\r\n     * @internal\r\n     */\r\n    TemplatingRouteLoader.prototype.resolveViewModel = function (router, config) {\r\n        return new Promise(function (resolve, reject) {\r\n            var viewModel;\r\n            if ('moduleId' in config) {\r\n                var moduleId = config.moduleId;\r\n                if (moduleId === null) {\r\n                    viewModel = EmptyClass;\r\n                }\r\n                else {\r\n                    // this requires container of router has passes a certain point\r\n                    // where a view model has been setup on the container\r\n                    // it will fail in enhance scenario because no viewport has been registered\r\n                    moduleId = relativeToFile(moduleId, Origin.get(router.container.viewModel.constructor).moduleId);\r\n                    if (/\\.html/i.test(moduleId)) {\r\n                        viewModel = createDynamicClass(moduleId);\r\n                    }\r\n                    else {\r\n                        viewModel = moduleId;\r\n                    }\r\n                }\r\n                return resolve(viewModel);\r\n            }\r\n            // todo: add if ('viewModel' in config) to support static view model resolution\r\n            reject(new Error('Invalid route config. No \"moduleId\" found.'));\r\n        });\r\n    };\r\n    /**\r\n     * Create child container based on a router container\r\n     * Also ensures that child router are properly constructed in the newly created child container\r\n     * @internal\r\n     */\r\n    TemplatingRouteLoader.prototype.createChildContainer = function (router) {\r\n        var childContainer = router.container.createChild();\r\n        childContainer.registerSingleton(RouterViewLocator);\r\n        childContainer.getChildRouter = function () {\r\n            var childRouter;\r\n            childContainer.registerHandler(Router, function () { return childRouter || (childRouter = router.createChild(childContainer)); });\r\n            return childContainer.get(Router);\r\n        };\r\n        return childContainer;\r\n    };\r\n    /**\r\n     * Load corresponding component of a route config of a navigation instruction\r\n     */\r\n    TemplatingRouteLoader.prototype.loadRoute = function (router, config, _navInstruction) {\r\n        var _this = this;\r\n        return this\r\n            .resolveViewModel(router, config)\r\n            .then(function (viewModel) { return _this.compositionEngine.ensureViewModel({\r\n            viewModel: viewModel,\r\n            childContainer: _this.createChildContainer(router),\r\n            view: config.view || config.viewStrategy,\r\n            router: router\r\n        }); });\r\n    };\r\n    /**@internal */\r\n    TemplatingRouteLoader.inject = [CompositionEngine];\r\n    return TemplatingRouteLoader;\r\n}(RouteLoader));\r\n/**@internal exported for unit testing */\r\nfunction createDynamicClass(moduleId) {\r\n    var name = /([^\\/^\\?]+)\\.html/i.exec(moduleId)[1];\r\n    var DynamicClass = /** @class */ (function () {\r\n        function DynamicClass() {\r\n        }\r\n        DynamicClass.prototype.bind = function (bindingContext) {\r\n            this.$parent = bindingContext;\r\n        };\r\n        return DynamicClass;\r\n    }());\r\n    customElement(name)(DynamicClass);\r\n    useView(moduleId)(DynamicClass);\r\n    return DynamicClass;\r\n}\n\nvar logger = getLogger('route-href');\r\n/**\r\n * Helper custom attribute to help associate an element with a route by name\r\n */\r\nvar RouteHref = /** @class */ (function () {\r\n    function RouteHref(router, element) {\r\n        this.router = router;\r\n        this.element = element;\r\n        this.attribute = 'href';\r\n    }\r\n    /*@internal */\r\n    RouteHref.inject = function () {\r\n        return [Router, DOM.Element];\r\n    };\r\n    RouteHref.prototype.bind = function () {\r\n        this.isActive = true;\r\n        this.processChange();\r\n    };\r\n    RouteHref.prototype.unbind = function () {\r\n        this.isActive = false;\r\n    };\r\n    RouteHref.prototype.attributeChanged = function (value, previous) {\r\n        if (previous) {\r\n            this.element.removeAttribute(previous);\r\n        }\r\n        return this.processChange();\r\n    };\r\n    RouteHref.prototype.processChange = function () {\r\n        var _this = this;\r\n        return this.router\r\n            .ensureConfigured()\r\n            .then(function () {\r\n            if (!_this.isActive) {\r\n                // returning null to avoid Bluebird warning\r\n                return null;\r\n            }\r\n            var element = _this.element;\r\n            var href = _this.router.generate(_this.route, _this.params);\r\n            if (element.au.controller) {\r\n                element.au.controller.viewModel[_this.attribute] = href;\r\n            }\r\n            else {\r\n                element.setAttribute(_this.attribute, href);\r\n            }\r\n            // returning null to avoid Bluebird warning\r\n            return null;\r\n        })\r\n            .catch(function (reason) {\r\n            logger.error(reason);\r\n        });\r\n    };\r\n    /**\r\n     * @internal Actively avoid using decorator to reduce the amount of code generated\r\n     */\r\n    RouteHref.$resource = {\r\n        type: 'attribute',\r\n        name: 'route-href',\r\n        bindables: [\r\n            { name: 'route', changeHandler: 'processChange', primaryProperty: true },\r\n            { name: 'params', changeHandler: 'processChange' },\r\n            'attribute'\r\n        ] // type definition of Aurelia templating is wrong\r\n    };\r\n    return RouteHref;\r\n}());\n\nfunction configure(config) {\r\n    config\r\n        .singleton(RouteLoader, TemplatingRouteLoader)\r\n        .singleton(Router, AppRouter)\r\n        .globalResources(RouterView, RouteHref);\r\n    config.container.registerAlias(Router, AppRouter);\r\n}\n\nexport { RouteHref, RouterView, TemplatingRouteLoader, configure };\n//# sourceMappingURL=aurelia-templating-router.js.map\n","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, computedFrom } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\n\n@autoinject\nexport class BillingDashboard extends StandardView {\n    alertNotificationsLoading: boolean;\n    kpisLoading: boolean;\n    constructor() {\n        super(BillingDashboard.name); \n        this.alertNotificationsLoading = true;\n        this.kpisLoading = true;\n        this.screenViewUtility.viewName = \"\";\n    }\n\n    async attached() {\n        await super.attached();        \n    }\n\n    async activate(params, routeData) {\n        await super.activate(params, routeData);\n        this.screenViewUtility.viewName = \"\";               \n    }\n\n    async onClickRateCalculator() {\n        this.errorMessageUtil.showErrorMessage(\"Not Yet Implemented.\");\n    }\n\n    @computedFrom()\n    get rateCalculatorRoute(){\n        return ROUTES.RATE_CALCULATOR.name;\n    }\n\n    @computedFrom()\n    get listInvoicesRoute() {\n        return ROUTES.LIST_INVOICES.name;       \n    }\n\n    @computedFrom()\n    get listCreditMemosRoute() {\n        return ROUTES.LIST_CREDIT_MEMOS.name;       \n    }\n}","module.exports = \"<template> <div class=\\\"ui link stackable dashboard cards\\\"> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: rateCalculatorRoute\\\"> <div class=header>Rate Calculator</div> <div class=description>Be able to check Rates.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href='route.bind: listInvoicesRoute; params.bind: {listType: \\\"open\\\"}'> <div class=header>Open Invoices</div> <div class=description>View a list of Open Invoices.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href='route.bind: listInvoicesRoute; params.bind: {listType: \\\"paid\\\"}'> <div class=header>Paid Invoices</div> <div class=description>View a list of Paid Invoices.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: listCreditMemosRoute\\\"> <div class=header>Credit Memos</div> <div class=description>View a list of Credit Memos.</div> </a> </div> </div> <style>.dashboard.cards .content{text-align:center;min-height:80px}</style> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, observable, computedFrom } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport { SearchResult } from \"shared-models/search-result\";\nimport parse from \"papaparse\";\nimport { SimpleDateFormatValueConverter } from \"shared-ui/converters/simple-date-format\";\nimport { BillingService } from \"billing/services/billing-service\";\nimport { CreditMemo } from \"billing/models/credit-memo\";\n\n\n@autoinject\nexport class CreditMemoListView extends StandardView {\n\n    creditMemos: CreditMemo[];\n\n    currentSearchResult: SearchResult;\n\n    currentPage: number = 1;\n\n    listDisabled: boolean = false;    \n\n    $downloadCSVLink: HTMLElement;\n\n    $exportLink: HTMLElement;\n\n    @observable\n    searchInput: string = \"\";\n\n    listType: string;\n\n    constructor(private billingService: BillingService, private simpleDateFormat: SimpleDateFormatValueConverter) {\n        super(CreditMemoListView.name);\n    }\n\n    async activate(params, routeData) {\n        try {\n            this.listType = params[\"listType\"];\n            await this._getResults();           \n        } catch (err) {\n            this.errorMessageUtil.showError(err);\n            this.routeToView(ROUTES.DASHBOARD.name);\n        }\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        await super.attached();\n    }\n\n    async _getResults() {\n        let fieldFilters = [];        \n        this.logger.info(`fieldFilters :: ${JSON.stringify(fieldFilters)}`);\n        this.currentSearchResult = await this.billingService.searchCreditMemos({page: this.currentPage, filter: this.searchInput, fieldFilters: fieldFilters});\n        this.creditMemos = this.currentSearchResult.records as CreditMemo[];\n    }\n\n    async searchInputChanged(newValue: string, oldValue: string) {\n        this.disableList();\n        this.currentPage = 1;\n        await this._getResults();\n        this.enableList();\n    }\n\n    async clickPrevious() {\n        this.disableList();\n        if (this.currentPage > 1) {\n            this.currentPage--;\n        }\n        await this._getResults();\n        this.enableList();\n    }\n\n    async clickNext() {\n        this.disableList();\n        if (this.currentPage < this.currentSearchResult.pageCount) {\n            this.currentPage++;\n        }\n        await this._getResults();\n        this.enableList();\n    }\n\n    async exportCreditMemos() {\n        this.disableView();\n        let creditMemos = [];\n        if (this.searchInput) {\n            creditMemos = this.creditMemos;\n        } else {\n            creditMemos = await this.billingService.getAllCreditMemos();\n        }\n        \n        let csvData = this.convertToCsv(creditMemos);\n        $(this.$exportLink).attr('href', `data:text/csv;charset=utf-8, ${escape(csvData)}`);       \n        this.$exportLink.click();\n        this.enableView();\n    }\n\n    convertToCsv(creditMemos: CreditMemo[]) {\n        if(creditMemos.length === 0){\n            return \"Name\\n\";\n        }\n        return parse.unparse(creditMemos.map((creditMemo) => {\n            return {\n                \"Name\": creditMemo.name\n            };\n        }));\n    }    \n\n    @computedFrom()\n    get viewCreditMemoRoute(){\n        return ROUTES.VIEW_CREDIT_MEMO.name;\n    }\n\n    disableList() {\n        this.listDisabled = true;\n    }\n\n    enableList() {\n        this.listDisabled = false;\n    }\n}","module.exports = \"<template> <require from=shared-ui/converters/boolean-format></require> <require from=shared-ui/converters/simple-date-format></require> <require from=shared-ui/converters/currency-format></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui centered stackable grid\\\"> <div class=\\\"sixteen wide column\\\"> <h1 class=\\\"ui center aligned header\\\">Credit Memos</h1> </div> <div class=\\\"five wide column\\\"> <button class=\\\"positive ui button\\\" click.delegate=exportCreditMemos()>Export</button> <a href=\\\"data:text/csv;charset=utf-8,\\\" hidden download=creditMemos.csv ref=$exportLink>Download</a> </div> <div class=\\\"six wide column\\\"> <div class=\\\"ui fluid input\\\"> <input type=text placeholder=Search... value.bind=searchInput> </div> </div> <div class=\\\"five wide column\\\"> <div class=\\\"ui grid\\\"> <div class=\\\"right floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === 1 ? 'disabled' : ''} button\\\" click.delegate=clickPrevious()> <i class=\\\"left arrow icon\\\"></i> </div> </div> <div class=\\\"six wide column\\\"> <span class=\\\"ui blue medium text\\\">Page ${currentPage} of ${currentSearchResult.pageCount || 1}</span> </div> <div class=\\\"left floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === (currentSearchResult.pageCount || 1) ? 'disabled' : ''} button\\\" click.delegate=clickNext()> <i class=\\\"right arrow icon\\\"></i> </div> </div> </div> </div> <div class=\\\"sixteen wide column\\\"> <div class=\\\"ui ${listDisabled ? 'active' : ''} inverted dimmer\\\"> <div class=\\\"ui text centered loader\\\">Loading</div> </div> <div class=\\\"ui link four doubling stackable cards\\\"> <div class=\\\"ui raised fluid card\\\" repeat.for=\\\"creditMemo of creditMemos\\\"> <a class=content route-href=\\\"route.bind: viewCreditMemoRoute; params.bind: {id: creditMemo.id}\\\"> <div class=header> <div class=\\\"ui grid\\\"> <div class=\\\"sixteen wide column\\\"> <div class=header> ${creditMemo.name} ${creditMemo.creditAmount | currencyFormat} </div> </div> </div> </div> <div class=description> <form class=\\\"ui form\\\" ref=$viewForm> <div class=\\\"one fields\\\"> <div class=field> <b>Date:</b> ${creditMemo.createdDate | simpleDateFormat} </div> </div> <div class=\\\"one fields\\\"> <div class=field> <b>Order#:</b> ${creditMemo.wineryOrderNumber} </div> </div> <div class=\\\"one fields\\\"> <div class=field> <b>Recipient:</b> ${creditMemo.recipientName} </div> </div> </form> </div> </a> </div> </div> </div> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { bindable, autoinject, computedFrom } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport { SimpleDateFormatValueConverter } from \"shared-ui/converters/simple-date-format\";\nimport { BillingService } from \"billing/services/billing-service\";\nimport { CreditMemo } from \"billing/models/credit-memo\";\n\n@autoinject\nexport class CreditMemoView extends StandardView {\n  @bindable\n  creditMemo: CreditMemo;\n\n  $viewForm: HTMLElement;\n\n  $inboundFileLink: HTMLElement;\n\n  $outboundFileLink: HTMLElement;\n\n  $storageFileLink: HTMLElement;\n\n  $returnsFileLink: HTMLElement;\n\n  $addrCorrFileLink: HTMLElement;\n\n  constructor(private billingService: BillingService, private simpleDateFormat: SimpleDateFormatValueConverter) {\n    super(CreditMemoView.name);\n    this.creditMemo = null;\n  }\n\n  async activate(params, routeData) {\n    try {\n      let creditMemoId = params[\"id\"];\n      if (!creditMemoId) {\n        throw \"No Credit Memo Id Provided.\";\n      }\n      creditMemoId = parseInt(creditMemoId, 10);\n      let requestResponses = await Promise.all([\n        this.billingService.getCreditMemo(creditMemoId)\n      ]);\n      this.creditMemo = requestResponses[0];\n    } catch (err) {\n      this.errorMessageUtil.showError(err);\n      this.router.navigateToRoute(ROUTES.DASHBOARD.name, {}, { trigger: true, replace: true });\n    }\n    await super.activate(params, routeData);\n  }\n\n  async attached() {\n    await super.attached();\n  } \n}","module.exports = \"<template> <require from=shared-ui/converters/simple-date-format></require> <require from=shared-ui/converters/boolean-format></require> <require from=shared-ui/converters/currency-format></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui centered stackable padded grid\\\"> <div class=\\\"sixteen wide column\\\"> <h1 class=\\\"ui center aligned header\\\">${creditMemo.name}</h1> </div> </div> <form class=\\\"ui form\\\" ref=$viewForm> <h4 class=\\\"ui dividing header\\\">Primary Information</h4> <div class=\\\"two fields\\\"> <div class=field> <b>Date:</b> ${creditMemo.createdDate | simpleDateFormat} </div> <div class=field> <b>Total:</b> ${creditMemo.creditAmount | currencyFormat} </div> </div> <div class=\\\"two fields\\\"> <div class=field> <b>Winery order#:</b> ${creditMemo.wineryOrderNumber} </div> <div class=field> <b>VinFillment Order#:</b> ${creditMemo.vfOrderNumber} </div> </div> <div class=\\\"two fields\\\"> <div class=field> <b>Check/Invoice#:</b> ${creditMemo.checkOrInvoiceNumber} </div> <div class=field> <b>VinFillment Invoice#:</b> ${creditMemo.vfInvoiceNumber} </div> </div> </form> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, observable, computedFrom } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport { SearchResult } from \"shared-models/search-result\";\nimport parse from \"papaparse\";\nimport { SimpleDateFormatValueConverter } from \"shared-ui/converters/simple-date-format\";\nimport { Invoice } from \"billing/models/invoice\";\nimport { BillingService } from \"billing/services/billing-service\";\n\nexport enum VIEW_TYPES {\n    OPEN = \"open\",\n    PAID = \"paid\",\n}\n\n@autoinject\nexport class InvoiceListView extends StandardView {\n\n    invoices: Invoice[];\n\n    currentSearchResult: SearchResult;\n\n    currentPage: number = 1;\n\n    listDisabled: boolean = false;    \n\n    $downloadCSVLink: HTMLElement;\n\n    $exportLink: HTMLElement;\n\n    @observable\n    searchInput: string = \"\";\n\n    listType: string;\n\n    constructor(private billingService: BillingService, private simpleDateFormat: SimpleDateFormatValueConverter) {\n        super(InvoiceListView.name);\n    }\n\n    async activate(params, routeData) {\n        try {\n            this.listType = params[\"listType\"];\n            await this._getResults();           \n        } catch (err) {\n            this.errorMessageUtil.showError(err);\n            this.routeToView(ROUTES.DASHBOARD.name);\n        }\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        await super.attached();\n    }\n\n    async _getResults() {\n        let fieldFilters = [];\n        if(this.isOpen){\n            fieldFilters = this._getOpenFilters();\n        } else if(this.isPaid){\n            fieldFilters = this._getPaidFilters();\n        }\n        this.logger.info(`fieldFilters :: ${JSON.stringify(fieldFilters)}`);\n        this.currentSearchResult = await this.billingService.searchInvoices({page: this.currentPage, filter: this.searchInput, fieldFilters: fieldFilters});\n        this.invoices = this.currentSearchResult.records as Invoice[];\n    }    \n\n    @computedFrom('listType')\n    get isPaid(): boolean{\n        return this.listType === VIEW_TYPES.PAID;\n    }\n\n    @computedFrom('listType')\n    get isOpen(): boolean{\n        return this.listType === VIEW_TYPES.OPEN;\n    }\n\n    _getOpenFilters(){\n        return [['invoice_payment_state', '=', ['not_paid', 'in_payment']]];\n    }\n\n    _getPaidFilters(){\n        return [['invoice_payment_state', '=', ['paid', '']]];\n    }\n\n    async searchInputChanged(newValue: string, oldValue: string) {\n        this.disableList();\n        this.currentPage = 1;\n        await this._getResults();\n        this.enableList();\n    }\n\n    async clickPrevious() {\n        this.disableList();\n        if (this.currentPage > 1) {\n            this.currentPage--;\n        }\n        await this._getResults();\n        this.enableList();\n    }\n\n    async clickNext() {\n        this.disableList();\n        if (this.currentPage < this.currentSearchResult.pageCount) {\n            this.currentPage++;\n        }\n        await this._getResults();\n        this.enableList();\n    }\n\n    async exportInvoices() {\n        this.disableView();\n        let invoices = [];\n        if (this.searchInput) {\n            invoices = this.invoices;\n        } else {\n            invoices = await this.billingService.getAllInvoices();\n        }\n        \n        let csvData = this.convertToCsv(invoices);\n        $(this.$exportLink).attr('href', `data:text/csv;charset=utf-8, ${escape(csvData)}`);       \n        this.$exportLink.click();\n        this.enableView();\n    }\n\n    convertToCsv(invoices: Invoice[]) {\n        if(invoices.length === 0){\n            return \"Name\\n\";\n        }\n        return parse.unparse(invoices.map((invoice) => {\n            return {\n                \"Name\": invoice.name\n            };\n        }));\n    }    \n\n    @computedFrom()\n    get viewInvoiceRoute(){\n        return ROUTES.VIEW_INVOICE.name;\n    }\n\n    disableList() {\n        this.listDisabled = true;\n    }\n\n    enableList() {\n        this.listDisabled = false;\n    }\n}","module.exports = \"<template> <require from=shared-ui/converters/boolean-format></require> <require from=shared-ui/converters/simple-date-format></require> <require from=shared-ui/converters/currency-format></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui centered stackable grid\\\"> <div class=\\\"sixteen wide column\\\"> <h1 class=\\\"ui center aligned header\\\">${isPaid ? \\\"Paid\\\" : \\\"Open\\\"} Invoices</h1> </div> <div class=\\\"five wide column\\\"> <button class=\\\"positive ui button\\\" click.delegate=exportInvoices()>Export</button> <a href=\\\"data:text/csv;charset=utf-8,\\\" hidden download=invoices.csv ref=$exportLink>Download</a> </div> <div class=\\\"six wide column\\\"> <div class=\\\"ui fluid input\\\"> <input type=text placeholder=Search... value.bind=searchInput> </div> </div> <div class=\\\"five wide column\\\"> <div class=\\\"ui grid\\\"> <div class=\\\"right floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === 1 ? 'disabled' : ''} button\\\" click.delegate=clickPrevious()> <i class=\\\"left arrow icon\\\"></i> </div> </div> <div class=\\\"six wide column\\\"> <span class=\\\"ui blue medium text\\\">Page ${currentPage} of ${currentSearchResult.pageCount || 1}</span> </div> <div class=\\\"left floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === (currentSearchResult.pageCount || 1) ? 'disabled' : ''} button\\\" click.delegate=clickNext()> <i class=\\\"right arrow icon\\\"></i> </div> </div> </div> </div> <div class=\\\"sixteen wide column\\\"> <div class=\\\"ui ${listDisabled ? 'active' : ''} inverted dimmer\\\"> <div class=\\\"ui text centered loader\\\">Loading</div> </div> <div class=\\\"ui link four doubling stackable cards\\\"> <div class=\\\"ui raised fluid card\\\" repeat.for=\\\"invoice of invoices\\\"> <a class=content route-href=\\\"route.bind: viewInvoiceRoute; params.bind: {id: invoice.id}\\\"> <div class=header> <div class=\\\"ui grid\\\"> <div class=\\\"sixteen wide column\\\"> <div class=header> ${invoice.name} </div> </div> </div> </div> <div class=description> <form class=\\\"ui form\\\" ref=$viewForm> <div if.bind=isPaid class=\\\"one fields\\\"> <div class=field> <b>Date:</b> ${invoice.date | simpleDateFormat} </div> </div> <div if.bind=isOpen class=\\\"one fields\\\"> <div class=field> <b>Due Date:</b> ${invoice.dueDate | simpleDateFormat} </div> </div> <div if.bind=isPaid class=\\\"one fields\\\"> <div class=field> <b>Total:</b> ${invoice.amountTotal | currencyFormat} </div> </div> <div if.bind=isOpen class=\\\"one fields\\\"> <div class=field> <b>Total Due:</b> ${invoice.amountDue | currencyFormat} </div> </div> </form> </div> </a> </div> </div> </div> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { bindable, autoinject, computedFrom } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport { SimpleDateFormatValueConverter } from \"shared-ui/converters/simple-date-format\";\nimport { Invoice } from \"billing/models/invoice\";\nimport { BillingService } from \"billing/services/billing-service\";\n\n@autoinject\nexport class InvoiceView extends StandardView {\n  @bindable\n  invoice: Invoice;\n\n  $viewForm: HTMLElement;\n\n  $inboundFileLink: HTMLElement;\n\n  $outboundFileLink: HTMLElement;\n\n  $storageFileLink: HTMLElement;\n\n  $returnsFileLink: HTMLElement;\n\n  $addrCorrFileLink: HTMLElement;\n\n  constructor(private billingService: BillingService, private simpleDateFormat: SimpleDateFormatValueConverter) {\n    super(InvoiceView.name);\n    this.invoice = null;\n  }\n\n  async activate(params, routeData) {\n    try {\n      let invoiceId = params[\"id\"];\n      if (!invoiceId) {\n        throw \"No Invoice Id Provided.\";\n      }\n      invoiceId = parseInt(invoiceId, 10);\n      let requestResponses = await Promise.all([\n        this.billingService.getInvoice(invoiceId)\n      ]);\n      this.invoice = requestResponses[0];\n    } catch (err) {\n      this.errorMessageUtil.showError(err);\n      this.router.navigateToRoute(ROUTES.DASHBOARD.name, {}, { trigger: true, replace: true });\n    }\n    await super.activate(params, routeData);\n  }\n\n  async attached() {\n    this._setupFields();\n    await super.attached();\n  }\n\n  @computedFrom('invoice')\n  get hasInbound(): boolean{\n    return !!this.invoice.items.find((item) => item.itemName === \"Inbound Fee\");\n  }\n\n  @computedFrom('invoice')\n  get hasOutbound(): boolean{\n    return !!this.invoice.items.find((item) => item.itemName === \"Outbound Fee\");\n  }\n\n  @computedFrom('invoice')\n  get hasStorage(): boolean{\n    return !!this.invoice.items.find((item) => item.itemName === \"Storage Fee\");\n  }\n\n  @computedFrom('invoice')\n  get hasReturn(): boolean{\n    return !!this.invoice.items.find((item) => item.itemName === \"Returns Fee\");\n  }\n\n  @computedFrom('invoice')\n  get hasAddrCorr(): boolean{\n    return !!this.invoice.items.find((item) => item.itemName === \"Address Corrections Fee\");\n  }\n\n  _setupFields() {\n    $(this.$inboundFileLink).attr('href', `data:text/csv;charset=utf-8, ${escape(this.invoice.inboundFile)}`);\n    $(this.$outboundFileLink).attr('href', `data:text/csv;charset=utf-8, ${escape(this.invoice.outboundFile)}`);\n    $(this.$storageFileLink).attr('href', `data:text/csv;charset=utf-8, ${escape(this.invoice.storageFile)}`);\n    $(this.$returnsFileLink).attr('href', `data:text/csv;charset=utf-8, ${escape(this.invoice.returnsFile)}`);\n    $(this.$addrCorrFileLink).attr('href', `data:text/csv;charset=utf-8, ${escape(this.invoice.addressCorrFile)}`);\n  }\n \n}","module.exports = \"<template> <require from=shared-ui/converters/simple-date-format></require> <require from=shared-ui/converters/boolean-format></require> <require from=shared-ui/converters/currency-format></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui centered stackable padded grid\\\"> <div class=\\\"sixteen wide column\\\"> <h1 class=\\\"ui center aligned header\\\">${invoice.name}</h1> </div> </div> <form class=\\\"ui form\\\" ref=$viewForm> <h4 class=\\\"ui dividing header\\\">Primary Information</h4> <div class=\\\"two fields\\\"> <div class=field> <b>Date:</b> ${invoice.date | simpleDateFormat} </div> <div class=field> <b>Total:</b> ${invoice.amountTotal | currencyFormat} </div> </div> <div class=\\\"two fields\\\"> <div class=field> <b>Due Date:</b> ${invoice.dueDate | simpleDateFormat} </div> <div class=field> <b>Total Due:</b> ${invoice.amountDue | currencyFormat} </div> </div> <h4 class=\\\"ui dividing header\\\">Fees</h4> <div class=\\\"ui link cards\\\"> <a class=\\\"ui raised fluid card\\\" repeat.for=\\\"itemLine of invoice.items\\\" route-href=\\\"route.bind: viewItemRoute; params.bind: {id: itemLine.itemId}\\\"> <div class=content> <div class=description> <form class=\\\"ui form\\\"> <div class=\\\"four fields\\\"> <div class=field> <b>Type:</b> ${itemLine.itemName} </div> <div class=field> <b>Quantity:</b> ${itemLine.quantity} </div> <div class=field> <b>Charges:</b> ${itemLine.totalCharges | currencyFormat} </div> </div> </form> </div> </div> </a> </div> <h4 class=\\\"ui dividing header\\\">File Data</h4> <div class=fields> <div class=field show.bind=hasInbound> <b>Inbound File:</b> <a href=\\\"data:text/csv;charset=utf-8,\\\" download.bind=invoice.inboundFileName ref=$inboundFileLink>${invoice.inboundFileName}</a> </div> <div class=field show.bind=hasOutbound> <b>Outbound File:</b> <a href=\\\"data:text/csv;charset=utf-8,\\\" download.bind=invoice.outboundFileName ref=$outboundFileLink>${invoice.outboundFileName}</a> </div> <div class=field show.bind=hasStorage> <b>Storage File:</b> <a href=\\\"data:text/csv;charset=utf-8,\\\" download.bind=invoice.storageFileName ref=$storageFileLink>${invoice.storageFileName}</a> </div> <div class=field show.bind=hasReturn> <b>Returns File:</b> <a href=\\\"data:text/csv;charset=utf-8,\\\" download.bind=invoice.returnsFileName ref=$returnsFileLink>${invoice.returnsFileName}</a> </div> <div class=field show.bind=hasAddrCorr> <b>Address Corrections File:</b> <a href=\\\"data:text/csv;charset=utf-8,\\\" download.bind=invoice.addressCorrFileName ref=$addrCorrFileLink>${invoice.addressCorrFileName}</a> </div> </div> </form> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, observable, computedFrom } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport { ItemService } from \"items/services/item_service\";\nimport { RecordReference } from \"shared-models/record-reference\";\nimport { CarrierReference, ShippingMethodReference } from \"orders/models/carrier-record\";\nimport { CountryReference, StateReference } from \"orders/models/country-record\";\nimport { CountryService } from \"orders/services/country_service\";\nimport { CarrierService } from \"orders/services/carrier_service\";\nimport { ShippingAddressService } from \"shipping-addresses/services/shipping_address_service\";\nimport { ShippingAddress } from \"shipping-addresses/models/shipping-address-record\";\nimport { RateCalculatorRequest, RateCalculatorRequestItem, RateCalculatorResponse } from \"billing/models/rate-calculator\";\nimport { ZoneRange, getMatchingZone } from \"billing/models/zones\";\nimport { BillingService } from \"billing/services/billing-service\";\nimport { BillingRate, getMatchingRates } from \"billing/models/billing-rate\";\nimport { ItemReference } from \"items/models/item-record\";\nimport { ColdChainZip } from \"cold-chain/models/cold-chain-zip\";\nimport { ColdChainService } from \"cold-chain/services/cold-chain-service\";\n\n@autoinject\nexport class RateCalculator extends StandardView {\n\n    formDisabled: boolean = false;\n\n    $itemDropdown: HTMLElement;\n\n    $countryDropdown: HTMLElement;\n\n    $stateDropdown: HTMLElement;\n\n    $carrierDropdown: HTMLElement;\n\n    $shipMethodDropdown: HTMLElement;\n\n    $zoneDropdown: HTMLElement;\n\n    $shippingAddressDropdown: HTMLElement;\n\n    $showColdChainInfo: HTMLElement;\n\n    $coldChainView: HTMLElement;\n\n    $coldChainLoading: HTMLElement;\n\n    rateCalculatorRequest: RateCalculatorRequest= new RateCalculatorRequest({});\n\n    @observable\n    zip: string;\n\n    @observable\n    carrier: CarrierReference;\n\n    @observable\n    country: CountryReference;\n\n    @observable\n    state: StateReference;\n\n    @observable\n    shippingMethod: ShippingMethodReference;\n\n    @observable\n    zone: RecordReference;\n\n    isColdChainCompatible: boolean = false;\n\n    coldChainZip: ColdChainZip = null;\n\n    zoneRanges: ZoneRange[] = [];\n\n    countries: CountryReference[] = [];\n\n    carriers: CarrierReference[] = [];\n\n    rateCalculatorResponses: RateCalculatorResponse[] = [];\n\n    coldChainResponse: RateCalculatorResponse = null;\n\n    allItems: ItemReference[] = [];\n\n    items: RateCalculatorRequestItem[] = [];\n\n    currentItemLineId: number = 1;\n\n    @observable\n    selectedShippingAddress: ShippingAddress;\n\n\n    constructor(\n        private billingService: BillingService,\n        private countryService: CountryService,\n        private itemService: ItemService,\n        private carrierService: CarrierService,\n        private coldChainService: ColdChainService,\n        private shippingAddressService: ShippingAddressService) {\n        super(RateCalculator.name);\n    }\n\n    async activate(params, routeData) {\n        try {\n            // this.listType = params[\"listType\"];\n            let promiseResponse = await Promise.all([\n                this.countryService.getAllCountryRecords(),\n                this.carrierService.getRecords(),\n                this.billingService.getAllZoneRanges(),\n                this.itemService.getAllRecords()\n            ]);\n            this.countries = promiseResponse[0];\n            this.carriers = promiseResponse[1];\n            this.zoneRanges = promiseResponse[2];\n            this.allItems = promiseResponse[3];\n            this.addItem();\n        } catch (err) {\n            this.errorMessageUtil.showError(err);\n            this.routeToView(ROUTES.DASHBOARD.name);\n        }\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        await this._setupFields();\n        await super.attached();\n    } \n    \n    getColdChainShipMethod() {\n        return this.carriers.find((carrier) => carrier.hasColdChainShipMethod()).getColdChainShipMethod();\n    }\n\n    async checkRates() {\n        this.disableView();\n        this.logger.info(`checkRates`);\n        this.rateCalculatorResponses = [];\n        this.coldChainResponse = null;\n        let responses = await Promise.all([\n            this.billingService.getRateCalculatorResponse(new RateCalculatorRequest({\n                items: (this.items || []).filter((item) => item.addedLine), \n                zoneid: this.zone ? this.zone.id : null, \n                shipmethodid: this.shippingMethod ? this.shippingMethod.id : null})),\n            this.isColdChainCompatible && this.coldChainZip ? this.billingService.getRateCalculatorResponse(new RateCalculatorRequest({\n                items: (this.items || []).filter((item) => item.addedLine), \n                zoneid: this.coldChainZip.zone.id, \n                shipmethodid: this.getColdChainShipMethod().id})) : []\n        ])\n        this.rateCalculatorResponses = responses[0].filter((response)=> !response.isColdChain());\n        this.coldChainResponse = responses[1].length > 0 ? responses[1][0] : null;\n        this.enableView();\n    }\n\n    async _setupFields() {\n        await Promise.all([\n            $(this.$countryDropdown).dropdown({\n                onChange: async (value, text, $selectedItem) => {\n                    if (value) {\n                        this.country = this.countries.find((country) => country.id == value);\n                    } else {\n                        this.country = null;\n                    }\n                }\n            }),\n\n            $(this.$stateDropdown).dropdown({\n                onChange: async (value, text, $selectedItem) => {\n                    if (value) {\n                        this.state = this.country ? this.country.states.find((state) => state.id == value) : null;\n                    } else {\n                        this.state = null;\n                    }\n                }\n            }),\n\n            $(this.$zoneDropdown).dropdown({\n                onChange: async (value, text, $selectedItem) => {\n                    if (value) {\n                        this.zone = this.billingZones.find((billingZone) => billingZone.id == value);\n                    } else {\n                        this.zone = null;\n                    }\n                }\n            }),\n\n            $(this.$carrierDropdown).dropdown({\n                onChange: async (value, text, $selectedItem) => {\n                    if (value) {\n                        this.carrier = this.carriers.find((carrier) => carrier.id == value);\n                    } else {\n                        this.carrier = null;\n                    }\n                    await $(this.$shipMethodDropdown).dropdown('clear');\n                }\n            }),\n\n            $(this.$shipMethodDropdown).dropdown({\n                onChange: async (value, text, $selectedItem) => {\n                    if (value) {\n                        this.shippingMethod = this.carrier ? this.carrier.shippingMethods.find((shippingMethod) => shippingMethod.id == value) : null;\n                    } else {\n                        this.shippingMethod = null;\n                    }\n                }\n            }),\n\n            $(this.$shippingAddressDropdown).dropdown(\n                {\n                    apiSettings: {\n                        responseAsync: async (settings, callback) => {\n                            let searchResponse = await this.shippingAddressService.searchRecords({page:1, filter:settings[\"urlData\"][\"query\"]});\n                            let addresses = searchResponse.records.map((addressRecord) => {\n                                return {\n                                    \"name\": addressRecord.name,\n                                    \"value\": addressRecord.id,\n                                    \"text\": addressRecord.name\n                                };\n                            });\n                            callback({\n                                \"success\": true,\n                                \"results\": addresses\n                            });\n                        },\n                    },\n                    onChange: async (value, text, $selectedItem) => {\n                        this.disableView();\n                        if (value) {\n                            this.selectedShippingAddress = await this.shippingAddressService.getRecord(value);\n                        } else {\n                            this.selectedShippingAddress = null;\n                        }\n                    }\n                })\n        ]);\n        await $(this.$countryDropdown).dropdown('set selected', this.unitedStates.id);\n        this.country = this.unitedStates;\n    }\n\n    @computedFrom('country')\n    get states(): StateReference[] {\n        if (this.country) {\n            return this.country.states;\n        }\n        return [];\n    }\n\n    @computedFrom('zoneRanges.length')\n    get billingZones(): RecordReference[] {\n        let zones = [];\n        let zoneIds = [];\n        this.zoneRanges.forEach((zoneRange) => {\n            if (zoneIds.indexOf(zoneRange.billingZone.id) === -1) {\n                zoneIds.push(zoneRange.billingZone.id);\n                zones.push(zoneRange.billingZone);\n            }\n        });\n        return zones.sort((a: RecordReference, b:RecordReference)=>{return a.name.localeCompare(b.name)});\n    }\n\n    @computedFrom('countries.length')\n    get unitedStates(): CountryReference {\n        if (this.countries && this.countries.length > 0) {\n            return this.countries.find((country) => country.name === \"United States\");\n        }\n        return null;\n    }\n\n    @computedFrom('carrier')\n    get shippingMethods(): ShippingMethodReference[] {\n        if (this.carrier) {\n            return this.carrier.shippingMethods;\n        }\n        return [];\n    }    \n\n    @computedFrom('items.length', 'matchedRates')\n    get totalCharge(): number{\n        return 0;\n    }\n\n    async selectedShippingAddressChanged(newValue: ShippingAddress, oldValue: ShippingAddress) {\n        this.disableView();\n        await $(this.$countryDropdown).dropdown('set selected', this.unitedStates.id);\n        this.zip = \"\";\n        this.country = null;\n        this.state = null;\n        if (newValue) {\n            await $(this.$countryDropdown).dropdown('set selected', newValue.country.id);\n            this.zip = newValue.zipcode;\n            this.country = newValue.country;\n            this.state = newValue.state;\n        }\n        this.enableView();\n    }\n\n    async zipChanged(newValue: string, oldValue: string) {\n        await this._setZone();\n        this.isColdChainCompatible = false;\n        if(this.zip && this.zip.length > 3){\n            $(this.$showColdChainInfo).hide(); \n            await this._setColdChainCompaitible();  \n        } else{\n            $(this.$showColdChainInfo).show();\n        }\n    }\n\n    async _setColdChainCompaitible() {\n        this.coldChainZip = null;\n        if(!this.zip || this.zip.length < 4 || this.isInternational()){\n          this.isColdChainCompatible = false;\n          return;\n        }\n        $(this.$coldChainView).hide();\n        $(this.$coldChainLoading).show();\n        let zip = parseInt(this.zip.split(\"-\")[0],10).toString();\n        let searchResults = await this.coldChainService.searchColdChainZips(1, zip, 100);\n        this.coldChainZip = searchResults.records.find((coldChainZipRecord) => {\n          return coldChainZipRecord.zipcode == zip;\n        }) as ColdChainZip;   \n        $(this.$coldChainView).show();\n        $(this.$coldChainLoading).hide();\n        if(this.coldChainZip){\n          this.isColdChainCompatible = true;\n          return;\n        }\n        this.isColdChainCompatible = false;\n    }\n\n    isInternational(): boolean{\n        if(!this.country){\n            return false;\n        }\n        if(this.country.name.toUpperCase() === \"UNITED STATES\"){\n            return false;\n        }\n        return true;\n    }\n\n    async carrierChanged(newValue: CarrierReference, oldValue: CarrierReference) {\n        await this._setZone();\n    }\n\n    async countryChanged(newValue: CountryReference, oldValue: CountryReference) {\n        await this._setZone();\n    }\n\n    async stateChanged(newValue: StateReference, oldValue: StateReference) {\n        await this._setZone();\n    }\n\n    async zoneChanged(newValue: RecordReference, oldValue: RecordReference) {\n        if(this.zone){\n            $(this.$zoneDropdown).dropdown('set selected', this.zone.id);                       \n        } else{\n            $(this.$zoneDropdown).dropdown('clear');\n        }\n    }\n\n    async _setZone() {\n        this.disableView();\n        this.zone = null;\n        let zoneRange = getMatchingZone(this.zoneRanges, this.carrier, this.zip, this.country, this.state);\n        if (zoneRange) {\n            this.zone = zoneRange.billingZone;\n        }\n        this.enableView();\n    }    \n\n    async addItem(item?: RateCalculatorRequestItem) {\n        if(item){      \n          if(!item.itemReference){\n            this.errorMessageUtil.showErrorMessage(\"Need To Provide an Item.\");\n            return;\n          }\n          if(!item.quantity || item.quantity < 1){\n            this.errorMessageUtil.showErrorMessage(\"Need To Provide a Quantity of 1 or more.\");\n            return;\n          }\n          item.addedLine = true;\n        }\n        this.items.push(new RateCalculatorRequestItem({id: this.currentItemLineId}));\n        this.currentItemLineId++;\n    }   \n\n    removeItem(lineId){\n        this.items = this.items.filter((item) => item.id != lineId);\n    }\n}","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, bindable, computedFrom } from \"aurelia-framework\";\nimport { ItemReference } from \"items/models/item-record\";\nimport { ItemService } from \"items/services/item_service\";\nimport { RateCalculatorRequestItem } from \"billing/models/rate-calculator\";\n\n@autoinject\nexport class RateCalculatorItemView extends StandardView {\n\n    formDisabled: boolean = false;\n\n    @bindable\n    requestItem: RateCalculatorRequestItem;\n\n    @bindable\n    allItems: ItemReference[] = [];\n\n    $itemDropdown: HTMLElement;\n\n    constructor(\n        private itemService: ItemService) {\n        super(RateCalculatorItemView.name);\n    }\n\n    async activate(params, routeData) {\n        alert(`Activate :: ${JSON.stringify(params)}`);\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        await this._setupFields();\n        await super.attached();\n    }\n\n    disableForm() {\n        this.formDisabled = true;\n    }\n\n    enableForm() {\n        this.formDisabled = false;\n    }\n    \n    async _setupFields() {\n        await Promise.all([\n            $(this.$itemDropdown).dropdown({\n                onChange: async (value, text, $selectedItem) => {\n                    if (value) {\n                        this.requestItem.itemReference = this.allItems ? this.allItems.find((item) => item.id == value) : null;\n                    } else {\n                        this.requestItem.itemReference = null;\n                    }\n                }\n            })]);\n    }\n\n}","module.exports = \"<template> <require from=shared-ui/converters/boolean-format></require> <require from=shared-ui/converters/currency-format></require> <form class=\\\"ui form\\\"> <div class=\\\"two fields\\\"> <div class=\\\"field required\\\"> <label>Item</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$itemDropdown> <input name=item type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">Item</div> <div class=menu> <div repeat.for=\\\"item of allItems\\\" class=item data-value.bind=item.id> ${item.name}</div> </div> </div> </div> <div class=\\\"field required\\\"> <label>Quantity</label> <input type=text name=quantity value.bind=requestItem.quantity placeholder=\\\"1 or greater...\\\"> </div> </div> </form> </template>\";","module.exports = \"<template> <require from=shared-ui/converters/boolean-format></require> <require from=shared-ui/converters/currency-format></require> <require from=billing/views/rate-calculator-item-view></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui centered grid\\\"> <div class=\\\"sixteen wide column\\\"> <h1 class=\\\"ui center aligned header\\\">Rate Calculator</h1> </div> <div class=\\\"sixteen wide column\\\"> <button class=\\\"positive ui button\\\" click.delegate=checkRates()>Check Rates</button> </div> <div class=\\\"sixteen wide column\\\"> <p> <span class=\\\"ui medium red text\\\"> * To Calculate a Rate, a Zone must be provided or determined by providing a Carrier, Country, Zipcode, and State. </span> </p> <form class=\\\"ui form\\\"> <h4 class=\\\"ui dividing header\\\">Shipping Method</h4> <div class=\\\"two fields\\\"> <div class=\\\"field required\\\"> <label>Carrier/Type</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$carrierDropdown> <input name=carriers type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">Carrier</div> <div class=menu> <div repeat.for=\\\"carrier of carriers\\\" class=item data-value.bind=carrier.id> ${carrier.name}</div> </div> </div> </div> <div class=field> <label>Method</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$shipMethodDropdown> <input name=shipmethod type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">Ship Method</div> <div class=menu> <div repeat.for=\\\"shippingMethod of shippingMethods\\\" class=item data-value.bind=shippingMethod.id> ${shippingMethod.name}</div> </div> </div> </div> </div> <h4 class=\\\"ui dividing header\\\">Shipping Address</h4> <div class=\\\"two fields\\\"> <div class=field> <label>Select Shipping Address</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$shippingAddressDropdown> <input name=addresses type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">Shipping Address</div> <div class=menu> <div if.bind=!!selectedShippingAddress class=item data-value.bind=selectedShippingAddress.id> ${selectedShippingAddress.name}</div> </div> </div> </div> </div> <div class=\\\"two fields\\\"> <div class=field> <label>Zip</label> <input type=text name=zip placeholder=Zipcode value.bind=zip> </div> <div class=\\\"field required\\\"> <label>Country</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$countryDropdown> <input name=countries type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">Country</div> <div class=menu> <div repeat.for=\\\"country of countries\\\" class=item data-value.bind=country.id> ${country.name}</div> </div> </div> </div> </div> <div class=\\\"two fields\\\"> <div class=field> <label>State</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$stateDropdown> <input name=states type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">State</div> <div class=menu> <div repeat.for=\\\"state of states\\\" class=item data-value.bind=state.id> ${state.name}</div> </div> </div> </div> <div class=field> <div class=field> <label>Zone</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$zoneDropdown> <input name=zone type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">Zone</div> <div class=menu> <div repeat.for=\\\"billingZone of billingZones\\\" class=item data-value.bind=billingZone.id> ${billingZone.name}</div> </div> </div> </div> </div> </div> <h4 class=\\\"ui dividing header\\\">Cold Chain</h4> <div class=\\\"ui icon hidden message\\\" ref=$coldChainLoading> <div class=content> <div class=header> <i class=\\\"notched circle loading icon\\\"></i> Just one second, checking if Cold Chain Compatible. </div> </div> </div> <span ref=$coldChainView> <p ref=$showColdChainInfo> <span class=\\\"ui medium red text\\\"> * A Zipcode must be provided to check Cold Chain Compatibility. </span> </p> <div class=\\\"two fields\\\"> <div class=field> <b>Is Compatible:</b> ${isColdChainCompatible | booleanFormat} </div> <div if.bind=isColdChainCompatible class=field> <b>Zone:</b> ${coldChainZip.zoneNumber()} </div> </div> <div if.bind=isColdChainCompatible class=\\\"two fields\\\"> <div class=field> <b>Delivery Day:</b> ${coldChainZip.deliveryDay.name} </div> <div class=field> <b>Delivery Time:</b> ${coldChainZip.deliveryTime} </div> </div> <div if.bind=coldChainResponse class=\\\"ui raised fluid card\\\"> <div class=content> <div class=header> Cold Chain Rate </div> <div class=description> <b>Charge:</b> ${coldChainResponse.totalCharge | currencyFormat} </div> </div> </div> </span> <h4 class=\\\"ui dividing header\\\">Items</h4>  <div class=\\\"ui cards\\\"> <div class=\\\"ui raised fluid card\\\" repeat.for=\\\"item of items\\\"> <div class=content> <div class=header> <div class=\\\"ui negative button\\\" if.bind=item.addedLine tabindex=0 click.delegate=removeItem(item)>Remove</div> </div> <div class=description> <rate-calculator-item-view request-item.two-way=item all-items.two-way=allItems> </rate-calculator-item-view> <div class=\\\"ui primary button\\\" if.bind=!item.addedLine tabindex=0 click.delegate=addItem(item)>Add Item</div> </div> </div> </div> </div> <h4 class=\\\"ui dividing header\\\">Rates</h4> <div class=\\\"ui cards\\\"> <div class=\\\"ui raised fluid card\\\" repeat.for=\\\"rateCalculatorResponse of rateCalculatorResponses\\\"> <div class=content> <div class=description> <form class=\\\"ui form\\\"> <div class=\\\"two fields\\\"> <div class=field> <b>Shipping Methods:</b> ${rateCalculatorResponse.shippingMethods.join(', ')} </div> <div class=field> <b>Charge:</b> ${rateCalculatorResponse.totalCharge | currencyFormat} </div> </div> </form> </div> </div> </div> </div> </form> </div> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, computedFrom, bindable } from \"aurelia-framework\";\nimport { ChangeOrderAddressRequest } from \"change-orders/models/change-order-request\";\nimport { CountryService } from \"orders/services/country_service\";\nimport { CountryReference, StateReference } from \"orders/models/country-record\";\n\n@autoinject\nexport class ChangeOrderAddress extends StandardView {\n\n  @bindable\n  changeRequest: ChangeOrderAddressRequest;\n\n  $requestForm: HTMLElement;\n\n  $carrierDropdown: HTMLElement;\n\n  $shipMethodDropdown: HTMLElement;\n\n  $countryDropdown: HTMLElement;\n\n  $stateDropdown: HTMLElement;\n\n  countries: CountryReference[] = [];\n\n\n  constructor(private countryService: CountryService) {\n    super(ChangeOrderAddress.name);\n  }\n\n  async activate(params, routeData) {\n    this.disableView();\n    this.changeRequest = params;\n    if(!this.changeRequest.id){\n      this.countries = await this.countryService.getAllCountryRecords();\n    }    \n    await super.activate(params, routeData);\n    this.enableView();\n  }\n\n  async attached() {\n    if(!this.changeRequest.id){\n      await this._setupFields();\n      await this._setupForms();\n    }    \n    await super.attached();\n  }\n\n  async _setupFields() {\n    await Promise.all([\n      $(this.$countryDropdown).dropdown(\n        {\n          onChange: async (value, text, $selectedItem) => {\n            if (value) {\n              this.changeRequest.newAddress.country = this.countries.find((country) => country.id == value);\n            } else {\n              this.changeRequest.newAddress.country = null;\n            }\n            await $(this.$stateDropdown).dropdown('clear');\n          }\n        }),\n\n      $(this.$stateDropdown).dropdown(\n        {\n          onChange: async (value, text, $selectedItem) => {\n            if (value) {\n              this.changeRequest.newAddress.state = this.currentCountry ? this.currentCountry.states.find((state) => state.id == value) : null;\n            } else {\n              this.changeRequest.newAddress.state = null;\n            }\n          }\n        })\n    ]);\n    if(this.changeRequest.currentAddress.country){\n      await $(this.$countryDropdown).dropdown('set selected', this.changeRequest.currentAddress.country.id);\n    } else{\n      await $(this.$countryDropdown).dropdown('set selected', this.unitedStates.id);\n    }\n\n    if(this.changeRequest.currentAddress.state){\n      await $(this.$stateDropdown).dropdown('set selected', this.changeRequest.currentAddress.state.id);\n    }\n    \n  }\n\n  async _setupForms() {\n\n  }\n\n  @computedFrom('changeRequest.newAddress.country', 'countries.length')\n  get currentCountry(): CountryReference {\n    if (!this.changeRequest.newAddress.country) {\n      return null;\n    }\n    return this.countries.find((country) => country.id === this.changeRequest.newAddress.country.id)\n  }\n\n\n  @computedFrom('currentCountry')\n  get states(): StateReference[] {\n    if (this.currentCountry) {\n      return this.currentCountry.states;\n    }\n    return [];\n  }\n\n  @computedFrom('countries.length')\n  get unitedStates(): CountryReference {\n    if (this.countries && this.countries.length > 0) {\n      return this.countries.find((country) => country.name === \"United States\");\n    }\n    return null;\n  }\n\n}","module.exports = \"<template> <p>${changeRequest.changeOrderType.description}</p> <form class=\\\"ui form\\\" ref=$requestForm> <h4 class=\\\"ui dividing header\\\">Current Address</h4> <p style=white-space:pre-line>${changeRequest.currentAddress.addressForm} ${changeRequest.currentEmail}</p> <h4 class=\\\"ui dividing header\\\">New Address</h4> <div class=\\\"two fields\\\"> <div class=field> <label>Attention</label> <input type=text name=attention placeholder=attention value.bind=changeRequest.newAddress.attention show.bind=isCreating> <span show.bind=!isCreating>${changeRequest.newAddress.attention}</span> </div> <div class=field> <label>Addressee</label> <input type=text name=addressee placeholder=\\\"Phone Number\\\" value.bind=changeRequest.newAddress.addressee show.bind=isCreating> <span show.bind=!isCreating>${changeRequest.newAddress.addressee}</span> </div> </div> <div class=\\\"two fields\\\"> <div class=field> <label>Street</label> <input type=text name=street placeholder=Street value.bind=changeRequest.newAddress.address1 show.bind=isCreating> <span show.bind=!isCreating>${changeRequest.newAddress.address1}</span> </div> <div class=field> <label>Street2</label> <input type=text name=street2 placeholder=\\\"Street 2\\\" value.bind=changeRequest.newAddress.address2 show.bind=isCreating> <span show.bind=!isCreating>${changeRequest.newAddress.address2}</span> </div> </div> <div class=\\\"two fields\\\"> <div class=field> <label>City</label> <input type=text name=city placeholder=City value.bind=changeRequest.newAddress.city show.bind=isCreating> <span show.bind=!isCreating>${changeRequest.newAddress.city}</span> </div> <div class=field> <label>Zipcode</label> <input type=text name=zipcode placeholder=Zipcode value.bind=changeRequest.newAddress.zip show.bind=isCreating> <span show.bind=!isCreating>${changeRequest.newAddress.zip}</span> </div> </div> <div class=\\\"two fields\\\"> <div class=field> <label>Country</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$countryDropdown show.bind=isCreating> <input name=countries type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">Country</div> <div class=menu> <div repeat.for=\\\"country of countries\\\" class=item data-value.bind=country.id> ${country.name}</div> </div> </div> <span show.bind=!isCreating>${changeRequest.newAddress.country.name}</span> </div> <div class=field> <label>State</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$stateDropdown show.bind=isCreating> <input name=states type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">State</div> <div class=menu> <div repeat.for=\\\"state of states\\\" class=item data-value.bind=state.id> ${state.name}</div> </div> </div> <span show.bind=!isCreating>${changeRequest.newAddress.state.name}</span> </div> </div> <div class=\\\"two fields\\\"> <div class=field> <label>Phone</label> <input type=text name=phone placeholder=Phone value.bind=changeRequest.newAddress.phone show.bind=isCreating> <span show.bind=!isCreating>${changeRequest.newAddress.phone}</span> </div> </div> </form> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, bindable } from \"aurelia-framework\";\nimport { ChangeOrderEmailRequest } from \"change-orders/models/change-order-request\";\n\n@autoinject\nexport class ChangeOrderEmailView extends StandardView {\n\n  @bindable\n  changeRequest: ChangeOrderEmailRequest;\n  \n  $requestForm: HTMLElement;\n\n\n  constructor() {\n    super(ChangeOrderEmailView.name);\n  }\n\n  async activate(params, routeData) {\n    this.changeRequest = params;\n    await super.activate(params, routeData);\n  }\n\n  async attached() {    \n    await this._setupFields();\n    await this._setupForms();\n    await super.attached();\n  }\n\n  async _setupFields() {   \n  }\n\n  async _setupForms() {\n\n  }\n\n}","module.exports = \"<template> <p>${changeRequest.changeOrderType.description}</p> <form class=\\\"ui form\\\" ref=$requestForm> <div class=\\\"two fields\\\"> <div class=field> <label>Current Email</label> ${changeRequest.currentEmail} </div> <div class=\\\"field required\\\"> <label>New Email</label> <input type=text name=email placeholder=Email value.bind=changeRequest.newEmail show.bind=isCreating> <span show.bind=!isCreating>${changeRequest.newEmail}</span> </div> </div> </form> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, bindable } from \"aurelia-framework\";\nimport { ChangeOrderGiftMsgRequest } from \"change-orders/models/change-order-request\";\nimport { computedFrom } from \"aurelia-binding\";\n\n@autoinject\nexport class ChangeOrderGiftMessageView extends StandardView {\n\n  @bindable\n  changeRequest: ChangeOrderGiftMsgRequest;\n  \n  $requestForm: HTMLElement;\n\n\n  constructor() {\n    super(ChangeOrderGiftMessageView.name);\n  }\n\n  async activate(params, routeData) {\n    this.changeRequest = params;\n    await super.activate(params, routeData);\n  }\n\n  async attached() {    \n    await this._setupFields();\n    await this._setupForms();\n    await super.attached();\n  }\n\n  async _setupFields() {   \n  }\n\n  async _setupForms() {\n\n  }\n\n  @computedFrom('changeRequest.id')\n  get isCreating(): boolean{\n    return !this.changeRequest.id;\n  }\n\n}","module.exports = \"<template> <p>${changeRequest.changeOrderType.description}</p> <form class=\\\"ui form\\\" ref=$requestForm> <div class=\\\"two fields\\\"> <div class=field> <label>Current Gift Message</label> ${changeRequest.currentGiftMessage} </div> <div class=field> <label>New Gift Message</label> <textarea rows=2 value.bind=changeRequest.newGiftMessage show.bind=isCreating></textarea> <span show.bind=!isCreating>${changeRequest.newGiftMessage}</span> </div> </div> </form> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject } from \"aurelia-framework\";\nimport { ChangeOrderItemsRequest, ChangeOrderNewItem } from \"change-orders/models/change-order-request\";\nimport { ItemReference } from \"items/models/item-record\";\nimport { ItemService } from \"items/services/item_service\";\n\n@autoinject\nexport class ChangeOrderAddItemsView extends StandardView {\n\n    changeRequest: ChangeOrderItemsRequest;\n\n    $itemForm: HTMLElement;\n\n    $addItemModal: HTMLElement;\n\n    $itemDropdown: HTMLElement;\n\n    currentItemReference: ItemReference;\n\n    currentItemQuantity: number;\n  \n    currentOrderLineNumber: number = 0;\n\n    constructor(private itemService: ItemService) {\n        super(ChangeOrderAddItemsView.name);\n    }\n\n    async activate(params, routeData) {\n        this.changeRequest = params;\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        if(!this.changeRequest.id){\n            await this._setupFields();\n            await this._setupForms();\n        }\n        await super.attached();\n    }\n\n    async _setupFields() {\n        await $('.ui.checkbox').checkbox();\n\n        await $(this.$itemDropdown).dropdown({\n            apiSettings: {\n              responseAsync: async (settings, callback) => {\n                let searchResponse = await this.itemService.searchRecords({page: 1, filter: settings[\"urlData\"][\"query\"]});\n                let items = searchResponse.records.map((itemRecord) => {\n                  return {\n                    \"name\": itemRecord.name,\n                    \"value\": itemRecord.id,\n                    \"text\": itemRecord.name\n                  };\n                })\n                callback({\n                  \"success\": true,\n                  \"results\": items\n                });\n              },\n            },\n            onChange: async (value, text, $selectedItem) => {\n              this.disableView();\n              if (value) {\n                this.currentItemReference = await this.itemService.getRecord(value);\n              } else {\n                this.currentItemReference = null;\n              }\n              this.enableView();\n            }\n          })\n    }\n\n    async _setupForms() {\n        await $(this.$itemForm).form({\n            on: 'blur',\n            inline: true,\n            dateHandling: 'date',\n            onSuccess: (event: JQuery.TriggeredEvent<HTMLElement>, fields: any) => {\n                this.addNewOrderItem();\n            },\n            onFailure: (formErrors: string[], fields: any) => {\n                $(this.$itemForm).form('add errors', formErrors);\n                this.enableView();\n            },\n            fields: {\n                \"item\": {\n                    identifier: 'item',\n                    rules: [\n                        {\n                            type: 'empty',\n                            prompt: 'Need To Provide an Item'\n                        }\n                    ]\n                },\n                \"quantity\": {\n                    identifier: 'quantity',\n                    rules: [\n                        {\n                            type: 'integer[1..1000000]',\n                            prompt: 'Need To Provide a positive quantity'\n                        }\n                    ]\n                }\n            }\n        });\n    }\n\n    async addItem() {\n        this.currentItemReference = null;\n        this.currentItemQuantity = null;\n        await $(this.$itemDropdown).dropdown('clear');\n        $(this.$addItemModal).modal('show');\n      }\n\n    async clickAddNewOrderItem() {\n        this.disableView();\n        $(this.$itemForm).form('validate form');\n    }\n\n    async addNewOrderItem() {\n        this.disableView();\n        this.changeRequest.newItems.push(new ChangeOrderNewItem({\n            item: this.currentItemReference,\n            quantity: this.currentItemQuantity,\n            lineNumber: this.currentOrderLineNumber\n        }));\n        this.currentOrderLineNumber++;\n        this.currentItemReference = null;\n        this.currentItemQuantity = null;\n        $(this.$addItemModal).modal('hide');\n        this.enableView();\n    }\n\n    async removeOrderItem(orderLineToRemove) {\n        this.changeRequest.newItems = this.changeRequest.newItems.filter((orderLine) => orderLine.lineNumber != orderLineToRemove.lineNumber);\n    }\n}","module.exports = \"<template> <require from=shared-ui/converters/boolean-format></require> <p>${changeRequest.changeOrderType.description}</p> <h4 class=\\\"ui dividing header\\\" show.bind=isCreating> <div class=\\\"ui primary button\\\" tabindex=0 click.delegate=addItem()>Add Item</div> </h4> <h4 class=\\\"ui dividing header\\\">Existing Items</h4> <div class=\\\"ui cards\\\"> <div class=card repeat.for=\\\"orderLine of changeRequest.items\\\"> <div class=content> <div class=header>${orderLine.orderItem.itemName}</div> ${orderLine.orderItem.sku} </div> <div class=content> <form class=\\\"ui form\\\"> <div class=\\\"two fields\\\" show.bind=isCreating> <div class=field> <label>Committed</label> ${orderLine.orderItem.committed} </div> <div class=field> <label>Backordered</label> ${orderLine.orderItem.backordered} </div> </div> <div class=\\\"two fields\\\"> <div class=field> <b>Current Qty: </b>${orderLine.orderItem.quantity} </div> <div class=\\\"${orderLine.removeItem ? 'disabled' : ''} field\\\" show.bind=isCreating> <label>New Qty</label> <input type=text name=quantity value.bind=orderLine.newQuantity placeholder=\\\"1 or greater...\\\"> </div> <span show.bind=!isCreating><b>New Qty: </b>${orderLine.newQuantity}</span> </div> <div> <div class=field> <div class=\\\"ui toggle checkbox\\\" show.bind=isCreating> <input type=checkbox name=removeitem tabindex=0 class=hidden checked.bind=orderLine.removeItem> <label>Remove Item</label> </div> <span show.bind=!isCreating><b>Remove Item:</b> ${orderLine.removeItem | booleanFormat}</span> </div> </div> </form> </div> </div> </div> <h4 class=\\\"ui dividing header\\\">New Items</h4> <div class=\\\"ui cards\\\"> <div class=card repeat.for=\\\"orderLine of changeRequest.newItems\\\"> <div class=content> <div class=header>${orderLine.item.name}</div> ${orderLine.item.winerySku} </div> <div class=content> <form class=\\\"ui form\\\"> <div class=\\\"two fields\\\"> <div class=field> <label>Available</label> ${orderLine.item.available} </div> <div class=field> <label>Quantity</label> ${orderLine.quantity} </div> </div> <div class=\\\"ui negative button\\\" tabindex=0 click.delegate=removeOrderItem(orderLine) show.bind=isCreating>Remove Item </div> </form> </div> </div> </div> <div class=\\\"ui modal\\\" ref=$addItemModal> <i class=\\\"close icon\\\"></i> <div class=\\\"ui icon header\\\"> Add Item </div> <div class=content> <form class=\\\"ui form\\\" ref=$itemForm> <div class=\\\"four fields\\\"> <div class=\\\"field required\\\"> <label>Item</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$itemDropdown> <input name=item type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">Item</div> <div class=menu> </div> </div> </div> <div class=field> <label>Sku</label> ${currentItemReference.winerySku} </div> <div class=field> <label>Available</label> ${currentItemReference.available} </div> <div class=\\\"field required\\\"> <label>Quantity</label> <input type=text name=quantity value.bind=currentItemQuantity placeholder=\\\"1 or greater...\\\"> </div> </div> <h4 class=\\\"ui dividing header\\\"></h4> <div class=\\\"ui error message\\\"></div> <div class=\\\"ui positive button\\\" tabindex=0 click.delegate=clickAddNewOrderItem()>Add Item</div> </form> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, observable } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport { SearchResult } from \"shared-models/search-result\";\nimport { ChangeOrder } from \"change-orders/models/change-order\";\nimport { ChangeOrderService } from \"change-orders/services/change_order_service\";\nimport parse from \"papaparse\";\nimport { SimpleDateTimeFormatValueConverter } from \"shared-ui/converters/simple-datetime-format\";\nimport { computedFrom } from \"aurelia-binding\";\n\n@autoinject\nexport class ChangeOrderListView extends StandardView {\n\n    filteredRecords: ChangeOrder[];\n\n    currentSearchResult: SearchResult;\n\n    currentPage: number = 1;\n\n    listDisabled: boolean = false;\n\n    $downloadCSVLink: HTMLElement;\n\n    $exportLink: HTMLElement;\n\n    @observable\n    searchInput: string = \"\";\n\n    constructor(private changeOrderService: ChangeOrderService, private dateTimeConverter: SimpleDateTimeFormatValueConverter) {\n        super(ChangeOrderListView.name);\n    }\n\n    async activate(params, routeData) {\n        try {\n            await this._getResults();           \n        } catch (err) {\n            this.errorMessageUtil.showError(err);\n            this.routeToView(ROUTES.DASHBOARD.name);\n        }\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        await super.attached();\n    }\n\n    async _getResults() {\n        this.currentSearchResult = await this.changeOrderService.searchRecords(this.currentPage, this.searchInput);\n        this.filteredRecords = this.currentSearchResult.records as ChangeOrder[];\n    }\n\n    async searchInputChanged(newValue: string, oldValue: string) {\n        this.disableList();\n        this.currentPage = 1;\n        await this._getResults();\n        this.enableList();\n    }\n\n    async clickPrevious() {\n        this.disableList();\n        if (this.currentPage > 1) {\n            this.currentPage--;\n        }\n        await this._getResults();\n        this.enableList();\n    }\n\n    async clickNext() {\n        this.disableList();\n        if (this.currentPage < this.currentSearchResult.pageCount) {\n            this.currentPage++;\n        }\n        await this._getResults();\n        this.enableList();\n    }\n\n    disableList() {\n        this.listDisabled = true;\n    }\n\n    enableList() {\n        this.listDisabled = false;\n    }\n\n    async export() {\n        this.disableView();\n        let records = [];\n        if (this.searchInput) {\n            records = this.filteredRecords\n        } else {\n            records = await this.changeOrderService.getAllRecords();\n        }\n        \n        let recordsCSV = this.convertToCsv(records);\n        $(this.$exportLink).attr('href', `data:text/csv;charset=utf-8, ${escape(recordsCSV)}`);       \n        this.$exportLink.click();\n        this.enableView();\n    }\n    \n    @computedFrom()\n    get createChangeOrderRoute(){\n        return ROUTES.CREATE_CHANGE_ORDER.name;\n    }\n    \n    async onClickOpenOrder(changeOrder: ChangeOrder){\n        this.disableView();\n        if(changeOrder && changeOrder.order && changeOrder.order.id){\n            this.routeToView(ROUTES.VIEW_ORDER.name, {id: changeOrder.order.id});\n        }\n        this.enableView();\n    }\n\n    convertToCsv(records: ChangeOrder[]) {\n        return parse.unparse(records.map((record) => {\n            return {\n                \"Date\": this.dateTimeConverter.toView(record.createDate),\n                \"Status\": record.status,\n                \"Winery Order Number\": record.wineryOrderNumber,\n                \"Change Type(s)\": record.changeRequestsTypes\n            };\n        }));\n    }\n    \n    viewRecord(record: ChangeOrder){\n        this.routeToView(ROUTES.VIEW_CHANGE_ORDER.name, {id: record.id});\n    }\n}","module.exports = \"<template> <require from=shared-ui/converters/simple-date-format></require> <require from=shared-ui/converters/simple-datetime-format></require> <require from=shared-ui/converters/boolean-format></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui centered stackable grid\\\"> <div class=\\\"sixteen wide column\\\"> <h1 class=\\\"ui center aligned header\\\">Change Orders</h1> </div> <div class=\\\"five wide column\\\"> <a class=\\\"primary ui button\\\" route-href=\\\"route.bind: createChangeOrderRoute\\\">New</a> <button class=\\\"positive ui button\\\" click.delegate=export()>Export</button> <a href=\\\"data:text/csv;charset=utf-8,\\\" hidden download=changeorderlist.csv ref=$exportLink>Download</a> </div> <div class=\\\"six wide column\\\"> <div class=\\\"ui fluid input\\\"> <input type=text placeholder=Search... value.bind=searchInput> </div> </div> <div class=\\\"five wide column\\\"> <div class=\\\"ui grid\\\"> <div class=\\\"right floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === 1 ? 'disabled' : ''} button\\\" click.delegate=clickPrevious()> <i class=\\\"left arrow icon\\\"></i> </div> </div> <div class=\\\"six wide column\\\"> <span class=\\\"ui blue medium text\\\">Page ${currentPage} of ${currentSearchResult.pageCount || 1}</span> </div> <div class=\\\"left floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === (currentSearchResult.pageCount || 1) ? 'disabled' : ''} button\\\" click.delegate=clickNext()> <i class=\\\"right arrow icon\\\"></i> </div> </div> </div> </div> <div class=\\\"sixteen wide column\\\"> <div class=\\\"ui ${listDisabled ? 'active' : ''} inverted dimmer\\\"> <div class=\\\"ui text centered loader\\\">Loading</div> </div> <div class=\\\"ui three doubling stackable cards\\\"> <div class=\\\"ui raised fluid card\\\" repeat.for=\\\"filteredRecord of filteredRecords\\\"> <div class=content> <div class=header> <div class=\\\"ui grid\\\"> <div class=\\\"sixteen wide column\\\"> <div class=header> <button class=\\\"positive ui compact tiny button\\\" click.delegate=viewRecord(filteredRecord)>View</button> ${filteredRecord.status} </div> </div> </div> </div> <div class=description> <form class=\\\"ui form\\\" ref=$viewForm> <div class=\\\"one fields\\\"> <div class=field> <b>Date:</b> ${filteredRecord.createDate | simpleDateTimeFormat} </div> </div> <div class=\\\"one fields\\\"> <div class=field> <b>Order:</b> <a click.delegate=onClickOpenOrder(filteredRecord)>${filteredRecord.wineryOrderNumber}</a> </div> </div> <div class=\\\"one fields\\\"> <div class=field> ${filteredRecord.changeRequestsTypes} </div> </div> </form> </div> </div> </div> </div> </div> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, bindable, computedFrom } from \"aurelia-framework\";\nimport { ChangeOrderShipDateRequest } from \"change-orders/models/change-order-request\";\n\n@autoinject\nexport class ChangeOrderShipDateView extends StandardView {\n\n  @bindable\n  changeRequest: ChangeOrderShipDateRequest;\n  \n  $requestForm: HTMLElement;\n\n  $futureShipDateCalendar: HTMLElement;\n\n\n  constructor() {\n    super(ChangeOrderShipDateView.name);\n  }\n\n  async activate(params, routeData) {\n    this.changeRequest = params;\n    await super.activate(params, routeData);\n  }\n\n  async attached() {    \n    await this._setupFields();\n    await this._setupForms();\n    await super.attached();\n  }\n\n  async _setupFields() {   \n    await $(this.$futureShipDateCalendar).calendar({\n      type: 'date',\n      disabledDaysOfWeek: [0, 6],\n      minDate: new Date(),\n      onChange: (date, text, mode) => {\n        this.changeRequest.newShipDate = date;\n      }\n    });\n  }\n\n  async _setupForms() {\n\n  }\n\n  @computedFrom('changeRequest.id')\n  get isCreating(): boolean{\n    return !this.changeRequest.id;\n  }\n\n}","module.exports = \"<template> <require from=shared-ui/converters/simple-date-format></require> <p>${changeRequest.changeOrderType.description}</p> <form class=\\\"ui form\\\" ref=$requestForm> <div class=\\\"two fields\\\"> <div class=field> <label>Current Ship Date</label> ${changeRequest.currentShipDate | simpleDateFormat} </div> <div class=\\\"field required\\\"> <label>New Ship Date</label> <div class=\\\"ui calendar\\\" ref=$futureShipDateCalendar show.bind=isCreating> <div class=\\\"ui input left icon\\\"> <i class=\\\"calendar icon\\\"></i> <input type=text placeholder=\\\"Ship/Pickup Date\\\" name=future-ship-date> </div> </div> <span show.bind=!isCreating>${changeRequest.newShipDate | simpleDateFormat}</span> </div> </div> </form> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, bindable, computedFrom } from \"aurelia-framework\";\nimport { ChangeOrderShipInstructionsRequest } from \"change-orders/models/change-order-request\";\n\n@autoinject\nexport class ChangeOrderShipInstructionsView extends StandardView {\n\n  @bindable\n  changeRequest: ChangeOrderShipInstructionsRequest;\n  \n  $requestForm: HTMLElement;\n\n\n  constructor() {\n    super(ChangeOrderShipInstructionsView.name);\n  }\n\n  async activate(params, routeData) {\n    this.changeRequest = params;\n    await super.activate(params, routeData);\n  }\n\n  async attached() {    \n    await this._setupFields();\n    await this._setupForms();\n    await super.attached();\n  }\n\n  async _setupFields() {   \n  }\n\n  async _setupForms() {\n\n  }\n\n  @computedFrom('changeRequest.id')\n  get isCreating(): boolean{\n    return !this.changeRequest.id;\n  }\n\n}","module.exports = \"<template> <p>${changeRequest.changeOrderType.description}</p> <form class=\\\"ui form\\\" ref=$requestForm> <div class=\\\"two fields\\\"> <div class=field> <label>Current Shipping Instructions</label> ${changeRequest.currentInstructions} </div> <div class=\\\"field required\\\"> <label>New Shipping Instructions</label> <textarea rows=2 value.bind=changeRequest.newInstructions show.bind=isCreating></textarea> <span show.bind=!isCreating>${changeRequest.newInstructions}</span> </div> </div> </form> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, computedFrom, bindable } from \"aurelia-framework\";\nimport { CarrierService } from \"orders/services/carrier_service\";\nimport { CarrierReference, ShippingMethodReference } from \"orders/models/carrier-record\";\nimport { ChangeOrderShipMethodRequest } from \"change-orders/models/change-order-request\";\n\n@autoinject\nexport class ChangeOrderShipMethodView extends StandardView {\n\n  @bindable\n  changeRequest: ChangeOrderShipMethodRequest;\n\n  $requestForm: HTMLElement;\n\n  $carrierDropdown: HTMLElement;\n\n  $shipMethodDropdown: HTMLElement;\n\n  carriers: CarrierReference[] = []; \n\n  constructor(private carrierService: CarrierService) {\n    super(ChangeOrderShipMethodView.name);\n  }\n\n  async activate(params, routeData) {\n    this.disableView();\n    this.changeRequest = params;\n    if(!this.changeRequest.id){\n      this.carriers = await this.carrierService.getRecords();\n    }        \n    await super.activate(params, routeData);\n    this.enableView();\n  }\n\n  async attached() {    \n    await this._setupFields();\n    await this._setupForms();\n    await super.attached();\n  }\n\n  async _setupFields() {\n    await Promise.all([\n      $(this.$carrierDropdown).dropdown({\n        onChange: async (value, text, $selectedItem) => {\n          if (value) {\n            this.changeRequest.newCarrier = this.carriers.find((carrier) => carrier.id == value);\n          } else {\n            this.changeRequest.newCarrier = null;\n          }\n          await $(this.$shipMethodDropdown).dropdown('clear');\n        }\n      }),\n\n      $(this.$shipMethodDropdown).dropdown({\n        onChange: async (value, text, $selectedItem) => {\n          if (value) {\n            this.changeRequest.newShipMethod = this.changeRequest.newCarrier ? this.changeRequest.newCarrier.shippingMethods.find((shippingMethod) => shippingMethod.id == value) : null;\n          } else {\n            this.changeRequest.newShipMethod = null;\n          }\n        }\n      })\n    ]);\n  }\n\n  async _setupForms() {\n\n  }\n\n  @computedFrom('changeRequest.newCarrier')\n  get shippingMethods(): ShippingMethodReference[] {\n    if (this.changeRequest && this.changeRequest.newCarrier) {\n      return this.changeRequest.newCarrier.shippingMethods;\n    }\n    return [];\n  }\n\n}","module.exports = \"<template> <p>${changeRequest.changeOrderType.description}</p> <form class=\\\"ui form\\\" ref=$requestForm> <div class=\\\"two fields\\\"> <div class=field> <label>Current Carrier</label> ${changeRequest.currentCarrier.name} </div> <div class=field> <label>Current Method</label> ${changeRequest.currentShipMethod.name} </div> </div> <div class=\\\"two fields\\\"> <div class=\\\"field required\\\"> <label>New Carrier</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$carrierDropdown show.bind=isCreating> <input name=carriers type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">Carrier</div> <div class=menu> <div repeat.for=\\\"carrier of carriers\\\" class=item data-value.bind=carrier.id> ${carrier.name}</div> </div> </div> <span show.bind=!isCreating>${changeRequest.newCarrier.name}</span> </div> <div class=\\\"field required\\\"> <label>New Method</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$shipMethodDropdown show.bind=isCreating> <input name=shipmethod type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">Shipping Method</div> <div class=menu> <div repeat.for=\\\"shippingMethod of shippingMethods\\\" class=item data-value.bind=shippingMethod.id> ${shippingMethod.name}</div> </div> </div> <span show.bind=!isCreating>${changeRequest.newShipMethod.name}</span> </div> </div> </form> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject } from \"aurelia-framework\";\nimport { ChangeOrderType } from \"change-orders/models/change-order-request\";\n\n@autoinject\nexport class ChangeOrderStandardTaskView extends StandardView {\n \n    changeRequest: ChangeOrderType;\n    \n    constructor() {\n        super(ChangeOrderStandardTaskView.name);\n    }\n\n    async activate(params, routeData) {\n        await super.activate(params, routeData);\n    }\n\n    async attached() {        \n        await super.attached();\n    }\n}","module.exports = \"<template> ${changeRequest.changeOrderType.description} </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { bindable, autoinject, computedFrom, observable, PLATFORM } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport { ChangeOrderService } from \"change-orders/services/change_order_service\";\nimport { OrderService } from \"orders/services/order_service\";\nimport { Order } from \"orders/models/order\";\nimport { ChangeOrder } from \"change-orders/models/change-order\";\nimport { ChangeOrderType, ChangeOrderRequest } from \"change-orders/models/change-order-request\";\n\n// Need to add for each change order request view type\nPLATFORM.moduleName(\"change-orders/views/change-order-standard-task\");\nPLATFORM.moduleName(\"change-orders/views/change-order-ship-method\");\nPLATFORM.moduleName(\"change-orders/views/change-order-ship-instructions\");\nPLATFORM.moduleName(\"change-orders/views/change-order-ship-date\");\nPLATFORM.moduleName(\"change-orders/views/change-order-items\");\nPLATFORM.moduleName(\"change-orders/views/change-order-address\");\nPLATFORM.moduleName(\"change-orders/views/change-order-email\");\nPLATFORM.moduleName(\"change-orders/views/change-order-gift-message\");\n\n@autoinject\nexport class ChangeOrderView extends StandardView {\n  @bindable\n  changeOrder: ChangeOrder = null;\n\n  $viewForm: HTMLElement;\n\n  $createForm: HTMLElement;\n\n  $orderDropdown: HTMLElement;\n\n  $changesDropdown: HTMLElement;\n\n  changeOrderId: number;\n\n  orderId: number;\n\n  order: Order;\n\n  formDisabled: boolean = false;\n\n  changeTypes: ChangeOrderType[] = [];\n\n  pendingChangeOrder: ChangeOrder = null;\n\n  @observable\n  changeRequests: ChangeOrderRequest[] = [];\n\n  @observable\n  isCreating: boolean = false;\n\n  constructor(private changeOrderService: ChangeOrderService, private orderService: OrderService) {\n    super(ChangeOrderView.name);\n  }\n\n  async activate(params, routeData) {\n    try {\n      this.changeOrderId = params[\"id\"] ? parseInt(params[\"id\"]) : null;\n      this.orderId = params[\"orderid\"] ? parseInt(params[\"orderid\"]) : null;     \n      this.formDisabled = false;\n      this.changeRequests = [];\n      if(this.changeOrderId){\n        this.isCreating = false;\n        this.changeOrder = await this.changeOrderService.getRecord(this.changeOrderId);\n        this.changeRequests = this.changeOrder.changeRequests;\n      } else{\n        this.changeOrder = new ChangeOrder({});\n        this.changeTypes = await this.changeOrderService.getChangeOrderTypes();\n        this.isCreating = true;\n      } \n      if(this.orderId){          \n        this.order = await this.orderService.getRecord(this.orderId);\n        this.changeOrder.order = this.order;\n      }     \n      this._setupForms();\n    } catch (err) {\n      this.errorMessageUtil.showError(err);\n      this.routeToView(ROUTES.DASHBOARD.name);\n    }\n    await super.activate(params, routeData);\n  }\n\n  async attached() {\n    if(this.isCreating){\n      this._setupFields();\n    }    \n    this._setupForms();\n    await super.attached();\n  }\n\n  _setupFields() {\n    $(this.$orderDropdown).dropdown({\n      apiSettings: {\n        responseAsync: async (settings, callback) => {\n          let searchResponse = await this.orderService.searchRecords({page: 1, filter: settings[\"urlData\"][\"query\"]});\n          let orders = searchResponse.records.map((orderRecord) => {\n            return {\n              \"name\": orderRecord.wineryOrderNumber,\n              \"value\": orderRecord.id,\n              \"text\": orderRecord.wineryOrderNumber\n            };\n          });\n          callback({\n            \"success\": true,\n            \"results\": orders\n          });\n        },\n      },\n      onChange: async (value, text, $selectedItem) => {\n        this._disableForm();\n        try{\n          this.changeRequests = [];\n          this.pendingChangeOrder = null;\n          $(this.$changesDropdown).dropdown('clear');\n          if (value) {\n            let orderChangeOrders = await this.changeOrderService.getChangeOrdersByOrder(value);\n            this.pendingChangeOrder = this._getPendingChangeOrder(orderChangeOrders);\n            this.order = await this.orderService.getRecord(value);            \n            this.changeOrder.order = this.order;\n          } else {\n            this.order = null;\n          }\n        } catch(err){\n          this.errorMessageUtil.showError(err);\n        }     \n        this._enableForm();\n      }\n    });\n    if(this.order){\n      $(this.$orderDropdown).dropdown('set value', this.order.id);\n      $(this.$orderDropdown).dropdown('set text', this.order.wineryOrderNumber);\n    }\n\n    $(this.$changesDropdown).dropdown({\n      onChange: async (value, text, $selectedItem) => {\n        this._disableForm();\n        if(value){\n          let newChangeTypeIds = value.split(\",\");\n          if(newChangeTypeIds.length > this.changeRequests.length){ //ADDED\n            var newChangeType = newChangeTypeIds\n              .filter(newChangeTypeId => !this.changeRequests.find((changeRequest)=> changeRequest.changeOrderType.id == newChangeTypeId))\n              .map((changeTypeId) => this.changeTypes.find((changeType)=>changeType.id == changeTypeId))[0] as ChangeOrderType;              \n            this.changeRequests.push(newChangeType.getNewRequest(this.order));\n          } else if(newChangeTypeIds.length < this.changeRequests.length){ //REMOVED\n            this.changeRequests = this.changeRequests.filter(changeType => newChangeTypeIds.includes(changeType.changeOrderType.id.toString()));\n          }          \n        } else{\n          this.changeRequests = [];\n        }                \n        this._enableForm();\n      }\n    });\n  }\n\n  _getPendingChangeOrder(changeOrders: ChangeOrder[]): ChangeOrder {\n    let pendingChangeOrder = null;\n    changeOrders.forEach((changeOrder) => {\n      if (changeOrder.status == \"Pending Approval\") {\n        pendingChangeOrder = changeOrder;\n      }\n    });\n    return pendingChangeOrder;\n  }\n\n  _setupForms(){\n    if(this.isCreating){\n      this._showCreateForm();\n    } else{\n      this._showViewForm();\n    }\n  }\n\n  _showCreateForm(){\n    $(this.$viewForm).hide();\n    $(this.$createForm).show();\n  }\n\n  _showViewForm(){\n    $(this.$createForm).hide();\n    $(this.$viewForm).show();\n  }\n\n  _disableForm() {\n    this.formDisabled = true;\n  }\n\n  _enableForm() {\n    this.formDisabled = false;\n  }\n\n  _getValidationErrors(): string[] {\n    let validationErrors = [];\n    if(this.changeRequests.length === 0){\n      validationErrors.push(\"There needs to be at least 1 change to the order.\")\n    }\n    this.changeRequests.forEach((changeRequest) => {\n      validationErrors = validationErrors.concat(changeRequest.getValidationErrors());\n    });\n    return validationErrors;\n  }\n\n  @computedFrom('isCreating')\n  get formTitle(): string{\n    return this.isCreating ? `New Change Order` : `Change Order`;\n  }\n\n  @computedFrom('pendingChangeOrder', 'order')\n  get disableSave(): boolean{\n    return !!this.pendingChangeOrder || !this.order;\n  }\n\n  @computedFrom('changeOrder.status')\n  get statusColor(): string{\n    if(this.changeOrder.isDenied()){\n      return \"red\";\n    }\n    if(this.changeOrder.isApproved()){\n      return \"green\";\n    }\n    if(this.changeOrder.isCancelled()){\n      return \"orange\";\n    }\n    return \"blue\";\n  }\n\n  @computedFrom('changeOrder.status')\n  get isDenied(): boolean{\n    return this.changeOrder.status === \"Denied\";\n  }\n\n  @computedFrom('changeTypes.length', 'changeRequests.length', 'order.status')\n  get filteredChangeTypes(): ChangeOrderType[]{\n    return this.changeTypes.filter((changeType)=> this.changeTypeAllowed(changeType));\n  }\n\n  @computedFrom('order', 'isCreating', 'pendingChangeOrder')\n  get showChangeDetails(): boolean{\n    return !!this.order && this.isCreating && !this.pendingChangeOrder;\n  }\n\n  get canCancel(): boolean{\n    return !this.isCreating && this.changeOrder.isPendingApproval();\n  }\n\n  changeTypeAllowed(changeType: ChangeOrderType): boolean{\n    if(!this.order){\n      return false;\n    }\n    let singleChangeItem = this.getSingleChangeItem();\n    return changeType.isAllowedForOrder(this.order) && (!singleChangeItem || (singleChangeItem.id === changeType.id)) && (!changeType.doNotAllowOtherChanges || this.changeRequests.length === 0);\n  }\n\n  getSingleChangeItem(): ChangeOrderType{\n    let singleChargeRequest = this.changeRequests.find((changeRequest)=> changeRequest.changeOrderType.doNotAllowOtherChanges);\n    if(singleChargeRequest){\n      return singleChargeRequest.changeOrderType;\n    }\n    return null;\n  }  \n  \n  async createChangeOrder() {\n    this.scrollToTop();\n    this.disableView();\n    try{   \n      let validationErrors = this._getValidationErrors();\n      if(validationErrors.length > 0){\n        this.errorMessageUtil.showErrorMessage(validationErrors.join(\"\\r\\n\"), \"There are issues with the Change Order Request\");\n      } else{\n        this.changeOrder.changeRequests = this.changeRequests;\n        let changeOrderId = await this.changeOrderService.createRecord(this.changeOrder);\n        this.routeToView(ROUTES.VIEW_CHANGE_ORDER.name, { id: changeOrderId });\n      }      \n    } catch(err){\n      this.errorMessageUtil.showError(err, \"Unable to create Change order Request\");\n    }    \n    this.enableView();\n  }\n\n  async viewOrder(){\n    this.scrollToTop();\n    this.disableView();\n    try{   \n      this.routeToView(ROUTES.VIEW_ORDER.name, { id: this.changeOrder.order.id });  \n    } catch(err){\n      this.errorMessageUtil.showErrorMessage(\"Unable to open the order.\");\n    }    \n    this.enableView();\n  }\n\n  async cancelChangeOrder(){\n    this.scrollToTop();\n    this.disableView();\n    try{         \n      await this.changeOrderService.cancelChangeOrder(this.changeOrder);\n      this.routeToView(ROUTES.VIEW_CHANGE_ORDER.name, { id: this.changeOrder.id }); \n    } catch(err){\n      this.errorMessageUtil.showError(err, \"Unable to cancel the Change Order.\");\n    }    \n    this.enableView();\n  }\n\n}","module.exports = \"<template> <require from=shared-ui/converters/simple-datetime-format></require> <require from=shared-ui/converters/boolean-format></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui ${statusColor} right ribbon label\\\" show.bind=!isCreating> <h1 class=\\\"ui inverted header\\\">${changeOrder.status}</h1> </div> <div class=\\\"ui centered stackable one column grid\\\"> <div class=\\\"computer only three column row\\\"> <div class=column> <button if.bind=isCreating class=\\\"primary ${disableSave ? 'disabled' : ''} ui button\\\" click.delegate=createChangeOrder()>Save</button> <button if.bind=isCreating class=\\\"ui button\\\" click.delegate=cancelCreate()>Cancel</button> <button if.bind=canCancel class=\\\"ui negative button\\\" click.delegate=cancelChangeOrder()>Cancel</button> </div> <div class=column> <h1 class=\\\"ui center aligned header\\\">${formTitle}</h1> </div> <div class=column> </div> </div> <div class=\\\"mobile only tablet only column\\\"> <h1 class=\\\"ui center aligned header\\\">${formTitle}</h1> </div> <div class=\\\"mobile only tablet only column\\\"> <button if.bind=isCreating class=\\\"primary ui button\\\" click.delegate=createChangeOrder()>Save</button> <button if.bind=isCreating class=\\\"ui button\\\" click.delegate=cancelCreate()>Cancel</button> </div> <div class=column> <form class=\\\"ui form\\\" ref=$viewForm style=display:none> <h4 class=\\\"ui dividing header\\\">Primary Information</h4> <div class=\\\"two fields\\\"> <div class=field> <label>Date Created</label> ${changeOrder.createDate | simpleDateTimeFormat} </div> <div class=field> <label>Order</label> <a click.delegate=viewOrder()>${changeOrder.order.wineryOrderNumber}</a> </div> </div> <div class=\\\"two fields\\\"> <div class=field> <label>Notes For VinFillment</label> ${changeOrder.vinfillmentNotes} </div> <div class=field show.bind=isDenied> <label>Denied Reason(s)</label> ${changeOrder.deniedReasons} </div> </div> <div class=\\\"two fields\\\"> <div class=field if.bind=changeOrder.createdBy> <label>Created By User</label> ${changeOrder.createdBy.name} </div> <div class=field if.bind=changeOrder.lastUpdatedByUser> <label>Last Updated By User</label> ${changeOrder.lastUpdatedByUser.name} </div> </div> </form> <form class=\\\"ui form\\\" ref=$createForm style=display:none> <div class=\\\"ui ${formDisabled ? 'active' : ''} inverted dimmer\\\"> <div class=\\\"ui text centered loader\\\">Loading</div> </div> <h4 class=\\\"ui dividing header\\\">Order Details</h4> <div class=\\\"two fields\\\"> <div class=field> <label>Order</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$orderDropdown> <input name=orders type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">Order</div> <div class=menu> <div repeat.for=\\\"order of orders\\\" class=item data-value.bind=order.id> ${order.wineryOrderNumber}</div> </div> </div> <div class=\\\"ui negative ${pendingChangeOrder ? '' : 'hidden'} message\\\"> <div class=header> There is a Pending <a route-href=\\\"route: change-order; params.bind: {id: pendingChangeOrder.id}\\\">Change Order</a> for this order. </div> </div> </div> <div class=field show.bind=showChangeDetails> <label>Notes For VinFillment</label> <textarea rows=2 value.bind=changeOrder.vinfillmentNotes></textarea> </div> </div> <div show.bind=showChangeDetails> <div class=\\\"three fields\\\"> <div class=field> <label>VinFillment Order Number</label> ${order.vinfillmentOrderNumber} </div> <div class=field> <label>Order Status</label> ${order.status} </div> <div class=field> <label>Ship Method</label> ${order.shippingMethod.name} </div> </div> <div class=\\\"three fields\\\"> <div class=field> <label>Address</label> <p style=white-space:pre-line>${order.shippingAddress.addressForm}</p> </div> <div class=field> <label>Future Ship Date</label> ${order.futureShipDate | simpleDateFormat} </div> <div class=field> <label>Shipping Instructions</label> ${order.shippingInstructions} </div> </div> </div> <div class=\\\"two fields\\\" show.bind=showChangeDetails> <div class=field> <label>Change(s)</label> <div class=\\\"ui multiple selection dropdown\\\" ref=$changesDropdown> <input name=changes type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">Changes</div> <div class=menu> <div repeat.for=\\\"changeType of filteredChangeTypes\\\" class=item data-value.bind=changeType.id> ${changeType.name}</div> </div> </div> </div> </div> </form> <h4 class=\\\"ui dividing header\\\" show.bind=showChangeDetails>Change Request(s)</h4> <div class=column show.bind=!isCreating style=padding-top:2em> <div class=\\\"ui one stackable cards\\\"> <div class=\\\"ui raised fluid card\\\" repeat.for=\\\"changeRequest of changeRequests\\\"> <div class=content> <div class=header> ${changeRequest.changeOrderType.name} </div> <div class=description> <compose view-model.bind=changeRequest.viewModelPath model.bind=changeRequest> </compose> </div> </div> </div> </div> </div> <div class=column show.bind=showChangeDetails style=padding-top:2em> <div class=\\\"ui one stackable cards\\\"> <div class=\\\"ui raised fluid card\\\" repeat.for=\\\"changeRequest of changeRequests\\\"> <div class=content> <div class=header> ${changeRequest.changeOrderType.name} </div> <div class=description> <compose view-model.bind=changeRequest.viewModelPath model.bind=changeRequest> </compose> </div> </div> </div> </div> </div> </div> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, computedFrom } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport {VIEW_TYPES} from \"orders/views/order-list-view\"\n\n@autoinject\nexport class ColdChainDashboard extends StandardView {\n    alertNotificationsLoading: boolean;\n    kpisLoading: boolean;\n    constructor() {\n        super(ColdChainDashboard.name); \n        this.alertNotificationsLoading = true;\n        this.kpisLoading = true;\n        this.screenViewUtility.viewName = \"\";\n    }\n\n    async attached() {\n        await super.attached();        \n    }\n\n    async activate(params, routeData) {\n        await super.activate(params, routeData);\n        this.screenViewUtility.viewName = \"\";               \n    }\n\n    @computedFrom()\n    get coldChainCompatibleViewType(){\n        return VIEW_TYPES.COLD_CHAIN_COMP;\n    }\n\n    @computedFrom()\n    get coldChainOrdersViewType(){\n        return VIEW_TYPES.COLD_CHAIN_ORDERS;\n    }\n\n    @computedFrom()\n    get listOrdersRoute(){\n        return ROUTES.LIST_ORDERS.name;\n    }\n\n    @computedFrom()\n    get checkZipsRoute(){\n        return ROUTES.COLD_CHAIN_ZIPS.name;\n    }\n}","module.exports = \"<template> <div class=\\\"ui link stackable dashboard cards\\\"> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: listOrdersRoute; params.bind: {listType: coldChainCompatibleViewType}\\\"> <div class=header>Compatible Orders</div> <div class=description>View orders that can ship Cold Chain.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: listOrdersRoute; params.bind: {listType: coldChainOrdersViewType}\\\"> <div class=header>Cold Chain Orders</div> <div class=description>View orders shipping Cold Chain.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: checkZipsRoute\\\"> <div class=header>Check Zipcodes</div> <div class=description>Verify Cold Chain Compatible Zipcodes.</div> </a> </div> </div> <style>.dashboard.cards .content{text-align:center;min-height:80px}</style> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, observable } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport { SearchResult } from \"shared-models/search-result\";\nimport { ColdChainZip } from \"cold-chain/models/cold-chain-zip\";\nimport { ColdChainService } from \"cold-chain/services/cold-chain-service\";\nimport parse from \"papaparse\";\n\n@autoinject\nexport class ColdChainZipsView extends StandardView {\n\n    coldChainZips: ColdChainZip[];\n\n    currentSearchResult: SearchResult;\n\n    currentPage: number = 1;\n\n    listDisabled: boolean = false;    \n\n    $downloadCSVLink: HTMLElement;\n\n    $exportLink: HTMLElement;\n\n    @observable\n    searchInput: string = \"\";\n\n    constructor(private coldChainService: ColdChainService) {\n        super(ColdChainZipsView.name);\n    }\n\n    async activate(params, routeData) {\n        try {\n            await this._getResults();           \n        } catch (err) {\n            this.errorMessageUtil.showError(err);\n            this.routeToView(ROUTES.DASHBOARD.name);\n        }\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        await super.attached();\n    }\n\n    async _getResults() {\n        this.currentSearchResult = await this.coldChainService.searchColdChainZips(this.currentPage, this.searchInput);\n        this.coldChainZips = this.currentSearchResult.records as ColdChainZip[];\n    }\n\n    async searchInputChanged(newValue: string, oldValue: string) {\n        this.disableList();\n        this.currentPage = 1;\n        await this._getResults();\n        this.enableList();\n    }\n\n    async clickPrevious() {\n        this.disableList();\n        if (this.currentPage > 1) {\n            this.currentPage--;\n        }\n        await this._getResults();\n        this.enableList();\n    }\n\n    async clickNext() {\n        this.disableList();\n        if (this.currentPage < this.currentSearchResult.pageCount) {\n            this.currentPage++;\n        }\n        await this._getResults();\n        this.enableList();\n    }\n\n    async exportZips() {\n        this.disableView();\n        let coldChainZips = [];\n        if (this.searchInput) {\n            coldChainZips = this.coldChainZips\n        } else {\n            coldChainZips = await this.coldChainService.getAllColdChainZips();\n        }\n        \n        let coldChainZipsCSV = this.convertColdChainZipsToCsv(coldChainZips);\n        $(this.$exportLink).attr('href', `data:text/csv;charset=utf-8, ${escape(coldChainZipsCSV)}`);       \n        this.$exportLink.click();\n        this.enableView();\n    }\n\n    convertColdChainZipsToCsv(coldChainZips) {\n        return parse.unparse(coldChainZips.map((coldChainZip) => {\n            return {\n                \"Zipcode\": coldChainZip.zipcode,\n                \"Zone\": coldChainZip.zone.name,\n                \"City\": coldChainZip.city,\n                \"State\": coldChainZip.state.name,\n                \"Delivery Day\": coldChainZip.deliveryDay.name,\n                \"Delivery Time\": coldChainZip.deliveryTime,\n                \"Hub\": coldChainZip.hub,\n                \"Route\": coldChainZip.route\n            };\n        }));\n    }\n\n    disableList() {\n        this.listDisabled = true;\n    }\n\n    enableList() {\n        this.listDisabled = false;\n    }\n}","module.exports = \"<template> <require from=shared-ui/converters/boolean-format></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui centered stackable grid\\\"> <div class=\\\"sixteen wide column\\\"> <h1 class=\\\"ui center aligned header\\\">Cold Chain Zips</h1> </div> <div class=\\\"five wide column\\\"> <button class=\\\"positive ui button\\\" click.delegate=exportZips()>Export</button> <a href=\\\"data:text/csv;charset=utf-8,\\\" hidden download=coldchainzips.csv ref=$exportLink>Download</a> </div> <div class=\\\"six wide column\\\"> <div class=\\\"ui fluid input\\\"> <input type=text placeholder=Search... value.bind=searchInput> </div> </div> <div class=\\\"five wide column\\\"> <div class=\\\"ui grid\\\"> <div class=\\\"right floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === 1 ? 'disabled' : ''} button\\\" click.delegate=clickPrevious()> <i class=\\\"left arrow icon\\\"></i> </div> </div> <div class=\\\"six wide column\\\"> <span class=\\\"ui blue medium text\\\">Page ${currentPage} of ${currentSearchResult.pageCount || 1}</span> </div> <div class=\\\"left floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === (currentSearchResult.pageCount || 1) ? 'disabled' : ''} button\\\" click.delegate=clickNext()> <i class=\\\"right arrow icon\\\"></i> </div> </div> </div> </div> <div class=\\\"sixteen wide column\\\"> <div class=\\\"ui ${listDisabled ? 'active' : ''} inverted dimmer\\\"> <div class=\\\"ui text centered loader\\\">Loading</div> </div> <div class=\\\"ui three doubling stackable cards\\\"> <div class=\\\"ui raised fluid card\\\" repeat.for=\\\"coldChainZip of coldChainZips\\\"> <div class=content> <div class=header> <div class=\\\"ui grid\\\"> <div class=\\\"sixteen wide column\\\"> <div class=header> ${coldChainZip.zipcode} -- ${coldChainZip.zone.name} </div> </div> </div> </div> <div class=description> <form class=\\\"ui form\\\" ref=$viewForm> <div class=\\\"one fields\\\"> <div class=field> <b>Location:</b> ${coldChainZip.city} ${coldChainZip.state.name} </div> </div> <div class=\\\"one fields\\\"> <div class=field> <b>Delivery:</b> ${coldChainZip.deliveryDay.name} ${coldChainZip.deliveryTime} </div> </div> </form> </div> </div> </div> </div> </div> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, computedFrom } from \"aurelia-framework\";\nimport { ScreenViewUtility } from \"shared-ui/utility/screen-view-utility\";\nimport { ROUTES } from \"routes\";\n\n@autoinject\nexport class Dashboard extends StandardView {\n    alertNotificationsLoading: boolean;\n    kpisLoading: boolean;\n    constructor() {\n        super(Dashboard.name); \n        this.alertNotificationsLoading = true;\n        this.kpisLoading = true;\n        this.screenViewUtility.viewName = \"\";\n    }\n\n    async attached() {\n        await super.attached();        \n    }\n\n    async activate(params, routeData) {\n        await super.activate(params, routeData);\n        this.screenViewUtility.viewName = \"\";               \n    }\n  \n    @computedFrom()\n    get newOrderRoute(){\n        return ROUTES.CREATE_ORDER.name;\n    }\n\n    @computedFrom()\n    get importOrdersDashRoute(){\n        return ROUTES.VIEW_IMPORT_ORDERS.name;\n    }\n    \n\n    @computedFrom()\n    get viewOrdersDashRoute(){\n        return ROUTES.ORDER_LIST_DASHBOARD.name;\n    }\n   \n\n    @computedFrom()\n    get viewOrderBatchesRoute(){\n        return ROUTES.LIST_ORDER_BATCHES.name;\n    }\n\n    @computedFrom()\n    get viewChangeOrdersRoute(){\n        return ROUTES.LIST_CHANGE_ORDER.name;\n    }\n\n    async onClickShippingStatus() {\n        this.errorMessageUtil.showErrorMessage(\"Not Yet Implemented.\");    \n    }\n\n    @computedFrom()\n    get shippingDashRoute(){\n        return ROUTES.SHIPPING_DASHBOARD.name;\n    }\n\n\n    @computedFrom()\n    get billingDashRoute(){\n        return ROUTES.BILLING_DASHBOARD.name;\n    }\n   \n    @computedFrom()\n    get itemsDashRoute(){\n        return ROUTES.ITEMS_DASHBOARD.name;\n    }\n\n    @computedFrom()\n    get coldChainDashRoute(){\n        return ROUTES.COLD_CHAIN_DASHBOARD.name;\n    }\n\n    @computedFrom()\n    get returnsDashRoute(){\n        return ROUTES.RETURNS_DASHBOARD.name;\n    }\n    \n    @computedFrom()\n    get viewAddressesRoute(){\n        return ROUTES.LIST_SHIPPING_ADDRESSES.name;\n    }\n\n}","module.exports = \"<template> <div class=\\\"ui link stackable dashboard cards\\\"> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: newOrderRoute;\\\"> <div class=header>Create Order</div> <div class=description>Create a manual order.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: importOrdersDashRoute;\\\"> <div class=header>Import Orders</div> <div class=description>Create orders using a CSV file.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: viewOrdersDashRoute;\\\"> <div class=header>View Orders</div> <div class=description>View all existing Orders.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: viewChangeOrdersRoute;\\\"> <div class=header>Change Order Requests</div> <div class=description>View change Order Requests.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: viewOrderBatchesRoute;\\\"> <div class=header>Order Batches</div> <div class=description>View Order Batches.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: shippingDashRoute;\\\"> <div class=header>Shipping Status</div> <div class=description>Check the status of shipping orders.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: billingDashRoute;\\\"> <div class=header>Billing</div> <div class=description>Check Rates for shipping and view Invoices.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: itemsDashRoute;\\\"> <div class=header>Items/Inventory</div> <div class=description>View current items and inventory.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: returnsDashRoute;\\\"> <div class=header>Returns</div> <div class=description>View all returned shipments.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: coldChainDashRoute;\\\"> <div class=header>Cold Chain</div> <div class=description>View information on Cold Chain shipping.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: viewAddressesRoute;\\\"> <div class=header>Address Book</div> <div class=description>View Addresses to use on Orders.</div> </a> </div> </div> <style>.dashboard.cards .content{text-align:center;min-height:80px}</style> </template>\";","exports = module.exports = require(\"../css-loader/dist/runtime/api.js\")(false);\n// Imports\nexports.push([module.id, \"@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic&subset=latin);\", \"\"]);\nvar getUrl = require(\"../css-loader/dist/runtime/getUrl.js\");\nvar ___CSS_LOADER_URL___0___ = getUrl(require(\"./themes/default/assets/images/flags.png\"));\nvar ___CSS_LOADER_URL___1___ = getUrl(require(\"./themes/default/assets/fonts/icons.eot\"));\nvar ___CSS_LOADER_URL___2___ = getUrl(require(\"./themes/default/assets/fonts/icons.eot\") + \"?#iefix\");\nvar ___CSS_LOADER_URL___3___ = getUrl(require(\"./themes/default/assets/fonts/icons.woff2\"));\nvar ___CSS_LOADER_URL___4___ = getUrl(require(\"./themes/default/assets/fonts/icons.woff\"));\nvar ___CSS_LOADER_URL___5___ = getUrl(require(\"./themes/default/assets/fonts/icons.ttf\"));\nvar ___CSS_LOADER_URL___6___ = getUrl(require(\"./themes/default/assets/fonts/icons.svg\") + \"#icons\");\nvar ___CSS_LOADER_URL___7___ = getUrl(require(\"./themes/default/assets/fonts/outline-icons.eot\"));\nvar ___CSS_LOADER_URL___8___ = getUrl(require(\"./themes/default/assets/fonts/outline-icons.eot\") + \"?#iefix\");\nvar ___CSS_LOADER_URL___9___ = getUrl(require(\"./themes/default/assets/fonts/outline-icons.woff2\"));\nvar ___CSS_LOADER_URL___10___ = getUrl(require(\"./themes/default/assets/fonts/outline-icons.woff\"));\nvar ___CSS_LOADER_URL___11___ = getUrl(require(\"./themes/default/assets/fonts/outline-icons.ttf\"));\nvar ___CSS_LOADER_URL___12___ = getUrl(require(\"./themes/default/assets/fonts/outline-icons.svg\") + \"#icons\");\nvar ___CSS_LOADER_URL___13___ = getUrl(require(\"./themes/default/assets/fonts/brand-icons.eot\"));\nvar ___CSS_LOADER_URL___14___ = getUrl(require(\"./themes/default/assets/fonts/brand-icons.eot\") + \"?#iefix\");\nvar ___CSS_LOADER_URL___15___ = getUrl(require(\"./themes/default/assets/fonts/brand-icons.woff2\"));\nvar ___CSS_LOADER_URL___16___ = getUrl(require(\"./themes/default/assets/fonts/brand-icons.woff\"));\nvar ___CSS_LOADER_URL___17___ = getUrl(require(\"./themes/default/assets/fonts/brand-icons.ttf\"));\nvar ___CSS_LOADER_URL___18___ = getUrl(require(\"./themes/default/assets/fonts/brand-icons.svg\") + \"#icons\");\n// Module\nexports.push([module.id, \" /*\\n * # Fomantic UI - 2.7.6\\n * https://github.com/fomantic/Fomantic-UI\\n * http://fomantic-ui.com/\\n *\\n * Copyright 2014 Contributors\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n/*!\\n * # Fomantic-UI - Reset\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n             Reset\\n*******************************/\\n\\n/* Border-Box */\\n\\n*,\\n*:before,\\n*:after {\\n  -webkit-box-sizing: inherit;\\n          box-sizing: inherit;\\n}\\n\\nhtml {\\n  -webkit-box-sizing: border-box;\\n          box-sizing: border-box;\\n}\\n\\n/* iPad Input Shadows */\\n\\ninput[type=\\\"text\\\"],\\ninput[type=\\\"email\\\"],\\ninput[type=\\\"search\\\"],\\ninput[type=\\\"password\\\"] {\\n  -webkit-appearance: none;\\n  -moz-appearance: none;\\n  /* mobile firefox too! */\\n}\\n\\n/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\\n\\n/* Document\\n   ========================================================================== */\\n\\n/**\\n * 1. Correct the line height in all browsers.\\n * 2. Prevent adjustments of font size after orientation changes in iOS.\\n */\\n\\nhtml {\\n  line-height: 1.15;\\n  /* 1 */\\n  -webkit-text-size-adjust: 100%;\\n  /* 2 */\\n}\\n\\n/* Sections\\n   ========================================================================== */\\n\\n/**\\n * Remove the margin in all browsers.\\n */\\n\\nbody {\\n  margin: 0;\\n}\\n\\n/**\\n * Render the `main` element consistently in IE.\\n */\\n\\nmain {\\n  display: block;\\n}\\n\\n/**\\n * Correct the font size and margin on `h1` elements within `section` and\\n * `article` contexts in Chrome, Firefox, and Safari.\\n */\\n\\nh1 {\\n  font-size: 2em;\\n  margin: 0.67em 0;\\n}\\n\\n/* Grouping content\\n   ========================================================================== */\\n\\n/**\\n * 1. Add the correct box sizing in Firefox.\\n * 2. Show the overflow in Edge and IE.\\n */\\n\\nhr {\\n  -webkit-box-sizing: content-box;\\n          box-sizing: content-box;\\n  /* 1 */\\n  height: 0;\\n  /* 1 */\\n  overflow: visible;\\n  /* 2 */\\n}\\n\\n/**\\n * 1. Correct the inheritance and scaling of font size in all browsers.\\n * 2. Correct the odd `em` font sizing in all browsers.\\n */\\n\\npre {\\n  font-family: monospace, monospace;\\n  /* 1 */\\n  font-size: 1em;\\n  /* 2 */\\n}\\n\\n/* Text-level semantics\\n   ========================================================================== */\\n\\n/**\\n * Remove the gray background on active links in IE 10.\\n */\\n\\na {\\n  background-color: transparent;\\n}\\n\\n/**\\n * 1. Remove the bottom border in Chrome 57-\\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\\n */\\n\\nabbr[title] {\\n  border-bottom: none;\\n  /* 1 */\\n  text-decoration: underline;\\n  /* 2 */\\n  -webkit-text-decoration: underline dotted;\\n  text-decoration: underline dotted;\\n  /* 2 */\\n}\\n\\n/**\\n * Add the correct font weight in Chrome, Edge, and Safari.\\n */\\n\\nb,\\nstrong {\\n  font-weight: bolder;\\n}\\n\\n/**\\n * 1. Correct the inheritance and scaling of font size in all browsers.\\n * 2. Correct the odd `em` font sizing in all browsers.\\n */\\n\\ncode,\\nkbd,\\nsamp {\\n  font-family: monospace, monospace;\\n  /* 1 */\\n  font-size: 1em;\\n  /* 2 */\\n}\\n\\n/**\\n * Add the correct font size in all browsers.\\n */\\n\\nsmall {\\n  font-size: 80%;\\n}\\n\\n/**\\n * Prevent `sub` and `sup` elements from affecting the line height in\\n * all browsers.\\n */\\n\\nsub,\\nsup {\\n  font-size: 75%;\\n  line-height: 0;\\n  position: relative;\\n  vertical-align: baseline;\\n}\\n\\nsub {\\n  bottom: -0.25em;\\n}\\n\\nsup {\\n  top: -0.5em;\\n}\\n\\n/* Embedded content\\n   ========================================================================== */\\n\\n/**\\n * Remove the border on images inside links in IE 10.\\n */\\n\\nimg {\\n  border-style: none;\\n}\\n\\n/* Forms\\n   ========================================================================== */\\n\\n/**\\n * 1. Change the font styles in all browsers.\\n * 2. Remove the margin in Firefox and Safari.\\n */\\n\\nbutton,\\ninput,\\noptgroup,\\nselect,\\ntextarea {\\n  font-family: inherit;\\n  /* 1 */\\n  font-size: 100%;\\n  /* 1 */\\n  line-height: 1.15;\\n  /* 1 */\\n  margin: 0;\\n  /* 2 */\\n}\\n\\n/**\\n * Show the overflow in IE.\\n * 1. Show the overflow in Edge.\\n */\\n\\nbutton,\\ninput {\\n  /* 1 */\\n  overflow: visible;\\n}\\n\\n/**\\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\\n * 1. Remove the inheritance of text transform in Firefox.\\n */\\n\\nbutton,\\nselect {\\n  /* 1 */\\n  text-transform: none;\\n}\\n\\n/**\\n * Correct the inability to style clickable types in iOS and Safari.\\n */\\n\\nbutton,\\n[type=\\\"button\\\"],\\n[type=\\\"reset\\\"],\\n[type=\\\"submit\\\"] {\\n  -webkit-appearance: button;\\n}\\n\\n/**\\n * Remove the inner border and padding in Firefox.\\n */\\n\\nbutton::-moz-focus-inner,\\n[type=\\\"button\\\"]::-moz-focus-inner,\\n[type=\\\"reset\\\"]::-moz-focus-inner,\\n[type=\\\"submit\\\"]::-moz-focus-inner {\\n  border-style: none;\\n  padding: 0;\\n}\\n\\n/**\\n * Restore the focus styles unset by the previous rule.\\n */\\n\\nbutton:-moz-focusring,\\n[type=\\\"button\\\"]:-moz-focusring,\\n[type=\\\"reset\\\"]:-moz-focusring,\\n[type=\\\"submit\\\"]:-moz-focusring {\\n  outline: 1px dotted ButtonText;\\n}\\n\\n/**\\n * Correct the padding in Firefox.\\n */\\n\\nfieldset {\\n  padding: 0.35em 0.75em 0.625em;\\n}\\n\\n/**\\n * 1. Correct the text wrapping in Edge and IE.\\n * 2. Correct the color inheritance from `fieldset` elements in IE.\\n * 3. Remove the padding so developers are not caught out when they zero out\\n *    `fieldset` elements in all browsers.\\n */\\n\\nlegend {\\n  -webkit-box-sizing: border-box;\\n          box-sizing: border-box;\\n  /* 1 */\\n  color: inherit;\\n  /* 2 */\\n  display: table;\\n  /* 1 */\\n  max-width: 100%;\\n  /* 1 */\\n  padding: 0;\\n  /* 3 */\\n  white-space: normal;\\n  /* 1 */\\n}\\n\\n/**\\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\\n */\\n\\nprogress {\\n  vertical-align: baseline;\\n}\\n\\n/**\\n * Remove the default vertical scrollbar in IE 10+.\\n */\\n\\ntextarea {\\n  overflow: auto;\\n}\\n\\n/**\\n * 1. Add the correct box sizing in IE 10.\\n * 2. Remove the padding in IE 10.\\n */\\n\\n[type=\\\"checkbox\\\"],\\n[type=\\\"radio\\\"] {\\n  -webkit-box-sizing: border-box;\\n          box-sizing: border-box;\\n  /* 1 */\\n  padding: 0;\\n  /* 2 */\\n}\\n\\n/**\\n * Correct the cursor style of increment and decrement buttons in Chrome.\\n */\\n\\n[type=\\\"number\\\"]::-webkit-inner-spin-button,\\n[type=\\\"number\\\"]::-webkit-outer-spin-button {\\n  height: auto;\\n}\\n\\n/**\\n * 1. Correct the odd appearance in Chrome and Safari.\\n * 2. Correct the outline style in Safari.\\n */\\n\\n[type=\\\"search\\\"] {\\n  -webkit-appearance: textfield;\\n  /* 1 */\\n  outline-offset: -2px;\\n  /* 2 */\\n}\\n\\n/**\\n * Remove the inner padding in Chrome and Safari on macOS.\\n */\\n\\n[type=\\\"search\\\"]::-webkit-search-decoration {\\n  -webkit-appearance: none;\\n}\\n\\n/**\\n * 1. Correct the inability to style clickable types in iOS and Safari.\\n * 2. Change font properties to `inherit` in Safari.\\n */\\n\\n::-webkit-file-upload-button {\\n  -webkit-appearance: button;\\n  /* 1 */\\n  font: inherit;\\n  /* 2 */\\n}\\n\\n/* Interactive\\n   ========================================================================== */\\n\\n/*\\n * Add the correct display in Edge, IE 10+, and Firefox.\\n */\\n\\ndetails {\\n  display: block;\\n}\\n\\n/*\\n * Add the correct display in all browsers.\\n */\\n\\nsummary {\\n  display: list-item;\\n}\\n\\n/* Misc\\n   ========================================================================== */\\n\\n/**\\n * Add the correct display in IE 10+.\\n */\\n\\ntemplate {\\n  display: none;\\n}\\n\\n/**\\n * Add the correct display in IE 10.\\n */\\n\\n[hidden] {\\n  display: none;\\n}\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Site\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n             Page\\n*******************************/\\n\\nhtml,\\nbody {\\n  height: 100%;\\n}\\n\\nhtml {\\n  font-size: 14px;\\n}\\n\\nbody {\\n  margin: 0;\\n  padding: 0;\\n  overflow-x: hidden;\\n  min-width: 320px;\\n  background: #FFFFFF;\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  font-size: 14px;\\n  line-height: 1.4285em;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n/*******************************\\n             Headers\\n*******************************/\\n\\nh1,\\nh2,\\nh3,\\nh4,\\nh5 {\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  line-height: 1.28571429em;\\n  margin: calc(2rem - 0.1428571428571429em) 0 1rem;\\n  font-weight: bold;\\n  padding: 0;\\n}\\n\\nh1 {\\n  min-height: 1rem;\\n  font-size: 2rem;\\n}\\n\\nh2 {\\n  font-size: 1.71428571rem;\\n}\\n\\nh3 {\\n  font-size: 1.28571429rem;\\n}\\n\\nh4 {\\n  font-size: 1.07142857rem;\\n}\\n\\nh5 {\\n  font-size: 1rem;\\n}\\n\\nh1:first-child,\\nh2:first-child,\\nh3:first-child,\\nh4:first-child,\\nh5:first-child {\\n  margin-top: 0;\\n}\\n\\nh1:last-child,\\nh2:last-child,\\nh3:last-child,\\nh4:last-child,\\nh5:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/*******************************\\n             Text\\n*******************************/\\n\\np {\\n  margin: 0 0 1em;\\n  line-height: 1.4285em;\\n}\\n\\np:first-child {\\n  margin-top: 0;\\n}\\n\\np:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/*-------------------\\n        Links\\n--------------------*/\\n\\na {\\n  color: #4183C4;\\n  text-decoration: none;\\n}\\n\\na:hover {\\n  color: #1e70bf;\\n  text-decoration: none;\\n}\\n\\n/*******************************\\n         Scrollbars\\n*******************************/\\n\\n/*******************************\\n          Highlighting\\n*******************************/\\n\\n/* Site */\\n\\n::-webkit-selection {\\n  background-color: #CCE2FF;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n::-moz-selection {\\n  background-color: #CCE2FF;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n::selection {\\n  background-color: #CCE2FF;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n/* Form */\\n\\ntextarea::-webkit-selection,\\ninput::-webkit-selection {\\n  background-color: rgba(100, 100, 100, 0.4);\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\ntextarea::-moz-selection,\\ninput::-moz-selection {\\n  background-color: rgba(100, 100, 100, 0.4);\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\ntextarea::selection,\\ninput::selection {\\n  background-color: rgba(100, 100, 100, 0.4);\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n/* Force Simple Scrollbars */\\n\\nbody ::-webkit-scrollbar {\\n  -webkit-appearance: none;\\n  width: 10px;\\n  height: 10px;\\n}\\n\\nbody ::-webkit-scrollbar-track {\\n  background: rgba(0, 0, 0, 0.1);\\n  border-radius: 0;\\n}\\n\\nbody ::-webkit-scrollbar-thumb {\\n  cursor: pointer;\\n  border-radius: 5px;\\n  background: rgba(0, 0, 0, 0.25);\\n  -webkit-transition: color 0.2s ease;\\n  transition: color 0.2s ease;\\n}\\n\\nbody ::-webkit-scrollbar-thumb:window-inactive {\\n  background: rgba(0, 0, 0, 0.15);\\n}\\n\\nbody ::-webkit-scrollbar-thumb:hover {\\n  background: rgba(128, 135, 139, 0.8);\\n}\\n\\n/* Inverted UI */\\n\\nbody .ui.inverted:not(.dimmer)::-webkit-scrollbar-track {\\n  background: rgba(255, 255, 255, 0.1);\\n}\\n\\nbody .ui.inverted:not(.dimmer)::-webkit-scrollbar-thumb {\\n  background: rgba(255, 255, 255, 0.25);\\n}\\n\\nbody .ui.inverted:not(.dimmer)::-webkit-scrollbar-thumb:window-inactive {\\n  background: rgba(255, 255, 255, 0.15);\\n}\\n\\nbody .ui.inverted:not(.dimmer)::-webkit-scrollbar-thumb:hover {\\n  background: rgba(255, 255, 255, 0.35);\\n}\\n\\n/*******************************\\n        Global Overrides\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Button\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Button\\n*******************************/\\n\\n.ui.button {\\n  cursor: pointer;\\n  display: inline-block;\\n  min-height: 1em;\\n  outline: none;\\n  border: none;\\n  vertical-align: baseline;\\n  background: #E0E1E2 none;\\n  color: rgba(0, 0, 0, 0.6);\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  margin: 0 0.25em 0 0;\\n  padding: 0.78571429em 1.5em 0.78571429em;\\n  text-transform: none;\\n  text-shadow: none;\\n  font-weight: bold;\\n  line-height: 1em;\\n  font-style: normal;\\n  text-align: center;\\n  text-decoration: none;\\n  border-radius: 0.28571429rem;\\n  -webkit-box-shadow: 0 0 0 1px transparent inset, 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 1px transparent inset, 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n  -webkit-transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, background 0.1s ease;\\n  transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  will-change: auto;\\n  -webkit-tap-highlight-color: transparent;\\n}\\n\\n/*******************************\\n            States\\n*******************************/\\n\\n/*--------------\\n      Hover\\n---------------*/\\n\\n.ui.button:hover {\\n  background-color: #CACBCD;\\n  background-image: none;\\n  -webkit-box-shadow: 0 0 0 1px transparent inset, 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 1px transparent inset, 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n  color: rgba(0, 0, 0, 0.8);\\n}\\n\\n.ui.button:hover .icon {\\n  opacity: 0.85;\\n}\\n\\n/*--------------\\n      Focus\\n---------------*/\\n\\n.ui.button:focus {\\n  background-color: #CACBCD;\\n  color: rgba(0, 0, 0, 0.8);\\n  background-image: none;\\n  -webkit-box-shadow: '';\\n          box-shadow: '';\\n}\\n\\n.ui.button:focus .icon {\\n  opacity: 0.85;\\n}\\n\\n/*--------------\\n      Down\\n---------------*/\\n\\n.ui.button:active,\\n.ui.active.button:active {\\n  background-color: #BABBBC;\\n  background-image: '';\\n  color: rgba(0, 0, 0, 0.9);\\n  -webkit-box-shadow: 0 0 0 1px transparent inset, none;\\n          box-shadow: 0 0 0 1px transparent inset, none;\\n}\\n\\n/*--------------\\n     Active\\n---------------*/\\n\\n.ui.active.button {\\n  background-color: #C0C1C2;\\n  background-image: none;\\n  -webkit-box-shadow: 0 0 0 1px transparent inset;\\n          box-shadow: 0 0 0 1px transparent inset;\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n.ui.active.button:hover {\\n  background-color: #C0C1C2;\\n  background-image: none;\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n.ui.active.button:active {\\n  background-color: #C0C1C2;\\n  background-image: none;\\n}\\n\\n/*--------------\\n    Loading\\n---------------*/\\n\\n/* Specificity hack */\\n\\n.ui.loading.loading.loading.loading.loading.loading.button {\\n  position: relative;\\n  cursor: default;\\n  text-shadow: none !important;\\n  color: transparent;\\n  opacity: 1;\\n  pointer-events: auto;\\n  -webkit-transition: all 0s linear, opacity 0.1s ease;\\n  transition: all 0s linear, opacity 0.1s ease;\\n}\\n\\n.ui.loading.button:before {\\n  position: absolute;\\n  content: '';\\n  top: 50%;\\n  left: 50%;\\n  margin: -0.64285714em 0 0 -0.64285714em;\\n  width: 1.28571429em;\\n  height: 1.28571429em;\\n  border-radius: 500rem;\\n  border: 0.2em solid rgba(0, 0, 0, 0.15);\\n}\\n\\n.ui.loading.button:after {\\n  position: absolute;\\n  content: '';\\n  top: 50%;\\n  left: 50%;\\n  margin: -0.64285714em 0 0 -0.64285714em;\\n  width: 1.28571429em;\\n  height: 1.28571429em;\\n  border-radius: 500rem;\\n  -webkit-animation: loader 0.6s infinite linear;\\n  animation: loader 0.6s infinite linear;\\n  border: 0.2em solid currentColor;\\n  color: #FFFFFF;\\n  -webkit-box-shadow: 0 0 0 1px transparent;\\n          box-shadow: 0 0 0 1px transparent;\\n}\\n\\n.ui.labeled.icon.loading.button .icon {\\n  background-color: transparent;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.basic.loading.button:not(.inverted):before {\\n  border-color: rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.basic.loading.button:not(.inverted):after {\\n  border-color: #767676;\\n}\\n\\n/*-------------------\\n      Disabled\\n--------------------*/\\n\\n.ui.buttons .disabled.button:not(.basic),\\n.ui.disabled.button,\\n.ui.button:disabled,\\n.ui.disabled.button:hover,\\n.ui.disabled.active.button {\\n  cursor: default;\\n  opacity: 0.45 !important;\\n  background-image: none;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  pointer-events: none !important;\\n}\\n\\n/* Basic Group With Disabled */\\n\\n.ui.basic.buttons .ui.disabled.button {\\n  border-color: rgba(34, 36, 38, 0.5);\\n}\\n\\n/*******************************\\n             Types\\n*******************************/\\n\\n/*-------------------\\n       Animated\\n--------------------*/\\n\\n.ui.animated.button {\\n  position: relative;\\n  overflow: hidden;\\n  padding-right: 0 !important;\\n  vertical-align: middle;\\n  z-index: 1;\\n}\\n\\n.ui.animated.button .content {\\n  will-change: transform, opacity;\\n}\\n\\n.ui.animated.button .visible.content {\\n  position: relative;\\n  margin-right: 1.5em;\\n}\\n\\n.ui.animated.button .hidden.content {\\n  position: absolute;\\n  width: 100%;\\n}\\n\\n/* Horizontal */\\n\\n.ui.animated.button .visible.content,\\n.ui.animated.button .hidden.content {\\n  -webkit-transition: right 0.3s ease 0s;\\n  transition: right 0.3s ease 0s;\\n}\\n\\n.ui.animated.button .visible.content {\\n  left: auto;\\n  right: 0;\\n}\\n\\n.ui.animated.button .hidden.content {\\n  top: 50%;\\n  left: auto;\\n  right: -100%;\\n  margin-top: -0.5em;\\n}\\n\\n.ui.animated.button:focus .visible.content,\\n.ui.animated.button:hover .visible.content {\\n  left: auto;\\n  right: 200%;\\n}\\n\\n.ui.animated.button:focus .hidden.content,\\n.ui.animated.button:hover .hidden.content {\\n  left: auto;\\n  right: 0;\\n}\\n\\n/* Vertical */\\n\\n.ui.vertical.animated.button .visible.content,\\n.ui.vertical.animated.button .hidden.content {\\n  transition: top 0.3s ease, -webkit-transform 0.3s ease;\\n  -webkit-transition: top 0.3s ease, -webkit-transform 0.3s ease;\\n  transition: top 0.3s ease, transform 0.3s ease;\\n  transition: top 0.3s ease, transform 0.3s ease, -webkit-transform 0.3s ease;\\n}\\n\\n.ui.vertical.animated.button .visible.content {\\n  -webkit-transform: translateY(0%);\\n  transform: translateY(0%);\\n  right: auto;\\n}\\n\\n.ui.vertical.animated.button .hidden.content {\\n  top: -50%;\\n  left: 0;\\n  right: auto;\\n}\\n\\n.ui.vertical.animated.button:focus .visible.content,\\n.ui.vertical.animated.button:hover .visible.content {\\n  -webkit-transform: translateY(200%);\\n  transform: translateY(200%);\\n  right: auto;\\n}\\n\\n.ui.vertical.animated.button:focus .hidden.content,\\n.ui.vertical.animated.button:hover .hidden.content {\\n  top: 50%;\\n  right: auto;\\n}\\n\\n/* Fade */\\n\\n.ui.fade.animated.button .visible.content,\\n.ui.fade.animated.button .hidden.content {\\n  transition: opacity 0.3s ease, -webkit-transform 0.3s ease;\\n  -webkit-transition: opacity 0.3s ease, -webkit-transform 0.3s ease;\\n  transition: opacity 0.3s ease, transform 0.3s ease;\\n  transition: opacity 0.3s ease, transform 0.3s ease, -webkit-transform 0.3s ease;\\n}\\n\\n.ui.fade.animated.button .visible.content {\\n  left: auto;\\n  right: auto;\\n  opacity: 1;\\n  -webkit-transform: scale(1);\\n  transform: scale(1);\\n}\\n\\n.ui.fade.animated.button .hidden.content {\\n  opacity: 0;\\n  left: 0;\\n  right: auto;\\n  -webkit-transform: scale(1.5);\\n  transform: scale(1.5);\\n}\\n\\n.ui.fade.animated.button:focus .visible.content,\\n.ui.fade.animated.button:hover .visible.content {\\n  left: auto;\\n  right: auto;\\n  opacity: 0;\\n  -webkit-transform: scale(0.75);\\n  transform: scale(0.75);\\n}\\n\\n.ui.fade.animated.button:focus .hidden.content,\\n.ui.fade.animated.button:hover .hidden.content {\\n  left: 0;\\n  right: auto;\\n  opacity: 1;\\n  -webkit-transform: scale(1);\\n  transform: scale(1);\\n}\\n\\n/*-------------------\\n       Inverted\\n--------------------*/\\n\\n.ui.inverted.button {\\n  -webkit-box-shadow: 0 0 0 2px #FFFFFF inset;\\n          box-shadow: 0 0 0 2px #FFFFFF inset;\\n  background: transparent none;\\n  color: #FFFFFF;\\n  text-shadow: none !important;\\n}\\n\\n/* Group */\\n\\n.ui.inverted.buttons .button {\\n  margin: 0 0 0 -2px;\\n}\\n\\n.ui.inverted.buttons .button:first-child {\\n  margin-left: 0;\\n}\\n\\n.ui.inverted.vertical.buttons .button {\\n  margin: 0 0 -2px 0;\\n}\\n\\n.ui.inverted.vertical.buttons .button:first-child {\\n  margin-top: 0;\\n}\\n\\n/* States */\\n\\n/* Hover */\\n\\n.ui.inverted.button:hover {\\n  background: #FFFFFF;\\n  -webkit-box-shadow: 0 0 0 2px #FFFFFF inset;\\n          box-shadow: 0 0 0 2px #FFFFFF inset;\\n  color: rgba(0, 0, 0, 0.8);\\n}\\n\\n/* Active / Focus */\\n\\n.ui.inverted.button:focus,\\n.ui.inverted.button.active {\\n  background: #FFFFFF;\\n  -webkit-box-shadow: 0 0 0 2px #FFFFFF inset;\\n          box-shadow: 0 0 0 2px #FFFFFF inset;\\n  color: rgba(0, 0, 0, 0.8);\\n}\\n\\n/* Active Focus */\\n\\n.ui.inverted.button.active:focus {\\n  background: #DCDDDE;\\n  -webkit-box-shadow: 0 0 0 2px #DCDDDE inset;\\n          box-shadow: 0 0 0 2px #DCDDDE inset;\\n  color: rgba(0, 0, 0, 0.8);\\n}\\n\\n/*-------------------\\n    Labeled Button\\n--------------------*/\\n\\n.ui.labeled.button:not(.icon) {\\n  display: -webkit-inline-box;\\n  display: -ms-inline-flexbox;\\n  display: inline-flex;\\n  -webkit-box-orient: horizontal;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: row;\\n          flex-direction: row;\\n  background: none;\\n  padding: 0 !important;\\n  border: none;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.labeled.button > .button {\\n  margin: 0;\\n}\\n\\n.ui.labeled.button > .label {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-align: center;\\n      -ms-flex-align: center;\\n          align-items: center;\\n  margin: 0 0 0 -1px !important;\\n  font-size: 1em;\\n  padding: '';\\n  border-color: rgba(34, 36, 38, 0.15);\\n}\\n\\n/* Tag */\\n\\n.ui.labeled.button > .tag.label:before {\\n  width: 1.85em;\\n  height: 1.85em;\\n}\\n\\n/* Right */\\n\\n.ui.labeled.button:not([class*=\\\"left labeled\\\"]) > .button {\\n  border-top-right-radius: 0;\\n  border-bottom-right-radius: 0;\\n}\\n\\n.ui.labeled.button:not([class*=\\\"left labeled\\\"]) > .label {\\n  border-top-left-radius: 0;\\n  border-bottom-left-radius: 0;\\n}\\n\\n/* Left Side */\\n\\n.ui[class*=\\\"left labeled\\\"].button > .button {\\n  border-top-left-radius: 0;\\n  border-bottom-left-radius: 0;\\n}\\n\\n.ui[class*=\\\"left labeled\\\"].button > .label {\\n  border-top-right-radius: 0;\\n  border-bottom-right-radius: 0;\\n}\\n\\n/*-------------------\\n       Social\\n--------------------*/\\n\\n/* Facebook */\\n\\n.ui.facebook.button {\\n  background-color: #3B5998;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.facebook.button:hover {\\n  background-color: #304d8a;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.facebook.button:active {\\n  background-color: #2d4373;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Twitter */\\n\\n.ui.twitter.button {\\n  background-color: #1DA1F2;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.twitter.button:hover {\\n  background-color: #0298f3;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.twitter.button:active {\\n  background-color: #0c85d0;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Google Plus */\\n\\n.ui.google.plus.button {\\n  background-color: #DD4B39;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.google.plus.button:hover {\\n  background-color: #e0321c;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.google.plus.button:active {\\n  background-color: #c23321;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Linked In */\\n\\n.ui.linkedin.button {\\n  background-color: #0077B5;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.linkedin.button:hover {\\n  background-color: #00669c;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.linkedin.button:active {\\n  background-color: #005582;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* YouTube */\\n\\n.ui.youtube.button {\\n  background-color: #FF0000;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.youtube.button:hover {\\n  background-color: #e60000;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.youtube.button:active {\\n  background-color: #cc0000;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Instagram */\\n\\n.ui.instagram.button {\\n  background-color: #49769C;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.instagram.button:hover {\\n  background-color: #3d698e;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.instagram.button:active {\\n  background-color: #395c79;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Pinterest */\\n\\n.ui.pinterest.button {\\n  background-color: #BD081C;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.pinterest.button:hover {\\n  background-color: #ac0013;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.pinterest.button:active {\\n  background-color: #8c0615;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* VK */\\n\\n.ui.vk.button {\\n  background-color: #45668E;\\n  color: #FFFFFF;\\n  background-image: none;\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.vk.button:hover {\\n  background-color: #395980;\\n  color: #FFFFFF;\\n}\\n\\n.ui.vk.button:active {\\n  background-color: #344d6c;\\n  color: #FFFFFF;\\n}\\n\\n/* WhatsApp */\\n\\n.ui.whatsapp.button {\\n  background-color: #25D366;\\n  color: #FFFFFF;\\n  background-image: none;\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.whatsapp.button:hover {\\n  background-color: #19c55a;\\n  color: #FFFFFF;\\n}\\n\\n.ui.whatsapp.button:active {\\n  background-color: #1da851;\\n  color: #FFFFFF;\\n}\\n\\n/* Telegram */\\n\\n.ui.telegram.button {\\n  background-color: #0088CC;\\n  color: #FFFFFF;\\n  background-image: none;\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.telegram.button:hover {\\n  background-color: #0077b3;\\n  color: #FFFFFF;\\n}\\n\\n.ui.telegram.button:active {\\n  background-color: #006699;\\n  color: #FFFFFF;\\n}\\n\\n/*--------------\\n     Icon\\n---------------*/\\n\\n.ui.button > .icon:not(.button) {\\n  height: auto;\\n  opacity: 0.8;\\n  margin: 0 0.42857143em 0 -0.21428571em;\\n  -webkit-transition: opacity 0.1s ease;\\n  transition: opacity 0.1s ease;\\n  vertical-align: '';\\n  color: '';\\n}\\n\\n.ui.button:not(.icon) > .icon:not(.button):not(.dropdown),\\n.ui.button:not(.icon) > .icons:not(.button):not(.dropdown) {\\n  margin: 0 0.42857143em 0 -0.21428571em;\\n}\\n\\n.ui.button:not(.icon) > .right.icon:not(.button):not(.dropdown) {\\n  margin: 0 -0.21428571em 0 0.42857143em;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*-------------------\\n       Floated\\n--------------------*/\\n\\n.ui[class*=\\\"left floated\\\"].buttons,\\n.ui[class*=\\\"left floated\\\"].button {\\n  float: left;\\n  margin-left: 0;\\n  margin-right: 0.25em;\\n}\\n\\n.ui[class*=\\\"right floated\\\"].buttons,\\n.ui[class*=\\\"right floated\\\"].button {\\n  float: right;\\n  margin-right: 0;\\n  margin-left: 0.25em;\\n}\\n\\n/*-------------------\\n       Compact\\n--------------------*/\\n\\n.ui.compact.buttons .button,\\n.ui.compact.button {\\n  padding: 0.58928571em 1.125em 0.58928571em;\\n}\\n\\n.ui.compact.icon.buttons .button,\\n.ui.compact.icon.button {\\n  padding: 0.58928571em 0.58928571em 0.58928571em;\\n}\\n\\n.ui.compact.labeled.icon.buttons .button,\\n.ui.compact.labeled.icon.button {\\n  padding: 0.58928571em 3.69642857em 0.58928571em;\\n}\\n\\n.ui.compact.labeled.icon.buttons .button > .icon,\\n.ui.compact.labeled.icon.button > .icon {\\n  padding: 0.58928571em 0 0.58928571em 0;\\n}\\n\\n/*-------------------\\n        Sizes\\n--------------------*/\\n\\n.ui.mini.buttons .button,\\n.ui.mini.buttons .or,\\n.ui.ui.ui.ui.mini.button {\\n  font-size: 0.78571429rem;\\n}\\n\\n.ui.tiny.buttons .button,\\n.ui.tiny.buttons .or,\\n.ui.ui.ui.ui.tiny.button {\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.small.buttons .button,\\n.ui.small.buttons .or,\\n.ui.ui.ui.ui.small.button {\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.buttons .button,\\n.ui.buttons .or,\\n.ui.button {\\n  font-size: 1rem;\\n}\\n\\n.ui.large.buttons .button,\\n.ui.large.buttons .or,\\n.ui.ui.ui.ui.large.button {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.big.buttons .button,\\n.ui.big.buttons .or,\\n.ui.ui.ui.ui.big.button {\\n  font-size: 1.28571429rem;\\n}\\n\\n.ui.huge.buttons .button,\\n.ui.huge.buttons .or,\\n.ui.ui.ui.ui.huge.button {\\n  font-size: 1.42857143rem;\\n}\\n\\n.ui.massive.buttons .button,\\n.ui.massive.buttons .or,\\n.ui.ui.ui.ui.massive.button {\\n  font-size: 1.71428571rem;\\n}\\n\\n/* Dropdown coupled buttons sizes */\\n\\n.ui.mini.buttons .dropdown {\\n  font-size: 0.78571429rem;\\n}\\n\\n.ui.mini.buttons .dropdown .menu > .item {\\n  font-size: 0.78571429rem;\\n}\\n\\n.ui.tiny.buttons .dropdown {\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.tiny.buttons .dropdown .menu > .item {\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.small.buttons .dropdown {\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.small.buttons .dropdown .menu > .item {\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.large.buttons .dropdown {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.large.buttons .dropdown .menu > .item {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.big.buttons .dropdown {\\n  font-size: 1.28571429rem;\\n}\\n\\n.ui.big.buttons .dropdown .menu > .item {\\n  font-size: 1.28571429rem;\\n}\\n\\n.ui.huge.buttons .dropdown {\\n  font-size: 1.42857143rem;\\n}\\n\\n.ui.huge.buttons .dropdown .menu > .item {\\n  font-size: 1.42857143rem;\\n}\\n\\n.ui.massive.buttons .dropdown {\\n  font-size: 1.71428571rem;\\n}\\n\\n.ui.massive.buttons .dropdown .menu > .item {\\n  font-size: 1.71428571rem;\\n}\\n\\n/*--------------\\n    Icon Only\\n---------------*/\\n\\n.ui.icon.buttons .button,\\n.ui.icon.button {\\n  padding: 0.78571429em 0.78571429em 0.78571429em;\\n}\\n\\n.ui.icon.buttons .button > .icon,\\n.ui.icon.button > .icon {\\n  opacity: 0.9;\\n  margin: 0 !important;\\n  vertical-align: top;\\n}\\n\\n/*-------------------\\n        Basic\\n--------------------*/\\n\\n.ui.basic.buttons .button,\\n.ui.basic.button {\\n  background: transparent none;\\n  color: rgba(0, 0, 0, 0.6);\\n  font-weight: normal;\\n  border-radius: 0.28571429rem;\\n  text-transform: none;\\n  text-shadow: none !important;\\n  -webkit-box-shadow: 0 0 0 1px rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 1px rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.basic.buttons {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  border: 1px solid rgba(34, 36, 38, 0.15);\\n  border-radius: 0.28571429rem;\\n}\\n\\n.ui.basic.buttons .button {\\n  border-radius: 0;\\n}\\n\\n.ui.basic.buttons .button:hover,\\n.ui.basic.button:hover {\\n  background: #FFFFFF;\\n  color: rgba(0, 0, 0, 0.8);\\n  -webkit-box-shadow: 0 0 0 1px rgba(34, 36, 38, 0.35) inset, 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 1px rgba(34, 36, 38, 0.35) inset, 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.basic.buttons .button:focus,\\n.ui.basic.button:focus {\\n  background: #FFFFFF;\\n  color: rgba(0, 0, 0, 0.8);\\n  -webkit-box-shadow: 0 0 0 1px rgba(34, 36, 38, 0.35) inset, 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 1px rgba(34, 36, 38, 0.35) inset, 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.basic.buttons .button:active,\\n.ui.basic.button:active {\\n  background: #F8F8F8;\\n  color: rgba(0, 0, 0, 0.9);\\n  -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15) inset, 0 1px 4px 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15) inset, 0 1px 4px 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.basic.buttons .active.button,\\n.ui.basic.active.button {\\n  background: rgba(0, 0, 0, 0.05);\\n  -webkit-box-shadow: '';\\n          box-shadow: '';\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n.ui.basic.buttons .active.button:hover,\\n.ui.basic.active.button:hover {\\n  background-color: rgba(0, 0, 0, 0.05);\\n}\\n\\n/* Vertical */\\n\\n.ui.basic.buttons .button:hover {\\n  -webkit-box-shadow: 0 0 0 1px rgba(34, 36, 38, 0.35) inset, 0 0 0 0 rgba(34, 36, 38, 0.15) inset inset;\\n          box-shadow: 0 0 0 1px rgba(34, 36, 38, 0.35) inset, 0 0 0 0 rgba(34, 36, 38, 0.15) inset inset;\\n}\\n\\n.ui.basic.buttons .button:active {\\n  -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15) inset, 0 1px 4px 0 rgba(34, 36, 38, 0.15) inset inset;\\n          box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15) inset, 0 1px 4px 0 rgba(34, 36, 38, 0.15) inset inset;\\n}\\n\\n.ui.basic.buttons .active.button {\\n  -webkit-box-shadow: '';\\n          box-shadow: '';\\n}\\n\\n/* Standard Basic Inverted */\\n\\n.ui.basic.inverted.buttons .button,\\n.ui.basic.inverted.button {\\n  background-color: transparent;\\n  color: #F9FAFB;\\n  -webkit-box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n          box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n}\\n\\n.ui.basic.inverted.buttons .button:hover,\\n.ui.basic.inverted.button:hover {\\n  color: #FFFFFF;\\n  -webkit-box-shadow: 0 0 0 2px #ffffff inset;\\n          box-shadow: 0 0 0 2px #ffffff inset;\\n}\\n\\n.ui.basic.inverted.buttons .button:focus,\\n.ui.basic.inverted.button:focus {\\n  color: #FFFFFF;\\n  -webkit-box-shadow: 0 0 0 2px #ffffff inset;\\n          box-shadow: 0 0 0 2px #ffffff inset;\\n}\\n\\n.ui.basic.inverted.buttons .button:active,\\n.ui.basic.inverted.button:active {\\n  background-color: rgba(255, 255, 255, 0.08);\\n  color: #FFFFFF;\\n  -webkit-box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.9) inset;\\n          box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.9) inset;\\n}\\n\\n.ui.basic.inverted.buttons .active.button,\\n.ui.basic.inverted.active.button {\\n  background-color: rgba(255, 255, 255, 0.08);\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  -webkit-box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.7) inset;\\n          box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.7) inset;\\n}\\n\\n.ui.basic.inverted.buttons .active.button:hover,\\n.ui.basic.inverted.active.button:hover {\\n  background-color: rgba(255, 255, 255, 0.15);\\n  -webkit-box-shadow: 0 0 0 2px #ffffff inset;\\n          box-shadow: 0 0 0 2px #ffffff inset;\\n}\\n\\n/* Basic Group */\\n\\n.ui.basic.buttons .button {\\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.basic.vertical.buttons .button {\\n  border-left: none;\\n  border-left-width: 0;\\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.basic.vertical.buttons .button:first-child {\\n  border-top-width: 0;\\n}\\n\\n/*-------------------\\n       Tertiary\\n--------------------*/\\n\\n/* Overline Mixin */\\n\\n.ui.tertiary.button {\\n  -webkit-transition: color 0.1s ease !important;\\n  transition: color 0.1s ease !important;\\n  border-radius: 0;\\n  margin: 0.28571429em 0.25em 0.28571429em 0 !important;\\n  padding: 0.5em !important;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: rgba(0, 0, 0, 0.6);\\n  background: none;\\n}\\n\\n.ui.tertiary.button:hover {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #666666;\\n          box-shadow: inset 0 -0.2em 0 #666666;\\n  color: #333333;\\n  background: none;\\n}\\n\\n.ui.tertiary.button:focus {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #666666;\\n          box-shadow: inset 0 -0.2em 0 #666666;\\n  color: #333333;\\n  background: none;\\n}\\n\\n.ui.tertiary.button:active {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #999999;\\n          box-shadow: inset 0 -0.2em 0 #999999;\\n  border-radius: 0.28571429rem 0.28571429rem 0 0;\\n  color: #666666;\\n  background: none;\\n}\\n\\n/*--------------\\n  Labeled Icon\\n---------------*/\\n\\n.ui.labeled.icon.buttons .button,\\n.ui.labeled.icon.button {\\n  position: relative;\\n  padding-left: 4.07142857em !important;\\n  padding-right: 1.5em !important;\\n}\\n\\n/* Left Labeled */\\n\\n.ui.labeled.icon.buttons > .button > .icon,\\n.ui.labeled.icon.button > .icon {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  height: 100%;\\n  line-height: 1;\\n  border-radius: 0;\\n  border-top-left-radius: inherit;\\n  border-bottom-left-radius: inherit;\\n  text-align: center;\\n  -webkit-animation: none;\\n  animation: none;\\n  padding: 0.78571429em 0 0.78571429em 0;\\n  margin: 0;\\n  width: 2.57142857em;\\n  background-color: rgba(0, 0, 0, 0.05);\\n  color: '';\\n  -webkit-box-shadow: -1px 0 0 0 transparent inset;\\n          box-shadow: -1px 0 0 0 transparent inset;\\n}\\n\\n/* Right Labeled */\\n\\n.ui[class*=\\\"right labeled\\\"].icon.button {\\n  padding-right: 4.07142857em !important;\\n  padding-left: 1.5em !important;\\n}\\n\\n.ui[class*=\\\"right labeled\\\"].icon.button > .icon {\\n  left: auto;\\n  right: 0;\\n  border-radius: 0;\\n  border-top-right-radius: inherit;\\n  border-bottom-right-radius: inherit;\\n  -webkit-box-shadow: 1px 0 0 0 transparent inset;\\n          box-shadow: 1px 0 0 0 transparent inset;\\n}\\n\\n.ui.labeled.icon.buttons > .button > .icon:before,\\n.ui.labeled.icon.button > .icon:before,\\n.ui.labeled.icon.buttons > .button > .icon:after,\\n.ui.labeled.icon.button > .icon:after {\\n  display: block;\\n  position: relative;\\n  width: 100%;\\n  top: 0;\\n  text-align: center;\\n}\\n\\n.ui.labeled.icon.buttons .button > .icon {\\n  border-radius: 0;\\n}\\n\\n.ui.labeled.icon.buttons .button:first-child > .icon {\\n  border-top-left-radius: 0.28571429rem;\\n  border-bottom-left-radius: 0.28571429rem;\\n}\\n\\n.ui.labeled.icon.buttons .button:last-child > .icon {\\n  border-top-right-radius: 0.28571429rem;\\n  border-bottom-right-radius: 0.28571429rem;\\n}\\n\\n.ui.vertical.labeled.icon.buttons .button:first-child > .icon {\\n  border-radius: 0;\\n  border-top-left-radius: 0.28571429rem;\\n}\\n\\n.ui.vertical.labeled.icon.buttons .button:last-child > .icon {\\n  border-radius: 0;\\n  border-bottom-left-radius: 0.28571429rem;\\n}\\n\\n/* Loading Icon in Labeled Button */\\n\\n.ui.labeled.icon.button > .loading.icon:before {\\n  -webkit-animation: loader 2s linear infinite;\\n  animation: loader 2s linear infinite;\\n}\\n\\n/*--------------\\n     Toggle\\n---------------*/\\n\\n/* Toggle (Modifies active state to give affordances) */\\n\\n.ui.toggle.buttons .active.button,\\n.ui.buttons .button.toggle.active,\\n.ui.button.toggle.active {\\n  background-color: #21BA45;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  text-shadow: none;\\n  color: #FFFFFF;\\n}\\n\\n.ui.button.toggle.active:hover {\\n  background-color: #16ab39;\\n  text-shadow: none;\\n  color: #FFFFFF;\\n}\\n\\n/*--------------\\n    Circular\\n---------------*/\\n\\n.ui.circular.button {\\n  border-radius: 10em;\\n}\\n\\n.ui.circular.button > .icon {\\n  width: 1em;\\n  vertical-align: baseline;\\n}\\n\\n/*-------------------\\n      Or Buttons\\n--------------------*/\\n\\n.ui.buttons .or {\\n  position: relative;\\n  width: 0.3em;\\n  height: 2.57142857em;\\n  z-index: 3;\\n}\\n\\n.ui.buttons .or:before {\\n  position: absolute;\\n  text-align: center;\\n  border-radius: 500rem;\\n  content: 'or';\\n  top: 50%;\\n  left: 50%;\\n  background-color: #FFFFFF;\\n  text-shadow: none;\\n  margin-top: -0.89285714em;\\n  margin-left: -0.89285714em;\\n  width: 1.78571429em;\\n  height: 1.78571429em;\\n  line-height: 1.78571429em;\\n  color: rgba(0, 0, 0, 0.4);\\n  font-style: normal;\\n  font-weight: bold;\\n  -webkit-box-shadow: 0 0 0 1px transparent inset;\\n          box-shadow: 0 0 0 1px transparent inset;\\n}\\n\\n.ui.buttons .or[data-text]:before {\\n  content: attr(data-text);\\n}\\n\\n/* Fluid Or */\\n\\n.ui.fluid.buttons .or {\\n  width: 0 !important;\\n}\\n\\n.ui.fluid.buttons .or:after {\\n  display: none;\\n}\\n\\n/*-------------------\\n       Attached\\n--------------------*/\\n\\n/* Singular */\\n\\n.ui.attached.button {\\n  position: relative;\\n  display: block;\\n  margin: 0;\\n  border-radius: 0;\\n  -webkit-box-shadow: 0 0 0 1px rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px rgba(34, 36, 38, 0.15);\\n}\\n\\n/* Top / Bottom */\\n\\n.ui.attached.top.button {\\n  border-radius: 0.28571429rem 0.28571429rem 0 0;\\n}\\n\\n.ui.attached.bottom.button {\\n  border-radius: 0 0 0.28571429rem 0.28571429rem;\\n}\\n\\n/* Left / Right */\\n\\n.ui.left.attached.button {\\n  display: inline-block;\\n  border-left: none;\\n  text-align: right;\\n  padding-right: 0.75em;\\n  border-radius: 0.28571429rem 0 0 0.28571429rem;\\n}\\n\\n.ui.right.attached.button {\\n  display: inline-block;\\n  text-align: left;\\n  padding-left: 0.75em;\\n  border-radius: 0 0.28571429rem 0.28571429rem 0;\\n}\\n\\n/* Plural */\\n\\n.ui.attached.buttons {\\n  position: relative;\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  border-radius: 0;\\n  width: auto !important;\\n  z-index: auto;\\n  margin-left: -1px;\\n  margin-right: -1px;\\n}\\n\\n.ui.attached.buttons .button {\\n  margin: 0;\\n}\\n\\n.ui.attached.buttons .button:first-child {\\n  border-radius: 0;\\n}\\n\\n.ui.attached.buttons .button:last-child {\\n  border-radius: 0;\\n}\\n\\n/* Top / Bottom */\\n\\n.ui[class*=\\\"top attached\\\"].buttons {\\n  margin-bottom: -1px;\\n  border-radius: 0.28571429rem 0.28571429rem 0 0;\\n}\\n\\n.ui[class*=\\\"top attached\\\"].buttons .button:first-child {\\n  border-radius: 0.28571429rem 0 0 0;\\n}\\n\\n.ui[class*=\\\"top attached\\\"].buttons .button:last-child {\\n  border-radius: 0 0.28571429rem 0 0;\\n}\\n\\n.ui[class*=\\\"bottom attached\\\"].buttons {\\n  margin-top: -1px;\\n  border-radius: 0 0 0.28571429rem 0.28571429rem;\\n}\\n\\n.ui[class*=\\\"bottom attached\\\"].buttons .button:first-child {\\n  border-radius: 0 0 0 0.28571429rem;\\n}\\n\\n.ui[class*=\\\"bottom attached\\\"].buttons .button:last-child {\\n  border-radius: 0 0 0.28571429rem 0;\\n}\\n\\n/* Left / Right */\\n\\n.ui[class*=\\\"left attached\\\"].buttons {\\n  display: -webkit-inline-box;\\n  display: -ms-inline-flexbox;\\n  display: inline-flex;\\n  margin-right: 0;\\n  margin-left: -1px;\\n  border-radius: 0 0.28571429rem 0.28571429rem 0;\\n}\\n\\n.ui[class*=\\\"left attached\\\"].buttons .button:first-child {\\n  margin-left: -1px;\\n  border-radius: 0 0.28571429rem 0 0;\\n}\\n\\n.ui[class*=\\\"left attached\\\"].buttons .button:last-child {\\n  margin-left: -1px;\\n  border-radius: 0 0 0.28571429rem 0;\\n}\\n\\n.ui[class*=\\\"right attached\\\"].buttons {\\n  display: -webkit-inline-box;\\n  display: -ms-inline-flexbox;\\n  display: inline-flex;\\n  margin-left: 0;\\n  margin-right: -1px;\\n  border-radius: 0.28571429rem 0 0 0.28571429rem;\\n}\\n\\n.ui[class*=\\\"right attached\\\"].buttons .button:first-child {\\n  margin-left: -1px;\\n  border-radius: 0.28571429rem 0 0 0;\\n}\\n\\n.ui[class*=\\\"right attached\\\"].buttons .button:last-child {\\n  margin-left: -1px;\\n  border-radius: 0 0 0 0.28571429rem;\\n}\\n\\n/*-------------------\\n        Fluid\\n--------------------*/\\n\\n.ui.fluid.buttons,\\n.ui.fluid.button {\\n  width: 100%;\\n}\\n\\n.ui.fluid.button {\\n  display: block;\\n}\\n\\n.ui.two.buttons {\\n  width: 100%;\\n}\\n\\n.ui.two.buttons > .button {\\n  width: 50%;\\n}\\n\\n.ui.three.buttons {\\n  width: 100%;\\n}\\n\\n.ui.three.buttons > .button {\\n  width: 33.333%;\\n}\\n\\n.ui.four.buttons {\\n  width: 100%;\\n}\\n\\n.ui.four.buttons > .button {\\n  width: 25%;\\n}\\n\\n.ui.five.buttons {\\n  width: 100%;\\n}\\n\\n.ui.five.buttons > .button {\\n  width: 20%;\\n}\\n\\n.ui.six.buttons {\\n  width: 100%;\\n}\\n\\n.ui.six.buttons > .button {\\n  width: 16.666%;\\n}\\n\\n.ui.seven.buttons {\\n  width: 100%;\\n}\\n\\n.ui.seven.buttons > .button {\\n  width: 14.285%;\\n}\\n\\n.ui.eight.buttons {\\n  width: 100%;\\n}\\n\\n.ui.eight.buttons > .button {\\n  width: 12.5%;\\n}\\n\\n.ui.nine.buttons {\\n  width: 100%;\\n}\\n\\n.ui.nine.buttons > .button {\\n  width: 11.11%;\\n}\\n\\n.ui.ten.buttons {\\n  width: 100%;\\n}\\n\\n.ui.ten.buttons > .button {\\n  width: 10%;\\n}\\n\\n.ui.eleven.buttons {\\n  width: 100%;\\n}\\n\\n.ui.eleven.buttons > .button {\\n  width: 9.09%;\\n}\\n\\n.ui.twelve.buttons {\\n  width: 100%;\\n}\\n\\n.ui.twelve.buttons > .button {\\n  width: 8.3333%;\\n}\\n\\n/* Fluid Vertical Buttons */\\n\\n.ui.fluid.vertical.buttons,\\n.ui.fluid.vertical.buttons > .button {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  width: auto;\\n  -webkit-box-pack: center;\\n      -ms-flex-pack: center;\\n          justify-content: center;\\n}\\n\\n.ui.two.vertical.buttons > .button {\\n  height: 50%;\\n}\\n\\n.ui.three.vertical.buttons > .button {\\n  height: 33.333%;\\n}\\n\\n.ui.four.vertical.buttons > .button {\\n  height: 25%;\\n}\\n\\n.ui.five.vertical.buttons > .button {\\n  height: 20%;\\n}\\n\\n.ui.six.vertical.buttons > .button {\\n  height: 16.666%;\\n}\\n\\n.ui.seven.vertical.buttons > .button {\\n  height: 14.285%;\\n}\\n\\n.ui.eight.vertical.buttons > .button {\\n  height: 12.5%;\\n}\\n\\n.ui.nine.vertical.buttons > .button {\\n  height: 11.11%;\\n}\\n\\n.ui.ten.vertical.buttons > .button {\\n  height: 10%;\\n}\\n\\n.ui.eleven.vertical.buttons > .button {\\n  height: 9.09%;\\n}\\n\\n.ui.twelve.vertical.buttons > .button {\\n  height: 8.3333%;\\n}\\n\\n/*-------------------\\n       Colors\\n--------------------*/\\n\\n.ui.primary.buttons .button,\\n.ui.primary.button {\\n  background-color: #2185D0;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n}\\n\\n.ui.primary.button {\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.primary.buttons .button:hover,\\n.ui.primary.button:hover {\\n  background-color: #1678c2;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.primary.buttons .button:focus,\\n.ui.primary.button:focus {\\n  background-color: #0d71bb;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.primary.buttons .button:active,\\n.ui.primary.button:active {\\n  background-color: #1a69a4;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.primary.buttons .active.button,\\n.ui.primary.buttons .active.button:active,\\n.ui.primary.active.button,\\n.ui.primary.button .active.button:active {\\n  background-color: #1279c6;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.primary.buttons .button,\\n.ui.basic.primary.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #2185D0 inset;\\n          box-shadow: 0 0 0 1px #2185D0 inset;\\n  color: #2185D0;\\n}\\n\\n.ui.basic.primary.buttons .button:hover,\\n.ui.basic.primary.button:hover {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #1678c2 inset;\\n          box-shadow: 0 0 0 1px #1678c2 inset;\\n  color: #1678c2;\\n}\\n\\n.ui.basic.primary.buttons .button:focus,\\n.ui.basic.primary.button:focus {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #0d71bb inset;\\n          box-shadow: 0 0 0 1px #0d71bb inset;\\n  color: #1678c2;\\n}\\n\\n.ui.basic.primary.buttons .active.button,\\n.ui.basic.primary.active.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #1279c6 inset;\\n          box-shadow: 0 0 0 1px #1279c6 inset;\\n  color: #1a69a4;\\n}\\n\\n.ui.basic.primary.buttons .button:active,\\n.ui.basic.primary.button:active {\\n  -webkit-box-shadow: 0 0 0 1px #1a69a4 inset;\\n          box-shadow: 0 0 0 1px #1a69a4 inset;\\n  color: #1a69a4;\\n}\\n\\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\\n  margin-left: -1px;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.primary.buttons .button,\\n.ui.inverted.primary.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px #54C8FF inset;\\n          box-shadow: 0 0 0 2px #54C8FF inset;\\n  color: #54C8FF;\\n}\\n\\n.ui.inverted.primary.buttons .button:hover,\\n.ui.inverted.primary.button:hover,\\n.ui.inverted.primary.buttons .button:focus,\\n.ui.inverted.primary.button:focus,\\n.ui.inverted.primary.buttons .button.active,\\n.ui.inverted.primary.button.active,\\n.ui.inverted.primary.buttons .button:active,\\n.ui.inverted.primary.button:active {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.primary.buttons .button:hover,\\n.ui.inverted.primary.button:hover {\\n  background-color: #21b8ff;\\n}\\n\\n.ui.inverted.primary.buttons .button:focus,\\n.ui.inverted.primary.button:focus {\\n  background-color: #2bbbff;\\n}\\n\\n.ui.inverted.primary.buttons .active.button,\\n.ui.inverted.primary.active.button {\\n  background-color: #3ac0ff;\\n}\\n\\n.ui.inverted.primary.buttons .button:active,\\n.ui.inverted.primary.button:active {\\n  background-color: #21b8ff;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.primary.basic.buttons .button,\\n.ui.inverted.primary.buttons .basic.button,\\n.ui.inverted.primary.basic.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n          box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.primary.basic.buttons .button:hover,\\n.ui.inverted.primary.buttons .basic.button:hover,\\n.ui.inverted.primary.basic.button:hover {\\n  -webkit-box-shadow: 0 0 0 2px #21b8ff inset;\\n          box-shadow: 0 0 0 2px #21b8ff inset;\\n  color: #54C8FF;\\n}\\n\\n.ui.inverted.primary.basic.buttons .button:focus,\\n.ui.inverted.primary.basic.buttons .button:focus,\\n.ui.inverted.primary.basic.button:focus {\\n  -webkit-box-shadow: 0 0 0 2px #2bbbff inset;\\n          box-shadow: 0 0 0 2px #2bbbff inset;\\n  color: #54C8FF;\\n}\\n\\n.ui.inverted.primary.basic.buttons .active.button,\\n.ui.inverted.primary.buttons .basic.active.button,\\n.ui.inverted.primary.basic.active.button {\\n  -webkit-box-shadow: 0 0 0 2px #3ac0ff inset;\\n          box-shadow: 0 0 0 2px #3ac0ff inset;\\n  color: #54C8FF;\\n}\\n\\n.ui.inverted.primary.basic.buttons .button:active,\\n.ui.inverted.primary.buttons .basic.button:active,\\n.ui.inverted.primary.basic.button:active {\\n  -webkit-box-shadow: 0 0 0 2px #21b8ff inset;\\n          box-shadow: 0 0 0 2px #21b8ff inset;\\n  color: #54C8FF;\\n}\\n\\n/* Tertiary */\\n\\n.ui.tertiary.primary.buttons .button,\\n.ui.tertiary.primary.buttons .tertiary.button,\\n.ui.tertiary.primary.button {\\n  background: transparent;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #2185D0;\\n}\\n\\n.ui.tertiary.primary.buttons .button:hover,\\n.ui.tertiary.primary.buttons button:hover,\\n.ui.tertiary.primary.button:hover {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #2b75ac;\\n          box-shadow: inset 0 -0.2em 0 #2b75ac;\\n  color: #2b75ac;\\n}\\n\\n.ui.tertiary.primary.buttons .button:focus,\\n.ui.tertiary.primary.buttons .tertiary.button:focus,\\n.ui.tertiary.primary.button:focus {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #216ea7;\\n          box-shadow: inset 0 -0.2em 0 #216ea7;\\n  color: #216ea7;\\n}\\n\\n.ui.tertiary.primary.buttons .active.button,\\n.ui.tertiary.primary.buttons .tertiary.active.button,\\n.ui.tertiary.primary.active.button,\\n.ui.tertiary.primary.buttons .button:active,\\n.ui.tertiary.primary.buttons .tertiary.button:active,\\n.ui.tertiary.primary.button:active {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #007bd8;\\n          box-shadow: inset 0 -0.2em 0 #007bd8;\\n  color: #1279c6;\\n}\\n\\n.ui.secondary.buttons .button,\\n.ui.secondary.button {\\n  background-color: #1B1C1D;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n}\\n\\n.ui.secondary.button {\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.secondary.buttons .button:hover,\\n.ui.secondary.button:hover {\\n  background-color: #27292a;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.secondary.buttons .button:focus,\\n.ui.secondary.button:focus {\\n  background-color: #2e3032;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.secondary.buttons .button:active,\\n.ui.secondary.button:active {\\n  background-color: #343637;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.secondary.buttons .active.button,\\n.ui.secondary.buttons .active.button:active,\\n.ui.secondary.active.button,\\n.ui.secondary.button .active.button:active {\\n  background-color: #27292a;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.secondary.buttons .button,\\n.ui.basic.secondary.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #1B1C1D inset;\\n          box-shadow: 0 0 0 1px #1B1C1D inset;\\n  color: #1B1C1D;\\n}\\n\\n.ui.basic.secondary.buttons .button:hover,\\n.ui.basic.secondary.button:hover {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #27292a inset;\\n          box-shadow: 0 0 0 1px #27292a inset;\\n  color: #27292a;\\n}\\n\\n.ui.basic.secondary.buttons .button:focus,\\n.ui.basic.secondary.button:focus {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #2e3032 inset;\\n          box-shadow: 0 0 0 1px #2e3032 inset;\\n  color: #27292a;\\n}\\n\\n.ui.basic.secondary.buttons .active.button,\\n.ui.basic.secondary.active.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #27292a inset;\\n          box-shadow: 0 0 0 1px #27292a inset;\\n  color: #343637;\\n}\\n\\n.ui.basic.secondary.buttons .button:active,\\n.ui.basic.secondary.button:active {\\n  -webkit-box-shadow: 0 0 0 1px #343637 inset;\\n          box-shadow: 0 0 0 1px #343637 inset;\\n  color: #343637;\\n}\\n\\n.ui.buttons:not(.vertical) > .basic.secondary.button:not(:first-child) {\\n  margin-left: -1px;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.secondary.buttons .button,\\n.ui.inverted.secondary.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px #545454 inset;\\n          box-shadow: 0 0 0 2px #545454 inset;\\n  color: #545454;\\n}\\n\\n.ui.inverted.secondary.buttons .button:hover,\\n.ui.inverted.secondary.button:hover,\\n.ui.inverted.secondary.buttons .button:focus,\\n.ui.inverted.secondary.button:focus,\\n.ui.inverted.secondary.buttons .button.active,\\n.ui.inverted.secondary.button.active,\\n.ui.inverted.secondary.buttons .button:active,\\n.ui.inverted.secondary.button:active {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.secondary.buttons .button:hover,\\n.ui.inverted.secondary.button:hover {\\n  background-color: #6e6e6e;\\n}\\n\\n.ui.inverted.secondary.buttons .button:focus,\\n.ui.inverted.secondary.button:focus {\\n  background-color: #686868;\\n}\\n\\n.ui.inverted.secondary.buttons .active.button,\\n.ui.inverted.secondary.active.button {\\n  background-color: #616161;\\n}\\n\\n.ui.inverted.secondary.buttons .button:active,\\n.ui.inverted.secondary.button:active {\\n  background-color: #6e6e6e;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.secondary.basic.buttons .button,\\n.ui.inverted.secondary.buttons .basic.button,\\n.ui.inverted.secondary.basic.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n          box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.secondary.basic.buttons .button:hover,\\n.ui.inverted.secondary.buttons .basic.button:hover,\\n.ui.inverted.secondary.basic.button:hover {\\n  -webkit-box-shadow: 0 0 0 2px #6e6e6e inset;\\n          box-shadow: 0 0 0 2px #6e6e6e inset;\\n  color: #545454;\\n}\\n\\n.ui.inverted.secondary.basic.buttons .button:focus,\\n.ui.inverted.secondary.basic.buttons .button:focus,\\n.ui.inverted.secondary.basic.button:focus {\\n  -webkit-box-shadow: 0 0 0 2px #686868 inset;\\n          box-shadow: 0 0 0 2px #686868 inset;\\n  color: #545454;\\n}\\n\\n.ui.inverted.secondary.basic.buttons .active.button,\\n.ui.inverted.secondary.buttons .basic.active.button,\\n.ui.inverted.secondary.basic.active.button {\\n  -webkit-box-shadow: 0 0 0 2px #616161 inset;\\n          box-shadow: 0 0 0 2px #616161 inset;\\n  color: #545454;\\n}\\n\\n.ui.inverted.secondary.basic.buttons .button:active,\\n.ui.inverted.secondary.buttons .basic.button:active,\\n.ui.inverted.secondary.basic.button:active {\\n  -webkit-box-shadow: 0 0 0 2px #6e6e6e inset;\\n          box-shadow: 0 0 0 2px #6e6e6e inset;\\n  color: #545454;\\n}\\n\\n/* Tertiary */\\n\\n.ui.tertiary.secondary.buttons .button,\\n.ui.tertiary.secondary.buttons .tertiary.button,\\n.ui.tertiary.secondary.button {\\n  background: transparent;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #1B1C1D;\\n}\\n\\n.ui.tertiary.secondary.buttons .button:hover,\\n.ui.tertiary.secondary.buttons button:hover,\\n.ui.tertiary.secondary.button:hover {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #292929;\\n          box-shadow: inset 0 -0.2em 0 #292929;\\n  color: #292929;\\n}\\n\\n.ui.tertiary.secondary.buttons .button:focus,\\n.ui.tertiary.secondary.buttons .tertiary.button:focus,\\n.ui.tertiary.secondary.button:focus {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #303030;\\n          box-shadow: inset 0 -0.2em 0 #303030;\\n  color: #303030;\\n}\\n\\n.ui.tertiary.secondary.buttons .active.button,\\n.ui.tertiary.secondary.buttons .tertiary.active.button,\\n.ui.tertiary.secondary.active.button,\\n.ui.tertiary.secondary.buttons .button:active,\\n.ui.tertiary.secondary.buttons .tertiary.button:active,\\n.ui.tertiary.secondary.button:active {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #1f2933;\\n          box-shadow: inset 0 -0.2em 0 #1f2933;\\n  color: #27292a;\\n}\\n\\n.ui.red.buttons .button,\\n.ui.red.button {\\n  background-color: #DB2828;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n}\\n\\n.ui.red.button {\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.red.buttons .button:hover,\\n.ui.red.button:hover {\\n  background-color: #d01919;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.red.buttons .button:focus,\\n.ui.red.button:focus {\\n  background-color: #ca1010;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.red.buttons .button:active,\\n.ui.red.button:active {\\n  background-color: #b21e1e;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.red.buttons .active.button,\\n.ui.red.buttons .active.button:active,\\n.ui.red.active.button,\\n.ui.red.button .active.button:active {\\n  background-color: #d41515;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.red.buttons .button,\\n.ui.basic.red.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #DB2828 inset;\\n          box-shadow: 0 0 0 1px #DB2828 inset;\\n  color: #DB2828;\\n}\\n\\n.ui.basic.red.buttons .button:hover,\\n.ui.basic.red.button:hover {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #d01919 inset;\\n          box-shadow: 0 0 0 1px #d01919 inset;\\n  color: #d01919;\\n}\\n\\n.ui.basic.red.buttons .button:focus,\\n.ui.basic.red.button:focus {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #ca1010 inset;\\n          box-shadow: 0 0 0 1px #ca1010 inset;\\n  color: #d01919;\\n}\\n\\n.ui.basic.red.buttons .active.button,\\n.ui.basic.red.active.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #d41515 inset;\\n          box-shadow: 0 0 0 1px #d41515 inset;\\n  color: #b21e1e;\\n}\\n\\n.ui.basic.red.buttons .button:active,\\n.ui.basic.red.button:active {\\n  -webkit-box-shadow: 0 0 0 1px #b21e1e inset;\\n          box-shadow: 0 0 0 1px #b21e1e inset;\\n  color: #b21e1e;\\n}\\n\\n.ui.buttons:not(.vertical) > .basic.red.button:not(:first-child) {\\n  margin-left: -1px;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.red.buttons .button,\\n.ui.inverted.red.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px #FF695E inset;\\n          box-shadow: 0 0 0 2px #FF695E inset;\\n  color: #FF695E;\\n}\\n\\n.ui.inverted.red.buttons .button:hover,\\n.ui.inverted.red.button:hover,\\n.ui.inverted.red.buttons .button:focus,\\n.ui.inverted.red.button:focus,\\n.ui.inverted.red.buttons .button.active,\\n.ui.inverted.red.button.active,\\n.ui.inverted.red.buttons .button:active,\\n.ui.inverted.red.button:active {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.red.buttons .button:hover,\\n.ui.inverted.red.button:hover {\\n  background-color: #ff392b;\\n}\\n\\n.ui.inverted.red.buttons .button:focus,\\n.ui.inverted.red.button:focus {\\n  background-color: #ff4335;\\n}\\n\\n.ui.inverted.red.buttons .active.button,\\n.ui.inverted.red.active.button {\\n  background-color: #ff5144;\\n}\\n\\n.ui.inverted.red.buttons .button:active,\\n.ui.inverted.red.button:active {\\n  background-color: #ff392b;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.red.basic.buttons .button,\\n.ui.inverted.red.buttons .basic.button,\\n.ui.inverted.red.basic.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n          box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.red.basic.buttons .button:hover,\\n.ui.inverted.red.buttons .basic.button:hover,\\n.ui.inverted.red.basic.button:hover {\\n  -webkit-box-shadow: 0 0 0 2px #ff392b inset;\\n          box-shadow: 0 0 0 2px #ff392b inset;\\n  color: #FF695E;\\n}\\n\\n.ui.inverted.red.basic.buttons .button:focus,\\n.ui.inverted.red.basic.buttons .button:focus,\\n.ui.inverted.red.basic.button:focus {\\n  -webkit-box-shadow: 0 0 0 2px #ff4335 inset;\\n          box-shadow: 0 0 0 2px #ff4335 inset;\\n  color: #FF695E;\\n}\\n\\n.ui.inverted.red.basic.buttons .active.button,\\n.ui.inverted.red.buttons .basic.active.button,\\n.ui.inverted.red.basic.active.button {\\n  -webkit-box-shadow: 0 0 0 2px #ff5144 inset;\\n          box-shadow: 0 0 0 2px #ff5144 inset;\\n  color: #FF695E;\\n}\\n\\n.ui.inverted.red.basic.buttons .button:active,\\n.ui.inverted.red.buttons .basic.button:active,\\n.ui.inverted.red.basic.button:active {\\n  -webkit-box-shadow: 0 0 0 2px #ff392b inset;\\n          box-shadow: 0 0 0 2px #ff392b inset;\\n  color: #FF695E;\\n}\\n\\n/* Tertiary */\\n\\n.ui.tertiary.red.buttons .button,\\n.ui.tertiary.red.buttons .tertiary.button,\\n.ui.tertiary.red.button {\\n  background: transparent;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #DB2828;\\n}\\n\\n.ui.tertiary.red.buttons .button:hover,\\n.ui.tertiary.red.buttons button:hover,\\n.ui.tertiary.red.button:hover {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #b93131;\\n          box-shadow: inset 0 -0.2em 0 #b93131;\\n  color: #b93131;\\n}\\n\\n.ui.tertiary.red.buttons .button:focus,\\n.ui.tertiary.red.buttons .tertiary.button:focus,\\n.ui.tertiary.red.button:focus {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #b52626;\\n          box-shadow: inset 0 -0.2em 0 #b52626;\\n  color: #b52626;\\n}\\n\\n.ui.tertiary.red.buttons .active.button,\\n.ui.tertiary.red.buttons .tertiary.active.button,\\n.ui.tertiary.red.active.button,\\n.ui.tertiary.red.buttons .button:active,\\n.ui.tertiary.red.buttons .tertiary.button:active,\\n.ui.tertiary.red.button:active {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #ea0000;\\n          box-shadow: inset 0 -0.2em 0 #ea0000;\\n  color: #d41515;\\n}\\n\\n.ui.orange.buttons .button,\\n.ui.orange.button {\\n  background-color: #F2711C;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n}\\n\\n.ui.orange.button {\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.orange.buttons .button:hover,\\n.ui.orange.button:hover {\\n  background-color: #f26202;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.orange.buttons .button:focus,\\n.ui.orange.button:focus {\\n  background-color: #e55b00;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.orange.buttons .button:active,\\n.ui.orange.button:active {\\n  background-color: #cf590c;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.orange.buttons .active.button,\\n.ui.orange.buttons .active.button:active,\\n.ui.orange.active.button,\\n.ui.orange.button .active.button:active {\\n  background-color: #f56100;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.orange.buttons .button,\\n.ui.basic.orange.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #F2711C inset;\\n          box-shadow: 0 0 0 1px #F2711C inset;\\n  color: #F2711C;\\n}\\n\\n.ui.basic.orange.buttons .button:hover,\\n.ui.basic.orange.button:hover {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #f26202 inset;\\n          box-shadow: 0 0 0 1px #f26202 inset;\\n  color: #f26202;\\n}\\n\\n.ui.basic.orange.buttons .button:focus,\\n.ui.basic.orange.button:focus {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #e55b00 inset;\\n          box-shadow: 0 0 0 1px #e55b00 inset;\\n  color: #f26202;\\n}\\n\\n.ui.basic.orange.buttons .active.button,\\n.ui.basic.orange.active.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #f56100 inset;\\n          box-shadow: 0 0 0 1px #f56100 inset;\\n  color: #cf590c;\\n}\\n\\n.ui.basic.orange.buttons .button:active,\\n.ui.basic.orange.button:active {\\n  -webkit-box-shadow: 0 0 0 1px #cf590c inset;\\n          box-shadow: 0 0 0 1px #cf590c inset;\\n  color: #cf590c;\\n}\\n\\n.ui.buttons:not(.vertical) > .basic.orange.button:not(:first-child) {\\n  margin-left: -1px;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.orange.buttons .button,\\n.ui.inverted.orange.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px #FF851B inset;\\n          box-shadow: 0 0 0 2px #FF851B inset;\\n  color: #FF851B;\\n}\\n\\n.ui.inverted.orange.buttons .button:hover,\\n.ui.inverted.orange.button:hover,\\n.ui.inverted.orange.buttons .button:focus,\\n.ui.inverted.orange.button:focus,\\n.ui.inverted.orange.buttons .button.active,\\n.ui.inverted.orange.button.active,\\n.ui.inverted.orange.buttons .button:active,\\n.ui.inverted.orange.button:active {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.orange.buttons .button:hover,\\n.ui.inverted.orange.button:hover {\\n  background-color: #e76b00;\\n}\\n\\n.ui.inverted.orange.buttons .button:focus,\\n.ui.inverted.orange.button:focus {\\n  background-color: #f17000;\\n}\\n\\n.ui.inverted.orange.buttons .active.button,\\n.ui.inverted.orange.active.button {\\n  background-color: #ff7701;\\n}\\n\\n.ui.inverted.orange.buttons .button:active,\\n.ui.inverted.orange.button:active {\\n  background-color: #e76b00;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.orange.basic.buttons .button,\\n.ui.inverted.orange.buttons .basic.button,\\n.ui.inverted.orange.basic.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n          box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.orange.basic.buttons .button:hover,\\n.ui.inverted.orange.buttons .basic.button:hover,\\n.ui.inverted.orange.basic.button:hover {\\n  -webkit-box-shadow: 0 0 0 2px #e76b00 inset;\\n          box-shadow: 0 0 0 2px #e76b00 inset;\\n  color: #FF851B;\\n}\\n\\n.ui.inverted.orange.basic.buttons .button:focus,\\n.ui.inverted.orange.basic.buttons .button:focus,\\n.ui.inverted.orange.basic.button:focus {\\n  -webkit-box-shadow: 0 0 0 2px #f17000 inset;\\n          box-shadow: 0 0 0 2px #f17000 inset;\\n  color: #FF851B;\\n}\\n\\n.ui.inverted.orange.basic.buttons .active.button,\\n.ui.inverted.orange.buttons .basic.active.button,\\n.ui.inverted.orange.basic.active.button {\\n  -webkit-box-shadow: 0 0 0 2px #ff7701 inset;\\n          box-shadow: 0 0 0 2px #ff7701 inset;\\n  color: #FF851B;\\n}\\n\\n.ui.inverted.orange.basic.buttons .button:active,\\n.ui.inverted.orange.buttons .basic.button:active,\\n.ui.inverted.orange.basic.button:active {\\n  -webkit-box-shadow: 0 0 0 2px #e76b00 inset;\\n          box-shadow: 0 0 0 2px #e76b00 inset;\\n  color: #FF851B;\\n}\\n\\n/* Tertiary */\\n\\n.ui.tertiary.orange.buttons .button,\\n.ui.tertiary.orange.buttons .tertiary.button,\\n.ui.tertiary.orange.button {\\n  background: transparent;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #F2711C;\\n}\\n\\n.ui.tertiary.orange.buttons .button:hover,\\n.ui.tertiary.orange.buttons button:hover,\\n.ui.tertiary.orange.button:hover {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #da671b;\\n          box-shadow: inset 0 -0.2em 0 #da671b;\\n  color: #da671b;\\n}\\n\\n.ui.tertiary.orange.buttons .button:focus,\\n.ui.tertiary.orange.buttons .tertiary.button:focus,\\n.ui.tertiary.orange.button:focus {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #ce6017;\\n          box-shadow: inset 0 -0.2em 0 #ce6017;\\n  color: #ce6017;\\n}\\n\\n.ui.tertiary.orange.buttons .active.button,\\n.ui.tertiary.orange.buttons .tertiary.active.button,\\n.ui.tertiary.orange.active.button,\\n.ui.tertiary.orange.buttons .button:active,\\n.ui.tertiary.orange.buttons .tertiary.button:active,\\n.ui.tertiary.orange.button:active {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #f56100;\\n          box-shadow: inset 0 -0.2em 0 #f56100;\\n  color: #f56100;\\n}\\n\\n.ui.yellow.buttons .button,\\n.ui.yellow.button {\\n  background-color: #FBBD08;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n}\\n\\n.ui.yellow.button {\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.yellow.buttons .button:hover,\\n.ui.yellow.button:hover {\\n  background-color: #eaae00;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.yellow.buttons .button:focus,\\n.ui.yellow.button:focus {\\n  background-color: #daa300;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.yellow.buttons .button:active,\\n.ui.yellow.button:active {\\n  background-color: #cd9903;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.yellow.buttons .active.button,\\n.ui.yellow.buttons .active.button:active,\\n.ui.yellow.active.button,\\n.ui.yellow.button .active.button:active {\\n  background-color: #eaae00;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.yellow.buttons .button,\\n.ui.basic.yellow.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #FBBD08 inset;\\n          box-shadow: 0 0 0 1px #FBBD08 inset;\\n  color: #FBBD08;\\n}\\n\\n.ui.basic.yellow.buttons .button:hover,\\n.ui.basic.yellow.button:hover {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #eaae00 inset;\\n          box-shadow: 0 0 0 1px #eaae00 inset;\\n  color: #eaae00;\\n}\\n\\n.ui.basic.yellow.buttons .button:focus,\\n.ui.basic.yellow.button:focus {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #daa300 inset;\\n          box-shadow: 0 0 0 1px #daa300 inset;\\n  color: #eaae00;\\n}\\n\\n.ui.basic.yellow.buttons .active.button,\\n.ui.basic.yellow.active.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #eaae00 inset;\\n          box-shadow: 0 0 0 1px #eaae00 inset;\\n  color: #cd9903;\\n}\\n\\n.ui.basic.yellow.buttons .button:active,\\n.ui.basic.yellow.button:active {\\n  -webkit-box-shadow: 0 0 0 1px #cd9903 inset;\\n          box-shadow: 0 0 0 1px #cd9903 inset;\\n  color: #cd9903;\\n}\\n\\n.ui.buttons:not(.vertical) > .basic.yellow.button:not(:first-child) {\\n  margin-left: -1px;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.yellow.buttons .button,\\n.ui.inverted.yellow.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px #FFE21F inset;\\n          box-shadow: 0 0 0 2px #FFE21F inset;\\n  color: #FFE21F;\\n}\\n\\n.ui.inverted.yellow.buttons .button:hover,\\n.ui.inverted.yellow.button:hover,\\n.ui.inverted.yellow.buttons .button:focus,\\n.ui.inverted.yellow.button:focus,\\n.ui.inverted.yellow.buttons .button.active,\\n.ui.inverted.yellow.button.active,\\n.ui.inverted.yellow.buttons .button:active,\\n.ui.inverted.yellow.button:active {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: rgba(0, 0, 0, 0.6);\\n}\\n\\n.ui.inverted.yellow.buttons .button:hover,\\n.ui.inverted.yellow.button:hover {\\n  background-color: #ebcd00;\\n}\\n\\n.ui.inverted.yellow.buttons .button:focus,\\n.ui.inverted.yellow.button:focus {\\n  background-color: #f5d500;\\n}\\n\\n.ui.inverted.yellow.buttons .active.button,\\n.ui.inverted.yellow.active.button {\\n  background-color: #ffdf05;\\n}\\n\\n.ui.inverted.yellow.buttons .button:active,\\n.ui.inverted.yellow.button:active {\\n  background-color: #ebcd00;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.yellow.basic.buttons .button,\\n.ui.inverted.yellow.buttons .basic.button,\\n.ui.inverted.yellow.basic.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n          box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.yellow.basic.buttons .button:hover,\\n.ui.inverted.yellow.buttons .basic.button:hover,\\n.ui.inverted.yellow.basic.button:hover {\\n  -webkit-box-shadow: 0 0 0 2px #ebcd00 inset;\\n          box-shadow: 0 0 0 2px #ebcd00 inset;\\n  color: #FFE21F;\\n}\\n\\n.ui.inverted.yellow.basic.buttons .button:focus,\\n.ui.inverted.yellow.basic.buttons .button:focus,\\n.ui.inverted.yellow.basic.button:focus {\\n  -webkit-box-shadow: 0 0 0 2px #f5d500 inset;\\n          box-shadow: 0 0 0 2px #f5d500 inset;\\n  color: #FFE21F;\\n}\\n\\n.ui.inverted.yellow.basic.buttons .active.button,\\n.ui.inverted.yellow.buttons .basic.active.button,\\n.ui.inverted.yellow.basic.active.button {\\n  -webkit-box-shadow: 0 0 0 2px #ffdf05 inset;\\n          box-shadow: 0 0 0 2px #ffdf05 inset;\\n  color: #FFE21F;\\n}\\n\\n.ui.inverted.yellow.basic.buttons .button:active,\\n.ui.inverted.yellow.buttons .basic.button:active,\\n.ui.inverted.yellow.basic.button:active {\\n  -webkit-box-shadow: 0 0 0 2px #ebcd00 inset;\\n          box-shadow: 0 0 0 2px #ebcd00 inset;\\n  color: #FFE21F;\\n}\\n\\n/* Tertiary */\\n\\n.ui.tertiary.yellow.buttons .button,\\n.ui.tertiary.yellow.buttons .tertiary.button,\\n.ui.tertiary.yellow.button {\\n  background: transparent;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #FBBD08;\\n}\\n\\n.ui.tertiary.yellow.buttons .button:hover,\\n.ui.tertiary.yellow.buttons button:hover,\\n.ui.tertiary.yellow.button:hover {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #d2a217;\\n          box-shadow: inset 0 -0.2em 0 #d2a217;\\n  color: #d2a217;\\n}\\n\\n.ui.tertiary.yellow.buttons .button:focus,\\n.ui.tertiary.yellow.buttons .tertiary.button:focus,\\n.ui.tertiary.yellow.button:focus {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #c49816;\\n          box-shadow: inset 0 -0.2em 0 #c49816;\\n  color: #c49816;\\n}\\n\\n.ui.tertiary.yellow.buttons .active.button,\\n.ui.tertiary.yellow.buttons .tertiary.active.button,\\n.ui.tertiary.yellow.active.button,\\n.ui.tertiary.yellow.buttons .button:active,\\n.ui.tertiary.yellow.buttons .tertiary.button:active,\\n.ui.tertiary.yellow.button:active {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #eaae00;\\n          box-shadow: inset 0 -0.2em 0 #eaae00;\\n  color: #eaae00;\\n}\\n\\n.ui.olive.buttons .button,\\n.ui.olive.button {\\n  background-color: #B5CC18;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n}\\n\\n.ui.olive.button {\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.olive.buttons .button:hover,\\n.ui.olive.button:hover {\\n  background-color: #a7bd0d;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.olive.buttons .button:focus,\\n.ui.olive.button:focus {\\n  background-color: #a0b605;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.olive.buttons .button:active,\\n.ui.olive.button:active {\\n  background-color: #8d9e13;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.olive.buttons .active.button,\\n.ui.olive.buttons .active.button:active,\\n.ui.olive.active.button,\\n.ui.olive.button .active.button:active {\\n  background-color: #aac109;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.olive.buttons .button,\\n.ui.basic.olive.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #B5CC18 inset;\\n          box-shadow: 0 0 0 1px #B5CC18 inset;\\n  color: #B5CC18;\\n}\\n\\n.ui.basic.olive.buttons .button:hover,\\n.ui.basic.olive.button:hover {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #a7bd0d inset;\\n          box-shadow: 0 0 0 1px #a7bd0d inset;\\n  color: #a7bd0d;\\n}\\n\\n.ui.basic.olive.buttons .button:focus,\\n.ui.basic.olive.button:focus {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #a0b605 inset;\\n          box-shadow: 0 0 0 1px #a0b605 inset;\\n  color: #a7bd0d;\\n}\\n\\n.ui.basic.olive.buttons .active.button,\\n.ui.basic.olive.active.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #aac109 inset;\\n          box-shadow: 0 0 0 1px #aac109 inset;\\n  color: #8d9e13;\\n}\\n\\n.ui.basic.olive.buttons .button:active,\\n.ui.basic.olive.button:active {\\n  -webkit-box-shadow: 0 0 0 1px #8d9e13 inset;\\n          box-shadow: 0 0 0 1px #8d9e13 inset;\\n  color: #8d9e13;\\n}\\n\\n.ui.buttons:not(.vertical) > .basic.olive.button:not(:first-child) {\\n  margin-left: -1px;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.olive.buttons .button,\\n.ui.inverted.olive.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px #D9E778 inset;\\n          box-shadow: 0 0 0 2px #D9E778 inset;\\n  color: #D9E778;\\n}\\n\\n.ui.inverted.olive.buttons .button:hover,\\n.ui.inverted.olive.button:hover,\\n.ui.inverted.olive.buttons .button:focus,\\n.ui.inverted.olive.button:focus,\\n.ui.inverted.olive.buttons .button.active,\\n.ui.inverted.olive.button.active,\\n.ui.inverted.olive.buttons .button:active,\\n.ui.inverted.olive.button:active {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: rgba(0, 0, 0, 0.6);\\n}\\n\\n.ui.inverted.olive.buttons .button:hover,\\n.ui.inverted.olive.button:hover {\\n  background-color: #d2e745;\\n}\\n\\n.ui.inverted.olive.buttons .button:focus,\\n.ui.inverted.olive.button:focus {\\n  background-color: #daef47;\\n}\\n\\n.ui.inverted.olive.buttons .active.button,\\n.ui.inverted.olive.active.button {\\n  background-color: #daed59;\\n}\\n\\n.ui.inverted.olive.buttons .button:active,\\n.ui.inverted.olive.button:active {\\n  background-color: #cddf4d;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.olive.basic.buttons .button,\\n.ui.inverted.olive.buttons .basic.button,\\n.ui.inverted.olive.basic.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n          box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.olive.basic.buttons .button:hover,\\n.ui.inverted.olive.buttons .basic.button:hover,\\n.ui.inverted.olive.basic.button:hover {\\n  -webkit-box-shadow: 0 0 0 2px #d2e745 inset;\\n          box-shadow: 0 0 0 2px #d2e745 inset;\\n  color: #D9E778;\\n}\\n\\n.ui.inverted.olive.basic.buttons .button:focus,\\n.ui.inverted.olive.basic.buttons .button:focus,\\n.ui.inverted.olive.basic.button:focus {\\n  -webkit-box-shadow: 0 0 0 2px #daef47 inset;\\n          box-shadow: 0 0 0 2px #daef47 inset;\\n  color: #D9E778;\\n}\\n\\n.ui.inverted.olive.basic.buttons .active.button,\\n.ui.inverted.olive.buttons .basic.active.button,\\n.ui.inverted.olive.basic.active.button {\\n  -webkit-box-shadow: 0 0 0 2px #daed59 inset;\\n          box-shadow: 0 0 0 2px #daed59 inset;\\n  color: #D9E778;\\n}\\n\\n.ui.inverted.olive.basic.buttons .button:active,\\n.ui.inverted.olive.buttons .basic.button:active,\\n.ui.inverted.olive.basic.button:active {\\n  -webkit-box-shadow: 0 0 0 2px #cddf4d inset;\\n          box-shadow: 0 0 0 2px #cddf4d inset;\\n  color: #D9E778;\\n}\\n\\n/* Tertiary */\\n\\n.ui.tertiary.olive.buttons .button,\\n.ui.tertiary.olive.buttons .tertiary.button,\\n.ui.tertiary.olive.button {\\n  background: transparent;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #B5CC18;\\n}\\n\\n.ui.tertiary.olive.buttons .button:hover,\\n.ui.tertiary.olive.buttons button:hover,\\n.ui.tertiary.olive.button:hover {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #98a922;\\n          box-shadow: inset 0 -0.2em 0 #98a922;\\n  color: #98a922;\\n}\\n\\n.ui.tertiary.olive.buttons .button:focus,\\n.ui.tertiary.olive.buttons .tertiary.button:focus,\\n.ui.tertiary.olive.button:focus {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #92a418;\\n          box-shadow: inset 0 -0.2em 0 #92a418;\\n  color: #92a418;\\n}\\n\\n.ui.tertiary.olive.buttons .active.button,\\n.ui.tertiary.olive.buttons .tertiary.active.button,\\n.ui.tertiary.olive.active.button,\\n.ui.tertiary.olive.buttons .button:active,\\n.ui.tertiary.olive.buttons .tertiary.button:active,\\n.ui.tertiary.olive.button:active {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #b1cb00;\\n          box-shadow: inset 0 -0.2em 0 #b1cb00;\\n  color: #aac109;\\n}\\n\\n.ui.green.buttons .button,\\n.ui.green.button {\\n  background-color: #21BA45;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n}\\n\\n.ui.green.button {\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.green.buttons .button:hover,\\n.ui.green.button:hover {\\n  background-color: #16ab39;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.green.buttons .button:focus,\\n.ui.green.button:focus {\\n  background-color: #0ea432;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.green.buttons .button:active,\\n.ui.green.button:active {\\n  background-color: #198f35;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.green.buttons .active.button,\\n.ui.green.buttons .active.button:active,\\n.ui.green.active.button,\\n.ui.green.button .active.button:active {\\n  background-color: #13ae38;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.green.buttons .button,\\n.ui.basic.green.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #21BA45 inset;\\n          box-shadow: 0 0 0 1px #21BA45 inset;\\n  color: #21BA45;\\n}\\n\\n.ui.basic.green.buttons .button:hover,\\n.ui.basic.green.button:hover {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #16ab39 inset;\\n          box-shadow: 0 0 0 1px #16ab39 inset;\\n  color: #16ab39;\\n}\\n\\n.ui.basic.green.buttons .button:focus,\\n.ui.basic.green.button:focus {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #0ea432 inset;\\n          box-shadow: 0 0 0 1px #0ea432 inset;\\n  color: #16ab39;\\n}\\n\\n.ui.basic.green.buttons .active.button,\\n.ui.basic.green.active.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #13ae38 inset;\\n          box-shadow: 0 0 0 1px #13ae38 inset;\\n  color: #198f35;\\n}\\n\\n.ui.basic.green.buttons .button:active,\\n.ui.basic.green.button:active {\\n  -webkit-box-shadow: 0 0 0 1px #198f35 inset;\\n          box-shadow: 0 0 0 1px #198f35 inset;\\n  color: #198f35;\\n}\\n\\n.ui.buttons:not(.vertical) > .basic.green.button:not(:first-child) {\\n  margin-left: -1px;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.green.buttons .button,\\n.ui.inverted.green.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px #2ECC40 inset;\\n          box-shadow: 0 0 0 2px #2ECC40 inset;\\n  color: #2ECC40;\\n}\\n\\n.ui.inverted.green.buttons .button:hover,\\n.ui.inverted.green.button:hover,\\n.ui.inverted.green.buttons .button:focus,\\n.ui.inverted.green.button:focus,\\n.ui.inverted.green.buttons .button.active,\\n.ui.inverted.green.button.active,\\n.ui.inverted.green.buttons .button:active,\\n.ui.inverted.green.button:active {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.green.buttons .button:hover,\\n.ui.inverted.green.button:hover {\\n  background-color: #1ea92e;\\n}\\n\\n.ui.inverted.green.buttons .button:focus,\\n.ui.inverted.green.button:focus {\\n  background-color: #19b82b;\\n}\\n\\n.ui.inverted.green.buttons .active.button,\\n.ui.inverted.green.active.button {\\n  background-color: #1fc231;\\n}\\n\\n.ui.inverted.green.buttons .button:active,\\n.ui.inverted.green.button:active {\\n  background-color: #25a233;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.green.basic.buttons .button,\\n.ui.inverted.green.buttons .basic.button,\\n.ui.inverted.green.basic.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n          box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.green.basic.buttons .button:hover,\\n.ui.inverted.green.buttons .basic.button:hover,\\n.ui.inverted.green.basic.button:hover {\\n  -webkit-box-shadow: 0 0 0 2px #1ea92e inset;\\n          box-shadow: 0 0 0 2px #1ea92e inset;\\n  color: #2ECC40;\\n}\\n\\n.ui.inverted.green.basic.buttons .button:focus,\\n.ui.inverted.green.basic.buttons .button:focus,\\n.ui.inverted.green.basic.button:focus {\\n  -webkit-box-shadow: 0 0 0 2px #19b82b inset;\\n          box-shadow: 0 0 0 2px #19b82b inset;\\n  color: #2ECC40;\\n}\\n\\n.ui.inverted.green.basic.buttons .active.button,\\n.ui.inverted.green.buttons .basic.active.button,\\n.ui.inverted.green.basic.active.button {\\n  -webkit-box-shadow: 0 0 0 2px #1fc231 inset;\\n          box-shadow: 0 0 0 2px #1fc231 inset;\\n  color: #2ECC40;\\n}\\n\\n.ui.inverted.green.basic.buttons .button:active,\\n.ui.inverted.green.buttons .basic.button:active,\\n.ui.inverted.green.basic.button:active {\\n  -webkit-box-shadow: 0 0 0 2px #25a233 inset;\\n          box-shadow: 0 0 0 2px #25a233 inset;\\n  color: #2ECC40;\\n}\\n\\n/* Tertiary */\\n\\n.ui.tertiary.green.buttons .button,\\n.ui.tertiary.green.buttons .tertiary.button,\\n.ui.tertiary.green.button {\\n  background: transparent;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #21BA45;\\n}\\n\\n.ui.tertiary.green.buttons .button:hover,\\n.ui.tertiary.green.buttons button:hover,\\n.ui.tertiary.green.button:hover {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #2a9844;\\n          box-shadow: inset 0 -0.2em 0 #2a9844;\\n  color: #2a9844;\\n}\\n\\n.ui.tertiary.green.buttons .button:focus,\\n.ui.tertiary.green.buttons .tertiary.button:focus,\\n.ui.tertiary.green.button:focus {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #20923b;\\n          box-shadow: inset 0 -0.2em 0 #20923b;\\n  color: #20923b;\\n}\\n\\n.ui.tertiary.green.buttons .active.button,\\n.ui.tertiary.green.buttons .tertiary.active.button,\\n.ui.tertiary.green.active.button,\\n.ui.tertiary.green.buttons .button:active,\\n.ui.tertiary.green.buttons .tertiary.button:active,\\n.ui.tertiary.green.button:active {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #00c22e;\\n          box-shadow: inset 0 -0.2em 0 #00c22e;\\n  color: #13ae38;\\n}\\n\\n.ui.teal.buttons .button,\\n.ui.teal.button {\\n  background-color: #00B5AD;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n}\\n\\n.ui.teal.button {\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.teal.buttons .button:hover,\\n.ui.teal.button:hover {\\n  background-color: #009c95;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.teal.buttons .button:focus,\\n.ui.teal.button:focus {\\n  background-color: #008c86;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.teal.buttons .button:active,\\n.ui.teal.button:active {\\n  background-color: #00827c;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.teal.buttons .active.button,\\n.ui.teal.buttons .active.button:active,\\n.ui.teal.active.button,\\n.ui.teal.button .active.button:active {\\n  background-color: #009c95;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.teal.buttons .button,\\n.ui.basic.teal.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #00B5AD inset;\\n          box-shadow: 0 0 0 1px #00B5AD inset;\\n  color: #00B5AD;\\n}\\n\\n.ui.basic.teal.buttons .button:hover,\\n.ui.basic.teal.button:hover {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #009c95 inset;\\n          box-shadow: 0 0 0 1px #009c95 inset;\\n  color: #009c95;\\n}\\n\\n.ui.basic.teal.buttons .button:focus,\\n.ui.basic.teal.button:focus {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #008c86 inset;\\n          box-shadow: 0 0 0 1px #008c86 inset;\\n  color: #009c95;\\n}\\n\\n.ui.basic.teal.buttons .active.button,\\n.ui.basic.teal.active.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #009c95 inset;\\n          box-shadow: 0 0 0 1px #009c95 inset;\\n  color: #00827c;\\n}\\n\\n.ui.basic.teal.buttons .button:active,\\n.ui.basic.teal.button:active {\\n  -webkit-box-shadow: 0 0 0 1px #00827c inset;\\n          box-shadow: 0 0 0 1px #00827c inset;\\n  color: #00827c;\\n}\\n\\n.ui.buttons:not(.vertical) > .basic.teal.button:not(:first-child) {\\n  margin-left: -1px;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.teal.buttons .button,\\n.ui.inverted.teal.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px #6DFFFF inset;\\n          box-shadow: 0 0 0 2px #6DFFFF inset;\\n  color: #6DFFFF;\\n}\\n\\n.ui.inverted.teal.buttons .button:hover,\\n.ui.inverted.teal.button:hover,\\n.ui.inverted.teal.buttons .button:focus,\\n.ui.inverted.teal.button:focus,\\n.ui.inverted.teal.buttons .button.active,\\n.ui.inverted.teal.button.active,\\n.ui.inverted.teal.buttons .button:active,\\n.ui.inverted.teal.button:active {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: rgba(0, 0, 0, 0.6);\\n}\\n\\n.ui.inverted.teal.buttons .button:hover,\\n.ui.inverted.teal.button:hover {\\n  background-color: #3affff;\\n}\\n\\n.ui.inverted.teal.buttons .button:focus,\\n.ui.inverted.teal.button:focus {\\n  background-color: #44ffff;\\n}\\n\\n.ui.inverted.teal.buttons .active.button,\\n.ui.inverted.teal.active.button {\\n  background-color: #54ffff;\\n}\\n\\n.ui.inverted.teal.buttons .button:active,\\n.ui.inverted.teal.button:active {\\n  background-color: #3affff;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.teal.basic.buttons .button,\\n.ui.inverted.teal.buttons .basic.button,\\n.ui.inverted.teal.basic.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n          box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.teal.basic.buttons .button:hover,\\n.ui.inverted.teal.buttons .basic.button:hover,\\n.ui.inverted.teal.basic.button:hover {\\n  -webkit-box-shadow: 0 0 0 2px #3affff inset;\\n          box-shadow: 0 0 0 2px #3affff inset;\\n  color: #6DFFFF;\\n}\\n\\n.ui.inverted.teal.basic.buttons .button:focus,\\n.ui.inverted.teal.basic.buttons .button:focus,\\n.ui.inverted.teal.basic.button:focus {\\n  -webkit-box-shadow: 0 0 0 2px #44ffff inset;\\n          box-shadow: 0 0 0 2px #44ffff inset;\\n  color: #6DFFFF;\\n}\\n\\n.ui.inverted.teal.basic.buttons .active.button,\\n.ui.inverted.teal.buttons .basic.active.button,\\n.ui.inverted.teal.basic.active.button {\\n  -webkit-box-shadow: 0 0 0 2px #54ffff inset;\\n          box-shadow: 0 0 0 2px #54ffff inset;\\n  color: #6DFFFF;\\n}\\n\\n.ui.inverted.teal.basic.buttons .button:active,\\n.ui.inverted.teal.buttons .basic.button:active,\\n.ui.inverted.teal.basic.button:active {\\n  -webkit-box-shadow: 0 0 0 2px #3affff inset;\\n          box-shadow: 0 0 0 2px #3affff inset;\\n  color: #6DFFFF;\\n}\\n\\n/* Tertiary */\\n\\n.ui.tertiary.teal.buttons .button,\\n.ui.tertiary.teal.buttons .tertiary.button,\\n.ui.tertiary.teal.button {\\n  background: transparent;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #00B5AD;\\n}\\n\\n.ui.tertiary.teal.buttons .button:hover,\\n.ui.tertiary.teal.buttons button:hover,\\n.ui.tertiary.teal.button:hover {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #108c86;\\n          box-shadow: inset 0 -0.2em 0 #108c86;\\n  color: #108c86;\\n}\\n\\n.ui.tertiary.teal.buttons .button:focus,\\n.ui.tertiary.teal.buttons .tertiary.button:focus,\\n.ui.tertiary.teal.button:focus {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #0e7e79;\\n          box-shadow: inset 0 -0.2em 0 #0e7e79;\\n  color: #0e7e79;\\n}\\n\\n.ui.tertiary.teal.buttons .active.button,\\n.ui.tertiary.teal.buttons .tertiary.active.button,\\n.ui.tertiary.teal.active.button,\\n.ui.tertiary.teal.buttons .button:active,\\n.ui.tertiary.teal.buttons .tertiary.button:active,\\n.ui.tertiary.teal.button:active {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #009c95;\\n          box-shadow: inset 0 -0.2em 0 #009c95;\\n  color: #009c95;\\n}\\n\\n.ui.blue.buttons .button,\\n.ui.blue.button {\\n  background-color: #2185D0;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n}\\n\\n.ui.blue.button {\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.blue.buttons .button:hover,\\n.ui.blue.button:hover {\\n  background-color: #1678c2;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.blue.buttons .button:focus,\\n.ui.blue.button:focus {\\n  background-color: #0d71bb;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.blue.buttons .button:active,\\n.ui.blue.button:active {\\n  background-color: #1a69a4;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.blue.buttons .active.button,\\n.ui.blue.buttons .active.button:active,\\n.ui.blue.active.button,\\n.ui.blue.button .active.button:active {\\n  background-color: #1279c6;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.blue.buttons .button,\\n.ui.basic.blue.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #2185D0 inset;\\n          box-shadow: 0 0 0 1px #2185D0 inset;\\n  color: #2185D0;\\n}\\n\\n.ui.basic.blue.buttons .button:hover,\\n.ui.basic.blue.button:hover {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #1678c2 inset;\\n          box-shadow: 0 0 0 1px #1678c2 inset;\\n  color: #1678c2;\\n}\\n\\n.ui.basic.blue.buttons .button:focus,\\n.ui.basic.blue.button:focus {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #0d71bb inset;\\n          box-shadow: 0 0 0 1px #0d71bb inset;\\n  color: #1678c2;\\n}\\n\\n.ui.basic.blue.buttons .active.button,\\n.ui.basic.blue.active.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #1279c6 inset;\\n          box-shadow: 0 0 0 1px #1279c6 inset;\\n  color: #1a69a4;\\n}\\n\\n.ui.basic.blue.buttons .button:active,\\n.ui.basic.blue.button:active {\\n  -webkit-box-shadow: 0 0 0 1px #1a69a4 inset;\\n          box-shadow: 0 0 0 1px #1a69a4 inset;\\n  color: #1a69a4;\\n}\\n\\n.ui.buttons:not(.vertical) > .basic.blue.button:not(:first-child) {\\n  margin-left: -1px;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.blue.buttons .button,\\n.ui.inverted.blue.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px #54C8FF inset;\\n          box-shadow: 0 0 0 2px #54C8FF inset;\\n  color: #54C8FF;\\n}\\n\\n.ui.inverted.blue.buttons .button:hover,\\n.ui.inverted.blue.button:hover,\\n.ui.inverted.blue.buttons .button:focus,\\n.ui.inverted.blue.button:focus,\\n.ui.inverted.blue.buttons .button.active,\\n.ui.inverted.blue.button.active,\\n.ui.inverted.blue.buttons .button:active,\\n.ui.inverted.blue.button:active {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.blue.buttons .button:hover,\\n.ui.inverted.blue.button:hover {\\n  background-color: #21b8ff;\\n}\\n\\n.ui.inverted.blue.buttons .button:focus,\\n.ui.inverted.blue.button:focus {\\n  background-color: #2bbbff;\\n}\\n\\n.ui.inverted.blue.buttons .active.button,\\n.ui.inverted.blue.active.button {\\n  background-color: #3ac0ff;\\n}\\n\\n.ui.inverted.blue.buttons .button:active,\\n.ui.inverted.blue.button:active {\\n  background-color: #21b8ff;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.blue.basic.buttons .button,\\n.ui.inverted.blue.buttons .basic.button,\\n.ui.inverted.blue.basic.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n          box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.blue.basic.buttons .button:hover,\\n.ui.inverted.blue.buttons .basic.button:hover,\\n.ui.inverted.blue.basic.button:hover {\\n  -webkit-box-shadow: 0 0 0 2px #21b8ff inset;\\n          box-shadow: 0 0 0 2px #21b8ff inset;\\n  color: #54C8FF;\\n}\\n\\n.ui.inverted.blue.basic.buttons .button:focus,\\n.ui.inverted.blue.basic.buttons .button:focus,\\n.ui.inverted.blue.basic.button:focus {\\n  -webkit-box-shadow: 0 0 0 2px #2bbbff inset;\\n          box-shadow: 0 0 0 2px #2bbbff inset;\\n  color: #54C8FF;\\n}\\n\\n.ui.inverted.blue.basic.buttons .active.button,\\n.ui.inverted.blue.buttons .basic.active.button,\\n.ui.inverted.blue.basic.active.button {\\n  -webkit-box-shadow: 0 0 0 2px #3ac0ff inset;\\n          box-shadow: 0 0 0 2px #3ac0ff inset;\\n  color: #54C8FF;\\n}\\n\\n.ui.inverted.blue.basic.buttons .button:active,\\n.ui.inverted.blue.buttons .basic.button:active,\\n.ui.inverted.blue.basic.button:active {\\n  -webkit-box-shadow: 0 0 0 2px #21b8ff inset;\\n          box-shadow: 0 0 0 2px #21b8ff inset;\\n  color: #54C8FF;\\n}\\n\\n/* Tertiary */\\n\\n.ui.tertiary.blue.buttons .button,\\n.ui.tertiary.blue.buttons .tertiary.button,\\n.ui.tertiary.blue.button {\\n  background: transparent;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #2185D0;\\n}\\n\\n.ui.tertiary.blue.buttons .button:hover,\\n.ui.tertiary.blue.buttons button:hover,\\n.ui.tertiary.blue.button:hover {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #2b75ac;\\n          box-shadow: inset 0 -0.2em 0 #2b75ac;\\n  color: #2b75ac;\\n}\\n\\n.ui.tertiary.blue.buttons .button:focus,\\n.ui.tertiary.blue.buttons .tertiary.button:focus,\\n.ui.tertiary.blue.button:focus {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #216ea7;\\n          box-shadow: inset 0 -0.2em 0 #216ea7;\\n  color: #216ea7;\\n}\\n\\n.ui.tertiary.blue.buttons .active.button,\\n.ui.tertiary.blue.buttons .tertiary.active.button,\\n.ui.tertiary.blue.active.button,\\n.ui.tertiary.blue.buttons .button:active,\\n.ui.tertiary.blue.buttons .tertiary.button:active,\\n.ui.tertiary.blue.button:active {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #007bd8;\\n          box-shadow: inset 0 -0.2em 0 #007bd8;\\n  color: #1279c6;\\n}\\n\\n.ui.violet.buttons .button,\\n.ui.violet.button {\\n  background-color: #6435C9;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n}\\n\\n.ui.violet.button {\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.violet.buttons .button:hover,\\n.ui.violet.button:hover {\\n  background-color: #5829bb;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.violet.buttons .button:focus,\\n.ui.violet.button:focus {\\n  background-color: #4f20b5;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.violet.buttons .button:active,\\n.ui.violet.button:active {\\n  background-color: #502aa1;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.violet.buttons .active.button,\\n.ui.violet.buttons .active.button:active,\\n.ui.violet.active.button,\\n.ui.violet.button .active.button:active {\\n  background-color: #5626bf;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.violet.buttons .button,\\n.ui.basic.violet.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #6435C9 inset;\\n          box-shadow: 0 0 0 1px #6435C9 inset;\\n  color: #6435C9;\\n}\\n\\n.ui.basic.violet.buttons .button:hover,\\n.ui.basic.violet.button:hover {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #5829bb inset;\\n          box-shadow: 0 0 0 1px #5829bb inset;\\n  color: #5829bb;\\n}\\n\\n.ui.basic.violet.buttons .button:focus,\\n.ui.basic.violet.button:focus {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #4f20b5 inset;\\n          box-shadow: 0 0 0 1px #4f20b5 inset;\\n  color: #5829bb;\\n}\\n\\n.ui.basic.violet.buttons .active.button,\\n.ui.basic.violet.active.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #5626bf inset;\\n          box-shadow: 0 0 0 1px #5626bf inset;\\n  color: #502aa1;\\n}\\n\\n.ui.basic.violet.buttons .button:active,\\n.ui.basic.violet.button:active {\\n  -webkit-box-shadow: 0 0 0 1px #502aa1 inset;\\n          box-shadow: 0 0 0 1px #502aa1 inset;\\n  color: #502aa1;\\n}\\n\\n.ui.buttons:not(.vertical) > .basic.violet.button:not(:first-child) {\\n  margin-left: -1px;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.violet.buttons .button,\\n.ui.inverted.violet.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px #A291FB inset;\\n          box-shadow: 0 0 0 2px #A291FB inset;\\n  color: #A291FB;\\n}\\n\\n.ui.inverted.violet.buttons .button:hover,\\n.ui.inverted.violet.button:hover,\\n.ui.inverted.violet.buttons .button:focus,\\n.ui.inverted.violet.button:focus,\\n.ui.inverted.violet.buttons .button.active,\\n.ui.inverted.violet.button.active,\\n.ui.inverted.violet.buttons .button:active,\\n.ui.inverted.violet.button:active {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.violet.buttons .button:hover,\\n.ui.inverted.violet.button:hover {\\n  background-color: #745aff;\\n}\\n\\n.ui.inverted.violet.buttons .button:focus,\\n.ui.inverted.violet.button:focus {\\n  background-color: #7d64ff;\\n}\\n\\n.ui.inverted.violet.buttons .active.button,\\n.ui.inverted.violet.active.button {\\n  background-color: #8a73ff;\\n}\\n\\n.ui.inverted.violet.buttons .button:active,\\n.ui.inverted.violet.button:active {\\n  background-color: #7860f9;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.violet.basic.buttons .button,\\n.ui.inverted.violet.buttons .basic.button,\\n.ui.inverted.violet.basic.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n          box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.violet.basic.buttons .button:hover,\\n.ui.inverted.violet.buttons .basic.button:hover,\\n.ui.inverted.violet.basic.button:hover {\\n  -webkit-box-shadow: 0 0 0 2px #745aff inset;\\n          box-shadow: 0 0 0 2px #745aff inset;\\n  color: #A291FB;\\n}\\n\\n.ui.inverted.violet.basic.buttons .button:focus,\\n.ui.inverted.violet.basic.buttons .button:focus,\\n.ui.inverted.violet.basic.button:focus {\\n  -webkit-box-shadow: 0 0 0 2px #7d64ff inset;\\n          box-shadow: 0 0 0 2px #7d64ff inset;\\n  color: #A291FB;\\n}\\n\\n.ui.inverted.violet.basic.buttons .active.button,\\n.ui.inverted.violet.buttons .basic.active.button,\\n.ui.inverted.violet.basic.active.button {\\n  -webkit-box-shadow: 0 0 0 2px #8a73ff inset;\\n          box-shadow: 0 0 0 2px #8a73ff inset;\\n  color: #A291FB;\\n}\\n\\n.ui.inverted.violet.basic.buttons .button:active,\\n.ui.inverted.violet.buttons .basic.button:active,\\n.ui.inverted.violet.basic.button:active {\\n  -webkit-box-shadow: 0 0 0 2px #7860f9 inset;\\n          box-shadow: 0 0 0 2px #7860f9 inset;\\n  color: #A291FB;\\n}\\n\\n/* Tertiary */\\n\\n.ui.tertiary.violet.buttons .button,\\n.ui.tertiary.violet.buttons .tertiary.button,\\n.ui.tertiary.violet.button {\\n  background: transparent;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #6435C9;\\n}\\n\\n.ui.tertiary.violet.buttons .button:hover,\\n.ui.tertiary.violet.buttons button:hover,\\n.ui.tertiary.violet.button:hover {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #6040a5;\\n          box-shadow: inset 0 -0.2em 0 #6040a5;\\n  color: #6040a5;\\n}\\n\\n.ui.tertiary.violet.buttons .button:focus,\\n.ui.tertiary.violet.buttons .tertiary.button:focus,\\n.ui.tertiary.violet.button:focus {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #5735a0;\\n          box-shadow: inset 0 -0.2em 0 #5735a0;\\n  color: #5735a0;\\n}\\n\\n.ui.tertiary.violet.buttons .active.button,\\n.ui.tertiary.violet.buttons .tertiary.active.button,\\n.ui.tertiary.violet.active.button,\\n.ui.tertiary.violet.buttons .button:active,\\n.ui.tertiary.violet.buttons .tertiary.button:active,\\n.ui.tertiary.violet.button:active {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #4e0fd6;\\n          box-shadow: inset 0 -0.2em 0 #4e0fd6;\\n  color: #5626bf;\\n}\\n\\n.ui.purple.buttons .button,\\n.ui.purple.button {\\n  background-color: #A333C8;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n}\\n\\n.ui.purple.button {\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.purple.buttons .button:hover,\\n.ui.purple.button:hover {\\n  background-color: #9627ba;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.purple.buttons .button:focus,\\n.ui.purple.button:focus {\\n  background-color: #8f1eb4;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.purple.buttons .button:active,\\n.ui.purple.button:active {\\n  background-color: #82299f;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.purple.buttons .active.button,\\n.ui.purple.buttons .active.button:active,\\n.ui.purple.active.button,\\n.ui.purple.button .active.button:active {\\n  background-color: #9724be;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.purple.buttons .button,\\n.ui.basic.purple.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #A333C8 inset;\\n          box-shadow: 0 0 0 1px #A333C8 inset;\\n  color: #A333C8;\\n}\\n\\n.ui.basic.purple.buttons .button:hover,\\n.ui.basic.purple.button:hover {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #9627ba inset;\\n          box-shadow: 0 0 0 1px #9627ba inset;\\n  color: #9627ba;\\n}\\n\\n.ui.basic.purple.buttons .button:focus,\\n.ui.basic.purple.button:focus {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #8f1eb4 inset;\\n          box-shadow: 0 0 0 1px #8f1eb4 inset;\\n  color: #9627ba;\\n}\\n\\n.ui.basic.purple.buttons .active.button,\\n.ui.basic.purple.active.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #9724be inset;\\n          box-shadow: 0 0 0 1px #9724be inset;\\n  color: #82299f;\\n}\\n\\n.ui.basic.purple.buttons .button:active,\\n.ui.basic.purple.button:active {\\n  -webkit-box-shadow: 0 0 0 1px #82299f inset;\\n          box-shadow: 0 0 0 1px #82299f inset;\\n  color: #82299f;\\n}\\n\\n.ui.buttons:not(.vertical) > .basic.purple.button:not(:first-child) {\\n  margin-left: -1px;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.purple.buttons .button,\\n.ui.inverted.purple.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px #DC73FF inset;\\n          box-shadow: 0 0 0 2px #DC73FF inset;\\n  color: #DC73FF;\\n}\\n\\n.ui.inverted.purple.buttons .button:hover,\\n.ui.inverted.purple.button:hover,\\n.ui.inverted.purple.buttons .button:focus,\\n.ui.inverted.purple.button:focus,\\n.ui.inverted.purple.buttons .button.active,\\n.ui.inverted.purple.button.active,\\n.ui.inverted.purple.buttons .button:active,\\n.ui.inverted.purple.button:active {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.purple.buttons .button:hover,\\n.ui.inverted.purple.button:hover {\\n  background-color: #cf40ff;\\n}\\n\\n.ui.inverted.purple.buttons .button:focus,\\n.ui.inverted.purple.button:focus {\\n  background-color: #d24aff;\\n}\\n\\n.ui.inverted.purple.buttons .active.button,\\n.ui.inverted.purple.active.button {\\n  background-color: #d65aff;\\n}\\n\\n.ui.inverted.purple.buttons .button:active,\\n.ui.inverted.purple.button:active {\\n  background-color: #cf40ff;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.purple.basic.buttons .button,\\n.ui.inverted.purple.buttons .basic.button,\\n.ui.inverted.purple.basic.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n          box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.purple.basic.buttons .button:hover,\\n.ui.inverted.purple.buttons .basic.button:hover,\\n.ui.inverted.purple.basic.button:hover {\\n  -webkit-box-shadow: 0 0 0 2px #cf40ff inset;\\n          box-shadow: 0 0 0 2px #cf40ff inset;\\n  color: #DC73FF;\\n}\\n\\n.ui.inverted.purple.basic.buttons .button:focus,\\n.ui.inverted.purple.basic.buttons .button:focus,\\n.ui.inverted.purple.basic.button:focus {\\n  -webkit-box-shadow: 0 0 0 2px #d24aff inset;\\n          box-shadow: 0 0 0 2px #d24aff inset;\\n  color: #DC73FF;\\n}\\n\\n.ui.inverted.purple.basic.buttons .active.button,\\n.ui.inverted.purple.buttons .basic.active.button,\\n.ui.inverted.purple.basic.active.button {\\n  -webkit-box-shadow: 0 0 0 2px #d65aff inset;\\n          box-shadow: 0 0 0 2px #d65aff inset;\\n  color: #DC73FF;\\n}\\n\\n.ui.inverted.purple.basic.buttons .button:active,\\n.ui.inverted.purple.buttons .basic.button:active,\\n.ui.inverted.purple.basic.button:active {\\n  -webkit-box-shadow: 0 0 0 2px #cf40ff inset;\\n          box-shadow: 0 0 0 2px #cf40ff inset;\\n  color: #DC73FF;\\n}\\n\\n/* Tertiary */\\n\\n.ui.tertiary.purple.buttons .button,\\n.ui.tertiary.purple.buttons .tertiary.button,\\n.ui.tertiary.purple.button {\\n  background: transparent;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #A333C8;\\n}\\n\\n.ui.tertiary.purple.buttons .button:hover,\\n.ui.tertiary.purple.buttons button:hover,\\n.ui.tertiary.purple.button:hover {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #8a3ea4;\\n          box-shadow: inset 0 -0.2em 0 #8a3ea4;\\n  color: #8a3ea4;\\n}\\n\\n.ui.tertiary.purple.buttons .button:focus,\\n.ui.tertiary.purple.buttons .tertiary.button:focus,\\n.ui.tertiary.purple.button:focus {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #84339f;\\n          box-shadow: inset 0 -0.2em 0 #84339f;\\n  color: #84339f;\\n}\\n\\n.ui.tertiary.purple.buttons .active.button,\\n.ui.tertiary.purple.buttons .tertiary.active.button,\\n.ui.tertiary.purple.active.button,\\n.ui.tertiary.purple.buttons .button:active,\\n.ui.tertiary.purple.buttons .tertiary.button:active,\\n.ui.tertiary.purple.button:active {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #a30dd4;\\n          box-shadow: inset 0 -0.2em 0 #a30dd4;\\n  color: #9724be;\\n}\\n\\n.ui.pink.buttons .button,\\n.ui.pink.button {\\n  background-color: #E03997;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n}\\n\\n.ui.pink.button {\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.pink.buttons .button:hover,\\n.ui.pink.button:hover {\\n  background-color: #e61a8d;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.pink.buttons .button:focus,\\n.ui.pink.button:focus {\\n  background-color: #e10f85;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.pink.buttons .button:active,\\n.ui.pink.button:active {\\n  background-color: #c71f7e;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.pink.buttons .active.button,\\n.ui.pink.buttons .active.button:active,\\n.ui.pink.active.button,\\n.ui.pink.button .active.button:active {\\n  background-color: #ea158d;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.pink.buttons .button,\\n.ui.basic.pink.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #E03997 inset;\\n          box-shadow: 0 0 0 1px #E03997 inset;\\n  color: #E03997;\\n}\\n\\n.ui.basic.pink.buttons .button:hover,\\n.ui.basic.pink.button:hover {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #e61a8d inset;\\n          box-shadow: 0 0 0 1px #e61a8d inset;\\n  color: #e61a8d;\\n}\\n\\n.ui.basic.pink.buttons .button:focus,\\n.ui.basic.pink.button:focus {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #e10f85 inset;\\n          box-shadow: 0 0 0 1px #e10f85 inset;\\n  color: #e61a8d;\\n}\\n\\n.ui.basic.pink.buttons .active.button,\\n.ui.basic.pink.active.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #ea158d inset;\\n          box-shadow: 0 0 0 1px #ea158d inset;\\n  color: #c71f7e;\\n}\\n\\n.ui.basic.pink.buttons .button:active,\\n.ui.basic.pink.button:active {\\n  -webkit-box-shadow: 0 0 0 1px #c71f7e inset;\\n          box-shadow: 0 0 0 1px #c71f7e inset;\\n  color: #c71f7e;\\n}\\n\\n.ui.buttons:not(.vertical) > .basic.pink.button:not(:first-child) {\\n  margin-left: -1px;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.pink.buttons .button,\\n.ui.inverted.pink.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px #FF8EDF inset;\\n          box-shadow: 0 0 0 2px #FF8EDF inset;\\n  color: #FF8EDF;\\n}\\n\\n.ui.inverted.pink.buttons .button:hover,\\n.ui.inverted.pink.button:hover,\\n.ui.inverted.pink.buttons .button:focus,\\n.ui.inverted.pink.button:focus,\\n.ui.inverted.pink.buttons .button.active,\\n.ui.inverted.pink.button.active,\\n.ui.inverted.pink.buttons .button:active,\\n.ui.inverted.pink.button:active {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.pink.buttons .button:hover,\\n.ui.inverted.pink.button:hover {\\n  background-color: #ff5bd1;\\n}\\n\\n.ui.inverted.pink.buttons .button:focus,\\n.ui.inverted.pink.button:focus {\\n  background-color: #ff65d3;\\n}\\n\\n.ui.inverted.pink.buttons .active.button,\\n.ui.inverted.pink.active.button {\\n  background-color: #ff74d8;\\n}\\n\\n.ui.inverted.pink.buttons .button:active,\\n.ui.inverted.pink.button:active {\\n  background-color: #ff5bd1;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.pink.basic.buttons .button,\\n.ui.inverted.pink.buttons .basic.button,\\n.ui.inverted.pink.basic.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n          box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.pink.basic.buttons .button:hover,\\n.ui.inverted.pink.buttons .basic.button:hover,\\n.ui.inverted.pink.basic.button:hover {\\n  -webkit-box-shadow: 0 0 0 2px #ff5bd1 inset;\\n          box-shadow: 0 0 0 2px #ff5bd1 inset;\\n  color: #FF8EDF;\\n}\\n\\n.ui.inverted.pink.basic.buttons .button:focus,\\n.ui.inverted.pink.basic.buttons .button:focus,\\n.ui.inverted.pink.basic.button:focus {\\n  -webkit-box-shadow: 0 0 0 2px #ff65d3 inset;\\n          box-shadow: 0 0 0 2px #ff65d3 inset;\\n  color: #FF8EDF;\\n}\\n\\n.ui.inverted.pink.basic.buttons .active.button,\\n.ui.inverted.pink.buttons .basic.active.button,\\n.ui.inverted.pink.basic.active.button {\\n  -webkit-box-shadow: 0 0 0 2px #ff74d8 inset;\\n          box-shadow: 0 0 0 2px #ff74d8 inset;\\n  color: #FF8EDF;\\n}\\n\\n.ui.inverted.pink.basic.buttons .button:active,\\n.ui.inverted.pink.buttons .basic.button:active,\\n.ui.inverted.pink.basic.button:active {\\n  -webkit-box-shadow: 0 0 0 2px #ff5bd1 inset;\\n          box-shadow: 0 0 0 2px #ff5bd1 inset;\\n  color: #FF8EDF;\\n}\\n\\n/* Tertiary */\\n\\n.ui.tertiary.pink.buttons .button,\\n.ui.tertiary.pink.buttons .tertiary.button,\\n.ui.tertiary.pink.button {\\n  background: transparent;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #E03997;\\n}\\n\\n.ui.tertiary.pink.buttons .button:hover,\\n.ui.tertiary.pink.buttons button:hover,\\n.ui.tertiary.pink.button:hover {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #cc3389;\\n          box-shadow: inset 0 -0.2em 0 #cc3389;\\n  color: #cc3389;\\n}\\n\\n.ui.tertiary.pink.buttons .button:focus,\\n.ui.tertiary.pink.buttons .tertiary.button:focus,\\n.ui.tertiary.pink.button:focus {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #c92782;\\n          box-shadow: inset 0 -0.2em 0 #c92782;\\n  color: #c92782;\\n}\\n\\n.ui.tertiary.pink.buttons .active.button,\\n.ui.tertiary.pink.buttons .tertiary.active.button,\\n.ui.tertiary.pink.active.button,\\n.ui.tertiary.pink.buttons .button:active,\\n.ui.tertiary.pink.buttons .tertiary.button:active,\\n.ui.tertiary.pink.button:active {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #ff0090;\\n          box-shadow: inset 0 -0.2em 0 #ff0090;\\n  color: #ea158d;\\n}\\n\\n.ui.brown.buttons .button,\\n.ui.brown.button {\\n  background-color: #A5673F;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n}\\n\\n.ui.brown.button {\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.brown.buttons .button:hover,\\n.ui.brown.button:hover {\\n  background-color: #975b33;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.brown.buttons .button:focus,\\n.ui.brown.button:focus {\\n  background-color: #90532b;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.brown.buttons .button:active,\\n.ui.brown.button:active {\\n  background-color: #805031;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.brown.buttons .active.button,\\n.ui.brown.buttons .active.button:active,\\n.ui.brown.active.button,\\n.ui.brown.button .active.button:active {\\n  background-color: #995a31;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.brown.buttons .button,\\n.ui.basic.brown.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #A5673F inset;\\n          box-shadow: 0 0 0 1px #A5673F inset;\\n  color: #A5673F;\\n}\\n\\n.ui.basic.brown.buttons .button:hover,\\n.ui.basic.brown.button:hover {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #975b33 inset;\\n          box-shadow: 0 0 0 1px #975b33 inset;\\n  color: #975b33;\\n}\\n\\n.ui.basic.brown.buttons .button:focus,\\n.ui.basic.brown.button:focus {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #90532b inset;\\n          box-shadow: 0 0 0 1px #90532b inset;\\n  color: #975b33;\\n}\\n\\n.ui.basic.brown.buttons .active.button,\\n.ui.basic.brown.active.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #995a31 inset;\\n          box-shadow: 0 0 0 1px #995a31 inset;\\n  color: #805031;\\n}\\n\\n.ui.basic.brown.buttons .button:active,\\n.ui.basic.brown.button:active {\\n  -webkit-box-shadow: 0 0 0 1px #805031 inset;\\n          box-shadow: 0 0 0 1px #805031 inset;\\n  color: #805031;\\n}\\n\\n.ui.buttons:not(.vertical) > .basic.brown.button:not(:first-child) {\\n  margin-left: -1px;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.brown.buttons .button,\\n.ui.inverted.brown.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px #D67C1C inset;\\n          box-shadow: 0 0 0 2px #D67C1C inset;\\n  color: #D67C1C;\\n}\\n\\n.ui.inverted.brown.buttons .button:hover,\\n.ui.inverted.brown.button:hover,\\n.ui.inverted.brown.buttons .button:focus,\\n.ui.inverted.brown.button:focus,\\n.ui.inverted.brown.buttons .button.active,\\n.ui.inverted.brown.button.active,\\n.ui.inverted.brown.buttons .button:active,\\n.ui.inverted.brown.button:active {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.brown.buttons .button:hover,\\n.ui.inverted.brown.button:hover {\\n  background-color: #b0620f;\\n}\\n\\n.ui.inverted.brown.buttons .button:focus,\\n.ui.inverted.brown.button:focus {\\n  background-color: #c16808;\\n}\\n\\n.ui.inverted.brown.buttons .active.button,\\n.ui.inverted.brown.active.button {\\n  background-color: #cc6f0d;\\n}\\n\\n.ui.inverted.brown.buttons .button:active,\\n.ui.inverted.brown.button:active {\\n  background-color: #a96216;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.brown.basic.buttons .button,\\n.ui.inverted.brown.buttons .basic.button,\\n.ui.inverted.brown.basic.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n          box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.brown.basic.buttons .button:hover,\\n.ui.inverted.brown.buttons .basic.button:hover,\\n.ui.inverted.brown.basic.button:hover {\\n  -webkit-box-shadow: 0 0 0 2px #b0620f inset;\\n          box-shadow: 0 0 0 2px #b0620f inset;\\n  color: #D67C1C;\\n}\\n\\n.ui.inverted.brown.basic.buttons .button:focus,\\n.ui.inverted.brown.basic.buttons .button:focus,\\n.ui.inverted.brown.basic.button:focus {\\n  -webkit-box-shadow: 0 0 0 2px #c16808 inset;\\n          box-shadow: 0 0 0 2px #c16808 inset;\\n  color: #D67C1C;\\n}\\n\\n.ui.inverted.brown.basic.buttons .active.button,\\n.ui.inverted.brown.buttons .basic.active.button,\\n.ui.inverted.brown.basic.active.button {\\n  -webkit-box-shadow: 0 0 0 2px #cc6f0d inset;\\n          box-shadow: 0 0 0 2px #cc6f0d inset;\\n  color: #D67C1C;\\n}\\n\\n.ui.inverted.brown.basic.buttons .button:active,\\n.ui.inverted.brown.buttons .basic.button:active,\\n.ui.inverted.brown.basic.button:active {\\n  -webkit-box-shadow: 0 0 0 2px #a96216 inset;\\n          box-shadow: 0 0 0 2px #a96216 inset;\\n  color: #D67C1C;\\n}\\n\\n/* Tertiary */\\n\\n.ui.tertiary.brown.buttons .button,\\n.ui.tertiary.brown.buttons .tertiary.button,\\n.ui.tertiary.brown.button {\\n  background: transparent;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #A5673F;\\n}\\n\\n.ui.tertiary.brown.buttons .button:hover,\\n.ui.tertiary.brown.buttons button:hover,\\n.ui.tertiary.brown.button:hover {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #835f48;\\n          box-shadow: inset 0 -0.2em 0 #835f48;\\n  color: #835f48;\\n}\\n\\n.ui.tertiary.brown.buttons .button:focus,\\n.ui.tertiary.brown.buttons .tertiary.button:focus,\\n.ui.tertiary.brown.button:focus {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #7d573e;\\n          box-shadow: inset 0 -0.2em 0 #7d573e;\\n  color: #7d573e;\\n}\\n\\n.ui.tertiary.brown.buttons .active.button,\\n.ui.tertiary.brown.buttons .tertiary.active.button,\\n.ui.tertiary.brown.active.button,\\n.ui.tertiary.brown.buttons .button:active,\\n.ui.tertiary.brown.buttons .tertiary.button:active,\\n.ui.tertiary.brown.button:active {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #ae561d;\\n          box-shadow: inset 0 -0.2em 0 #ae561d;\\n  color: #995a31;\\n}\\n\\n.ui.grey.buttons .button,\\n.ui.grey.button {\\n  background-color: #767676;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n}\\n\\n.ui.grey.button {\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.grey.buttons .button:hover,\\n.ui.grey.button:hover {\\n  background-color: #838383;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.grey.buttons .button:focus,\\n.ui.grey.button:focus {\\n  background-color: #8a8a8a;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.grey.buttons .button:active,\\n.ui.grey.button:active {\\n  background-color: #909090;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.grey.buttons .active.button,\\n.ui.grey.buttons .active.button:active,\\n.ui.grey.active.button,\\n.ui.grey.button .active.button:active {\\n  background-color: #696969;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.grey.buttons .button,\\n.ui.basic.grey.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #767676 inset;\\n          box-shadow: 0 0 0 1px #767676 inset;\\n  color: #767676;\\n}\\n\\n.ui.basic.grey.buttons .button:hover,\\n.ui.basic.grey.button:hover {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #838383 inset;\\n          box-shadow: 0 0 0 1px #838383 inset;\\n  color: #838383;\\n}\\n\\n.ui.basic.grey.buttons .button:focus,\\n.ui.basic.grey.button:focus {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #8a8a8a inset;\\n          box-shadow: 0 0 0 1px #8a8a8a inset;\\n  color: #838383;\\n}\\n\\n.ui.basic.grey.buttons .active.button,\\n.ui.basic.grey.active.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #696969 inset;\\n          box-shadow: 0 0 0 1px #696969 inset;\\n  color: #909090;\\n}\\n\\n.ui.basic.grey.buttons .button:active,\\n.ui.basic.grey.button:active {\\n  -webkit-box-shadow: 0 0 0 1px #909090 inset;\\n          box-shadow: 0 0 0 1px #909090 inset;\\n  color: #909090;\\n}\\n\\n.ui.buttons:not(.vertical) > .basic.grey.button:not(:first-child) {\\n  margin-left: -1px;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.grey.buttons .button,\\n.ui.inverted.grey.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px #D4D4D5 inset;\\n          box-shadow: 0 0 0 2px #D4D4D5 inset;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.grey.buttons .button:hover,\\n.ui.inverted.grey.button:hover,\\n.ui.inverted.grey.buttons .button:focus,\\n.ui.inverted.grey.button:focus,\\n.ui.inverted.grey.buttons .button.active,\\n.ui.inverted.grey.button.active,\\n.ui.inverted.grey.buttons .button:active,\\n.ui.inverted.grey.button:active {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: rgba(0, 0, 0, 0.6);\\n}\\n\\n.ui.inverted.grey.buttons .button:hover,\\n.ui.inverted.grey.button:hover {\\n  background-color: #c2c4c5;\\n}\\n\\n.ui.inverted.grey.buttons .button:focus,\\n.ui.inverted.grey.button:focus {\\n  background-color: #c7c9cb;\\n}\\n\\n.ui.inverted.grey.buttons .active.button,\\n.ui.inverted.grey.active.button {\\n  background-color: #cfd0d2;\\n}\\n\\n.ui.inverted.grey.buttons .button:active,\\n.ui.inverted.grey.button:active {\\n  background-color: #c2c4c5;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.grey.basic.buttons .button,\\n.ui.inverted.grey.buttons .basic.button,\\n.ui.inverted.grey.basic.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n          box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.grey.basic.buttons .button:hover,\\n.ui.inverted.grey.buttons .basic.button:hover,\\n.ui.inverted.grey.basic.button:hover {\\n  -webkit-box-shadow: 0 0 0 2px #c2c4c5 inset;\\n          box-shadow: 0 0 0 2px #c2c4c5 inset;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.grey.basic.buttons .button:focus,\\n.ui.inverted.grey.basic.buttons .button:focus,\\n.ui.inverted.grey.basic.button:focus {\\n  -webkit-box-shadow: 0 0 0 2px #c7c9cb inset;\\n          box-shadow: 0 0 0 2px #c7c9cb inset;\\n  color: #DCDDDE;\\n}\\n\\n.ui.inverted.grey.basic.buttons .active.button,\\n.ui.inverted.grey.buttons .basic.active.button,\\n.ui.inverted.grey.basic.active.button {\\n  -webkit-box-shadow: 0 0 0 2px #cfd0d2 inset;\\n          box-shadow: 0 0 0 2px #cfd0d2 inset;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.grey.basic.buttons .button:active,\\n.ui.inverted.grey.buttons .basic.button:active,\\n.ui.inverted.grey.basic.button:active {\\n  -webkit-box-shadow: 0 0 0 2px #c2c4c5 inset;\\n          box-shadow: 0 0 0 2px #c2c4c5 inset;\\n  color: #FFFFFF;\\n}\\n\\n/* Tertiary */\\n\\n.ui.tertiary.grey.buttons .button,\\n.ui.tertiary.grey.buttons .tertiary.button,\\n.ui.tertiary.grey.button {\\n  background: transparent;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #767676;\\n}\\n\\n.ui.tertiary.grey.buttons .button:hover,\\n.ui.tertiary.grey.buttons button:hover,\\n.ui.tertiary.grey.button:hover {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #838383;\\n          box-shadow: inset 0 -0.2em 0 #838383;\\n  color: #838383;\\n}\\n\\n.ui.tertiary.grey.buttons .button:focus,\\n.ui.tertiary.grey.buttons .tertiary.button:focus,\\n.ui.tertiary.grey.button:focus {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #8a8a8a;\\n          box-shadow: inset 0 -0.2em 0 #8a8a8a;\\n  color: #8a8a8a;\\n}\\n\\n.ui.tertiary.grey.buttons .active.button,\\n.ui.tertiary.grey.buttons .tertiary.active.button,\\n.ui.tertiary.grey.active.button,\\n.ui.tertiary.grey.buttons .button:active,\\n.ui.tertiary.grey.buttons .tertiary.button:active,\\n.ui.tertiary.grey.button:active {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #7e5454;\\n          box-shadow: inset 0 -0.2em 0 #7e5454;\\n  color: #696969;\\n}\\n\\n.ui.black.buttons .button,\\n.ui.black.button {\\n  background-color: #1B1C1D;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n}\\n\\n.ui.black.button {\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.black.buttons .button:hover,\\n.ui.black.button:hover {\\n  background-color: #27292a;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.black.buttons .button:focus,\\n.ui.black.button:focus {\\n  background-color: #2f3032;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.black.buttons .button:active,\\n.ui.black.button:active {\\n  background-color: #343637;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.black.buttons .active.button,\\n.ui.black.buttons .active.button:active,\\n.ui.black.active.button,\\n.ui.black.button .active.button:active {\\n  background-color: #0f0f10;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.black.buttons .button,\\n.ui.basic.black.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #1B1C1D inset;\\n          box-shadow: 0 0 0 1px #1B1C1D inset;\\n  color: #1B1C1D;\\n}\\n\\n.ui.basic.black.buttons .button:hover,\\n.ui.basic.black.button:hover {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #27292a inset;\\n          box-shadow: 0 0 0 1px #27292a inset;\\n  color: #27292a;\\n}\\n\\n.ui.basic.black.buttons .button:focus,\\n.ui.basic.black.button:focus {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #2f3032 inset;\\n          box-shadow: 0 0 0 1px #2f3032 inset;\\n  color: #27292a;\\n}\\n\\n.ui.basic.black.buttons .active.button,\\n.ui.basic.black.active.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #0f0f10 inset;\\n          box-shadow: 0 0 0 1px #0f0f10 inset;\\n  color: #343637;\\n}\\n\\n.ui.basic.black.buttons .button:active,\\n.ui.basic.black.button:active {\\n  -webkit-box-shadow: 0 0 0 1px #343637 inset;\\n          box-shadow: 0 0 0 1px #343637 inset;\\n  color: #343637;\\n}\\n\\n.ui.buttons:not(.vertical) > .basic.black.button:not(:first-child) {\\n  margin-left: -1px;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.black.buttons .button,\\n.ui.inverted.black.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px #D4D4D5 inset;\\n          box-shadow: 0 0 0 2px #D4D4D5 inset;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.black.buttons .button:hover,\\n.ui.inverted.black.button:hover,\\n.ui.inverted.black.buttons .button:focus,\\n.ui.inverted.black.button:focus,\\n.ui.inverted.black.buttons .button.active,\\n.ui.inverted.black.button.active,\\n.ui.inverted.black.buttons .button:active,\\n.ui.inverted.black.button:active {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.black.buttons .button:hover,\\n.ui.inverted.black.button:hover {\\n  background-color: #000000;\\n}\\n\\n.ui.inverted.black.buttons .button:focus,\\n.ui.inverted.black.button:focus {\\n  background-color: #000000;\\n}\\n\\n.ui.inverted.black.buttons .active.button,\\n.ui.inverted.black.active.button {\\n  background-color: #000000;\\n}\\n\\n.ui.inverted.black.buttons .button:active,\\n.ui.inverted.black.button:active {\\n  background-color: #000000;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.black.basic.buttons .button,\\n.ui.inverted.black.buttons .basic.button,\\n.ui.inverted.black.basic.button {\\n  background-color: transparent;\\n  -webkit-box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n          box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) inset;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.black.basic.buttons .button:hover,\\n.ui.inverted.black.buttons .basic.button:hover,\\n.ui.inverted.black.basic.button:hover {\\n  -webkit-box-shadow: 0 0 0 2px #000000 inset;\\n          box-shadow: 0 0 0 2px #000000 inset;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.black.basic.buttons .button:focus,\\n.ui.inverted.black.basic.buttons .button:focus,\\n.ui.inverted.black.basic.button:focus {\\n  -webkit-box-shadow: 0 0 0 2px #000000 inset;\\n          box-shadow: 0 0 0 2px #000000 inset;\\n  color: #545454;\\n}\\n\\n.ui.inverted.black.basic.buttons .active.button,\\n.ui.inverted.black.buttons .basic.active.button,\\n.ui.inverted.black.basic.active.button {\\n  -webkit-box-shadow: 0 0 0 2px #000000 inset;\\n          box-shadow: 0 0 0 2px #000000 inset;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.black.basic.buttons .button:active,\\n.ui.inverted.black.buttons .basic.button:active,\\n.ui.inverted.black.basic.button:active {\\n  -webkit-box-shadow: 0 0 0 2px #000000 inset;\\n          box-shadow: 0 0 0 2px #000000 inset;\\n  color: #FFFFFF;\\n}\\n\\n/* Tertiary */\\n\\n.ui.tertiary.black.buttons .button,\\n.ui.tertiary.black.buttons .tertiary.button,\\n.ui.tertiary.black.button {\\n  background: transparent;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: #1B1C1D;\\n}\\n\\n.ui.tertiary.black.buttons .button:hover,\\n.ui.tertiary.black.buttons button:hover,\\n.ui.tertiary.black.button:hover {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #8b8f93;\\n          box-shadow: inset 0 -0.2em 0 #8b8f93;\\n  color: #8b8f93;\\n}\\n\\n.ui.tertiary.black.buttons .button:focus,\\n.ui.tertiary.black.buttons .tertiary.button:focus,\\n.ui.tertiary.black.button:focus {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #93969a;\\n          box-shadow: inset 0 -0.2em 0 #93969a;\\n  color: #93969a;\\n}\\n\\n.ui.tertiary.black.buttons .active.button,\\n.ui.tertiary.black.buttons .tertiary.active.button,\\n.ui.tertiary.black.active.button,\\n.ui.tertiary.black.buttons .button:active,\\n.ui.tertiary.black.buttons .tertiary.button:active,\\n.ui.tertiary.black.button:active {\\n  -webkit-box-shadow: inset 0 -0.2em 0 #404245;\\n          box-shadow: inset 0 -0.2em 0 #404245;\\n  color: #0f0f10;\\n}\\n\\n/*---------------\\n    Positive\\n----------------*/\\n\\n/* Standard */\\n\\n.ui.positive.buttons .button,\\n.ui.positive.button {\\n  background-color: #21BA45;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n}\\n\\n.ui.positive.button {\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.positive.buttons .button:hover,\\n.ui.positive.button:hover {\\n  background-color: #16ab39;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.positive.buttons .button:focus,\\n.ui.positive.button:focus {\\n  background-color: #0ea432;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.positive.buttons .button:active,\\n.ui.positive.button:active {\\n  background-color: #198f35;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.positive.buttons .active.button,\\n.ui.positive.buttons .active.button:active,\\n.ui.positive.active.button,\\n.ui.positive.button .active.button:active {\\n  background-color: #13ae38;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.positive.buttons .button,\\n.ui.basic.positive.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #21BA45 inset;\\n          box-shadow: 0 0 0 1px #21BA45 inset;\\n  color: #21BA45;\\n}\\n\\n.ui.basic.positive.buttons .button:hover,\\n.ui.basic.positive.button:hover {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #16ab39 inset;\\n          box-shadow: 0 0 0 1px #16ab39 inset;\\n  color: #16ab39;\\n}\\n\\n.ui.basic.positive.buttons .button:focus,\\n.ui.basic.positive.button:focus {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #0ea432 inset;\\n          box-shadow: 0 0 0 1px #0ea432 inset;\\n  color: #16ab39;\\n}\\n\\n.ui.basic.positive.buttons .active.button,\\n.ui.basic.positive.active.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #13ae38 inset;\\n          box-shadow: 0 0 0 1px #13ae38 inset;\\n  color: #198f35;\\n}\\n\\n.ui.basic.positive.buttons .button:active,\\n.ui.basic.positive.button:active {\\n  -webkit-box-shadow: 0 0 0 1px #198f35 inset;\\n          box-shadow: 0 0 0 1px #198f35 inset;\\n  color: #198f35;\\n}\\n\\n.ui.buttons:not(.vertical) > .basic.positive.button:not(:first-child) {\\n  margin-left: -1px;\\n}\\n\\n/*---------------\\n     Negative\\n----------------*/\\n\\n/* Standard */\\n\\n.ui.negative.buttons .button,\\n.ui.negative.button {\\n  background-color: #DB2828;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n  background-image: none;\\n}\\n\\n.ui.negative.button {\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.negative.buttons .button:hover,\\n.ui.negative.button:hover {\\n  background-color: #d01919;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.negative.buttons .button:focus,\\n.ui.negative.button:focus {\\n  background-color: #ca1010;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.negative.buttons .button:active,\\n.ui.negative.button:active {\\n  background-color: #b21e1e;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n.ui.negative.buttons .active.button,\\n.ui.negative.buttons .active.button:active,\\n.ui.negative.active.button,\\n.ui.negative.button .active.button:active {\\n  background-color: #d41515;\\n  color: #FFFFFF;\\n  text-shadow: none;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.negative.buttons .button,\\n.ui.basic.negative.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #DB2828 inset;\\n          box-shadow: 0 0 0 1px #DB2828 inset;\\n  color: #DB2828;\\n}\\n\\n.ui.basic.negative.buttons .button:hover,\\n.ui.basic.negative.button:hover {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #d01919 inset;\\n          box-shadow: 0 0 0 1px #d01919 inset;\\n  color: #d01919;\\n}\\n\\n.ui.basic.negative.buttons .button:focus,\\n.ui.basic.negative.button:focus {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #ca1010 inset;\\n          box-shadow: 0 0 0 1px #ca1010 inset;\\n  color: #d01919;\\n}\\n\\n.ui.basic.negative.buttons .active.button,\\n.ui.basic.negative.active.button {\\n  background: transparent;\\n  -webkit-box-shadow: 0 0 0 1px #d41515 inset;\\n          box-shadow: 0 0 0 1px #d41515 inset;\\n  color: #b21e1e;\\n}\\n\\n.ui.basic.negative.buttons .button:active,\\n.ui.basic.negative.button:active {\\n  -webkit-box-shadow: 0 0 0 1px #b21e1e inset;\\n          box-shadow: 0 0 0 1px #b21e1e inset;\\n  color: #b21e1e;\\n}\\n\\n.ui.buttons:not(.vertical) > .basic.negative.button:not(:first-child) {\\n  margin-left: -1px;\\n}\\n\\n/*******************************\\n            Groups\\n*******************************/\\n\\n.ui.buttons {\\n  display: -webkit-inline-box;\\n  display: -ms-inline-flexbox;\\n  display: inline-flex;\\n  -webkit-box-orient: horizontal;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: row;\\n          flex-direction: row;\\n  font-size: 0;\\n  vertical-align: baseline;\\n  margin: 0 0.25em 0 0;\\n}\\n\\n.ui.buttons:not(.basic):not(.inverted) {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/* Clearfix */\\n\\n.ui.buttons:after {\\n  content: \\\".\\\";\\n  display: block;\\n  height: 0;\\n  clear: both;\\n  visibility: hidden;\\n}\\n\\n/* Standard Group */\\n\\n.ui.buttons .button {\\n  -webkit-box-flex: 1;\\n      -ms-flex: 1 0 auto;\\n          flex: 1 0 auto;\\n  border-radius: 0;\\n  margin: 0 0 0 0;\\n}\\n\\n.ui.buttons:not(.basic):not(.inverted) > .button:not(.basic):not(.inverted) {\\n  -webkit-box-shadow: 0 0 0 1px transparent inset, 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 1px transparent inset, 0 0 0 0 rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n.ui.buttons .button:first-child {\\n  border-left: none;\\n  margin-left: 0;\\n  border-top-left-radius: 0.28571429rem;\\n  border-bottom-left-radius: 0.28571429rem;\\n}\\n\\n.ui.buttons .button:last-child {\\n  border-top-right-radius: 0.28571429rem;\\n  border-bottom-right-radius: 0.28571429rem;\\n}\\n\\n/* Vertical  Style */\\n\\n.ui.vertical.buttons {\\n  display: -webkit-inline-box;\\n  display: -ms-inline-flexbox;\\n  display: inline-flex;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n}\\n\\n.ui.vertical.buttons .button {\\n  display: block;\\n  float: none;\\n  width: 100%;\\n  margin: 0 0 0 0;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  border-radius: 0;\\n}\\n\\n.ui.vertical.buttons .button:first-child {\\n  border-top-left-radius: 0.28571429rem;\\n  border-top-right-radius: 0.28571429rem;\\n}\\n\\n.ui.vertical.buttons .button:last-child {\\n  margin-bottom: 0;\\n  border-bottom-left-radius: 0.28571429rem;\\n  border-bottom-right-radius: 0.28571429rem;\\n}\\n\\n.ui.vertical.buttons .button:only-child {\\n  border-radius: 0.28571429rem;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Container\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Container\\n*******************************/\\n\\n/* All Sizes */\\n\\n.ui.container {\\n  display: block;\\n  max-width: 100% !important;\\n}\\n\\n/* Mobile */\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.container {\\n    width: auto !important;\\n    margin-left: 1em !important;\\n    margin-right: 1em !important;\\n  }\\n\\n  .ui.grid.container {\\n    width: auto !important;\\n  }\\n\\n  .ui.relaxed.grid.container {\\n    width: auto !important;\\n  }\\n\\n  .ui.very.relaxed.grid.container {\\n    width: auto !important;\\n  }\\n}\\n\\n/* Tablet */\\n\\n@media only screen and (min-width: 768px) and (max-width: 991.98px) {\\n  .ui.container {\\n    width: 723px;\\n    margin-left: auto !important;\\n    margin-right: auto !important;\\n  }\\n\\n  .ui.grid.container {\\n    width: calc(723px + 2rem) !important;\\n  }\\n\\n  .ui.relaxed.grid.container {\\n    width: calc(723px + 3rem) !important;\\n  }\\n\\n  .ui.very.relaxed.grid.container {\\n    width: calc(723px + 5rem) !important;\\n  }\\n}\\n\\n/* Small Monitor */\\n\\n@media only screen and (min-width: 992px) and (max-width: 1199.98px) {\\n  .ui.container {\\n    width: 933px;\\n    margin-left: auto !important;\\n    margin-right: auto !important;\\n  }\\n\\n  .ui.grid.container {\\n    width: calc(933px + 2rem) !important;\\n  }\\n\\n  .ui.relaxed.grid.container {\\n    width: calc(933px + 3rem) !important;\\n  }\\n\\n  .ui.very.relaxed.grid.container {\\n    width: calc(933px + 5rem) !important;\\n  }\\n}\\n\\n/* Large Monitor */\\n\\n@media only screen and (min-width: 1200px) {\\n  .ui.container {\\n    width: 1127px;\\n    margin-left: auto !important;\\n    margin-right: auto !important;\\n  }\\n\\n  .ui.grid.container {\\n    width: calc(1127px + 2rem) !important;\\n  }\\n\\n  .ui.relaxed.grid.container {\\n    width: calc(1127px + 3rem) !important;\\n  }\\n\\n  .ui.very.relaxed.grid.container {\\n    width: calc(1127px + 5rem) !important;\\n  }\\n}\\n\\n/*******************************\\n             Types\\n*******************************/\\n\\n/* Text Container */\\n\\n.ui.text.container {\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  max-width: 700px !important;\\n  line-height: 1.5;\\n  font-size: 1.14285714rem;\\n}\\n\\n/* Fluid */\\n\\n.ui.fluid.container {\\n  width: 100%;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n.ui[class*=\\\"left aligned\\\"].container {\\n  text-align: left;\\n}\\n\\n.ui[class*=\\\"center aligned\\\"].container {\\n  text-align: center;\\n}\\n\\n.ui[class*=\\\"right aligned\\\"].container {\\n  text-align: right;\\n}\\n\\n.ui.justified.container {\\n  text-align: justify;\\n  -webkit-hyphens: auto;\\n  -ms-hyphens: auto;\\n  hyphens: auto;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Divider\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Divider\\n*******************************/\\n\\n.ui.divider {\\n  margin: 1rem 0;\\n  line-height: 1;\\n  height: 0;\\n  font-weight: bold;\\n  text-transform: uppercase;\\n  letter-spacing: 0.05em;\\n  color: rgba(0, 0, 0, 0.85);\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n}\\n\\n/*--------------\\n      Basic\\n---------------*/\\n\\n.ui.divider:not(.vertical):not(.horizontal) {\\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\\n  border-bottom: 1px solid rgba(255, 255, 255, 0.1);\\n}\\n\\n/*--------------\\n    Coupling\\n---------------*/\\n\\n/* Allow divider between each column row */\\n\\n.ui.grid > .column + .divider,\\n.ui.grid > .row > .column + .divider {\\n  left: auto;\\n}\\n\\n/*--------------\\n   Horizontal\\n---------------*/\\n\\n.ui.horizontal.divider {\\n  display: table;\\n  white-space: nowrap;\\n  height: auto;\\n  margin: '';\\n  line-height: 1;\\n  text-align: center;\\n}\\n\\n.ui.horizontal.divider:before,\\n.ui.horizontal.divider:after {\\n  content: '';\\n  display: table-cell;\\n  position: relative;\\n  top: 50%;\\n  width: 50%;\\n  background-repeat: no-repeat;\\n}\\n\\n.ui.horizontal.divider:before {\\n  background-position: right 1em top 50%;\\n}\\n\\n.ui.horizontal.divider:after {\\n  background-position: left 1em top 50%;\\n}\\n\\n/*--------------\\n    Vertical\\n---------------*/\\n\\n.ui.vertical.divider {\\n  position: absolute;\\n  z-index: 2;\\n  top: 50%;\\n  left: 50%;\\n  margin: 0;\\n  padding: 0;\\n  width: auto;\\n  height: 50%;\\n  line-height: 0;\\n  text-align: center;\\n  -webkit-transform: translateX(-50%);\\n  transform: translateX(-50%);\\n}\\n\\n.ui.vertical.divider:before,\\n.ui.vertical.divider:after {\\n  position: absolute;\\n  left: 50%;\\n  content: '';\\n  z-index: 3;\\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\\n  border-right: 1px solid rgba(255, 255, 255, 0.1);\\n  width: 0;\\n  height: calc(100% - 1rem);\\n}\\n\\n.ui.vertical.divider:before {\\n  top: -100%;\\n}\\n\\n.ui.vertical.divider:after {\\n  top: auto;\\n  bottom: 0;\\n}\\n\\n/* Inside grid */\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.stackable.grid .ui.vertical.divider,\\n  .ui.grid .stackable.row .ui.vertical.divider {\\n    display: table;\\n    white-space: nowrap;\\n    height: auto;\\n    margin: '';\\n    overflow: hidden;\\n    line-height: 1;\\n    text-align: center;\\n    position: static;\\n    top: 0;\\n    left: 0;\\n    -webkit-transform: none;\\n    transform: none;\\n  }\\n\\n  .ui.stackable.grid .ui.vertical.divider:before,\\n  .ui.grid .stackable.row .ui.vertical.divider:before,\\n  .ui.stackable.grid .ui.vertical.divider:after,\\n  .ui.grid .stackable.row .ui.vertical.divider:after {\\n    left: 0;\\n    border-left: none;\\n    border-right: none;\\n    content: '';\\n    display: table-cell;\\n    position: relative;\\n    top: 50%;\\n    width: 50%;\\n    background-repeat: no-repeat;\\n  }\\n\\n  .ui.stackable.grid .ui.vertical.divider:before,\\n  .ui.grid .stackable.row .ui.vertical.divider:before {\\n    background-position: right 1em top 50%;\\n  }\\n\\n  .ui.stackable.grid .ui.vertical.divider:after,\\n  .ui.grid .stackable.row .ui.vertical.divider:after {\\n    background-position: left 1em top 50%;\\n  }\\n}\\n\\n/*--------------\\n      Icon\\n---------------*/\\n\\n.ui.divider > .icon {\\n  margin: 0;\\n  font-size: 1rem;\\n  height: 1em;\\n  vertical-align: middle;\\n}\\n\\n/*--------------\\n     Header\\n---------------*/\\n\\n.ui.horizontal.divider[class*=\\\"left aligned\\\"]:before {\\n  display: none;\\n}\\n\\n.ui.horizontal.divider[class*=\\\"left aligned\\\"]:after {\\n  width: 100%;\\n}\\n\\n.ui.horizontal.divider[class*=\\\"right aligned\\\"]:before {\\n  width: 100%;\\n}\\n\\n.ui.horizontal.divider[class*=\\\"right aligned\\\"]:after {\\n  display: none;\\n}\\n\\n/*******************************\\n          Variations\\n*******************************/\\n\\n/*--------------\\n    Hidden\\n---------------*/\\n\\n.ui.hidden.divider {\\n  border-color: transparent !important;\\n}\\n\\n.ui.hidden.divider:before,\\n.ui.hidden.divider:after {\\n  display: none;\\n}\\n\\n/*--------------\\n    Inverted\\n---------------*/\\n\\n.ui.divider.inverted,\\n.ui.vertical.inverted.divider,\\n.ui.horizontal.inverted.divider {\\n  color: #FFFFFF;\\n}\\n\\n.ui.divider.inverted,\\n.ui.divider.inverted:after,\\n.ui.divider.inverted:before {\\n  border-top-color: rgba(34, 36, 38, 0.15) !important;\\n  border-left-color: rgba(34, 36, 38, 0.15) !important;\\n  border-bottom-color: rgba(255, 255, 255, 0.15) !important;\\n  border-right-color: rgba(255, 255, 255, 0.15) !important;\\n}\\n\\n/*--------------\\n    Fitted\\n---------------*/\\n\\n.ui.fitted.divider {\\n  margin: 0;\\n}\\n\\n/*--------------\\n    Clearing\\n---------------*/\\n\\n.ui.clearing.divider {\\n  clear: both;\\n}\\n\\n/*--------------\\n    Section\\n---------------*/\\n\\n.ui.section.divider {\\n  margin-top: 2rem;\\n  margin-bottom: 2rem;\\n}\\n\\n/*--------------\\n     Sizes\\n---------------*/\\n\\n.ui.divider {\\n  font-size: 1rem;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n.ui.horizontal.divider:before,\\n.ui.horizontal.divider:after {\\n  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC');\\n}\\n\\n@media only screen and (max-width: 767px) {\\n  .ui.stackable.grid .ui.vertical.divider:before,\\n  .ui.grid .stackable.row .ui.vertical.divider:before,\\n  .ui.stackable.grid .ui.vertical.divider:after,\\n  .ui.grid .stackable.row .ui.vertical.divider:after {\\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC');\\n  }\\n}\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Flag\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n             Flag\\n*******************************/\\n\\ni.flag:not(.icon) {\\n  display: inline-block;\\n  width: 16px;\\n  height: 11px;\\n  line-height: 11px;\\n  vertical-align: baseline;\\n  margin: 0 0.5em 0 0;\\n  text-decoration: inherit;\\n  speak: none;\\n  -webkit-font-smoothing: antialiased;\\n  -webkit-backface-visibility: hidden;\\n  backface-visibility: hidden;\\n}\\n\\n/* Sprite */\\n\\ni.flag:not(.icon):before {\\n  display: inline-block;\\n  content: '';\\n  background: url(\" + ___CSS_LOADER_URL___0___ + \") no-repeat -108px -1976px;\\n  width: 16px;\\n  height: 11px;\\n}\\n\\n/* Flag Sprite Based On http://www.famfamfam.com/lab/icons/flags/ */\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\ni.flag.ad:before,\\ni.flag.andorra:before {\\n  background-position: 0 0;\\n}\\n\\ni.flag.ae:before,\\ni.flag.united.arab.emirates:before,\\ni.flag.uae:before {\\n  background-position: 0 -26px;\\n}\\n\\ni.flag.af:before,\\ni.flag.afghanistan:before {\\n  background-position: 0 -52px;\\n}\\n\\ni.flag.ag:before,\\ni.flag.antigua:before {\\n  background-position: 0 -78px;\\n}\\n\\ni.flag.ai:before,\\ni.flag.anguilla:before {\\n  background-position: 0 -104px;\\n}\\n\\ni.flag.al:before,\\ni.flag.albania:before {\\n  background-position: 0 -130px;\\n}\\n\\ni.flag.am:before,\\ni.flag.armenia:before {\\n  background-position: 0 -156px;\\n}\\n\\ni.flag.an:before,\\ni.flag.netherlands.antilles:before {\\n  background-position: 0 -182px;\\n}\\n\\ni.flag.ao:before,\\ni.flag.angola:before {\\n  background-position: 0 -208px;\\n}\\n\\ni.flag.ar:before,\\ni.flag.argentina:before {\\n  background-position: 0 -234px;\\n}\\n\\ni.flag.as:before,\\ni.flag.american.samoa:before {\\n  background-position: 0 -260px;\\n}\\n\\ni.flag.at:before,\\ni.flag.austria:before {\\n  background-position: 0 -286px;\\n}\\n\\ni.flag.au:before,\\ni.flag.australia:before {\\n  background-position: 0 -312px;\\n}\\n\\ni.flag.aw:before,\\ni.flag.aruba:before {\\n  background-position: 0 -338px;\\n}\\n\\ni.flag.ax:before,\\ni.flag.aland.islands:before {\\n  background-position: 0 -364px;\\n}\\n\\ni.flag.az:before,\\ni.flag.azerbaijan:before {\\n  background-position: 0 -390px;\\n}\\n\\ni.flag.ba:before,\\ni.flag.bosnia:before {\\n  background-position: 0 -416px;\\n}\\n\\ni.flag.bb:before,\\ni.flag.barbados:before {\\n  background-position: 0 -442px;\\n}\\n\\ni.flag.bd:before,\\ni.flag.bangladesh:before {\\n  background-position: 0 -468px;\\n}\\n\\ni.flag.be:before,\\ni.flag.belgium:before {\\n  background-position: 0 -494px;\\n}\\n\\ni.flag.bf:before,\\ni.flag.burkina.faso:before {\\n  background-position: 0 -520px;\\n}\\n\\ni.flag.bg:before,\\ni.flag.bulgaria:before {\\n  background-position: 0 -546px;\\n}\\n\\ni.flag.bh:before,\\ni.flag.bahrain:before {\\n  background-position: 0 -572px;\\n}\\n\\ni.flag.bi:before,\\ni.flag.burundi:before {\\n  background-position: 0 -598px;\\n}\\n\\ni.flag.bj:before,\\ni.flag.benin:before {\\n  background-position: 0 -624px;\\n}\\n\\ni.flag.bm:before,\\ni.flag.bermuda:before {\\n  background-position: 0 -650px;\\n}\\n\\ni.flag.bn:before,\\ni.flag.brunei:before {\\n  background-position: 0 -676px;\\n}\\n\\ni.flag.bo:before,\\ni.flag.bolivia:before {\\n  background-position: 0 -702px;\\n}\\n\\ni.flag.br:before,\\ni.flag.brazil:before {\\n  background-position: 0 -728px;\\n}\\n\\ni.flag.bs:before,\\ni.flag.bahamas:before {\\n  background-position: 0 -754px;\\n}\\n\\ni.flag.bt:before,\\ni.flag.bhutan:before {\\n  background-position: 0 -780px;\\n}\\n\\ni.flag.bv:before,\\ni.flag.bouvet.island:before {\\n  background-position: 0 -806px;\\n}\\n\\ni.flag.bw:before,\\ni.flag.botswana:before {\\n  background-position: 0 -832px;\\n}\\n\\ni.flag.by:before,\\ni.flag.belarus:before {\\n  background-position: 0 -858px;\\n}\\n\\ni.flag.bz:before,\\ni.flag.belize:before {\\n  background-position: 0 -884px;\\n}\\n\\ni.flag.ca:before,\\ni.flag.canada:before {\\n  background-position: 0 -910px;\\n}\\n\\ni.flag.cc:before,\\ni.flag.cocos.islands:before {\\n  background-position: 0 -962px;\\n}\\n\\ni.flag.cd:before,\\ni.flag.congo:before {\\n  background-position: 0 -988px;\\n}\\n\\ni.flag.cf:before,\\ni.flag.central.african.republic:before {\\n  background-position: 0 -1014px;\\n}\\n\\ni.flag.cg:before,\\ni.flag.congo.brazzaville:before {\\n  background-position: 0 -1040px;\\n}\\n\\ni.flag.ch:before,\\ni.flag.switzerland:before {\\n  background-position: 0 -1066px;\\n}\\n\\ni.flag.ci:before,\\ni.flag.cote.divoire:before {\\n  background-position: 0 -1092px;\\n}\\n\\ni.flag.ck:before,\\ni.flag.cook.islands:before {\\n  background-position: 0 -1118px;\\n}\\n\\ni.flag.cl:before,\\ni.flag.chile:before {\\n  background-position: 0 -1144px;\\n}\\n\\ni.flag.cm:before,\\ni.flag.cameroon:before {\\n  background-position: 0 -1170px;\\n}\\n\\ni.flag.cn:before,\\ni.flag.china:before {\\n  background-position: 0 -1196px;\\n}\\n\\ni.flag.co:before,\\ni.flag.colombia:before {\\n  background-position: 0 -1222px;\\n}\\n\\ni.flag.cr:before,\\ni.flag.costa.rica:before {\\n  background-position: 0 -1248px;\\n}\\n\\ni.flag.cs:before,\\ni.flag.serbia:before {\\n  background-position: 0 -1274px;\\n}\\n\\ni.flag.cu:before,\\ni.flag.cuba:before {\\n  background-position: 0 -1300px;\\n}\\n\\ni.flag.cv:before,\\ni.flag.cape.verde:before {\\n  background-position: 0 -1326px;\\n}\\n\\ni.flag.cx:before,\\ni.flag.christmas.island:before {\\n  background-position: 0 -1352px;\\n}\\n\\ni.flag.cy:before,\\ni.flag.cyprus:before {\\n  background-position: 0 -1378px;\\n}\\n\\ni.flag.cz:before,\\ni.flag.czech.republic:before {\\n  background-position: 0 -1404px;\\n}\\n\\ni.flag.de:before,\\ni.flag.germany:before {\\n  background-position: 0 -1430px;\\n}\\n\\ni.flag.dj:before,\\ni.flag.djibouti:before {\\n  background-position: 0 -1456px;\\n}\\n\\ni.flag.dk:before,\\ni.flag.denmark:before {\\n  background-position: 0 -1482px;\\n}\\n\\ni.flag.dm:before,\\ni.flag.dominica:before {\\n  background-position: 0 -1508px;\\n}\\n\\ni.flag.do:before,\\ni.flag.dominican.republic:before {\\n  background-position: 0 -1534px;\\n}\\n\\ni.flag.dz:before,\\ni.flag.algeria:before {\\n  background-position: 0 -1560px;\\n}\\n\\ni.flag.ec:before,\\ni.flag.ecuador:before {\\n  background-position: 0 -1586px;\\n}\\n\\ni.flag.ee:before,\\ni.flag.estonia:before {\\n  background-position: 0 -1612px;\\n}\\n\\ni.flag.eg:before,\\ni.flag.egypt:before {\\n  background-position: 0 -1638px;\\n}\\n\\ni.flag.eh:before,\\ni.flag.western.sahara:before {\\n  background-position: 0 -1664px;\\n}\\n\\ni.flag.gb.eng:before,\\ni.flag.england:before {\\n  background-position: 0 -1690px;\\n}\\n\\ni.flag.er:before,\\ni.flag.eritrea:before {\\n  background-position: 0 -1716px;\\n}\\n\\ni.flag.es:before,\\ni.flag.spain:before {\\n  background-position: 0 -1742px;\\n}\\n\\ni.flag.et:before,\\ni.flag.ethiopia:before {\\n  background-position: 0 -1768px;\\n}\\n\\ni.flag.eu:before,\\ni.flag.european.union:before {\\n  background-position: 0 -1794px;\\n}\\n\\ni.flag.fi:before,\\ni.flag.finland:before {\\n  background-position: 0 -1846px;\\n}\\n\\ni.flag.fj:before,\\ni.flag.fiji:before {\\n  background-position: 0 -1872px;\\n}\\n\\ni.flag.fk:before,\\ni.flag.falkland.islands:before {\\n  background-position: 0 -1898px;\\n}\\n\\ni.flag.fm:before,\\ni.flag.micronesia:before {\\n  background-position: 0 -1924px;\\n}\\n\\ni.flag.fo:before,\\ni.flag.faroe.islands:before {\\n  background-position: 0 -1950px;\\n}\\n\\ni.flag.fr:before,\\ni.flag.france:before {\\n  background-position: 0 -1976px;\\n}\\n\\ni.flag.ga:before,\\ni.flag.gabon:before {\\n  background-position: -36px 0;\\n}\\n\\ni.flag.gb:before,\\ni.flag.uk:before,\\ni.flag.united.kingdom:before {\\n  background-position: -36px -26px;\\n}\\n\\ni.flag.gd:before,\\ni.flag.grenada:before {\\n  background-position: -36px -52px;\\n}\\n\\ni.flag.ge:before,\\ni.flag.georgia:before {\\n  background-position: -36px -78px;\\n}\\n\\ni.flag.gf:before,\\ni.flag.french.guiana:before {\\n  background-position: -36px -104px;\\n}\\n\\ni.flag.gh:before,\\ni.flag.ghana:before {\\n  background-position: -36px -130px;\\n}\\n\\ni.flag.gi:before,\\ni.flag.gibraltar:before {\\n  background-position: -36px -156px;\\n}\\n\\ni.flag.gl:before,\\ni.flag.greenland:before {\\n  background-position: -36px -182px;\\n}\\n\\ni.flag.gm:before,\\ni.flag.gambia:before {\\n  background-position: -36px -208px;\\n}\\n\\ni.flag.gn:before,\\ni.flag.guinea:before {\\n  background-position: -36px -234px;\\n}\\n\\ni.flag.gp:before,\\ni.flag.guadeloupe:before {\\n  background-position: -36px -260px;\\n}\\n\\ni.flag.gq:before,\\ni.flag.equatorial.guinea:before {\\n  background-position: -36px -286px;\\n}\\n\\ni.flag.gr:before,\\ni.flag.greece:before {\\n  background-position: -36px -312px;\\n}\\n\\ni.flag.gs:before,\\ni.flag.sandwich.islands:before {\\n  background-position: -36px -338px;\\n}\\n\\ni.flag.gt:before,\\ni.flag.guatemala:before {\\n  background-position: -36px -364px;\\n}\\n\\ni.flag.gu:before,\\ni.flag.guam:before {\\n  background-position: -36px -390px;\\n}\\n\\ni.flag.gw:before,\\ni.flag.guinea-bissau:before {\\n  background-position: -36px -416px;\\n}\\n\\ni.flag.gy:before,\\ni.flag.guyana:before {\\n  background-position: -36px -442px;\\n}\\n\\ni.flag.hk:before,\\ni.flag.hong.kong:before {\\n  background-position: -36px -468px;\\n}\\n\\ni.flag.hm:before,\\ni.flag.heard.island:before {\\n  background-position: -36px -494px;\\n}\\n\\ni.flag.hn:before,\\ni.flag.honduras:before {\\n  background-position: -36px -520px;\\n}\\n\\ni.flag.hr:before,\\ni.flag.croatia:before {\\n  background-position: -36px -546px;\\n}\\n\\ni.flag.ht:before,\\ni.flag.haiti:before {\\n  background-position: -36px -572px;\\n}\\n\\ni.flag.hu:before,\\ni.flag.hungary:before {\\n  background-position: -36px -598px;\\n}\\n\\ni.flag.id:before,\\ni.flag.indonesia:before {\\n  background-position: -36px -624px;\\n}\\n\\ni.flag.ie:before,\\ni.flag.ireland:before {\\n  background-position: -36px -650px;\\n}\\n\\ni.flag.il:before,\\ni.flag.israel:before {\\n  background-position: -36px -676px;\\n}\\n\\ni.flag.in:before,\\ni.flag.india:before {\\n  background-position: -36px -702px;\\n}\\n\\ni.flag.io:before,\\ni.flag.indian.ocean.territory:before {\\n  background-position: -36px -728px;\\n}\\n\\ni.flag.iq:before,\\ni.flag.iraq:before {\\n  background-position: -36px -754px;\\n}\\n\\ni.flag.ir:before,\\ni.flag.iran:before {\\n  background-position: -36px -780px;\\n}\\n\\ni.flag.is:before,\\ni.flag.iceland:before {\\n  background-position: -36px -806px;\\n}\\n\\ni.flag.it:before,\\ni.flag.italy:before {\\n  background-position: -36px -832px;\\n}\\n\\ni.flag.jm:before,\\ni.flag.jamaica:before {\\n  background-position: -36px -858px;\\n}\\n\\ni.flag.jo:before,\\ni.flag.jordan:before {\\n  background-position: -36px -884px;\\n}\\n\\ni.flag.jp:before,\\ni.flag.japan:before {\\n  background-position: -36px -910px;\\n}\\n\\ni.flag.ke:before,\\ni.flag.kenya:before {\\n  background-position: -36px -936px;\\n}\\n\\ni.flag.kg:before,\\ni.flag.kyrgyzstan:before {\\n  background-position: -36px -962px;\\n}\\n\\ni.flag.kh:before,\\ni.flag.cambodia:before {\\n  background-position: -36px -988px;\\n}\\n\\ni.flag.ki:before,\\ni.flag.kiribati:before {\\n  background-position: -36px -1014px;\\n}\\n\\ni.flag.km:before,\\ni.flag.comoros:before {\\n  background-position: -36px -1040px;\\n}\\n\\ni.flag.kn:before,\\ni.flag.saint.kitts.and.nevis:before {\\n  background-position: -36px -1066px;\\n}\\n\\ni.flag.kp:before,\\ni.flag.north.korea:before {\\n  background-position: -36px -1092px;\\n}\\n\\ni.flag.kr:before,\\ni.flag.south.korea:before {\\n  background-position: -36px -1118px;\\n}\\n\\ni.flag.kw:before,\\ni.flag.kuwait:before {\\n  background-position: -36px -1144px;\\n}\\n\\ni.flag.ky:before,\\ni.flag.cayman.islands:before {\\n  background-position: -36px -1170px;\\n}\\n\\ni.flag.kz:before,\\ni.flag.kazakhstan:before {\\n  background-position: -36px -1196px;\\n}\\n\\ni.flag.la:before,\\ni.flag.laos:before {\\n  background-position: -36px -1222px;\\n}\\n\\ni.flag.lb:before,\\ni.flag.lebanon:before {\\n  background-position: -36px -1248px;\\n}\\n\\ni.flag.lc:before,\\ni.flag.saint.lucia:before {\\n  background-position: -36px -1274px;\\n}\\n\\ni.flag.li:before,\\ni.flag.liechtenstein:before {\\n  background-position: -36px -1300px;\\n}\\n\\ni.flag.lk:before,\\ni.flag.sri.lanka:before {\\n  background-position: -36px -1326px;\\n}\\n\\ni.flag.lr:before,\\ni.flag.liberia:before {\\n  background-position: -36px -1352px;\\n}\\n\\ni.flag.ls:before,\\ni.flag.lesotho:before {\\n  background-position: -36px -1378px;\\n}\\n\\ni.flag.lt:before,\\ni.flag.lithuania:before {\\n  background-position: -36px -1404px;\\n}\\n\\ni.flag.lu:before,\\ni.flag.luxembourg:before {\\n  background-position: -36px -1430px;\\n}\\n\\ni.flag.lv:before,\\ni.flag.latvia:before {\\n  background-position: -36px -1456px;\\n}\\n\\ni.flag.ly:before,\\ni.flag.libya:before {\\n  background-position: -36px -1482px;\\n}\\n\\ni.flag.ma:before,\\ni.flag.morocco:before {\\n  background-position: -36px -1508px;\\n}\\n\\ni.flag.mc:before,\\ni.flag.monaco:before {\\n  background-position: -36px -1534px;\\n}\\n\\ni.flag.md:before,\\ni.flag.moldova:before {\\n  background-position: -36px -1560px;\\n}\\n\\ni.flag.me:before,\\ni.flag.montenegro:before {\\n  background-position: -36px -1586px;\\n}\\n\\ni.flag.mg:before,\\ni.flag.madagascar:before {\\n  background-position: -36px -1613px;\\n}\\n\\ni.flag.mh:before,\\ni.flag.marshall.islands:before {\\n  background-position: -36px -1639px;\\n}\\n\\ni.flag.mk:before,\\ni.flag.macedonia:before {\\n  background-position: -36px -1665px;\\n}\\n\\ni.flag.ml:before,\\ni.flag.mali:before {\\n  background-position: -36px -1691px;\\n}\\n\\ni.flag.mm:before,\\ni.flag.myanmar:before,\\ni.flag.burma:before {\\n  background-position: -36px -1717px;\\n}\\n\\ni.flag.mn:before,\\ni.flag.mongolia:before {\\n  background-position: -36px -1743px;\\n}\\n\\ni.flag.mo:before,\\ni.flag.macau:before {\\n  background-position: -36px -1769px;\\n}\\n\\ni.flag.mp:before,\\ni.flag.northern.mariana.islands:before {\\n  background-position: -36px -1795px;\\n}\\n\\ni.flag.mq:before,\\ni.flag.martinique:before {\\n  background-position: -36px -1821px;\\n}\\n\\ni.flag.mr:before,\\ni.flag.mauritania:before {\\n  background-position: -36px -1847px;\\n}\\n\\ni.flag.ms:before,\\ni.flag.montserrat:before {\\n  background-position: -36px -1873px;\\n}\\n\\ni.flag.mt:before,\\ni.flag.malta:before {\\n  background-position: -36px -1899px;\\n}\\n\\ni.flag.mu:before,\\ni.flag.mauritius:before {\\n  background-position: -36px -1925px;\\n}\\n\\ni.flag.mv:before,\\ni.flag.maldives:before {\\n  background-position: -36px -1951px;\\n}\\n\\ni.flag.mw:before,\\ni.flag.malawi:before {\\n  background-position: -36px -1977px;\\n}\\n\\ni.flag.mx:before,\\ni.flag.mexico:before {\\n  background-position: -72px 0;\\n}\\n\\ni.flag.my:before,\\ni.flag.malaysia:before {\\n  background-position: -72px -26px;\\n}\\n\\ni.flag.mz:before,\\ni.flag.mozambique:before {\\n  background-position: -72px -52px;\\n}\\n\\ni.flag.na:before,\\ni.flag.namibia:before {\\n  background-position: -72px -78px;\\n}\\n\\ni.flag.nc:before,\\ni.flag.new.caledonia:before {\\n  background-position: -72px -104px;\\n}\\n\\ni.flag.ne:before,\\ni.flag.niger:before {\\n  background-position: -72px -130px;\\n}\\n\\ni.flag.nf:before,\\ni.flag.norfolk.island:before {\\n  background-position: -72px -156px;\\n}\\n\\ni.flag.ng:before,\\ni.flag.nigeria:before {\\n  background-position: -72px -182px;\\n}\\n\\ni.flag.ni:before,\\ni.flag.nicaragua:before {\\n  background-position: -72px -208px;\\n}\\n\\ni.flag.nl:before,\\ni.flag.netherlands:before {\\n  background-position: -72px -234px;\\n}\\n\\ni.flag.no:before,\\ni.flag.norway:before {\\n  background-position: -72px -260px;\\n}\\n\\ni.flag.np:before,\\ni.flag.nepal:before {\\n  background-position: -72px -286px;\\n}\\n\\ni.flag.nr:before,\\ni.flag.nauru:before {\\n  background-position: -72px -312px;\\n}\\n\\ni.flag.nu:before,\\ni.flag.niue:before {\\n  background-position: -72px -338px;\\n}\\n\\ni.flag.nz:before,\\ni.flag.new.zealand:before {\\n  background-position: -72px -364px;\\n}\\n\\ni.flag.om:before,\\ni.flag.oman:before {\\n  background-position: -72px -390px;\\n}\\n\\ni.flag.pa:before,\\ni.flag.panama:before {\\n  background-position: -72px -416px;\\n}\\n\\ni.flag.pe:before,\\ni.flag.peru:before {\\n  background-position: -72px -442px;\\n}\\n\\ni.flag.pf:before,\\ni.flag.french.polynesia:before {\\n  background-position: -72px -468px;\\n}\\n\\ni.flag.pg:before,\\ni.flag.new.guinea:before {\\n  background-position: -72px -494px;\\n}\\n\\ni.flag.ph:before,\\ni.flag.philippines:before {\\n  background-position: -72px -520px;\\n}\\n\\ni.flag.pk:before,\\ni.flag.pakistan:before {\\n  background-position: -72px -546px;\\n}\\n\\ni.flag.pl:before,\\ni.flag.poland:before {\\n  background-position: -72px -572px;\\n}\\n\\ni.flag.pm:before,\\ni.flag.saint.pierre:before {\\n  background-position: -72px -598px;\\n}\\n\\ni.flag.pn:before,\\ni.flag.pitcairn.islands:before {\\n  background-position: -72px -624px;\\n}\\n\\ni.flag.pr:before,\\ni.flag.puerto.rico:before {\\n  background-position: -72px -650px;\\n}\\n\\ni.flag.ps:before,\\ni.flag.palestine:before {\\n  background-position: -72px -676px;\\n}\\n\\ni.flag.pt:before,\\ni.flag.portugal:before {\\n  background-position: -72px -702px;\\n}\\n\\ni.flag.pw:before,\\ni.flag.palau:before {\\n  background-position: -72px -728px;\\n}\\n\\ni.flag.py:before,\\ni.flag.paraguay:before {\\n  background-position: -72px -754px;\\n}\\n\\ni.flag.qa:before,\\ni.flag.qatar:before {\\n  background-position: -72px -780px;\\n}\\n\\ni.flag.re:before,\\ni.flag.reunion:before {\\n  background-position: -72px -806px;\\n}\\n\\ni.flag.ro:before,\\ni.flag.romania:before {\\n  background-position: -72px -832px;\\n}\\n\\ni.flag.rs:before,\\ni.flag.serbia:before {\\n  background-position: -72px -858px;\\n}\\n\\ni.flag.ru:before,\\ni.flag.russia:before {\\n  background-position: -72px -884px;\\n}\\n\\ni.flag.rw:before,\\ni.flag.rwanda:before {\\n  background-position: -72px -910px;\\n}\\n\\ni.flag.sa:before,\\ni.flag.saudi.arabia:before {\\n  background-position: -72px -936px;\\n}\\n\\ni.flag.sb:before,\\ni.flag.solomon.islands:before {\\n  background-position: -72px -962px;\\n}\\n\\ni.flag.sc:before,\\ni.flag.seychelles:before {\\n  background-position: -72px -988px;\\n}\\n\\ni.flag.gb.sct:before,\\ni.flag.scotland:before {\\n  background-position: -72px -1014px;\\n}\\n\\ni.flag.sd:before,\\ni.flag.sudan:before {\\n  background-position: -72px -1040px;\\n}\\n\\ni.flag.se:before,\\ni.flag.sweden:before {\\n  background-position: -72px -1066px;\\n}\\n\\ni.flag.sg:before,\\ni.flag.singapore:before {\\n  background-position: -72px -1092px;\\n}\\n\\ni.flag.sh:before,\\ni.flag.saint.helena:before {\\n  background-position: -72px -1118px;\\n}\\n\\ni.flag.si:before,\\ni.flag.slovenia:before {\\n  background-position: -72px -1144px;\\n}\\n\\ni.flag.sj:before,\\ni.flag.svalbard:before,\\ni.flag.jan.mayen:before {\\n  background-position: -72px -1170px;\\n}\\n\\ni.flag.sk:before,\\ni.flag.slovakia:before {\\n  background-position: -72px -1196px;\\n}\\n\\ni.flag.sl:before,\\ni.flag.sierra.leone:before {\\n  background-position: -72px -1222px;\\n}\\n\\ni.flag.sm:before,\\ni.flag.san.marino:before {\\n  background-position: -72px -1248px;\\n}\\n\\ni.flag.sn:before,\\ni.flag.senegal:before {\\n  background-position: -72px -1274px;\\n}\\n\\ni.flag.so:before,\\ni.flag.somalia:before {\\n  background-position: -72px -1300px;\\n}\\n\\ni.flag.sr:before,\\ni.flag.suriname:before {\\n  background-position: -72px -1326px;\\n}\\n\\ni.flag.st:before,\\ni.flag.sao.tome:before {\\n  background-position: -72px -1352px;\\n}\\n\\ni.flag.sv:before,\\ni.flag.el.salvador:before {\\n  background-position: -72px -1378px;\\n}\\n\\ni.flag.sy:before,\\ni.flag.syria:before {\\n  background-position: -72px -1404px;\\n}\\n\\ni.flag.sz:before,\\ni.flag.swaziland:before {\\n  background-position: -72px -1430px;\\n}\\n\\ni.flag.tc:before,\\ni.flag.caicos.islands:before {\\n  background-position: -72px -1456px;\\n}\\n\\ni.flag.td:before,\\ni.flag.chad:before {\\n  background-position: -72px -1482px;\\n}\\n\\ni.flag.tf:before,\\ni.flag.french.territories:before {\\n  background-position: -72px -1508px;\\n}\\n\\ni.flag.tg:before,\\ni.flag.togo:before {\\n  background-position: -72px -1534px;\\n}\\n\\ni.flag.th:before,\\ni.flag.thailand:before {\\n  background-position: -72px -1560px;\\n}\\n\\ni.flag.tj:before,\\ni.flag.tajikistan:before {\\n  background-position: -72px -1586px;\\n}\\n\\ni.flag.tk:before,\\ni.flag.tokelau:before {\\n  background-position: -72px -1612px;\\n}\\n\\ni.flag.tl:before,\\ni.flag.timorleste:before {\\n  background-position: -72px -1638px;\\n}\\n\\ni.flag.tm:before,\\ni.flag.turkmenistan:before {\\n  background-position: -72px -1664px;\\n}\\n\\ni.flag.tn:before,\\ni.flag.tunisia:before {\\n  background-position: -72px -1690px;\\n}\\n\\ni.flag.to:before,\\ni.flag.tonga:before {\\n  background-position: -72px -1716px;\\n}\\n\\ni.flag.tr:before,\\ni.flag.turkey:before {\\n  background-position: -72px -1742px;\\n}\\n\\ni.flag.tt:before,\\ni.flag.trinidad:before {\\n  background-position: -72px -1768px;\\n}\\n\\ni.flag.tv:before,\\ni.flag.tuvalu:before {\\n  background-position: -72px -1794px;\\n}\\n\\ni.flag.tw:before,\\ni.flag.taiwan:before {\\n  background-position: -72px -1820px;\\n}\\n\\ni.flag.tz:before,\\ni.flag.tanzania:before {\\n  background-position: -72px -1846px;\\n}\\n\\ni.flag.ua:before,\\ni.flag.ukraine:before {\\n  background-position: -72px -1872px;\\n}\\n\\ni.flag.ug:before,\\ni.flag.uganda:before {\\n  background-position: -72px -1898px;\\n}\\n\\ni.flag.um:before,\\ni.flag.us.minor.islands:before {\\n  background-position: -72px -1924px;\\n}\\n\\ni.flag.us:before,\\ni.flag.america:before,\\ni.flag.united.states:before {\\n  background-position: -72px -1950px;\\n}\\n\\ni.flag.uy:before,\\ni.flag.uruguay:before {\\n  background-position: -72px -1976px;\\n}\\n\\ni.flag.uz:before,\\ni.flag.uzbekistan:before {\\n  background-position: -108px 0;\\n}\\n\\ni.flag.va:before,\\ni.flag.vatican.city:before {\\n  background-position: -108px -26px;\\n}\\n\\ni.flag.vc:before,\\ni.flag.saint.vincent:before {\\n  background-position: -108px -52px;\\n}\\n\\ni.flag.ve:before,\\ni.flag.venezuela:before {\\n  background-position: -108px -78px;\\n}\\n\\ni.flag.vg:before,\\ni.flag.british.virgin.islands:before {\\n  background-position: -108px -104px;\\n}\\n\\ni.flag.vi:before,\\ni.flag.us.virgin.islands:before {\\n  background-position: -108px -130px;\\n}\\n\\ni.flag.vn:before,\\ni.flag.vietnam:before {\\n  background-position: -108px -156px;\\n}\\n\\ni.flag.vu:before,\\ni.flag.vanuatu:before {\\n  background-position: -108px -182px;\\n}\\n\\ni.flag.gb.wls:before,\\ni.flag.wales:before {\\n  background-position: -108px -208px;\\n}\\n\\ni.flag.wf:before,\\ni.flag.wallis.and.futuna:before {\\n  background-position: -108px -234px;\\n}\\n\\ni.flag.ws:before,\\ni.flag.samoa:before {\\n  background-position: -108px -260px;\\n}\\n\\ni.flag.ye:before,\\ni.flag.yemen:before {\\n  background-position: -108px -286px;\\n}\\n\\ni.flag.yt:before,\\ni.flag.mayotte:before {\\n  background-position: -108px -312px;\\n}\\n\\ni.flag.za:before,\\ni.flag.south.africa:before {\\n  background-position: -108px -338px;\\n}\\n\\ni.flag.zm:before,\\ni.flag.zambia:before {\\n  background-position: -108px -364px;\\n}\\n\\ni.flag.zw:before,\\ni.flag.zimbabwe:before {\\n  background-position: -108px -390px;\\n}\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Header\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Header\\n*******************************/\\n\\n/* Standard */\\n\\n.ui.header {\\n  border: none;\\n  margin: calc(2rem - 0.1428571428571429em) 0 1rem;\\n  padding: 0 0;\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  font-weight: bold;\\n  line-height: 1.28571429em;\\n  text-transform: none;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.header:first-child {\\n  margin-top: -0.14285714em;\\n}\\n\\n.ui.header:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/*--------------\\n   Sub Header\\n---------------*/\\n\\n.ui.header .sub.header {\\n  display: block;\\n  font-weight: normal;\\n  padding: 0;\\n  margin: 0;\\n  font-size: 1rem;\\n  line-height: 1.2em;\\n  color: rgba(0, 0, 0, 0.6);\\n}\\n\\n/*--------------\\n      Icon\\n---------------*/\\n\\n.ui.header > .icon {\\n  display: table-cell;\\n  opacity: 1;\\n  font-size: 1.5em;\\n  padding-top: 0;\\n  vertical-align: middle;\\n}\\n\\n/* With Text Node */\\n\\n.ui.header .icon:only-child {\\n  display: inline-block;\\n  padding: 0;\\n  margin-right: 0.75rem;\\n}\\n\\n/*-------------------\\n        Image\\n--------------------*/\\n\\n.ui.header > .image:not(.icon),\\n.ui.header > img {\\n  display: inline-block;\\n  margin-top: 0.14285714em;\\n  width: 2.5em;\\n  height: auto;\\n  vertical-align: middle;\\n}\\n\\n.ui.header > .image:not(.icon):only-child,\\n.ui.header > img:only-child {\\n  margin-right: 0.75rem;\\n}\\n\\n/*--------------\\n     Content\\n---------------*/\\n\\n.ui.header .content {\\n  display: inline-block;\\n  vertical-align: top;\\n}\\n\\n/* After Image */\\n\\n.ui.header > img + .content,\\n.ui.header > .image + .content {\\n  padding-left: 0.75rem;\\n  vertical-align: middle;\\n}\\n\\n/* After Icon */\\n\\n.ui.header > .icon + .content {\\n  padding-left: 0.75rem;\\n  display: table-cell;\\n  vertical-align: middle;\\n}\\n\\n/*--------------\\n Loose Coupling\\n---------------*/\\n\\n.ui.header .ui.label {\\n  font-size: '';\\n  margin-left: 0.5rem;\\n  vertical-align: middle;\\n}\\n\\n/* Positioning */\\n\\n.ui.header + p {\\n  margin-top: 0;\\n}\\n\\n/*******************************\\n            Types\\n*******************************/\\n\\n/*--------------\\n     Page\\n---------------*/\\n\\nh1.ui.header {\\n  font-size: 2rem;\\n}\\n\\nh2.ui.header {\\n  font-size: 1.71428571rem;\\n}\\n\\nh3.ui.header {\\n  font-size: 1.28571429rem;\\n}\\n\\nh4.ui.header {\\n  font-size: 1.07142857rem;\\n}\\n\\nh5.ui.header {\\n  font-size: 1rem;\\n}\\n\\n/* Sub Header */\\n\\nh1.ui.header .sub.header {\\n  font-size: 1.14285714rem;\\n}\\n\\nh2.ui.header .sub.header {\\n  font-size: 1.14285714rem;\\n}\\n\\nh3.ui.header .sub.header {\\n  font-size: 1rem;\\n}\\n\\nh4.ui.header .sub.header {\\n  font-size: 1rem;\\n}\\n\\nh5.ui.header .sub.header {\\n  font-size: 0.92857143rem;\\n}\\n\\n/*--------------\\n Content Heading\\n---------------*/\\n\\n.ui.huge.header {\\n  min-height: 1em;\\n  font-size: 2em;\\n}\\n\\n.ui.large.header {\\n  font-size: 1.71428571em;\\n}\\n\\n.ui.medium.header {\\n  font-size: 1.28571429em;\\n}\\n\\n.ui.small.header {\\n  font-size: 1.07142857em;\\n}\\n\\n.ui.tiny.header {\\n  font-size: 1em;\\n}\\n\\n/* Sub Header */\\n\\n.ui.huge.header .sub.header {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.large.header .sub.header {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.header .sub.header {\\n  font-size: 1rem;\\n}\\n\\n.ui.small.header .sub.header {\\n  font-size: 1rem;\\n}\\n\\n.ui.tiny.header .sub.header {\\n  font-size: 0.92857143rem;\\n}\\n\\n/*--------------\\n   Sub Heading\\n---------------*/\\n\\n.ui.sub.header {\\n  padding: 0;\\n  margin-bottom: 0.14285714rem;\\n  font-weight: bold;\\n  font-size: 0.85714286em;\\n  text-transform: uppercase;\\n  color: '';\\n}\\n\\n.ui.small.sub.header {\\n  font-size: 0.78571429em;\\n}\\n\\n.ui.large.sub.header {\\n  font-size: 0.92857143em;\\n}\\n\\n.ui.huge.sub.header {\\n  font-size: 1em;\\n}\\n\\n/*-------------------\\n        Icon\\n--------------------*/\\n\\n.ui.icon.header {\\n  display: inline-block;\\n  text-align: center;\\n  margin: 2rem 0 1rem;\\n}\\n\\n.ui.icon.header:after {\\n  content: '';\\n  display: block;\\n  height: 0;\\n  clear: both;\\n  visibility: hidden;\\n}\\n\\n.ui.icon.header:first-child {\\n  margin-top: 0;\\n}\\n\\n.ui.icon.header .icon {\\n  float: none;\\n  display: block;\\n  width: auto;\\n  height: auto;\\n  line-height: 1;\\n  padding: 0;\\n  font-size: 3em;\\n  margin: 0 auto 0.5rem;\\n  opacity: 1;\\n}\\n\\n.ui.icon.header .corner.icon {\\n  font-size: calc(3em * 0.45);\\n}\\n\\n.ui.icon.header .content {\\n  display: block;\\n  padding: 0;\\n}\\n\\n.ui.icon.header .circular.icon {\\n  font-size: 2em;\\n}\\n\\n.ui.icon.header .square.icon {\\n  font-size: 2em;\\n}\\n\\n.ui.block.icon.header .icon {\\n  margin-bottom: 0;\\n}\\n\\n.ui.icon.header.aligned {\\n  margin-left: auto;\\n  margin-right: auto;\\n  display: block;\\n}\\n\\n/*******************************\\n            States\\n*******************************/\\n\\n.ui.disabled.header {\\n  opacity: 0.45;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*-------------------\\n      Inverted\\n--------------------*/\\n\\n.ui.inverted.header {\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.header .sub.header {\\n  color: rgba(255, 255, 255, 0.8);\\n}\\n\\n.ui.inverted.attached.header {\\n  background: #1B1C1D;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  border-color: transparent;\\n}\\n\\n.ui.inverted.block.header {\\n  background: #545454 -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\\n  background: #545454 linear-gradient(transparent, rgba(0, 0, 0, 0.05));\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  border-bottom: none;\\n}\\n\\n/*-------------------\\n       Colors\\n--------------------*/\\n\\n.ui.primary.header {\\n  color: #2185D0;\\n}\\n\\na.ui.primary.header:hover {\\n  color: #1678c2;\\n}\\n\\n.ui.primary.dividing.header {\\n  border-bottom: 2px solid #2185D0;\\n}\\n\\n.ui.inverted.primary.header.header.header {\\n  color: #54C8FF;\\n}\\n\\na.ui.inverted.primary.header.header.header:hover {\\n  color: #21b8ff;\\n}\\n\\n.ui.inverted.primary.dividing.header {\\n  border-bottom: 2px solid #54C8FF;\\n}\\n\\n.ui.secondary.header {\\n  color: #1B1C1D;\\n}\\n\\na.ui.secondary.header:hover {\\n  color: #27292a;\\n}\\n\\n.ui.secondary.dividing.header {\\n  border-bottom: 2px solid #1B1C1D;\\n}\\n\\n.ui.inverted.secondary.header.header.header {\\n  color: #545454;\\n}\\n\\na.ui.inverted.secondary.header.header.header:hover {\\n  color: #6e6e6e;\\n}\\n\\n.ui.inverted.secondary.dividing.header {\\n  border-bottom: 2px solid #545454;\\n}\\n\\n.ui.red.header {\\n  color: #DB2828;\\n}\\n\\na.ui.red.header:hover {\\n  color: #d01919;\\n}\\n\\n.ui.red.dividing.header {\\n  border-bottom: 2px solid #DB2828;\\n}\\n\\n.ui.inverted.red.header.header.header {\\n  color: #FF695E;\\n}\\n\\na.ui.inverted.red.header.header.header:hover {\\n  color: #ff392b;\\n}\\n\\n.ui.inverted.red.dividing.header {\\n  border-bottom: 2px solid #FF695E;\\n}\\n\\n.ui.orange.header {\\n  color: #F2711C;\\n}\\n\\na.ui.orange.header:hover {\\n  color: #f26202;\\n}\\n\\n.ui.orange.dividing.header {\\n  border-bottom: 2px solid #F2711C;\\n}\\n\\n.ui.inverted.orange.header.header.header {\\n  color: #FF851B;\\n}\\n\\na.ui.inverted.orange.header.header.header:hover {\\n  color: #e76b00;\\n}\\n\\n.ui.inverted.orange.dividing.header {\\n  border-bottom: 2px solid #FF851B;\\n}\\n\\n.ui.yellow.header {\\n  color: #FBBD08;\\n}\\n\\na.ui.yellow.header:hover {\\n  color: #eaae00;\\n}\\n\\n.ui.yellow.dividing.header {\\n  border-bottom: 2px solid #FBBD08;\\n}\\n\\n.ui.inverted.yellow.header.header.header {\\n  color: #FFE21F;\\n}\\n\\na.ui.inverted.yellow.header.header.header:hover {\\n  color: #ebcd00;\\n}\\n\\n.ui.inverted.yellow.dividing.header {\\n  border-bottom: 2px solid #FFE21F;\\n}\\n\\n.ui.olive.header {\\n  color: #B5CC18;\\n}\\n\\na.ui.olive.header:hover {\\n  color: #a7bd0d;\\n}\\n\\n.ui.olive.dividing.header {\\n  border-bottom: 2px solid #B5CC18;\\n}\\n\\n.ui.inverted.olive.header.header.header {\\n  color: #D9E778;\\n}\\n\\na.ui.inverted.olive.header.header.header:hover {\\n  color: #d2e745;\\n}\\n\\n.ui.inverted.olive.dividing.header {\\n  border-bottom: 2px solid #D9E778;\\n}\\n\\n.ui.green.header {\\n  color: #21BA45;\\n}\\n\\na.ui.green.header:hover {\\n  color: #16ab39;\\n}\\n\\n.ui.green.dividing.header {\\n  border-bottom: 2px solid #21BA45;\\n}\\n\\n.ui.inverted.green.header.header.header {\\n  color: #2ECC40;\\n}\\n\\na.ui.inverted.green.header.header.header:hover {\\n  color: #1ea92e;\\n}\\n\\n.ui.inverted.green.dividing.header {\\n  border-bottom: 2px solid #2ECC40;\\n}\\n\\n.ui.teal.header {\\n  color: #00B5AD;\\n}\\n\\na.ui.teal.header:hover {\\n  color: #009c95;\\n}\\n\\n.ui.teal.dividing.header {\\n  border-bottom: 2px solid #00B5AD;\\n}\\n\\n.ui.inverted.teal.header.header.header {\\n  color: #6DFFFF;\\n}\\n\\na.ui.inverted.teal.header.header.header:hover {\\n  color: #3affff;\\n}\\n\\n.ui.inverted.teal.dividing.header {\\n  border-bottom: 2px solid #6DFFFF;\\n}\\n\\n.ui.blue.header {\\n  color: #2185D0;\\n}\\n\\na.ui.blue.header:hover {\\n  color: #1678c2;\\n}\\n\\n.ui.blue.dividing.header {\\n  border-bottom: 2px solid #2185D0;\\n}\\n\\n.ui.inverted.blue.header.header.header {\\n  color: #54C8FF;\\n}\\n\\na.ui.inverted.blue.header.header.header:hover {\\n  color: #21b8ff;\\n}\\n\\n.ui.inverted.blue.dividing.header {\\n  border-bottom: 2px solid #54C8FF;\\n}\\n\\n.ui.violet.header {\\n  color: #6435C9;\\n}\\n\\na.ui.violet.header:hover {\\n  color: #5829bb;\\n}\\n\\n.ui.violet.dividing.header {\\n  border-bottom: 2px solid #6435C9;\\n}\\n\\n.ui.inverted.violet.header.header.header {\\n  color: #A291FB;\\n}\\n\\na.ui.inverted.violet.header.header.header:hover {\\n  color: #745aff;\\n}\\n\\n.ui.inverted.violet.dividing.header {\\n  border-bottom: 2px solid #A291FB;\\n}\\n\\n.ui.purple.header {\\n  color: #A333C8;\\n}\\n\\na.ui.purple.header:hover {\\n  color: #9627ba;\\n}\\n\\n.ui.purple.dividing.header {\\n  border-bottom: 2px solid #A333C8;\\n}\\n\\n.ui.inverted.purple.header.header.header {\\n  color: #DC73FF;\\n}\\n\\na.ui.inverted.purple.header.header.header:hover {\\n  color: #cf40ff;\\n}\\n\\n.ui.inverted.purple.dividing.header {\\n  border-bottom: 2px solid #DC73FF;\\n}\\n\\n.ui.pink.header {\\n  color: #E03997;\\n}\\n\\na.ui.pink.header:hover {\\n  color: #e61a8d;\\n}\\n\\n.ui.pink.dividing.header {\\n  border-bottom: 2px solid #E03997;\\n}\\n\\n.ui.inverted.pink.header.header.header {\\n  color: #FF8EDF;\\n}\\n\\na.ui.inverted.pink.header.header.header:hover {\\n  color: #ff5bd1;\\n}\\n\\n.ui.inverted.pink.dividing.header {\\n  border-bottom: 2px solid #FF8EDF;\\n}\\n\\n.ui.brown.header {\\n  color: #A5673F;\\n}\\n\\na.ui.brown.header:hover {\\n  color: #975b33;\\n}\\n\\n.ui.brown.dividing.header {\\n  border-bottom: 2px solid #A5673F;\\n}\\n\\n.ui.inverted.brown.header.header.header {\\n  color: #D67C1C;\\n}\\n\\na.ui.inverted.brown.header.header.header:hover {\\n  color: #b0620f;\\n}\\n\\n.ui.inverted.brown.dividing.header {\\n  border-bottom: 2px solid #D67C1C;\\n}\\n\\n.ui.grey.header {\\n  color: #767676;\\n}\\n\\na.ui.grey.header:hover {\\n  color: #838383;\\n}\\n\\n.ui.grey.dividing.header {\\n  border-bottom: 2px solid #767676;\\n}\\n\\n.ui.inverted.grey.header.header.header {\\n  color: #DCDDDE;\\n}\\n\\na.ui.inverted.grey.header.header.header:hover {\\n  color: #c2c4c5;\\n}\\n\\n.ui.inverted.grey.dividing.header {\\n  border-bottom: 2px solid #DCDDDE;\\n}\\n\\n.ui.black.header {\\n  color: #1B1C1D;\\n}\\n\\na.ui.black.header:hover {\\n  color: #27292a;\\n}\\n\\n.ui.black.dividing.header {\\n  border-bottom: 2px solid #1B1C1D;\\n}\\n\\n.ui.inverted.black.header.header.header {\\n  color: #545454;\\n}\\n\\na.ui.inverted.black.header.header.header:hover {\\n  color: #000000;\\n}\\n\\n.ui.inverted.black.dividing.header {\\n  border-bottom: 2px solid #545454;\\n}\\n\\n/*-------------------\\n       Aligned\\n--------------------*/\\n\\n.ui.left.aligned.header {\\n  text-align: left;\\n}\\n\\n.ui.right.aligned.header {\\n  text-align: right;\\n}\\n\\n.ui.centered.header,\\n.ui.center.aligned.header {\\n  text-align: center;\\n}\\n\\n.ui.justified.header {\\n  text-align: justify;\\n}\\n\\n.ui.justified.header:after {\\n  display: inline-block;\\n  content: '';\\n  width: 100%;\\n}\\n\\n/*-------------------\\n       Floated\\n--------------------*/\\n\\n.ui.floated.header,\\n.ui[class*=\\\"left floated\\\"].header {\\n  float: left;\\n  margin-top: 0;\\n  margin-right: 0.5em;\\n}\\n\\n.ui[class*=\\\"right floated\\\"].header {\\n  float: right;\\n  margin-top: 0;\\n  margin-left: 0.5em;\\n}\\n\\n/*-------------------\\n       Fitted\\n--------------------*/\\n\\n.ui.fitted.header {\\n  padding: 0;\\n}\\n\\n/*-------------------\\n      Dividing\\n--------------------*/\\n\\n.ui.dividing.header {\\n  padding-bottom: 0.21428571rem;\\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.dividing.header .sub.header {\\n  padding-bottom: 0.21428571rem;\\n}\\n\\n.ui.dividing.header .icon {\\n  margin-bottom: 0;\\n}\\n\\n.ui.inverted.dividing.header {\\n  border-bottom-color: rgba(255, 255, 255, 0.1);\\n}\\n\\n/*-------------------\\n        Block\\n--------------------*/\\n\\n.ui.block.header {\\n  background: #F3F4F5;\\n  padding: 0.78571429rem 1rem;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  border: 1px solid #D4D4D5;\\n  border-radius: 0.28571429rem;\\n}\\n\\n.ui.tiny.block.header {\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.small.block.header {\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.block.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\\n  font-size: 1rem;\\n}\\n\\n.ui.large.block.header {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.huge.block.header {\\n  font-size: 1.42857143rem;\\n}\\n\\n/*-------------------\\n       Attached\\n--------------------*/\\n\\n.ui.attached.header {\\n  background: #FFFFFF;\\n  padding: 0.78571429rem 1rem;\\n  margin: 0 -1px 0 -1px;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  border: 1px solid #D4D4D5;\\n  border-radius: 0;\\n}\\n\\n.ui.attached.block.header {\\n  background: #F3F4F5;\\n}\\n\\n.ui.attached:not(.top).header {\\n  border-top: none;\\n}\\n\\n.ui.top.attached.header {\\n  border-radius: 0.28571429rem 0.28571429rem 0 0;\\n}\\n\\n.ui.bottom.attached.header {\\n  border-radius: 0 0 0.28571429rem 0.28571429rem;\\n}\\n\\n/* Attached Sizes */\\n\\n.ui.tiny.attached.header {\\n  font-size: 0.85714286em;\\n}\\n\\n.ui.small.attached.header {\\n  font-size: 0.92857143em;\\n}\\n\\n.ui.attached.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\\n  font-size: 1em;\\n}\\n\\n.ui.large.attached.header {\\n  font-size: 1.14285714em;\\n}\\n\\n.ui.huge.attached.header {\\n  font-size: 1.42857143em;\\n}\\n\\n/*-------------------\\n        Sizing\\n--------------------*/\\n\\n.ui.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\\n  font-size: 1.28571429em;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Icon\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n             Icon\\n*******************************/\\n\\n@font-face {\\n  font-family: 'Icons';\\n  src: url(\" + ___CSS_LOADER_URL___1___ + \");\\n  src: url(\" + ___CSS_LOADER_URL___2___ + \") format('embedded-opentype'), url(\" + ___CSS_LOADER_URL___3___ + \") format('woff2'), url(\" + ___CSS_LOADER_URL___4___ + \") format('woff'), url(\" + ___CSS_LOADER_URL___5___ + \") format('truetype'), url(\" + ___CSS_LOADER_URL___6___ + \") format('svg');\\n  font-style: normal;\\n  font-weight: normal;\\n  font-variant: normal;\\n  text-decoration: inherit;\\n  text-transform: none;\\n}\\n\\ni.icon {\\n  display: inline-block;\\n  opacity: 1;\\n  margin: 0 0.25rem 0 0;\\n  width: 1.18em;\\n  height: 1em;\\n  font-family: 'Icons';\\n  font-style: normal;\\n  font-weight: normal;\\n  text-decoration: inherit;\\n  text-align: center;\\n  speak: none;\\n  -moz-osx-font-smoothing: grayscale;\\n  -webkit-font-smoothing: antialiased;\\n  -webkit-backface-visibility: hidden;\\n  backface-visibility: hidden;\\n}\\n\\ni.icon:before {\\n  background: none !important;\\n}\\n\\n/*******************************\\n             Types\\n*******************************/\\n\\n/*--------------\\n    Loading\\n---------------*/\\n\\ni.icon.loading {\\n  height: 1em;\\n  line-height: 1;\\n  -webkit-animation: loader 2s linear infinite;\\n  animation: loader 2s linear infinite;\\n}\\n\\n/*******************************\\n             States\\n*******************************/\\n\\ni.icon:hover,\\ni.icons:hover,\\ni.icon:active,\\ni.icons:active,\\ni.emphasized.icon:not(.disabled),\\ni.emphasized.icons:not(.disabled) {\\n  opacity: 1;\\n}\\n\\ni.disabled.icon,\\ni.disabled.icons {\\n  opacity: 0.45;\\n  cursor: default;\\n  pointer-events: none;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*-------------------\\n        Fitted\\n--------------------*/\\n\\ni.fitted.icon {\\n  width: auto;\\n  margin: 0 !important;\\n}\\n\\n/*-------------------\\n         Link\\n--------------------*/\\n\\ni.link.icon:not(.disabled),\\ni.link.icons:not(.disabled) {\\n  cursor: pointer;\\n  opacity: 0.8;\\n  -webkit-transition: opacity 0.1s ease;\\n  transition: opacity 0.1s ease;\\n}\\n\\ni.link.icon:hover,\\ni.link.icons:hover {\\n  opacity: 1;\\n}\\n\\n/*-------------------\\n      Circular\\n--------------------*/\\n\\ni.circular.icon {\\n  border-radius: 500em !important;\\n  line-height: 1 !important;\\n  padding: 0.5em 0 !important;\\n  -webkit-box-shadow: 0 0 0 0.1em rgba(0, 0, 0, 0.1) inset;\\n          box-shadow: 0 0 0 0.1em rgba(0, 0, 0, 0.1) inset;\\n  width: 2em !important;\\n  height: 2em !important;\\n}\\n\\ni.circular.inverted.icon {\\n  border: none;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/*-------------------\\n      Flipped\\n--------------------*/\\n\\ni.flipped.icon,\\ni.horizontally.flipped.icon {\\n  -webkit-transform: scale(-1, 1);\\n  transform: scale(-1, 1);\\n}\\n\\ni.vertically.flipped.icon {\\n  -webkit-transform: scale(1, -1);\\n  transform: scale(1, -1);\\n}\\n\\n/*-------------------\\n      Rotated\\n--------------------*/\\n\\ni.rotated.icon,\\ni.right.rotated.icon,\\ni.clockwise.rotated.icon {\\n  -webkit-transform: rotate(90deg);\\n  transform: rotate(90deg);\\n}\\n\\ni.left.rotated.icon,\\ni.counterclockwise.rotated.icon {\\n  -webkit-transform: rotate(-90deg);\\n  transform: rotate(-90deg);\\n}\\n\\ni.halfway.rotated.icon {\\n  -webkit-transform: rotate(180deg);\\n  transform: rotate(180deg);\\n}\\n\\n/*--------------------------\\n      Flipped & Rotated\\n---------------------------*/\\n\\ni.rotated.flipped.icon,\\ni.right.rotated.flipped.icon,\\ni.clockwise.rotated.flipped.icon {\\n  -webkit-transform: scale(-1, 1) rotate(90deg);\\n  transform: scale(-1, 1) rotate(90deg);\\n}\\n\\ni.left.rotated.flipped.icon,\\ni.counterclockwise.rotated.flipped.icon {\\n  -webkit-transform: scale(-1, 1) rotate(-90deg);\\n  transform: scale(-1, 1) rotate(-90deg);\\n}\\n\\ni.halfway.rotated.flipped.icon {\\n  -webkit-transform: scale(-1, 1) rotate(180deg);\\n  transform: scale(-1, 1) rotate(180deg);\\n}\\n\\ni.rotated.vertically.flipped.icon,\\ni.right.rotated.vertically.flipped.icon,\\ni.clockwise.rotated.vertically.flipped.icon {\\n  -webkit-transform: scale(1, -1) rotate(90deg);\\n  transform: scale(1, -1) rotate(90deg);\\n}\\n\\ni.left.rotated.vertically.flipped.icon,\\ni.counterclockwise.rotated.vertically.flipped.icon {\\n  -webkit-transform: scale(1, -1) rotate(-90deg);\\n  transform: scale(1, -1) rotate(-90deg);\\n}\\n\\ni.halfway.rotated.vertically.flipped.icon {\\n  -webkit-transform: scale(1, -1) rotate(180deg);\\n  transform: scale(1, -1) rotate(180deg);\\n}\\n\\n/*-------------------\\n      Bordered\\n--------------------*/\\n\\ni.bordered.icon {\\n  line-height: 1;\\n  vertical-align: baseline;\\n  width: 2em;\\n  height: 2em;\\n  padding: 0.5em 0 !important;\\n  -webkit-box-shadow: 0 0 0 0.1em rgba(0, 0, 0, 0.1) inset;\\n          box-shadow: 0 0 0 0.1em rgba(0, 0, 0, 0.1) inset;\\n}\\n\\ni.bordered.inverted.icon {\\n  border: none;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/*-------------------\\n      Inverted\\n--------------------*/\\n\\n/* Inverted Shapes */\\n\\ni.inverted.bordered.icon,\\ni.inverted.circular.icon {\\n  background-color: #1B1C1D;\\n  color: #FFFFFF;\\n}\\n\\ni.inverted.icon {\\n  color: #FFFFFF;\\n}\\n\\n/*-------------------\\n       Colors\\n--------------------*/\\n\\ni.primary.icon.icon.icon.icon {\\n  color: #2185D0;\\n}\\n\\ni.inverted.primary.icon.icon.icon.icon {\\n  color: #54C8FF;\\n}\\n\\ni.inverted.bordered.primary.icon.icon.icon.icon,\\ni.inverted.circular.primary.icon.icon.icon.icon {\\n  background-color: #2185D0;\\n  color: #FFFFFF;\\n}\\n\\ni.secondary.icon.icon.icon.icon {\\n  color: #1B1C1D;\\n}\\n\\ni.inverted.secondary.icon.icon.icon.icon {\\n  color: #545454;\\n}\\n\\ni.inverted.bordered.secondary.icon.icon.icon.icon,\\ni.inverted.circular.secondary.icon.icon.icon.icon {\\n  background-color: #1B1C1D;\\n  color: #FFFFFF;\\n}\\n\\ni.red.icon.icon.icon.icon {\\n  color: #DB2828;\\n}\\n\\ni.inverted.red.icon.icon.icon.icon {\\n  color: #FF695E;\\n}\\n\\ni.inverted.bordered.red.icon.icon.icon.icon,\\ni.inverted.circular.red.icon.icon.icon.icon {\\n  background-color: #DB2828;\\n  color: #FFFFFF;\\n}\\n\\ni.orange.icon.icon.icon.icon {\\n  color: #F2711C;\\n}\\n\\ni.inverted.orange.icon.icon.icon.icon {\\n  color: #FF851B;\\n}\\n\\ni.inverted.bordered.orange.icon.icon.icon.icon,\\ni.inverted.circular.orange.icon.icon.icon.icon {\\n  background-color: #F2711C;\\n  color: #FFFFFF;\\n}\\n\\ni.yellow.icon.icon.icon.icon {\\n  color: #FBBD08;\\n}\\n\\ni.inverted.yellow.icon.icon.icon.icon {\\n  color: #FFE21F;\\n}\\n\\ni.inverted.bordered.yellow.icon.icon.icon.icon,\\ni.inverted.circular.yellow.icon.icon.icon.icon {\\n  background-color: #FBBD08;\\n  color: #FFFFFF;\\n}\\n\\ni.olive.icon.icon.icon.icon {\\n  color: #B5CC18;\\n}\\n\\ni.inverted.olive.icon.icon.icon.icon {\\n  color: #D9E778;\\n}\\n\\ni.inverted.bordered.olive.icon.icon.icon.icon,\\ni.inverted.circular.olive.icon.icon.icon.icon {\\n  background-color: #B5CC18;\\n  color: #FFFFFF;\\n}\\n\\ni.green.icon.icon.icon.icon {\\n  color: #21BA45;\\n}\\n\\ni.inverted.green.icon.icon.icon.icon {\\n  color: #2ECC40;\\n}\\n\\ni.inverted.bordered.green.icon.icon.icon.icon,\\ni.inverted.circular.green.icon.icon.icon.icon {\\n  background-color: #21BA45;\\n  color: #FFFFFF;\\n}\\n\\ni.teal.icon.icon.icon.icon {\\n  color: #00B5AD;\\n}\\n\\ni.inverted.teal.icon.icon.icon.icon {\\n  color: #6DFFFF;\\n}\\n\\ni.inverted.bordered.teal.icon.icon.icon.icon,\\ni.inverted.circular.teal.icon.icon.icon.icon {\\n  background-color: #00B5AD;\\n  color: #FFFFFF;\\n}\\n\\ni.blue.icon.icon.icon.icon {\\n  color: #2185D0;\\n}\\n\\ni.inverted.blue.icon.icon.icon.icon {\\n  color: #54C8FF;\\n}\\n\\ni.inverted.bordered.blue.icon.icon.icon.icon,\\ni.inverted.circular.blue.icon.icon.icon.icon {\\n  background-color: #2185D0;\\n  color: #FFFFFF;\\n}\\n\\ni.violet.icon.icon.icon.icon {\\n  color: #6435C9;\\n}\\n\\ni.inverted.violet.icon.icon.icon.icon {\\n  color: #A291FB;\\n}\\n\\ni.inverted.bordered.violet.icon.icon.icon.icon,\\ni.inverted.circular.violet.icon.icon.icon.icon {\\n  background-color: #6435C9;\\n  color: #FFFFFF;\\n}\\n\\ni.purple.icon.icon.icon.icon {\\n  color: #A333C8;\\n}\\n\\ni.inverted.purple.icon.icon.icon.icon {\\n  color: #DC73FF;\\n}\\n\\ni.inverted.bordered.purple.icon.icon.icon.icon,\\ni.inverted.circular.purple.icon.icon.icon.icon {\\n  background-color: #A333C8;\\n  color: #FFFFFF;\\n}\\n\\ni.pink.icon.icon.icon.icon {\\n  color: #E03997;\\n}\\n\\ni.inverted.pink.icon.icon.icon.icon {\\n  color: #FF8EDF;\\n}\\n\\ni.inverted.bordered.pink.icon.icon.icon.icon,\\ni.inverted.circular.pink.icon.icon.icon.icon {\\n  background-color: #E03997;\\n  color: #FFFFFF;\\n}\\n\\ni.brown.icon.icon.icon.icon {\\n  color: #A5673F;\\n}\\n\\ni.inverted.brown.icon.icon.icon.icon {\\n  color: #D67C1C;\\n}\\n\\ni.inverted.bordered.brown.icon.icon.icon.icon,\\ni.inverted.circular.brown.icon.icon.icon.icon {\\n  background-color: #A5673F;\\n  color: #FFFFFF;\\n}\\n\\ni.grey.icon.icon.icon.icon {\\n  color: #767676;\\n}\\n\\ni.inverted.grey.icon.icon.icon.icon {\\n  color: #DCDDDE;\\n}\\n\\ni.inverted.bordered.grey.icon.icon.icon.icon,\\ni.inverted.circular.grey.icon.icon.icon.icon {\\n  background-color: #767676;\\n  color: #FFFFFF;\\n}\\n\\ni.black.icon.icon.icon.icon {\\n  color: #1B1C1D;\\n}\\n\\ni.inverted.black.icon.icon.icon.icon {\\n  color: #545454;\\n}\\n\\ni.inverted.bordered.black.icon.icon.icon.icon,\\ni.inverted.circular.black.icon.icon.icon.icon {\\n  background-color: #1B1C1D;\\n  color: #FFFFFF;\\n}\\n\\n/*-------------------\\n        Sizes\\n--------------------*/\\n\\ni.mini.mini.mini.icon,\\ni.mini.mini.mini.icons {\\n  line-height: 1;\\n  font-size: 0.4em;\\n}\\n\\ni.tiny.tiny.tiny.icon,\\ni.tiny.tiny.tiny.icons {\\n  line-height: 1;\\n  font-size: 0.5em;\\n}\\n\\ni.small.small.small.icon,\\ni.small.small.small.icons {\\n  line-height: 1;\\n  font-size: 0.75em;\\n}\\n\\ni.icon,\\ni.icons {\\n  font-size: 1em;\\n}\\n\\ni.large.large.large.icon,\\ni.large.large.large.icons {\\n  line-height: 1;\\n  vertical-align: middle;\\n  font-size: 1.5em;\\n}\\n\\ni.big.big.big.icon,\\ni.big.big.big.icons {\\n  line-height: 1;\\n  vertical-align: middle;\\n  font-size: 2em;\\n}\\n\\ni.huge.huge.huge.icon,\\ni.huge.huge.huge.icons {\\n  line-height: 1;\\n  vertical-align: middle;\\n  font-size: 4em;\\n}\\n\\ni.massive.massive.massive.icon,\\ni.massive.massive.massive.icons {\\n  line-height: 1;\\n  vertical-align: middle;\\n  font-size: 8em;\\n}\\n\\n/*******************************\\n            Groups\\n*******************************/\\n\\ni.icons {\\n  display: inline-block;\\n  position: relative;\\n  line-height: 1;\\n}\\n\\ni.icons .icon {\\n  position: absolute;\\n  top: 50%;\\n  left: 50%;\\n  -webkit-transform: translateX(-50%) translateY(-50%);\\n  transform: translateX(-50%) translateY(-50%);\\n  margin: 0;\\n}\\n\\ni.icons .icon:first-child {\\n  position: static;\\n  width: auto;\\n  height: auto;\\n  vertical-align: top;\\n  -webkit-transform: none;\\n  transform: none;\\n}\\n\\n/* Corner Icon */\\n\\ni.icons .corner.icon {\\n  top: auto;\\n  left: auto;\\n  right: 0;\\n  bottom: 0;\\n  -webkit-transform: none;\\n  transform: none;\\n  font-size: 0.45em;\\n  text-shadow: -1px -1px 0 #FFFFFF, 1px -1px 0 #FFFFFF, -1px 1px 0 #FFFFFF, 1px 1px 0 #FFFFFF;\\n}\\n\\ni.icons .icon.corner[class*=\\\"top right\\\"] {\\n  top: 0;\\n  left: auto;\\n  right: 0;\\n  bottom: auto;\\n}\\n\\ni.icons .icon.corner[class*=\\\"top left\\\"] {\\n  top: 0;\\n  left: 0;\\n  right: auto;\\n  bottom: auto;\\n}\\n\\ni.icons .icon.corner[class*=\\\"bottom left\\\"] {\\n  top: auto;\\n  left: 0;\\n  right: auto;\\n  bottom: 0;\\n}\\n\\ni.icons .icon.corner[class*=\\\"bottom right\\\"] {\\n  top: auto;\\n  left: auto;\\n  right: 0;\\n  bottom: 0;\\n}\\n\\ni.icons .inverted.corner.icon {\\n  text-shadow: -1px -1px 0 #1B1C1D, 1px -1px 0 #1B1C1D, -1px 1px 0 #1B1C1D, 1px 1px 0 #1B1C1D;\\n}\\n\\n/*\\n* Font Awesome 5.8.2 by @fontawesome [https://fontawesome.com]\\n* License - https://fontawesome.com/license (Icons: CC BY 4.0 License, Fonts: SIL OFL 1.1 License, CSS: MIT License)\\n*/\\n\\n/*******************************\\n\\nFomantic-UI integration of FontAwesome :\\n\\n// class names are separated\\ni.icon.angle-left  =>  i.icon.angle.left\\n\\n// variations are extracted\\ni.icon.circle      =>  i.icon.circle\\ni.icon.circle-o    =>  i.icon.circle.outline\\n\\n// abbreviation are replaced by full words\\ni.icon.*-h         =>  i.icon.*.horizontal\\ni.icon.*-v         =>  i.icon.*.vertical\\ni.icon.alpha       =>  i.icon.alphabet\\ni.icon.asc         =>  i.icon.ascending\\ni.icon.desc        =>  i.icon.descending\\ni.icon.alt         =>  i.icon.alternate\\n\\n\\nIcons are order A-Z in their group, Solid, Outline, Thin (Pro only) and Brand\\n\\n*******************************/\\n\\n/*******************************\\n             Icons\\n*******************************/\\n\\n/* Deprecated *In/Out Naming Conflict) */\\n\\ni.icon.linkedin.in:before {\\n  content: \\\"\\\\f0e1\\\";\\n}\\n\\ni.icon.zoom.in:before {\\n  content: \\\"\\\\f00e\\\";\\n}\\n\\ni.icon.zoom.out:before {\\n  content: \\\"\\\\f010\\\";\\n}\\n\\ni.icon.sign.in:before {\\n  content: \\\"\\\\f2f6\\\";\\n}\\n\\ni.icon.in.cart:before {\\n  content: \\\"\\\\f218\\\";\\n}\\n\\ni.icon.log.out:before {\\n  content: \\\"\\\\f2f5\\\";\\n}\\n\\ni.icon.sign.out:before {\\n  content: \\\"\\\\f2f5\\\";\\n}\\n\\n/*******************************\\n          Solid Icons\\n*******************************/\\n\\n/* Icons */\\n\\ni.icon.ad:before {\\n  content: \\\"\\\\f641\\\";\\n}\\n\\ni.icon.address.book:before {\\n  content: \\\"\\\\f2b9\\\";\\n}\\n\\ni.icon.address.card:before {\\n  content: \\\"\\\\f2bb\\\";\\n}\\n\\ni.icon.adjust:before {\\n  content: \\\"\\\\f042\\\";\\n}\\n\\ni.icon.air.freshener:before {\\n  content: \\\"\\\\f5d0\\\";\\n}\\n\\ni.icon.align.center:before {\\n  content: \\\"\\\\f037\\\";\\n}\\n\\ni.icon.align.justify:before {\\n  content: \\\"\\\\f039\\\";\\n}\\n\\ni.icon.align.left:before {\\n  content: \\\"\\\\f036\\\";\\n}\\n\\ni.icon.align.right:before {\\n  content: \\\"\\\\f038\\\";\\n}\\n\\ni.icon.allergies:before {\\n  content: \\\"\\\\f461\\\";\\n}\\n\\ni.icon.ambulance:before {\\n  content: \\\"\\\\f0f9\\\";\\n}\\n\\ni.icon.american.sign.language.interpreting:before {\\n  content: \\\"\\\\f2a3\\\";\\n}\\n\\ni.icon.anchor:before {\\n  content: \\\"\\\\f13d\\\";\\n}\\n\\ni.icon.angle.double.down:before {\\n  content: \\\"\\\\f103\\\";\\n}\\n\\ni.icon.angle.double.left:before {\\n  content: \\\"\\\\f100\\\";\\n}\\n\\ni.icon.angle.double.right:before {\\n  content: \\\"\\\\f101\\\";\\n}\\n\\ni.icon.angle.double.up:before {\\n  content: \\\"\\\\f102\\\";\\n}\\n\\ni.icon.angle.down:before {\\n  content: \\\"\\\\f107\\\";\\n}\\n\\ni.icon.angle.left:before {\\n  content: \\\"\\\\f104\\\";\\n}\\n\\ni.icon.angle.right:before {\\n  content: \\\"\\\\f105\\\";\\n}\\n\\ni.icon.angle.up:before {\\n  content: \\\"\\\\f106\\\";\\n}\\n\\ni.icon.angry:before {\\n  content: \\\"\\\\f556\\\";\\n}\\n\\ni.icon.ankh:before {\\n  content: \\\"\\\\f644\\\";\\n}\\n\\ni.icon.archive:before {\\n  content: \\\"\\\\f187\\\";\\n}\\n\\ni.icon.archway:before {\\n  content: \\\"\\\\f557\\\";\\n}\\n\\ni.icon.arrow.alternate.circle.down:before {\\n  content: \\\"\\\\f358\\\";\\n}\\n\\ni.icon.arrow.alternate.circle.left:before {\\n  content: \\\"\\\\f359\\\";\\n}\\n\\ni.icon.arrow.alternate.circle.right:before {\\n  content: \\\"\\\\f35a\\\";\\n}\\n\\ni.icon.arrow.alternate.circle.up:before {\\n  content: \\\"\\\\f35b\\\";\\n}\\n\\ni.icon.arrow.circle.down:before {\\n  content: \\\"\\\\f0ab\\\";\\n}\\n\\ni.icon.arrow.circle.left:before {\\n  content: \\\"\\\\f0a8\\\";\\n}\\n\\ni.icon.arrow.circle.right:before {\\n  content: \\\"\\\\f0a9\\\";\\n}\\n\\ni.icon.arrow.circle.up:before {\\n  content: \\\"\\\\f0aa\\\";\\n}\\n\\ni.icon.arrow.down:before {\\n  content: \\\"\\\\f063\\\";\\n}\\n\\ni.icon.arrow.left:before {\\n  content: \\\"\\\\f060\\\";\\n}\\n\\ni.icon.arrow.right:before {\\n  content: \\\"\\\\f061\\\";\\n}\\n\\ni.icon.arrow.up:before {\\n  content: \\\"\\\\f062\\\";\\n}\\n\\ni.icon.arrows.alternate:before {\\n  content: \\\"\\\\f0b2\\\";\\n}\\n\\ni.icon.arrows.alternate.horizontal:before {\\n  content: \\\"\\\\f337\\\";\\n}\\n\\ni.icon.arrows.alternate.vertical:before {\\n  content: \\\"\\\\f338\\\";\\n}\\n\\ni.icon.assistive.listening.systems:before {\\n  content: \\\"\\\\f2a2\\\";\\n}\\n\\ni.icon.asterisk:before {\\n  content: \\\"\\\\f069\\\";\\n}\\n\\ni.icon.at:before {\\n  content: \\\"\\\\f1fa\\\";\\n}\\n\\ni.icon.atlas:before {\\n  content: \\\"\\\\f558\\\";\\n}\\n\\ni.icon.atom:before {\\n  content: \\\"\\\\f5d2\\\";\\n}\\n\\ni.icon.audio.description:before {\\n  content: \\\"\\\\f29e\\\";\\n}\\n\\ni.icon.award:before {\\n  content: \\\"\\\\f559\\\";\\n}\\n\\ni.icon.baby:before {\\n  content: \\\"\\\\f77c\\\";\\n}\\n\\ni.icon.baby.carriage:before {\\n  content: \\\"\\\\f77d\\\";\\n}\\n\\ni.icon.backspace:before {\\n  content: \\\"\\\\f55a\\\";\\n}\\n\\ni.icon.backward:before {\\n  content: \\\"\\\\f04a\\\";\\n}\\n\\ni.icon.bacon:before {\\n  content: \\\"\\\\f7e5\\\";\\n}\\n\\ni.icon.balance.scale:before {\\n  content: \\\"\\\\f24e\\\";\\n}\\n\\ni.icon.ban:before {\\n  content: \\\"\\\\f05e\\\";\\n}\\n\\ni.icon.band.aid:before {\\n  content: \\\"\\\\f462\\\";\\n}\\n\\ni.icon.barcode:before {\\n  content: \\\"\\\\f02a\\\";\\n}\\n\\ni.icon.bars:before {\\n  content: \\\"\\\\f0c9\\\";\\n}\\n\\ni.icon.baseball.ball:before {\\n  content: \\\"\\\\f433\\\";\\n}\\n\\ni.icon.basketball.ball:before {\\n  content: \\\"\\\\f434\\\";\\n}\\n\\ni.icon.bath:before {\\n  content: \\\"\\\\f2cd\\\";\\n}\\n\\ni.icon.battery.empty:before {\\n  content: \\\"\\\\f244\\\";\\n}\\n\\ni.icon.battery.full:before {\\n  content: \\\"\\\\f240\\\";\\n}\\n\\ni.icon.battery.half:before {\\n  content: \\\"\\\\f242\\\";\\n}\\n\\ni.icon.battery.quarter:before {\\n  content: \\\"\\\\f243\\\";\\n}\\n\\ni.icon.battery.three.quarters:before {\\n  content: \\\"\\\\f241\\\";\\n}\\n\\ni.icon.bed:before {\\n  content: \\\"\\\\f236\\\";\\n}\\n\\ni.icon.beer:before {\\n  content: \\\"\\\\f0fc\\\";\\n}\\n\\ni.icon.bell:before {\\n  content: \\\"\\\\f0f3\\\";\\n}\\n\\ni.icon.bell.slash:before {\\n  content: \\\"\\\\f1f6\\\";\\n}\\n\\ni.icon.bezier.curve:before {\\n  content: \\\"\\\\f55b\\\";\\n}\\n\\ni.icon.bible:before {\\n  content: \\\"\\\\f647\\\";\\n}\\n\\ni.icon.bicycle:before {\\n  content: \\\"\\\\f206\\\";\\n}\\n\\ni.icon.binoculars:before {\\n  content: \\\"\\\\f1e5\\\";\\n}\\n\\ni.icon.biohazard:before {\\n  content: \\\"\\\\f780\\\";\\n}\\n\\ni.icon.birthday.cake:before {\\n  content: \\\"\\\\f1fd\\\";\\n}\\n\\ni.icon.blender:before {\\n  content: \\\"\\\\f517\\\";\\n}\\n\\ni.icon.blender.phone:before {\\n  content: \\\"\\\\f6b6\\\";\\n}\\n\\ni.icon.blind:before {\\n  content: \\\"\\\\f29d\\\";\\n}\\n\\ni.icon.blog:before {\\n  content: \\\"\\\\f781\\\";\\n}\\n\\ni.icon.bold:before {\\n  content: \\\"\\\\f032\\\";\\n}\\n\\ni.icon.bolt:before {\\n  content: \\\"\\\\f0e7\\\";\\n}\\n\\ni.icon.bomb:before {\\n  content: \\\"\\\\f1e2\\\";\\n}\\n\\ni.icon.bone:before {\\n  content: \\\"\\\\f5d7\\\";\\n}\\n\\ni.icon.bong:before {\\n  content: \\\"\\\\f55c\\\";\\n}\\n\\ni.icon.book:before {\\n  content: \\\"\\\\f02d\\\";\\n}\\n\\ni.icon.book.dead:before {\\n  content: \\\"\\\\f6b7\\\";\\n}\\n\\ni.icon.book.medical:before {\\n  content: \\\"\\\\f7e6\\\";\\n}\\n\\ni.icon.book.open:before {\\n  content: \\\"\\\\f518\\\";\\n}\\n\\ni.icon.book.reader:before {\\n  content: \\\"\\\\f5da\\\";\\n}\\n\\ni.icon.bookmark:before {\\n  content: \\\"\\\\f02e\\\";\\n}\\n\\ni.icon.bowling.ball:before {\\n  content: \\\"\\\\f436\\\";\\n}\\n\\ni.icon.box:before {\\n  content: \\\"\\\\f466\\\";\\n}\\n\\ni.icon.box.open:before {\\n  content: \\\"\\\\f49e\\\";\\n}\\n\\ni.icon.boxes:before {\\n  content: \\\"\\\\f468\\\";\\n}\\n\\ni.icon.braille:before {\\n  content: \\\"\\\\f2a1\\\";\\n}\\n\\ni.icon.brain:before {\\n  content: \\\"\\\\f5dc\\\";\\n}\\n\\ni.icon.bread.slice:before {\\n  content: \\\"\\\\f7ec\\\";\\n}\\n\\ni.icon.briefcase:before {\\n  content: \\\"\\\\f0b1\\\";\\n}\\n\\ni.icon.briefcase.medical:before {\\n  content: \\\"\\\\f469\\\";\\n}\\n\\ni.icon.broadcast.tower:before {\\n  content: \\\"\\\\f519\\\";\\n}\\n\\ni.icon.broom:before {\\n  content: \\\"\\\\f51a\\\";\\n}\\n\\ni.icon.brush:before {\\n  content: \\\"\\\\f55d\\\";\\n}\\n\\ni.icon.bug:before {\\n  content: \\\"\\\\f188\\\";\\n}\\n\\ni.icon.building:before {\\n  content: \\\"\\\\f1ad\\\";\\n}\\n\\ni.icon.bullhorn:before {\\n  content: \\\"\\\\f0a1\\\";\\n}\\n\\ni.icon.bullseye:before {\\n  content: \\\"\\\\f140\\\";\\n}\\n\\ni.icon.burn:before {\\n  content: \\\"\\\\f46a\\\";\\n}\\n\\ni.icon.bus:before {\\n  content: \\\"\\\\f207\\\";\\n}\\n\\ni.icon.bus.alternate:before {\\n  content: \\\"\\\\f55e\\\";\\n}\\n\\ni.icon.business.time:before {\\n  content: \\\"\\\\f64a\\\";\\n}\\n\\ni.icon.calculator:before {\\n  content: \\\"\\\\f1ec\\\";\\n}\\n\\ni.icon.calendar:before {\\n  content: \\\"\\\\f133\\\";\\n}\\n\\ni.icon.calendar.alternate:before {\\n  content: \\\"\\\\f073\\\";\\n}\\n\\ni.icon.calendar.check:before {\\n  content: \\\"\\\\f274\\\";\\n}\\n\\ni.icon.calendar.day:before {\\n  content: \\\"\\\\f783\\\";\\n}\\n\\ni.icon.calendar.minus:before {\\n  content: \\\"\\\\f272\\\";\\n}\\n\\ni.icon.calendar.plus:before {\\n  content: \\\"\\\\f271\\\";\\n}\\n\\ni.icon.calendar.times:before {\\n  content: \\\"\\\\f273\\\";\\n}\\n\\ni.icon.calendar.week:before {\\n  content: \\\"\\\\f784\\\";\\n}\\n\\ni.icon.camera:before {\\n  content: \\\"\\\\f030\\\";\\n}\\n\\ni.icon.camera.retro:before {\\n  content: \\\"\\\\f083\\\";\\n}\\n\\ni.icon.campground:before {\\n  content: \\\"\\\\f6bb\\\";\\n}\\n\\ni.icon.candy.cane:before {\\n  content: \\\"\\\\f786\\\";\\n}\\n\\ni.icon.cannabis:before {\\n  content: \\\"\\\\f55f\\\";\\n}\\n\\ni.icon.capsules:before {\\n  content: \\\"\\\\f46b\\\";\\n}\\n\\ni.icon.car:before {\\n  content: \\\"\\\\f1b9\\\";\\n}\\n\\ni.icon.car.alternate:before {\\n  content: \\\"\\\\f5de\\\";\\n}\\n\\ni.icon.car.battery:before {\\n  content: \\\"\\\\f5df\\\";\\n}\\n\\ni.icon.car.crash:before {\\n  content: \\\"\\\\f5e1\\\";\\n}\\n\\ni.icon.car.side:before {\\n  content: \\\"\\\\f5e4\\\";\\n}\\n\\ni.icon.caret.down:before {\\n  content: \\\"\\\\f0d7\\\";\\n}\\n\\ni.icon.caret.left:before {\\n  content: \\\"\\\\f0d9\\\";\\n}\\n\\ni.icon.caret.right:before {\\n  content: \\\"\\\\f0da\\\";\\n}\\n\\ni.icon.caret.square.down:before {\\n  content: \\\"\\\\f150\\\";\\n}\\n\\ni.icon.caret.square.left:before {\\n  content: \\\"\\\\f191\\\";\\n}\\n\\ni.icon.caret.square.right:before {\\n  content: \\\"\\\\f152\\\";\\n}\\n\\ni.icon.caret.square.up:before {\\n  content: \\\"\\\\f151\\\";\\n}\\n\\ni.icon.caret.up:before {\\n  content: \\\"\\\\f0d8\\\";\\n}\\n\\ni.icon.carrot:before {\\n  content: \\\"\\\\f787\\\";\\n}\\n\\ni.icon.cart.arrow.down:before {\\n  content: \\\"\\\\f218\\\";\\n}\\n\\ni.icon.cart.plus:before {\\n  content: \\\"\\\\f217\\\";\\n}\\n\\ni.icon.cash.register:before {\\n  content: \\\"\\\\f788\\\";\\n}\\n\\ni.icon.cat:before {\\n  content: \\\"\\\\f6be\\\";\\n}\\n\\ni.icon.certificate:before {\\n  content: \\\"\\\\f0a3\\\";\\n}\\n\\ni.icon.chair:before {\\n  content: \\\"\\\\f6c0\\\";\\n}\\n\\ni.icon.chalkboard:before {\\n  content: \\\"\\\\f51b\\\";\\n}\\n\\ni.icon.chalkboard.teacher:before {\\n  content: \\\"\\\\f51c\\\";\\n}\\n\\ni.icon.charging.station:before {\\n  content: \\\"\\\\f5e7\\\";\\n}\\n\\ni.icon.chart.area:before {\\n  content: \\\"\\\\f1fe\\\";\\n}\\n\\ni.icon.chart.bar:before {\\n  content: \\\"\\\\f080\\\";\\n}\\n\\ni.icon.chart.line:before {\\n  content: \\\"\\\\f201\\\";\\n}\\n\\ni.icon.chart.pie:before {\\n  content: \\\"\\\\f200\\\";\\n}\\n\\ni.icon.check:before {\\n  content: \\\"\\\\f00c\\\";\\n}\\n\\ni.icon.check.circle:before {\\n  content: \\\"\\\\f058\\\";\\n}\\n\\ni.icon.check.double:before {\\n  content: \\\"\\\\f560\\\";\\n}\\n\\ni.icon.check.square:before {\\n  content: \\\"\\\\f14a\\\";\\n}\\n\\ni.icon.cheese:before {\\n  content: \\\"\\\\f7ef\\\";\\n}\\n\\ni.icon.chess:before {\\n  content: \\\"\\\\f439\\\";\\n}\\n\\ni.icon.chess.bishop:before {\\n  content: \\\"\\\\f43a\\\";\\n}\\n\\ni.icon.chess.board:before {\\n  content: \\\"\\\\f43c\\\";\\n}\\n\\ni.icon.chess.king:before {\\n  content: \\\"\\\\f43f\\\";\\n}\\n\\ni.icon.chess.knight:before {\\n  content: \\\"\\\\f441\\\";\\n}\\n\\ni.icon.chess.pawn:before {\\n  content: \\\"\\\\f443\\\";\\n}\\n\\ni.icon.chess.queen:before {\\n  content: \\\"\\\\f445\\\";\\n}\\n\\ni.icon.chess.rook:before {\\n  content: \\\"\\\\f447\\\";\\n}\\n\\ni.icon.chevron.circle.down:before {\\n  content: \\\"\\\\f13a\\\";\\n}\\n\\ni.icon.chevron.circle.left:before {\\n  content: \\\"\\\\f137\\\";\\n}\\n\\ni.icon.chevron.circle.right:before {\\n  content: \\\"\\\\f138\\\";\\n}\\n\\ni.icon.chevron.circle.up:before {\\n  content: \\\"\\\\f139\\\";\\n}\\n\\ni.icon.chevron.down:before {\\n  content: \\\"\\\\f078\\\";\\n}\\n\\ni.icon.chevron.left:before {\\n  content: \\\"\\\\f053\\\";\\n}\\n\\ni.icon.chevron.right:before {\\n  content: \\\"\\\\f054\\\";\\n}\\n\\ni.icon.chevron.up:before {\\n  content: \\\"\\\\f077\\\";\\n}\\n\\ni.icon.child:before {\\n  content: \\\"\\\\f1ae\\\";\\n}\\n\\ni.icon.church:before {\\n  content: \\\"\\\\f51d\\\";\\n}\\n\\ni.icon.circle:before {\\n  content: \\\"\\\\f111\\\";\\n}\\n\\ni.icon.circle.notch:before {\\n  content: \\\"\\\\f1ce\\\";\\n}\\n\\ni.icon.city:before {\\n  content: \\\"\\\\f64f\\\";\\n}\\n\\ni.icon.clinic.medical:before {\\n  content: \\\"\\\\f7f2\\\";\\n}\\n\\ni.icon.clipboard:before {\\n  content: \\\"\\\\f328\\\";\\n}\\n\\ni.icon.clipboard.check:before {\\n  content: \\\"\\\\f46c\\\";\\n}\\n\\ni.icon.clipboard.list:before {\\n  content: \\\"\\\\f46d\\\";\\n}\\n\\ni.icon.clock:before {\\n  content: \\\"\\\\f017\\\";\\n}\\n\\ni.icon.clone:before {\\n  content: \\\"\\\\f24d\\\";\\n}\\n\\ni.icon.closed.captioning:before {\\n  content: \\\"\\\\f20a\\\";\\n}\\n\\ni.icon.cloud:before {\\n  content: \\\"\\\\f0c2\\\";\\n}\\n\\ni.icon.cloud.download.alternate:before {\\n  content: \\\"\\\\f381\\\";\\n}\\n\\ni.icon.cloud.meatball:before {\\n  content: \\\"\\\\f73b\\\";\\n}\\n\\ni.icon.cloud.moon:before {\\n  content: \\\"\\\\f6c3\\\";\\n}\\n\\ni.icon.cloud.moon.rain:before {\\n  content: \\\"\\\\f73c\\\";\\n}\\n\\ni.icon.cloud.rain:before {\\n  content: \\\"\\\\f73d\\\";\\n}\\n\\ni.icon.cloud.showers.heavy:before {\\n  content: \\\"\\\\f740\\\";\\n}\\n\\ni.icon.cloud.sun:before {\\n  content: \\\"\\\\f6c4\\\";\\n}\\n\\ni.icon.cloud.sun.rain:before {\\n  content: \\\"\\\\f743\\\";\\n}\\n\\ni.icon.cloud.upload.alternate:before {\\n  content: \\\"\\\\f382\\\";\\n}\\n\\ni.icon.cocktail:before {\\n  content: \\\"\\\\f561\\\";\\n}\\n\\ni.icon.code:before {\\n  content: \\\"\\\\f121\\\";\\n}\\n\\ni.icon.code.branch:before {\\n  content: \\\"\\\\f126\\\";\\n}\\n\\ni.icon.coffee:before {\\n  content: \\\"\\\\f0f4\\\";\\n}\\n\\ni.icon.cog:before {\\n  content: \\\"\\\\f013\\\";\\n}\\n\\ni.icon.cogs:before {\\n  content: \\\"\\\\f085\\\";\\n}\\n\\ni.icon.coins:before {\\n  content: \\\"\\\\f51e\\\";\\n}\\n\\ni.icon.columns:before {\\n  content: \\\"\\\\f0db\\\";\\n}\\n\\ni.icon.comment:before {\\n  content: \\\"\\\\f075\\\";\\n}\\n\\ni.icon.comment.alternate:before {\\n  content: \\\"\\\\f27a\\\";\\n}\\n\\ni.icon.comment.dollar:before {\\n  content: \\\"\\\\f651\\\";\\n}\\n\\ni.icon.comment.dots:before {\\n  content: \\\"\\\\f4ad\\\";\\n}\\n\\ni.icon.comment.medical:before {\\n  content: \\\"\\\\f7f5\\\";\\n}\\n\\ni.icon.comment.slash:before {\\n  content: \\\"\\\\f4b3\\\";\\n}\\n\\ni.icon.comments:before {\\n  content: \\\"\\\\f086\\\";\\n}\\n\\ni.icon.comments.dollar:before {\\n  content: \\\"\\\\f653\\\";\\n}\\n\\ni.icon.compact.disc:before {\\n  content: \\\"\\\\f51f\\\";\\n}\\n\\ni.icon.compass:before {\\n  content: \\\"\\\\f14e\\\";\\n}\\n\\ni.icon.compress:before {\\n  content: \\\"\\\\f066\\\";\\n}\\n\\ni.icon.compress.arrows.alternate:before {\\n  content: \\\"\\\\f78c\\\";\\n}\\n\\ni.icon.concierge.bell:before {\\n  content: \\\"\\\\f562\\\";\\n}\\n\\ni.icon.cookie:before {\\n  content: \\\"\\\\f563\\\";\\n}\\n\\ni.icon.cookie.bite:before {\\n  content: \\\"\\\\f564\\\";\\n}\\n\\ni.icon.copy:before {\\n  content: \\\"\\\\f0c5\\\";\\n}\\n\\ni.icon.copyright:before {\\n  content: \\\"\\\\f1f9\\\";\\n}\\n\\ni.icon.couch:before {\\n  content: \\\"\\\\f4b8\\\";\\n}\\n\\ni.icon.credit.card:before {\\n  content: \\\"\\\\f09d\\\";\\n}\\n\\ni.icon.crop:before {\\n  content: \\\"\\\\f125\\\";\\n}\\n\\ni.icon.crop.alternate:before {\\n  content: \\\"\\\\f565\\\";\\n}\\n\\ni.icon.cross:before {\\n  content: \\\"\\\\f654\\\";\\n}\\n\\ni.icon.crosshairs:before {\\n  content: \\\"\\\\f05b\\\";\\n}\\n\\ni.icon.crow:before {\\n  content: \\\"\\\\f520\\\";\\n}\\n\\ni.icon.crown:before {\\n  content: \\\"\\\\f521\\\";\\n}\\n\\ni.icon.crutch:before {\\n  content: \\\"\\\\f7f7\\\";\\n}\\n\\ni.icon.cube:before {\\n  content: \\\"\\\\f1b2\\\";\\n}\\n\\ni.icon.cubes:before {\\n  content: \\\"\\\\f1b3\\\";\\n}\\n\\ni.icon.cut:before {\\n  content: \\\"\\\\f0c4\\\";\\n}\\n\\ni.icon.database:before {\\n  content: \\\"\\\\f1c0\\\";\\n}\\n\\ni.icon.deaf:before {\\n  content: \\\"\\\\f2a4\\\";\\n}\\n\\ni.icon.democrat:before {\\n  content: \\\"\\\\f747\\\";\\n}\\n\\ni.icon.desktop:before {\\n  content: \\\"\\\\f108\\\";\\n}\\n\\ni.icon.dharmachakra:before {\\n  content: \\\"\\\\f655\\\";\\n}\\n\\ni.icon.diagnoses:before {\\n  content: \\\"\\\\f470\\\";\\n}\\n\\ni.icon.dice:before {\\n  content: \\\"\\\\f522\\\";\\n}\\n\\ni.icon.dice.d20:before {\\n  content: \\\"\\\\f6cf\\\";\\n}\\n\\ni.icon.dice.d6:before {\\n  content: \\\"\\\\f6d1\\\";\\n}\\n\\ni.icon.dice.five:before {\\n  content: \\\"\\\\f523\\\";\\n}\\n\\ni.icon.dice.four:before {\\n  content: \\\"\\\\f524\\\";\\n}\\n\\ni.icon.dice.one:before {\\n  content: \\\"\\\\f525\\\";\\n}\\n\\ni.icon.dice.six:before {\\n  content: \\\"\\\\f526\\\";\\n}\\n\\ni.icon.dice.three:before {\\n  content: \\\"\\\\f527\\\";\\n}\\n\\ni.icon.dice.two:before {\\n  content: \\\"\\\\f528\\\";\\n}\\n\\ni.icon.digital.tachograph:before {\\n  content: \\\"\\\\f566\\\";\\n}\\n\\ni.icon.directions:before {\\n  content: \\\"\\\\f5eb\\\";\\n}\\n\\ni.icon.divide:before {\\n  content: \\\"\\\\f529\\\";\\n}\\n\\ni.icon.dizzy:before {\\n  content: \\\"\\\\f567\\\";\\n}\\n\\ni.icon.dna:before {\\n  content: \\\"\\\\f471\\\";\\n}\\n\\ni.icon.dog:before {\\n  content: \\\"\\\\f6d3\\\";\\n}\\n\\ni.icon.dollar.sign:before {\\n  content: \\\"\\\\f155\\\";\\n}\\n\\ni.icon.dolly:before {\\n  content: \\\"\\\\f472\\\";\\n}\\n\\ni.icon.dolly.flatbed:before {\\n  content: \\\"\\\\f474\\\";\\n}\\n\\ni.icon.donate:before {\\n  content: \\\"\\\\f4b9\\\";\\n}\\n\\ni.icon.door.closed:before {\\n  content: \\\"\\\\f52a\\\";\\n}\\n\\ni.icon.door.open:before {\\n  content: \\\"\\\\f52b\\\";\\n}\\n\\ni.icon.dot.circle:before {\\n  content: \\\"\\\\f192\\\";\\n}\\n\\ni.icon.dove:before {\\n  content: \\\"\\\\f4ba\\\";\\n}\\n\\ni.icon.download:before {\\n  content: \\\"\\\\f019\\\";\\n}\\n\\ni.icon.drafting.compass:before {\\n  content: \\\"\\\\f568\\\";\\n}\\n\\ni.icon.dragon:before {\\n  content: \\\"\\\\f6d5\\\";\\n}\\n\\ni.icon.draw.polygon:before {\\n  content: \\\"\\\\f5ee\\\";\\n}\\n\\ni.icon.drum:before {\\n  content: \\\"\\\\f569\\\";\\n}\\n\\ni.icon.drum.steelpan:before {\\n  content: \\\"\\\\f56a\\\";\\n}\\n\\ni.icon.drumstick.bite:before {\\n  content: \\\"\\\\f6d7\\\";\\n}\\n\\ni.icon.dumbbell:before {\\n  content: \\\"\\\\f44b\\\";\\n}\\n\\ni.icon.dumpster:before {\\n  content: \\\"\\\\f793\\\";\\n}\\n\\ni.icon.dumpster.fire:before {\\n  content: \\\"\\\\f794\\\";\\n}\\n\\ni.icon.dungeon:before {\\n  content: \\\"\\\\f6d9\\\";\\n}\\n\\ni.icon.edit:before {\\n  content: \\\"\\\\f044\\\";\\n}\\n\\ni.icon.egg:before {\\n  content: \\\"\\\\f7fb\\\";\\n}\\n\\ni.icon.eject:before {\\n  content: \\\"\\\\f052\\\";\\n}\\n\\ni.icon.ellipsis.horizontal:before {\\n  content: \\\"\\\\f141\\\";\\n}\\n\\ni.icon.ellipsis.vertical:before {\\n  content: \\\"\\\\f142\\\";\\n}\\n\\ni.icon.envelope:before {\\n  content: \\\"\\\\f0e0\\\";\\n}\\n\\ni.icon.envelope.open:before {\\n  content: \\\"\\\\f2b6\\\";\\n}\\n\\ni.icon.envelope.open.text:before {\\n  content: \\\"\\\\f658\\\";\\n}\\n\\ni.icon.envelope.square:before {\\n  content: \\\"\\\\f199\\\";\\n}\\n\\ni.icon.equals:before {\\n  content: \\\"\\\\f52c\\\";\\n}\\n\\ni.icon.eraser:before {\\n  content: \\\"\\\\f12d\\\";\\n}\\n\\ni.icon.ethernet:before {\\n  content: \\\"\\\\f796\\\";\\n}\\n\\ni.icon.euro.sign:before {\\n  content: \\\"\\\\f153\\\";\\n}\\n\\ni.icon.exchange.alternate:before {\\n  content: \\\"\\\\f362\\\";\\n}\\n\\ni.icon.exclamation:before {\\n  content: \\\"\\\\f12a\\\";\\n}\\n\\ni.icon.exclamation.circle:before {\\n  content: \\\"\\\\f06a\\\";\\n}\\n\\ni.icon.exclamation.triangle:before {\\n  content: \\\"\\\\f071\\\";\\n}\\n\\ni.icon.expand:before {\\n  content: \\\"\\\\f065\\\";\\n}\\n\\ni.icon.expand.arrows.alternate:before {\\n  content: \\\"\\\\f31e\\\";\\n}\\n\\ni.icon.external.alternate:before {\\n  content: \\\"\\\\f35d\\\";\\n}\\n\\ni.icon.external.link.square.alternate:before {\\n  content: \\\"\\\\f360\\\";\\n}\\n\\ni.icon.eye:before {\\n  content: \\\"\\\\f06e\\\";\\n}\\n\\ni.icon.eye.dropper:before {\\n  content: \\\"\\\\f1fb\\\";\\n}\\n\\ni.icon.eye.slash:before {\\n  content: \\\"\\\\f070\\\";\\n}\\n\\ni.icon.fast.backward:before {\\n  content: \\\"\\\\f049\\\";\\n}\\n\\ni.icon.fast.forward:before {\\n  content: \\\"\\\\f050\\\";\\n}\\n\\ni.icon.fax:before {\\n  content: \\\"\\\\f1ac\\\";\\n}\\n\\ni.icon.feather:before {\\n  content: \\\"\\\\f52d\\\";\\n}\\n\\ni.icon.feather.alternate:before {\\n  content: \\\"\\\\f56b\\\";\\n}\\n\\ni.icon.female:before {\\n  content: \\\"\\\\f182\\\";\\n}\\n\\ni.icon.fighter.jet:before {\\n  content: \\\"\\\\f0fb\\\";\\n}\\n\\ni.icon.file:before {\\n  content: \\\"\\\\f15b\\\";\\n}\\n\\ni.icon.file.alternate:before {\\n  content: \\\"\\\\f15c\\\";\\n}\\n\\ni.icon.file.archive:before {\\n  content: \\\"\\\\f1c6\\\";\\n}\\n\\ni.icon.file.audio:before {\\n  content: \\\"\\\\f1c7\\\";\\n}\\n\\ni.icon.file.code:before {\\n  content: \\\"\\\\f1c9\\\";\\n}\\n\\ni.icon.file.contract:before {\\n  content: \\\"\\\\f56c\\\";\\n}\\n\\ni.icon.file.csv:before {\\n  content: \\\"\\\\f6dd\\\";\\n}\\n\\ni.icon.file.download:before {\\n  content: \\\"\\\\f56d\\\";\\n}\\n\\ni.icon.file.excel:before {\\n  content: \\\"\\\\f1c3\\\";\\n}\\n\\ni.icon.file.export:before {\\n  content: \\\"\\\\f56e\\\";\\n}\\n\\ni.icon.file.image:before {\\n  content: \\\"\\\\f1c5\\\";\\n}\\n\\ni.icon.file.import:before {\\n  content: \\\"\\\\f56f\\\";\\n}\\n\\ni.icon.file.invoice:before {\\n  content: \\\"\\\\f570\\\";\\n}\\n\\ni.icon.file.invoice.dollar:before {\\n  content: \\\"\\\\f571\\\";\\n}\\n\\ni.icon.file.medical:before {\\n  content: \\\"\\\\f477\\\";\\n}\\n\\ni.icon.file.medical.alternate:before {\\n  content: \\\"\\\\f478\\\";\\n}\\n\\ni.icon.file.pdf:before {\\n  content: \\\"\\\\f1c1\\\";\\n}\\n\\ni.icon.file.powerpoint:before {\\n  content: \\\"\\\\f1c4\\\";\\n}\\n\\ni.icon.file.prescription:before {\\n  content: \\\"\\\\f572\\\";\\n}\\n\\ni.icon.file.signature:before {\\n  content: \\\"\\\\f573\\\";\\n}\\n\\ni.icon.file.upload:before {\\n  content: \\\"\\\\f574\\\";\\n}\\n\\ni.icon.file.video:before {\\n  content: \\\"\\\\f1c8\\\";\\n}\\n\\ni.icon.file.word:before {\\n  content: \\\"\\\\f1c2\\\";\\n}\\n\\ni.icon.fill:before {\\n  content: \\\"\\\\f575\\\";\\n}\\n\\ni.icon.fill.drip:before {\\n  content: \\\"\\\\f576\\\";\\n}\\n\\ni.icon.film:before {\\n  content: \\\"\\\\f008\\\";\\n}\\n\\ni.icon.filter:before {\\n  content: \\\"\\\\f0b0\\\";\\n}\\n\\ni.icon.fingerprint:before {\\n  content: \\\"\\\\f577\\\";\\n}\\n\\ni.icon.fire:before {\\n  content: \\\"\\\\f06d\\\";\\n}\\n\\ni.icon.fire.alternate:before {\\n  content: \\\"\\\\f7e4\\\";\\n}\\n\\ni.icon.fire.extinguisher:before {\\n  content: \\\"\\\\f134\\\";\\n}\\n\\ni.icon.first.aid:before {\\n  content: \\\"\\\\f479\\\";\\n}\\n\\ni.icon.fish:before {\\n  content: \\\"\\\\f578\\\";\\n}\\n\\ni.icon.fist.raised:before {\\n  content: \\\"\\\\f6de\\\";\\n}\\n\\ni.icon.flag:before {\\n  content: \\\"\\\\f024\\\";\\n}\\n\\ni.icon.flag.checkered:before {\\n  content: \\\"\\\\f11e\\\";\\n}\\n\\ni.icon.flag.usa:before {\\n  content: \\\"\\\\f74d\\\";\\n}\\n\\ni.icon.flask:before {\\n  content: \\\"\\\\f0c3\\\";\\n}\\n\\ni.icon.flushed:before {\\n  content: \\\"\\\\f579\\\";\\n}\\n\\ni.icon.folder:before {\\n  content: \\\"\\\\f07b\\\";\\n}\\n\\ni.icon.folder.minus:before {\\n  content: \\\"\\\\f65d\\\";\\n}\\n\\ni.icon.folder.open:before {\\n  content: \\\"\\\\f07c\\\";\\n}\\n\\ni.icon.folder.plus:before {\\n  content: \\\"\\\\f65e\\\";\\n}\\n\\ni.icon.font:before {\\n  content: \\\"\\\\f031\\\";\\n}\\n\\ni.icon.football.ball:before {\\n  content: \\\"\\\\f44e\\\";\\n}\\n\\ni.icon.forward:before {\\n  content: \\\"\\\\f04e\\\";\\n}\\n\\ni.icon.frog:before {\\n  content: \\\"\\\\f52e\\\";\\n}\\n\\ni.icon.frown:before {\\n  content: \\\"\\\\f119\\\";\\n}\\n\\ni.icon.frown.open:before {\\n  content: \\\"\\\\f57a\\\";\\n}\\n\\ni.icon.fruit-apple:before {\\n  content: \\\"\\\\f5d1\\\";\\n}\\n\\ni.icon.funnel.dollar:before {\\n  content: \\\"\\\\f662\\\";\\n}\\n\\ni.icon.futbol:before {\\n  content: \\\"\\\\f1e3\\\";\\n}\\n\\ni.icon.gamepad:before {\\n  content: \\\"\\\\f11b\\\";\\n}\\n\\ni.icon.gas.pump:before {\\n  content: \\\"\\\\f52f\\\";\\n}\\n\\ni.icon.gavel:before {\\n  content: \\\"\\\\f0e3\\\";\\n}\\n\\ni.icon.gem:before {\\n  content: \\\"\\\\f3a5\\\";\\n}\\n\\ni.icon.genderless:before {\\n  content: \\\"\\\\f22d\\\";\\n}\\n\\ni.icon.ghost:before {\\n  content: \\\"\\\\f6e2\\\";\\n}\\n\\ni.icon.gift:before {\\n  content: \\\"\\\\f06b\\\";\\n}\\n\\ni.icon.gifts:before {\\n  content: \\\"\\\\f79c\\\";\\n}\\n\\ni.icon.glass.cheers:before {\\n  content: \\\"\\\\f79f\\\";\\n}\\n\\ni.icon.glass.martini:before {\\n  content: \\\"\\\\f000\\\";\\n}\\n\\ni.icon.glass.martini.alternate:before {\\n  content: \\\"\\\\f57b\\\";\\n}\\n\\ni.icon.glass.whiskey:before {\\n  content: \\\"\\\\f7a0\\\";\\n}\\n\\ni.icon.glasses:before {\\n  content: \\\"\\\\f530\\\";\\n}\\n\\ni.icon.globe:before {\\n  content: \\\"\\\\f0ac\\\";\\n}\\n\\ni.icon.globe.africa:before {\\n  content: \\\"\\\\f57c\\\";\\n}\\n\\ni.icon.globe.americas:before {\\n  content: \\\"\\\\f57d\\\";\\n}\\n\\ni.icon.globe.asia:before {\\n  content: \\\"\\\\f57e\\\";\\n}\\n\\ni.icon.globe.europe:before {\\n  content: \\\"\\\\f7a2\\\";\\n}\\n\\ni.icon.golf.ball:before {\\n  content: \\\"\\\\f450\\\";\\n}\\n\\ni.icon.gopuram:before {\\n  content: \\\"\\\\f664\\\";\\n}\\n\\ni.icon.graduation.cap:before {\\n  content: \\\"\\\\f19d\\\";\\n}\\n\\ni.icon.greater.than:before {\\n  content: \\\"\\\\f531\\\";\\n}\\n\\ni.icon.greater.than.equal:before {\\n  content: \\\"\\\\f532\\\";\\n}\\n\\ni.icon.grimace:before {\\n  content: \\\"\\\\f57f\\\";\\n}\\n\\ni.icon.grin:before {\\n  content: \\\"\\\\f580\\\";\\n}\\n\\ni.icon.grin.alternate:before {\\n  content: \\\"\\\\f581\\\";\\n}\\n\\ni.icon.grin.beam:before {\\n  content: \\\"\\\\f582\\\";\\n}\\n\\ni.icon.grin.beam.sweat:before {\\n  content: \\\"\\\\f583\\\";\\n}\\n\\ni.icon.grin.hearts:before {\\n  content: \\\"\\\\f584\\\";\\n}\\n\\ni.icon.grin.squint:before {\\n  content: \\\"\\\\f585\\\";\\n}\\n\\ni.icon.grin.squint.tears:before {\\n  content: \\\"\\\\f586\\\";\\n}\\n\\ni.icon.grin.stars:before {\\n  content: \\\"\\\\f587\\\";\\n}\\n\\ni.icon.grin.tears:before {\\n  content: \\\"\\\\f588\\\";\\n}\\n\\ni.icon.grin.tongue:before {\\n  content: \\\"\\\\f589\\\";\\n}\\n\\ni.icon.grin.tongue.squint:before {\\n  content: \\\"\\\\f58a\\\";\\n}\\n\\ni.icon.grin.tongue.wink:before {\\n  content: \\\"\\\\f58b\\\";\\n}\\n\\ni.icon.grin.wink:before {\\n  content: \\\"\\\\f58c\\\";\\n}\\n\\ni.icon.grip.horizontal:before {\\n  content: \\\"\\\\f58d\\\";\\n}\\n\\ni.icon.grip.lines:before {\\n  content: \\\"\\\\f7a4\\\";\\n}\\n\\ni.icon.grip.lines.vertical:before {\\n  content: \\\"\\\\f7a5\\\";\\n}\\n\\ni.icon.grip.vertical:before {\\n  content: \\\"\\\\f58e\\\";\\n}\\n\\ni.icon.guitar:before {\\n  content: \\\"\\\\f7a6\\\";\\n}\\n\\ni.icon.h.square:before {\\n  content: \\\"\\\\f0fd\\\";\\n}\\n\\ni.icon.hamburger:before {\\n  content: \\\"\\\\f805\\\";\\n}\\n\\ni.icon.hammer:before {\\n  content: \\\"\\\\f6e3\\\";\\n}\\n\\ni.icon.hamsa:before {\\n  content: \\\"\\\\f665\\\";\\n}\\n\\ni.icon.hand.holding:before {\\n  content: \\\"\\\\f4bd\\\";\\n}\\n\\ni.icon.hand.holding.heart:before {\\n  content: \\\"\\\\f4be\\\";\\n}\\n\\ni.icon.hand.holding.usd:before {\\n  content: \\\"\\\\f4c0\\\";\\n}\\n\\ni.icon.hand.lizard:before {\\n  content: \\\"\\\\f258\\\";\\n}\\n\\ni.icon.hand.middle.finger:before {\\n  content: \\\"\\\\f806\\\";\\n}\\n\\ni.icon.hand.paper:before {\\n  content: \\\"\\\\f256\\\";\\n}\\n\\ni.icon.hand.peace:before {\\n  content: \\\"\\\\f25b\\\";\\n}\\n\\ni.icon.hand.point.down:before {\\n  content: \\\"\\\\f0a7\\\";\\n}\\n\\ni.icon.hand.point.left:before {\\n  content: \\\"\\\\f0a5\\\";\\n}\\n\\ni.icon.hand.point.right:before {\\n  content: \\\"\\\\f0a4\\\";\\n}\\n\\ni.icon.hand.point.up:before {\\n  content: \\\"\\\\f0a6\\\";\\n}\\n\\ni.icon.hand.pointer:before {\\n  content: \\\"\\\\f25a\\\";\\n}\\n\\ni.icon.hand.rock:before {\\n  content: \\\"\\\\f255\\\";\\n}\\n\\ni.icon.hand.scissors:before {\\n  content: \\\"\\\\f257\\\";\\n}\\n\\ni.icon.hand.spock:before {\\n  content: \\\"\\\\f259\\\";\\n}\\n\\ni.icon.hands:before {\\n  content: \\\"\\\\f4c2\\\";\\n}\\n\\ni.icon.hands.helping:before {\\n  content: \\\"\\\\f4c4\\\";\\n}\\n\\ni.icon.handshake:before {\\n  content: \\\"\\\\f2b5\\\";\\n}\\n\\ni.icon.hanukiah:before {\\n  content: \\\"\\\\f6e6\\\";\\n}\\n\\ni.icon.hard.hat:before {\\n  content: \\\"\\\\f807\\\";\\n}\\n\\ni.icon.hashtag:before {\\n  content: \\\"\\\\f292\\\";\\n}\\n\\ni.icon.hat.wizard:before {\\n  content: \\\"\\\\f6e8\\\";\\n}\\n\\ni.icon.haykal:before {\\n  content: \\\"\\\\f666\\\";\\n}\\n\\ni.icon.hdd:before {\\n  content: \\\"\\\\f0a0\\\";\\n}\\n\\ni.icon.heading:before {\\n  content: \\\"\\\\f1dc\\\";\\n}\\n\\ni.icon.headphones:before {\\n  content: \\\"\\\\f025\\\";\\n}\\n\\ni.icon.headphones.alternate:before {\\n  content: \\\"\\\\f58f\\\";\\n}\\n\\ni.icon.headset:before {\\n  content: \\\"\\\\f590\\\";\\n}\\n\\ni.icon.heart:before {\\n  content: \\\"\\\\f004\\\";\\n}\\n\\ni.icon.heart.broken:before {\\n  content: \\\"\\\\f7a9\\\";\\n}\\n\\ni.icon.heartbeat:before {\\n  content: \\\"\\\\f21e\\\";\\n}\\n\\ni.icon.helicopter:before {\\n  content: \\\"\\\\f533\\\";\\n}\\n\\ni.icon.highlighter:before {\\n  content: \\\"\\\\f591\\\";\\n}\\n\\ni.icon.hiking:before {\\n  content: \\\"\\\\f6ec\\\";\\n}\\n\\ni.icon.hippo:before {\\n  content: \\\"\\\\f6ed\\\";\\n}\\n\\ni.icon.history:before {\\n  content: \\\"\\\\f1da\\\";\\n}\\n\\ni.icon.hockey.puck:before {\\n  content: \\\"\\\\f453\\\";\\n}\\n\\ni.icon.holly.berry:before {\\n  content: \\\"\\\\f7aa\\\";\\n}\\n\\ni.icon.home:before {\\n  content: \\\"\\\\f015\\\";\\n}\\n\\ni.icon.horse:before {\\n  content: \\\"\\\\f6f0\\\";\\n}\\n\\ni.icon.horse.head:before {\\n  content: \\\"\\\\f7ab\\\";\\n}\\n\\ni.icon.hospital:before {\\n  content: \\\"\\\\f0f8\\\";\\n}\\n\\ni.icon.hospital.alternate:before {\\n  content: \\\"\\\\f47d\\\";\\n}\\n\\ni.icon.hospital.symbol:before {\\n  content: \\\"\\\\f47e\\\";\\n}\\n\\ni.icon.hot.tub:before {\\n  content: \\\"\\\\f593\\\";\\n}\\n\\ni.icon.hotdog:before {\\n  content: \\\"\\\\f80f\\\";\\n}\\n\\ni.icon.hotel:before {\\n  content: \\\"\\\\f594\\\";\\n}\\n\\ni.icon.hourglass:before {\\n  content: \\\"\\\\f254\\\";\\n}\\n\\ni.icon.hourglass.end:before {\\n  content: \\\"\\\\f253\\\";\\n}\\n\\ni.icon.hourglass.half:before {\\n  content: \\\"\\\\f252\\\";\\n}\\n\\ni.icon.hourglass.start:before {\\n  content: \\\"\\\\f251\\\";\\n}\\n\\ni.icon.house.damage:before {\\n  content: \\\"\\\\f6f1\\\";\\n}\\n\\ni.icon.hryvnia:before {\\n  content: \\\"\\\\f6f2\\\";\\n}\\n\\ni.icon.i.cursor:before {\\n  content: \\\"\\\\f246\\\";\\n}\\n\\ni.icon.ice.cream:before {\\n  content: \\\"\\\\f810\\\";\\n}\\n\\ni.icon.icicles:before {\\n  content: \\\"\\\\f7ad\\\";\\n}\\n\\ni.icon.id.badge:before {\\n  content: \\\"\\\\f2c1\\\";\\n}\\n\\ni.icon.id.card:before {\\n  content: \\\"\\\\f2c2\\\";\\n}\\n\\ni.icon.id.card.alternate:before {\\n  content: \\\"\\\\f47f\\\";\\n}\\n\\ni.icon.igloo:before {\\n  content: \\\"\\\\f7ae\\\";\\n}\\n\\ni.icon.image:before {\\n  content: \\\"\\\\f03e\\\";\\n}\\n\\ni.icon.images:before {\\n  content: \\\"\\\\f302\\\";\\n}\\n\\ni.icon.inbox:before {\\n  content: \\\"\\\\f01c\\\";\\n}\\n\\ni.icon.indent:before {\\n  content: \\\"\\\\f03c\\\";\\n}\\n\\ni.icon.industry:before {\\n  content: \\\"\\\\f275\\\";\\n}\\n\\ni.icon.infinity:before {\\n  content: \\\"\\\\f534\\\";\\n}\\n\\ni.icon.info:before {\\n  content: \\\"\\\\f129\\\";\\n}\\n\\ni.icon.info.circle:before {\\n  content: \\\"\\\\f05a\\\";\\n}\\n\\ni.icon.italic:before {\\n  content: \\\"\\\\f033\\\";\\n}\\n\\ni.icon.jedi:before {\\n  content: \\\"\\\\f669\\\";\\n}\\n\\ni.icon.joint:before {\\n  content: \\\"\\\\f595\\\";\\n}\\n\\ni.icon.journal.whills:before {\\n  content: \\\"\\\\f66a\\\";\\n}\\n\\ni.icon.kaaba:before {\\n  content: \\\"\\\\f66b\\\";\\n}\\n\\ni.icon.key:before {\\n  content: \\\"\\\\f084\\\";\\n}\\n\\ni.icon.keyboard:before {\\n  content: \\\"\\\\f11c\\\";\\n}\\n\\ni.icon.khanda:before {\\n  content: \\\"\\\\f66d\\\";\\n}\\n\\ni.icon.kiss:before {\\n  content: \\\"\\\\f596\\\";\\n}\\n\\ni.icon.kiss.beam:before {\\n  content: \\\"\\\\f597\\\";\\n}\\n\\ni.icon.kiss.wink.heart:before {\\n  content: \\\"\\\\f598\\\";\\n}\\n\\ni.icon.kiwi.bird:before {\\n  content: \\\"\\\\f535\\\";\\n}\\n\\ni.icon.landmark:before {\\n  content: \\\"\\\\f66f\\\";\\n}\\n\\ni.icon.language:before {\\n  content: \\\"\\\\f1ab\\\";\\n}\\n\\ni.icon.laptop:before {\\n  content: \\\"\\\\f109\\\";\\n}\\n\\ni.icon.laptop.code:before {\\n  content: \\\"\\\\f5fc\\\";\\n}\\n\\ni.icon.laptop.medical:before {\\n  content: \\\"\\\\f812\\\";\\n}\\n\\ni.icon.laugh:before {\\n  content: \\\"\\\\f599\\\";\\n}\\n\\ni.icon.laugh.beam:before {\\n  content: \\\"\\\\f59a\\\";\\n}\\n\\ni.icon.laugh.squint:before {\\n  content: \\\"\\\\f59b\\\";\\n}\\n\\ni.icon.laugh.wink:before {\\n  content: \\\"\\\\f59c\\\";\\n}\\n\\ni.icon.layer.group:before {\\n  content: \\\"\\\\f5fd\\\";\\n}\\n\\ni.icon.leaf:before {\\n  content: \\\"\\\\f06c\\\";\\n}\\n\\ni.icon.lemon:before {\\n  content: \\\"\\\\f094\\\";\\n}\\n\\ni.icon.less.than:before {\\n  content: \\\"\\\\f536\\\";\\n}\\n\\ni.icon.less.than.equal:before {\\n  content: \\\"\\\\f537\\\";\\n}\\n\\ni.icon.level.down.alternate:before {\\n  content: \\\"\\\\f3be\\\";\\n}\\n\\ni.icon.level.up.alternate:before {\\n  content: \\\"\\\\f3bf\\\";\\n}\\n\\ni.icon.life.ring:before {\\n  content: \\\"\\\\f1cd\\\";\\n}\\n\\ni.icon.lightbulb:before {\\n  content: \\\"\\\\f0eb\\\";\\n}\\n\\ni.icon.linkify:before {\\n  content: \\\"\\\\f0c1\\\";\\n}\\n\\ni.icon.lira.sign:before {\\n  content: \\\"\\\\f195\\\";\\n}\\n\\ni.icon.list:before {\\n  content: \\\"\\\\f03a\\\";\\n}\\n\\ni.icon.list.alternate:before {\\n  content: \\\"\\\\f022\\\";\\n}\\n\\ni.icon.list.ol:before {\\n  content: \\\"\\\\f0cb\\\";\\n}\\n\\ni.icon.list.ul:before {\\n  content: \\\"\\\\f0ca\\\";\\n}\\n\\ni.icon.location.arrow:before {\\n  content: \\\"\\\\f124\\\";\\n}\\n\\ni.icon.lock:before {\\n  content: \\\"\\\\f023\\\";\\n}\\n\\ni.icon.lock.open:before {\\n  content: \\\"\\\\f3c1\\\";\\n}\\n\\ni.icon.long.arrow.alternate.down:before {\\n  content: \\\"\\\\f309\\\";\\n}\\n\\ni.icon.long.arrow.alternate.left:before {\\n  content: \\\"\\\\f30a\\\";\\n}\\n\\ni.icon.long.arrow.alternate.right:before {\\n  content: \\\"\\\\f30b\\\";\\n}\\n\\ni.icon.long.arrow.alternate.up:before {\\n  content: \\\"\\\\f30c\\\";\\n}\\n\\ni.icon.low.vision:before {\\n  content: \\\"\\\\f2a8\\\";\\n}\\n\\ni.icon.luggage.cart:before {\\n  content: \\\"\\\\f59d\\\";\\n}\\n\\ni.icon.magic:before {\\n  content: \\\"\\\\f0d0\\\";\\n}\\n\\ni.icon.magnet:before {\\n  content: \\\"\\\\f076\\\";\\n}\\n\\ni.icon.mail.bulk:before {\\n  content: \\\"\\\\f674\\\";\\n}\\n\\ni.icon.male:before {\\n  content: \\\"\\\\f183\\\";\\n}\\n\\ni.icon.map:before {\\n  content: \\\"\\\\f279\\\";\\n}\\n\\ni.icon.map.marked:before {\\n  content: \\\"\\\\f59f\\\";\\n}\\n\\ni.icon.map.marked.alternate:before {\\n  content: \\\"\\\\f5a0\\\";\\n}\\n\\ni.icon.map.marker:before {\\n  content: \\\"\\\\f041\\\";\\n}\\n\\ni.icon.map.marker.alternate:before {\\n  content: \\\"\\\\f3c5\\\";\\n}\\n\\ni.icon.map.pin:before {\\n  content: \\\"\\\\f276\\\";\\n}\\n\\ni.icon.map.signs:before {\\n  content: \\\"\\\\f277\\\";\\n}\\n\\ni.icon.marker:before {\\n  content: \\\"\\\\f5a1\\\";\\n}\\n\\ni.icon.mars:before {\\n  content: \\\"\\\\f222\\\";\\n}\\n\\ni.icon.mars.double:before {\\n  content: \\\"\\\\f227\\\";\\n}\\n\\ni.icon.mars.stroke:before {\\n  content: \\\"\\\\f229\\\";\\n}\\n\\ni.icon.mars.stroke.horizontal:before {\\n  content: \\\"\\\\f22b\\\";\\n}\\n\\ni.icon.mars.stroke.vertical:before {\\n  content: \\\"\\\\f22a\\\";\\n}\\n\\ni.icon.mask:before {\\n  content: \\\"\\\\f6fa\\\";\\n}\\n\\ni.icon.medal:before {\\n  content: \\\"\\\\f5a2\\\";\\n}\\n\\ni.icon.medkit:before {\\n  content: \\\"\\\\f0fa\\\";\\n}\\n\\ni.icon.meh:before {\\n  content: \\\"\\\\f11a\\\";\\n}\\n\\ni.icon.meh.blank:before {\\n  content: \\\"\\\\f5a4\\\";\\n}\\n\\ni.icon.meh.rolling.eyes:before {\\n  content: \\\"\\\\f5a5\\\";\\n}\\n\\ni.icon.memory:before {\\n  content: \\\"\\\\f538\\\";\\n}\\n\\ni.icon.menorah:before {\\n  content: \\\"\\\\f676\\\";\\n}\\n\\ni.icon.mercury:before {\\n  content: \\\"\\\\f223\\\";\\n}\\n\\ni.icon.meteor:before {\\n  content: \\\"\\\\f753\\\";\\n}\\n\\ni.icon.microchip:before {\\n  content: \\\"\\\\f2db\\\";\\n}\\n\\ni.icon.microphone:before {\\n  content: \\\"\\\\f130\\\";\\n}\\n\\ni.icon.microphone.alternate:before {\\n  content: \\\"\\\\f3c9\\\";\\n}\\n\\ni.icon.microphone.alternate.slash:before {\\n  content: \\\"\\\\f539\\\";\\n}\\n\\ni.icon.microphone.slash:before {\\n  content: \\\"\\\\f131\\\";\\n}\\n\\ni.icon.microscope:before {\\n  content: \\\"\\\\f610\\\";\\n}\\n\\ni.icon.minus:before {\\n  content: \\\"\\\\f068\\\";\\n}\\n\\ni.icon.minus.circle:before {\\n  content: \\\"\\\\f056\\\";\\n}\\n\\ni.icon.minus.square:before {\\n  content: \\\"\\\\f146\\\";\\n}\\n\\ni.icon.mitten:before {\\n  content: \\\"\\\\f7b5\\\";\\n}\\n\\ni.icon.mobile:before {\\n  content: \\\"\\\\f10b\\\";\\n}\\n\\ni.icon.mobile.alternate:before {\\n  content: \\\"\\\\f3cd\\\";\\n}\\n\\ni.icon.money.bill:before {\\n  content: \\\"\\\\f0d6\\\";\\n}\\n\\ni.icon.money.bill.alternate:before {\\n  content: \\\"\\\\f3d1\\\";\\n}\\n\\ni.icon.money.bill.wave:before {\\n  content: \\\"\\\\f53a\\\";\\n}\\n\\ni.icon.money.bill.wave.alternate:before {\\n  content: \\\"\\\\f53b\\\";\\n}\\n\\ni.icon.money.check:before {\\n  content: \\\"\\\\f53c\\\";\\n}\\n\\ni.icon.money.check.alternate:before {\\n  content: \\\"\\\\f53d\\\";\\n}\\n\\ni.icon.monument:before {\\n  content: \\\"\\\\f5a6\\\";\\n}\\n\\ni.icon.moon:before {\\n  content: \\\"\\\\f186\\\";\\n}\\n\\ni.icon.mortar.pestle:before {\\n  content: \\\"\\\\f5a7\\\";\\n}\\n\\ni.icon.mosque:before {\\n  content: \\\"\\\\f678\\\";\\n}\\n\\ni.icon.motorcycle:before {\\n  content: \\\"\\\\f21c\\\";\\n}\\n\\ni.icon.mountain:before {\\n  content: \\\"\\\\f6fc\\\";\\n}\\n\\ni.icon.mouse.pointer:before {\\n  content: \\\"\\\\f245\\\";\\n}\\n\\ni.icon.mug.hot:before {\\n  content: \\\"\\\\f7b6\\\";\\n}\\n\\ni.icon.music:before {\\n  content: \\\"\\\\f001\\\";\\n}\\n\\ni.icon.network.wired:before {\\n  content: \\\"\\\\f6ff\\\";\\n}\\n\\ni.icon.neuter:before {\\n  content: \\\"\\\\f22c\\\";\\n}\\n\\ni.icon.newspaper:before {\\n  content: \\\"\\\\f1ea\\\";\\n}\\n\\ni.icon.not.equal:before {\\n  content: \\\"\\\\f53e\\\";\\n}\\n\\ni.icon.notes.medical:before {\\n  content: \\\"\\\\f481\\\";\\n}\\n\\ni.icon.object.group:before {\\n  content: \\\"\\\\f247\\\";\\n}\\n\\ni.icon.object.ungroup:before {\\n  content: \\\"\\\\f248\\\";\\n}\\n\\ni.icon.oil.can:before {\\n  content: \\\"\\\\f613\\\";\\n}\\n\\ni.icon.om:before {\\n  content: \\\"\\\\f679\\\";\\n}\\n\\ni.icon.otter:before {\\n  content: \\\"\\\\f700\\\";\\n}\\n\\ni.icon.outdent:before {\\n  content: \\\"\\\\f03b\\\";\\n}\\n\\ni.icon.pager:before {\\n  content: \\\"\\\\f815\\\";\\n}\\n\\ni.icon.paint.brush:before {\\n  content: \\\"\\\\f1fc\\\";\\n}\\n\\ni.icon.paint.roller:before {\\n  content: \\\"\\\\f5aa\\\";\\n}\\n\\ni.icon.palette:before {\\n  content: \\\"\\\\f53f\\\";\\n}\\n\\ni.icon.pallet:before {\\n  content: \\\"\\\\f482\\\";\\n}\\n\\ni.icon.paper.plane:before {\\n  content: \\\"\\\\f1d8\\\";\\n}\\n\\ni.icon.paperclip:before {\\n  content: \\\"\\\\f0c6\\\";\\n}\\n\\ni.icon.parachute.box:before {\\n  content: \\\"\\\\f4cd\\\";\\n}\\n\\ni.icon.paragraph:before {\\n  content: \\\"\\\\f1dd\\\";\\n}\\n\\ni.icon.parking:before {\\n  content: \\\"\\\\f540\\\";\\n}\\n\\ni.icon.passport:before {\\n  content: \\\"\\\\f5ab\\\";\\n}\\n\\ni.icon.pastafarianism:before {\\n  content: \\\"\\\\f67b\\\";\\n}\\n\\ni.icon.paste:before {\\n  content: \\\"\\\\f0ea\\\";\\n}\\n\\ni.icon.pause:before {\\n  content: \\\"\\\\f04c\\\";\\n}\\n\\ni.icon.pause.circle:before {\\n  content: \\\"\\\\f28b\\\";\\n}\\n\\ni.icon.paw:before {\\n  content: \\\"\\\\f1b0\\\";\\n}\\n\\ni.icon.peace:before {\\n  content: \\\"\\\\f67c\\\";\\n}\\n\\ni.icon.pen:before {\\n  content: \\\"\\\\f304\\\";\\n}\\n\\ni.icon.pen.alternate:before {\\n  content: \\\"\\\\f305\\\";\\n}\\n\\ni.icon.pen.fancy:before {\\n  content: \\\"\\\\f5ac\\\";\\n}\\n\\ni.icon.pen.nib:before {\\n  content: \\\"\\\\f5ad\\\";\\n}\\n\\ni.icon.pen.square:before {\\n  content: \\\"\\\\f14b\\\";\\n}\\n\\ni.icon.pencil.alternate:before {\\n  content: \\\"\\\\f303\\\";\\n}\\n\\ni.icon.pencil.ruler:before {\\n  content: \\\"\\\\f5ae\\\";\\n}\\n\\ni.icon.people.carry:before {\\n  content: \\\"\\\\f4ce\\\";\\n}\\n\\ni.icon.pepper.hot:before {\\n  content: \\\"\\\\f816\\\";\\n}\\n\\ni.icon.percent:before {\\n  content: \\\"\\\\f295\\\";\\n}\\n\\ni.icon.percentage:before {\\n  content: \\\"\\\\f541\\\";\\n}\\n\\ni.icon.person.booth:before {\\n  content: \\\"\\\\f756\\\";\\n}\\n\\ni.icon.phone:before {\\n  content: \\\"\\\\f095\\\";\\n}\\n\\ni.icon.phone.slash:before {\\n  content: \\\"\\\\f3dd\\\";\\n}\\n\\ni.icon.phone.square:before {\\n  content: \\\"\\\\f098\\\";\\n}\\n\\ni.icon.phone.volume:before {\\n  content: \\\"\\\\f2a0\\\";\\n}\\n\\ni.icon.piggy.bank:before {\\n  content: \\\"\\\\f4d3\\\";\\n}\\n\\ni.icon.pills:before {\\n  content: \\\"\\\\f484\\\";\\n}\\n\\ni.icon.pizza.slice:before {\\n  content: \\\"\\\\f818\\\";\\n}\\n\\ni.icon.place.of.worship:before {\\n  content: \\\"\\\\f67f\\\";\\n}\\n\\ni.icon.plane:before {\\n  content: \\\"\\\\f072\\\";\\n}\\n\\ni.icon.plane.arrival:before {\\n  content: \\\"\\\\f5af\\\";\\n}\\n\\ni.icon.plane.departure:before {\\n  content: \\\"\\\\f5b0\\\";\\n}\\n\\ni.icon.play:before {\\n  content: \\\"\\\\f04b\\\";\\n}\\n\\ni.icon.play.circle:before {\\n  content: \\\"\\\\f144\\\";\\n}\\n\\ni.icon.plug:before {\\n  content: \\\"\\\\f1e6\\\";\\n}\\n\\ni.icon.plus:before {\\n  content: \\\"\\\\f067\\\";\\n}\\n\\ni.icon.plus.circle:before {\\n  content: \\\"\\\\f055\\\";\\n}\\n\\ni.icon.plus.square:before {\\n  content: \\\"\\\\f0fe\\\";\\n}\\n\\ni.icon.podcast:before {\\n  content: \\\"\\\\f2ce\\\";\\n}\\n\\ni.icon.poll:before {\\n  content: \\\"\\\\f681\\\";\\n}\\n\\ni.icon.poll.horizontal:before {\\n  content: \\\"\\\\f682\\\";\\n}\\n\\ni.icon.poo:before {\\n  content: \\\"\\\\f2fe\\\";\\n}\\n\\ni.icon.poo.storm:before {\\n  content: \\\"\\\\f75a\\\";\\n}\\n\\ni.icon.poop:before {\\n  content: \\\"\\\\f619\\\";\\n}\\n\\ni.icon.portrait:before {\\n  content: \\\"\\\\f3e0\\\";\\n}\\n\\ni.icon.pound.sign:before {\\n  content: \\\"\\\\f154\\\";\\n}\\n\\ni.icon.power.off:before {\\n  content: \\\"\\\\f011\\\";\\n}\\n\\ni.icon.pray:before {\\n  content: \\\"\\\\f683\\\";\\n}\\n\\ni.icon.praying.hands:before {\\n  content: \\\"\\\\f684\\\";\\n}\\n\\ni.icon.prescription:before {\\n  content: \\\"\\\\f5b1\\\";\\n}\\n\\ni.icon.prescription.bottle:before {\\n  content: \\\"\\\\f485\\\";\\n}\\n\\ni.icon.prescription.bottle.alternate:before {\\n  content: \\\"\\\\f486\\\";\\n}\\n\\ni.icon.print:before {\\n  content: \\\"\\\\f02f\\\";\\n}\\n\\ni.icon.procedures:before {\\n  content: \\\"\\\\f487\\\";\\n}\\n\\ni.icon.project.diagram:before {\\n  content: \\\"\\\\f542\\\";\\n}\\n\\ni.icon.puzzle.piece:before {\\n  content: \\\"\\\\f12e\\\";\\n}\\n\\ni.icon.qrcode:before {\\n  content: \\\"\\\\f029\\\";\\n}\\n\\ni.icon.question:before {\\n  content: \\\"\\\\f128\\\";\\n}\\n\\ni.icon.question.circle:before {\\n  content: \\\"\\\\f059\\\";\\n}\\n\\ni.icon.quidditch:before {\\n  content: \\\"\\\\f458\\\";\\n}\\n\\ni.icon.quote.left:before {\\n  content: \\\"\\\\f10d\\\";\\n}\\n\\ni.icon.quote.right:before {\\n  content: \\\"\\\\f10e\\\";\\n}\\n\\ni.icon.quran:before {\\n  content: \\\"\\\\f687\\\";\\n}\\n\\ni.icon.radiation:before {\\n  content: \\\"\\\\f7b9\\\";\\n}\\n\\ni.icon.radiation.alternate:before {\\n  content: \\\"\\\\f7ba\\\";\\n}\\n\\ni.icon.rainbow:before {\\n  content: \\\"\\\\f75b\\\";\\n}\\n\\ni.icon.random:before {\\n  content: \\\"\\\\f074\\\";\\n}\\n\\ni.icon.receipt:before {\\n  content: \\\"\\\\f543\\\";\\n}\\n\\ni.icon.recycle:before {\\n  content: \\\"\\\\f1b8\\\";\\n}\\n\\ni.icon.redo:before {\\n  content: \\\"\\\\f01e\\\";\\n}\\n\\ni.icon.redo.alternate:before {\\n  content: \\\"\\\\f2f9\\\";\\n}\\n\\ni.icon.registered:before {\\n  content: \\\"\\\\f25d\\\";\\n}\\n\\ni.icon.reply:before {\\n  content: \\\"\\\\f3e5\\\";\\n}\\n\\ni.icon.reply.all:before {\\n  content: \\\"\\\\f122\\\";\\n}\\n\\ni.icon.republican:before {\\n  content: \\\"\\\\f75e\\\";\\n}\\n\\ni.icon.restroom:before {\\n  content: \\\"\\\\f7bd\\\";\\n}\\n\\ni.icon.retweet:before {\\n  content: \\\"\\\\f079\\\";\\n}\\n\\ni.icon.ribbon:before {\\n  content: \\\"\\\\f4d6\\\";\\n}\\n\\ni.icon.ring:before {\\n  content: \\\"\\\\f70b\\\";\\n}\\n\\ni.icon.road:before {\\n  content: \\\"\\\\f018\\\";\\n}\\n\\ni.icon.robot:before {\\n  content: \\\"\\\\f544\\\";\\n}\\n\\ni.icon.rocket:before {\\n  content: \\\"\\\\f135\\\";\\n}\\n\\ni.icon.route:before {\\n  content: \\\"\\\\f4d7\\\";\\n}\\n\\ni.icon.rss:before {\\n  content: \\\"\\\\f09e\\\";\\n}\\n\\ni.icon.rss.square:before {\\n  content: \\\"\\\\f143\\\";\\n}\\n\\ni.icon.ruble.sign:before {\\n  content: \\\"\\\\f158\\\";\\n}\\n\\ni.icon.ruler:before {\\n  content: \\\"\\\\f545\\\";\\n}\\n\\ni.icon.ruler.combined:before {\\n  content: \\\"\\\\f546\\\";\\n}\\n\\ni.icon.ruler.horizontal:before {\\n  content: \\\"\\\\f547\\\";\\n}\\n\\ni.icon.ruler.vertical:before {\\n  content: \\\"\\\\f548\\\";\\n}\\n\\ni.icon.running:before {\\n  content: \\\"\\\\f70c\\\";\\n}\\n\\ni.icon.rupee.sign:before {\\n  content: \\\"\\\\f156\\\";\\n}\\n\\ni.icon.sad.cry:before {\\n  content: \\\"\\\\f5b3\\\";\\n}\\n\\ni.icon.sad.tear:before {\\n  content: \\\"\\\\f5b4\\\";\\n}\\n\\ni.icon.satellite:before {\\n  content: \\\"\\\\f7bf\\\";\\n}\\n\\ni.icon.satellite.dish:before {\\n  content: \\\"\\\\f7c0\\\";\\n}\\n\\ni.icon.save:before {\\n  content: \\\"\\\\f0c7\\\";\\n}\\n\\ni.icon.school:before {\\n  content: \\\"\\\\f549\\\";\\n}\\n\\ni.icon.screwdriver:before {\\n  content: \\\"\\\\f54a\\\";\\n}\\n\\ni.icon.scroll:before {\\n  content: \\\"\\\\f70e\\\";\\n}\\n\\ni.icon.sd.card:before {\\n  content: \\\"\\\\f7c2\\\";\\n}\\n\\ni.icon.search:before {\\n  content: \\\"\\\\f002\\\";\\n}\\n\\ni.icon.search.dollar:before {\\n  content: \\\"\\\\f688\\\";\\n}\\n\\ni.icon.search.location:before {\\n  content: \\\"\\\\f689\\\";\\n}\\n\\ni.icon.search.minus:before {\\n  content: \\\"\\\\f010\\\";\\n}\\n\\ni.icon.search.plus:before {\\n  content: \\\"\\\\f00e\\\";\\n}\\n\\ni.icon.seedling:before {\\n  content: \\\"\\\\f4d8\\\";\\n}\\n\\ni.icon.server:before {\\n  content: \\\"\\\\f233\\\";\\n}\\n\\ni.icon.shapes:before {\\n  content: \\\"\\\\f61f\\\";\\n}\\n\\ni.icon.share:before {\\n  content: \\\"\\\\f064\\\";\\n}\\n\\ni.icon.share.alternate:before {\\n  content: \\\"\\\\f1e0\\\";\\n}\\n\\ni.icon.share.alternate.square:before {\\n  content: \\\"\\\\f1e1\\\";\\n}\\n\\ni.icon.share.square:before {\\n  content: \\\"\\\\f14d\\\";\\n}\\n\\ni.icon.shekel.sign:before {\\n  content: \\\"\\\\f20b\\\";\\n}\\n\\ni.icon.shield.alternate:before {\\n  content: \\\"\\\\f3ed\\\";\\n}\\n\\ni.icon.ship:before {\\n  content: \\\"\\\\f21a\\\";\\n}\\n\\ni.icon.shipping.fast:before {\\n  content: \\\"\\\\f48b\\\";\\n}\\n\\ni.icon.shoe.prints:before {\\n  content: \\\"\\\\f54b\\\";\\n}\\n\\ni.icon.shopping.bag:before {\\n  content: \\\"\\\\f290\\\";\\n}\\n\\ni.icon.shopping.basket:before {\\n  content: \\\"\\\\f291\\\";\\n}\\n\\ni.icon.shopping.cart:before {\\n  content: \\\"\\\\f07a\\\";\\n}\\n\\ni.icon.shower:before {\\n  content: \\\"\\\\f2cc\\\";\\n}\\n\\ni.icon.shuttle.van:before {\\n  content: \\\"\\\\f5b6\\\";\\n}\\n\\ni.icon.sign:before {\\n  content: \\\"\\\\f4d9\\\";\\n}\\n\\ni.icon.sign.in.alternate:before {\\n  content: \\\"\\\\f2f6\\\";\\n}\\n\\ni.icon.sign.language:before {\\n  content: \\\"\\\\f2a7\\\";\\n}\\n\\ni.icon.sign.out.alternate:before {\\n  content: \\\"\\\\f2f5\\\";\\n}\\n\\ni.icon.signal:before {\\n  content: \\\"\\\\f012\\\";\\n}\\n\\ni.icon.signature:before {\\n  content: \\\"\\\\f5b7\\\";\\n}\\n\\ni.icon.sim.card:before {\\n  content: \\\"\\\\f7c4\\\";\\n}\\n\\ni.icon.sitemap:before {\\n  content: \\\"\\\\f0e8\\\";\\n}\\n\\ni.icon.skating:before {\\n  content: \\\"\\\\f7c5\\\";\\n}\\n\\ni.icon.skiing:before {\\n  content: \\\"\\\\f7c9\\\";\\n}\\n\\ni.icon.skiing.nordic:before {\\n  content: \\\"\\\\f7ca\\\";\\n}\\n\\ni.icon.skull:before {\\n  content: \\\"\\\\f54c\\\";\\n}\\n\\ni.icon.skull.crossbones:before {\\n  content: \\\"\\\\f714\\\";\\n}\\n\\ni.icon.slash:before {\\n  content: \\\"\\\\f715\\\";\\n}\\n\\ni.icon.sleigh:before {\\n  content: \\\"\\\\f7cc\\\";\\n}\\n\\ni.icon.sliders.horizontal:before {\\n  content: \\\"\\\\f1de\\\";\\n}\\n\\ni.icon.smile:before {\\n  content: \\\"\\\\f118\\\";\\n}\\n\\ni.icon.smile.beam:before {\\n  content: \\\"\\\\f5b8\\\";\\n}\\n\\ni.icon.smile.wink:before {\\n  content: \\\"\\\\f4da\\\";\\n}\\n\\ni.icon.smog:before {\\n  content: \\\"\\\\f75f\\\";\\n}\\n\\ni.icon.smoking:before {\\n  content: \\\"\\\\f48d\\\";\\n}\\n\\ni.icon.smoking.ban:before {\\n  content: \\\"\\\\f54d\\\";\\n}\\n\\ni.icon.sms:before {\\n  content: \\\"\\\\f7cd\\\";\\n}\\n\\ni.icon.snowboarding:before {\\n  content: \\\"\\\\f7ce\\\";\\n}\\n\\ni.icon.snowflake:before {\\n  content: \\\"\\\\f2dc\\\";\\n}\\n\\ni.icon.snowman:before {\\n  content: \\\"\\\\f7d0\\\";\\n}\\n\\ni.icon.snowplow:before {\\n  content: \\\"\\\\f7d2\\\";\\n}\\n\\ni.icon.socks:before {\\n  content: \\\"\\\\f696\\\";\\n}\\n\\ni.icon.solar.panel:before {\\n  content: \\\"\\\\f5ba\\\";\\n}\\n\\ni.icon.sort:before {\\n  content: \\\"\\\\f0dc\\\";\\n}\\n\\ni.icon.sort.alphabet.down:before {\\n  content: \\\"\\\\f15d\\\";\\n}\\n\\ni.icon.sort.alphabet.up:before {\\n  content: \\\"\\\\f15e\\\";\\n}\\n\\ni.icon.sort.amount.down:before {\\n  content: \\\"\\\\f160\\\";\\n}\\n\\ni.icon.sort.amount.up:before {\\n  content: \\\"\\\\f161\\\";\\n}\\n\\ni.icon.sort.down:before {\\n  content: \\\"\\\\f0dd\\\";\\n}\\n\\ni.icon.sort.numeric.down:before {\\n  content: \\\"\\\\f162\\\";\\n}\\n\\ni.icon.sort.numeric.up:before {\\n  content: \\\"\\\\f163\\\";\\n}\\n\\ni.icon.sort.up:before {\\n  content: \\\"\\\\f0de\\\";\\n}\\n\\ni.icon.spa:before {\\n  content: \\\"\\\\f5bb\\\";\\n}\\n\\ni.icon.space.shuttle:before {\\n  content: \\\"\\\\f197\\\";\\n}\\n\\ni.icon.spider:before {\\n  content: \\\"\\\\f717\\\";\\n}\\n\\ni.icon.spinner:before {\\n  content: \\\"\\\\f110\\\";\\n}\\n\\ni.icon.splotch:before {\\n  content: \\\"\\\\f5bc\\\";\\n}\\n\\ni.icon.spray.can:before {\\n  content: \\\"\\\\f5bd\\\";\\n}\\n\\ni.icon.square:before {\\n  content: \\\"\\\\f0c8\\\";\\n}\\n\\ni.icon.square.full:before {\\n  content: \\\"\\\\f45c\\\";\\n}\\n\\ni.icon.square.root.alternate:before {\\n  content: \\\"\\\\f698\\\";\\n}\\n\\ni.icon.stamp:before {\\n  content: \\\"\\\\f5bf\\\";\\n}\\n\\ni.icon.star:before {\\n  content: \\\"\\\\f005\\\";\\n}\\n\\ni.icon.star.and.crescent:before {\\n  content: \\\"\\\\f699\\\";\\n}\\n\\ni.icon.star.half:before {\\n  content: \\\"\\\\f089\\\";\\n}\\n\\ni.icon.star.half.alternate:before {\\n  content: \\\"\\\\f5c0\\\";\\n}\\n\\ni.icon.star.of.david:before {\\n  content: \\\"\\\\f69a\\\";\\n}\\n\\ni.icon.star.of.life:before {\\n  content: \\\"\\\\f621\\\";\\n}\\n\\ni.icon.step.backward:before {\\n  content: \\\"\\\\f048\\\";\\n}\\n\\ni.icon.step.forward:before {\\n  content: \\\"\\\\f051\\\";\\n}\\n\\ni.icon.stethoscope:before {\\n  content: \\\"\\\\f0f1\\\";\\n}\\n\\ni.icon.sticky.note:before {\\n  content: \\\"\\\\f249\\\";\\n}\\n\\ni.icon.stop:before {\\n  content: \\\"\\\\f04d\\\";\\n}\\n\\ni.icon.stop.circle:before {\\n  content: \\\"\\\\f28d\\\";\\n}\\n\\ni.icon.stopwatch:before {\\n  content: \\\"\\\\f2f2\\\";\\n}\\n\\ni.icon.store:before {\\n  content: \\\"\\\\f54e\\\";\\n}\\n\\ni.icon.store.alternate:before {\\n  content: \\\"\\\\f54f\\\";\\n}\\n\\ni.icon.stream:before {\\n  content: \\\"\\\\f550\\\";\\n}\\n\\ni.icon.street.view:before {\\n  content: \\\"\\\\f21d\\\";\\n}\\n\\ni.icon.strikethrough:before {\\n  content: \\\"\\\\f0cc\\\";\\n}\\n\\ni.icon.stroopwafel:before {\\n  content: \\\"\\\\f551\\\";\\n}\\n\\ni.icon.subscript:before {\\n  content: \\\"\\\\f12c\\\";\\n}\\n\\ni.icon.subway:before {\\n  content: \\\"\\\\f239\\\";\\n}\\n\\ni.icon.suitcase:before {\\n  content: \\\"\\\\f0f2\\\";\\n}\\n\\ni.icon.suitcase.rolling:before {\\n  content: \\\"\\\\f5c1\\\";\\n}\\n\\ni.icon.sun:before {\\n  content: \\\"\\\\f185\\\";\\n}\\n\\ni.icon.superscript:before {\\n  content: \\\"\\\\f12b\\\";\\n}\\n\\ni.icon.surprise:before {\\n  content: \\\"\\\\f5c2\\\";\\n}\\n\\ni.icon.swatchbook:before {\\n  content: \\\"\\\\f5c3\\\";\\n}\\n\\ni.icon.swimmer:before {\\n  content: \\\"\\\\f5c4\\\";\\n}\\n\\ni.icon.swimming.pool:before {\\n  content: \\\"\\\\f5c5\\\";\\n}\\n\\ni.icon.synagogue:before {\\n  content: \\\"\\\\f69b\\\";\\n}\\n\\ni.icon.sync:before {\\n  content: \\\"\\\\f021\\\";\\n}\\n\\ni.icon.sync.alternate:before {\\n  content: \\\"\\\\f2f1\\\";\\n}\\n\\ni.icon.syringe:before {\\n  content: \\\"\\\\f48e\\\";\\n}\\n\\ni.icon.table:before {\\n  content: \\\"\\\\f0ce\\\";\\n}\\n\\ni.icon.table.tennis:before {\\n  content: \\\"\\\\f45d\\\";\\n}\\n\\ni.icon.tablet:before {\\n  content: \\\"\\\\f10a\\\";\\n}\\n\\ni.icon.tablet.alternate:before {\\n  content: \\\"\\\\f3fa\\\";\\n}\\n\\ni.icon.tablets:before {\\n  content: \\\"\\\\f490\\\";\\n}\\n\\ni.icon.tachometer.alternate:before {\\n  content: \\\"\\\\f3fd\\\";\\n}\\n\\ni.icon.tag:before {\\n  content: \\\"\\\\f02b\\\";\\n}\\n\\ni.icon.tags:before {\\n  content: \\\"\\\\f02c\\\";\\n}\\n\\ni.icon.tape:before {\\n  content: \\\"\\\\f4db\\\";\\n}\\n\\ni.icon.tasks:before {\\n  content: \\\"\\\\f0ae\\\";\\n}\\n\\ni.icon.taxi:before {\\n  content: \\\"\\\\f1ba\\\";\\n}\\n\\ni.icon.teeth:before {\\n  content: \\\"\\\\f62e\\\";\\n}\\n\\ni.icon.teeth.open:before {\\n  content: \\\"\\\\f62f\\\";\\n}\\n\\ni.icon.temperature.high:before {\\n  content: \\\"\\\\f769\\\";\\n}\\n\\ni.icon.temperature.low:before {\\n  content: \\\"\\\\f76b\\\";\\n}\\n\\ni.icon.tenge:before {\\n  content: \\\"\\\\f7d7\\\";\\n}\\n\\ni.icon.terminal:before {\\n  content: \\\"\\\\f120\\\";\\n}\\n\\ni.icon.text.height:before {\\n  content: \\\"\\\\f034\\\";\\n}\\n\\ni.icon.text.width:before {\\n  content: \\\"\\\\f035\\\";\\n}\\n\\ni.icon.th:before {\\n  content: \\\"\\\\f00a\\\";\\n}\\n\\ni.icon.th.large:before {\\n  content: \\\"\\\\f009\\\";\\n}\\n\\ni.icon.th.list:before {\\n  content: \\\"\\\\f00b\\\";\\n}\\n\\ni.icon.theater.masks:before {\\n  content: \\\"\\\\f630\\\";\\n}\\n\\ni.icon.thermometer:before {\\n  content: \\\"\\\\f491\\\";\\n}\\n\\ni.icon.thermometer.empty:before {\\n  content: \\\"\\\\f2cb\\\";\\n}\\n\\ni.icon.thermometer.full:before {\\n  content: \\\"\\\\f2c7\\\";\\n}\\n\\ni.icon.thermometer.half:before {\\n  content: \\\"\\\\f2c9\\\";\\n}\\n\\ni.icon.thermometer.quarter:before {\\n  content: \\\"\\\\f2ca\\\";\\n}\\n\\ni.icon.thermometer.three.quarters:before {\\n  content: \\\"\\\\f2c8\\\";\\n}\\n\\ni.icon.thumbs.down:before {\\n  content: \\\"\\\\f165\\\";\\n}\\n\\ni.icon.thumbs.up:before {\\n  content: \\\"\\\\f164\\\";\\n}\\n\\ni.icon.thumbtack:before {\\n  content: \\\"\\\\f08d\\\";\\n}\\n\\ni.icon.ticket.alternate:before {\\n  content: \\\"\\\\f3ff\\\";\\n}\\n\\ni.icon.times:before {\\n  content: \\\"\\\\f00d\\\";\\n}\\n\\ni.icon.times.circle:before {\\n  content: \\\"\\\\f057\\\";\\n}\\n\\ni.icon.tint:before {\\n  content: \\\"\\\\f043\\\";\\n}\\n\\ni.icon.tint.slash:before {\\n  content: \\\"\\\\f5c7\\\";\\n}\\n\\ni.icon.tired:before {\\n  content: \\\"\\\\f5c8\\\";\\n}\\n\\ni.icon.toggle.off:before {\\n  content: \\\"\\\\f204\\\";\\n}\\n\\ni.icon.toggle.on:before {\\n  content: \\\"\\\\f205\\\";\\n}\\n\\ni.icon.toilet:before {\\n  content: \\\"\\\\f7d8\\\";\\n}\\n\\ni.icon.toilet.paper:before {\\n  content: \\\"\\\\f71e\\\";\\n}\\n\\ni.icon.toolbox:before {\\n  content: \\\"\\\\f552\\\";\\n}\\n\\ni.icon.tools:before {\\n  content: \\\"\\\\f7d9\\\";\\n}\\n\\ni.icon.tooth:before {\\n  content: \\\"\\\\f5c9\\\";\\n}\\n\\ni.icon.torah:before {\\n  content: \\\"\\\\f6a0\\\";\\n}\\n\\ni.icon.torii.gate:before {\\n  content: \\\"\\\\f6a1\\\";\\n}\\n\\ni.icon.tractor:before {\\n  content: \\\"\\\\f722\\\";\\n}\\n\\ni.icon.trademark:before {\\n  content: \\\"\\\\f25c\\\";\\n}\\n\\ni.icon.traffic.light:before {\\n  content: \\\"\\\\f637\\\";\\n}\\n\\ni.icon.train:before {\\n  content: \\\"\\\\f238\\\";\\n}\\n\\ni.icon.tram:before {\\n  content: \\\"\\\\f7da\\\";\\n}\\n\\ni.icon.transgender:before {\\n  content: \\\"\\\\f224\\\";\\n}\\n\\ni.icon.transgender.alternate:before {\\n  content: \\\"\\\\f225\\\";\\n}\\n\\ni.icon.trash:before {\\n  content: \\\"\\\\f1f8\\\";\\n}\\n\\ni.icon.trash.alternate:before {\\n  content: \\\"\\\\f2ed\\\";\\n}\\n\\ni.icon.trash.restore:before {\\n  content: \\\"\\\\f829\\\";\\n}\\n\\ni.icon.trash.restore.alternate:before {\\n  content: \\\"\\\\f82a\\\";\\n}\\n\\ni.icon.tree:before {\\n  content: \\\"\\\\f1bb\\\";\\n}\\n\\ni.icon.trophy:before {\\n  content: \\\"\\\\f091\\\";\\n}\\n\\ni.icon.truck:before {\\n  content: \\\"\\\\f0d1\\\";\\n}\\n\\ni.icon.truck.monster:before {\\n  content: \\\"\\\\f63b\\\";\\n}\\n\\ni.icon.truck.moving:before {\\n  content: \\\"\\\\f4df\\\";\\n}\\n\\ni.icon.truck.packing:before {\\n  content: \\\"\\\\f4de\\\";\\n}\\n\\ni.icon.truck.pickup:before {\\n  content: \\\"\\\\f63c\\\";\\n}\\n\\ni.icon.tshirt:before {\\n  content: \\\"\\\\f553\\\";\\n}\\n\\ni.icon.tty:before {\\n  content: \\\"\\\\f1e4\\\";\\n}\\n\\ni.icon.tv:before {\\n  content: \\\"\\\\f26c\\\";\\n}\\n\\ni.icon.umbrella:before {\\n  content: \\\"\\\\f0e9\\\";\\n}\\n\\ni.icon.umbrella.beach:before {\\n  content: \\\"\\\\f5ca\\\";\\n}\\n\\ni.icon.underline:before {\\n  content: \\\"\\\\f0cd\\\";\\n}\\n\\ni.icon.undo:before {\\n  content: \\\"\\\\f0e2\\\";\\n}\\n\\ni.icon.undo.alternate:before {\\n  content: \\\"\\\\f2ea\\\";\\n}\\n\\ni.icon.universal.access:before {\\n  content: \\\"\\\\f29a\\\";\\n}\\n\\ni.icon.university:before {\\n  content: \\\"\\\\f19c\\\";\\n}\\n\\ni.icon.unlink:before {\\n  content: \\\"\\\\f127\\\";\\n}\\n\\ni.icon.unlock:before {\\n  content: \\\"\\\\f09c\\\";\\n}\\n\\ni.icon.unlock.alternate:before {\\n  content: \\\"\\\\f13e\\\";\\n}\\n\\ni.icon.upload:before {\\n  content: \\\"\\\\f093\\\";\\n}\\n\\ni.icon.user:before {\\n  content: \\\"\\\\f007\\\";\\n}\\n\\ni.icon.user.alternate:before {\\n  content: \\\"\\\\f406\\\";\\n}\\n\\ni.icon.user.alternate.slash:before {\\n  content: \\\"\\\\f4fa\\\";\\n}\\n\\ni.icon.user.astronaut:before {\\n  content: \\\"\\\\f4fb\\\";\\n}\\n\\ni.icon.user.check:before {\\n  content: \\\"\\\\f4fc\\\";\\n}\\n\\ni.icon.user.circle:before {\\n  content: \\\"\\\\f2bd\\\";\\n}\\n\\ni.icon.user.clock:before {\\n  content: \\\"\\\\f4fd\\\";\\n}\\n\\ni.icon.user.cog:before {\\n  content: \\\"\\\\f4fe\\\";\\n}\\n\\ni.icon.user.edit:before {\\n  content: \\\"\\\\f4ff\\\";\\n}\\n\\ni.icon.user.friends:before {\\n  content: \\\"\\\\f500\\\";\\n}\\n\\ni.icon.user.graduate:before {\\n  content: \\\"\\\\f501\\\";\\n}\\n\\ni.icon.user.injured:before {\\n  content: \\\"\\\\f728\\\";\\n}\\n\\ni.icon.user.lock:before {\\n  content: \\\"\\\\f502\\\";\\n}\\n\\ni.icon.user.md:before {\\n  content: \\\"\\\\f0f0\\\";\\n}\\n\\ni.icon.user.minus:before {\\n  content: \\\"\\\\f503\\\";\\n}\\n\\ni.icon.user.ninja:before {\\n  content: \\\"\\\\f504\\\";\\n}\\n\\ni.icon.user.nurse:before {\\n  content: \\\"\\\\f82f\\\";\\n}\\n\\ni.icon.user.plus:before {\\n  content: \\\"\\\\f234\\\";\\n}\\n\\ni.icon.user.secret:before {\\n  content: \\\"\\\\f21b\\\";\\n}\\n\\ni.icon.user.shield:before {\\n  content: \\\"\\\\f505\\\";\\n}\\n\\ni.icon.user.slash:before {\\n  content: \\\"\\\\f506\\\";\\n}\\n\\ni.icon.user.tag:before {\\n  content: \\\"\\\\f507\\\";\\n}\\n\\ni.icon.user.tie:before {\\n  content: \\\"\\\\f508\\\";\\n}\\n\\ni.icon.user.times:before {\\n  content: \\\"\\\\f235\\\";\\n}\\n\\ni.icon.users:before {\\n  content: \\\"\\\\f0c0\\\";\\n}\\n\\ni.icon.users.cog:before {\\n  content: \\\"\\\\f509\\\";\\n}\\n\\ni.icon.utensil.spoon:before {\\n  content: \\\"\\\\f2e5\\\";\\n}\\n\\ni.icon.utensils:before {\\n  content: \\\"\\\\f2e7\\\";\\n}\\n\\ni.icon.vector.square:before {\\n  content: \\\"\\\\f5cb\\\";\\n}\\n\\ni.icon.venus:before {\\n  content: \\\"\\\\f221\\\";\\n}\\n\\ni.icon.venus.double:before {\\n  content: \\\"\\\\f226\\\";\\n}\\n\\ni.icon.venus.mars:before {\\n  content: \\\"\\\\f228\\\";\\n}\\n\\ni.icon.vial:before {\\n  content: \\\"\\\\f492\\\";\\n}\\n\\ni.icon.vials:before {\\n  content: \\\"\\\\f493\\\";\\n}\\n\\ni.icon.video:before {\\n  content: \\\"\\\\f03d\\\";\\n}\\n\\ni.icon.video.slash:before {\\n  content: \\\"\\\\f4e2\\\";\\n}\\n\\ni.icon.vihara:before {\\n  content: \\\"\\\\f6a7\\\";\\n}\\n\\ni.icon.volleyball.ball:before {\\n  content: \\\"\\\\f45f\\\";\\n}\\n\\ni.icon.volume.down:before {\\n  content: \\\"\\\\f027\\\";\\n}\\n\\ni.icon.volume.mute:before {\\n  content: \\\"\\\\f6a9\\\";\\n}\\n\\ni.icon.volume.off:before {\\n  content: \\\"\\\\f026\\\";\\n}\\n\\ni.icon.volume.up:before {\\n  content: \\\"\\\\f028\\\";\\n}\\n\\ni.icon.vote.yea:before {\\n  content: \\\"\\\\f772\\\";\\n}\\n\\ni.icon.vr.cardboard:before {\\n  content: \\\"\\\\f729\\\";\\n}\\n\\ni.icon.walking:before {\\n  content: \\\"\\\\f554\\\";\\n}\\n\\ni.icon.wallet:before {\\n  content: \\\"\\\\f555\\\";\\n}\\n\\ni.icon.warehouse:before {\\n  content: \\\"\\\\f494\\\";\\n}\\n\\ni.icon.water:before {\\n  content: \\\"\\\\f773\\\";\\n}\\n\\ni.icon.wave.square:before {\\n  content: \\\"\\\\f83e\\\";\\n}\\n\\ni.icon.weight:before {\\n  content: \\\"\\\\f496\\\";\\n}\\n\\ni.icon.weight.hanging:before {\\n  content: \\\"\\\\f5cd\\\";\\n}\\n\\ni.icon.wheelchair:before {\\n  content: \\\"\\\\f193\\\";\\n}\\n\\ni.icon.wifi:before {\\n  content: \\\"\\\\f1eb\\\";\\n}\\n\\ni.icon.wind:before {\\n  content: \\\"\\\\f72e\\\";\\n}\\n\\ni.icon.window.close:before {\\n  content: \\\"\\\\f410\\\";\\n}\\n\\ni.icon.window.maximize:before {\\n  content: \\\"\\\\f2d0\\\";\\n}\\n\\ni.icon.window.minimize:before {\\n  content: \\\"\\\\f2d1\\\";\\n}\\n\\ni.icon.window.restore:before {\\n  content: \\\"\\\\f2d2\\\";\\n}\\n\\ni.icon.wine.bottle:before {\\n  content: \\\"\\\\f72f\\\";\\n}\\n\\ni.icon.wine.glass:before {\\n  content: \\\"\\\\f4e3\\\";\\n}\\n\\ni.icon.wine.glass.alternate:before {\\n  content: \\\"\\\\f5ce\\\";\\n}\\n\\ni.icon.won.sign:before {\\n  content: \\\"\\\\f159\\\";\\n}\\n\\ni.icon.wrench:before {\\n  content: \\\"\\\\f0ad\\\";\\n}\\n\\ni.icon.x.ray:before {\\n  content: \\\"\\\\f497\\\";\\n}\\n\\ni.icon.yen.sign:before {\\n  content: \\\"\\\\f157\\\";\\n}\\n\\ni.icon.yin.yang:before {\\n  content: \\\"\\\\f6ad\\\";\\n}\\n\\n/* Aliases */\\n\\ni.icon.add:before {\\n  content: \\\"\\\\f067\\\";\\n}\\n\\ni.icon.add.circle:before {\\n  content: \\\"\\\\f055\\\";\\n}\\n\\ni.icon.add.square:before {\\n  content: \\\"\\\\f0fe\\\";\\n}\\n\\ni.icon.add.to.calendar:before {\\n  content: \\\"\\\\f271\\\";\\n}\\n\\ni.icon.add.to.cart:before {\\n  content: \\\"\\\\f217\\\";\\n}\\n\\ni.icon.add.user:before {\\n  content: \\\"\\\\f234\\\";\\n}\\n\\ni.icon.alarm:before {\\n  content: \\\"\\\\f0f3\\\";\\n}\\n\\ni.icon.alarm.mute:before {\\n  content: \\\"\\\\f1f6\\\";\\n}\\n\\ni.icon.ald:before {\\n  content: \\\"\\\\f2a2\\\";\\n}\\n\\ni.icon.als:before {\\n  content: \\\"\\\\f2a2\\\";\\n}\\n\\ni.icon.announcement:before {\\n  content: \\\"\\\\f0a1\\\";\\n}\\n\\ni.icon.area.chart:before {\\n  content: \\\"\\\\f1fe\\\";\\n}\\n\\ni.icon.area.graph:before {\\n  content: \\\"\\\\f1fe\\\";\\n}\\n\\ni.icon.arrow.down.cart:before {\\n  content: \\\"\\\\f218\\\";\\n}\\n\\ni.icon.asexual:before {\\n  content: \\\"\\\\f22d\\\";\\n}\\n\\ni.icon.asl:before {\\n  content: \\\"\\\\f2a3\\\";\\n}\\n\\ni.icon.asl.interpreting:before {\\n  content: \\\"\\\\f2a3\\\";\\n}\\n\\ni.icon.assistive.listening.devices:before {\\n  content: \\\"\\\\f2a2\\\";\\n}\\n\\ni.icon.attach:before {\\n  content: \\\"\\\\f0c6\\\";\\n}\\n\\ni.icon.attention:before {\\n  content: \\\"\\\\f06a\\\";\\n}\\n\\ni.icon.balance:before {\\n  content: \\\"\\\\f24e\\\";\\n}\\n\\ni.icon.bar:before {\\n  content: \\\"\\\\f0fc\\\";\\n}\\n\\ni.icon.bathtub:before {\\n  content: \\\"\\\\f2cd\\\";\\n}\\n\\ni.icon.battery.four:before {\\n  content: \\\"\\\\f240\\\";\\n}\\n\\ni.icon.battery.high:before {\\n  content: \\\"\\\\f241\\\";\\n}\\n\\ni.icon.battery.low:before {\\n  content: \\\"\\\\f243\\\";\\n}\\n\\ni.icon.battery.medium:before {\\n  content: \\\"\\\\f242\\\";\\n}\\n\\ni.icon.battery.one:before {\\n  content: \\\"\\\\f243\\\";\\n}\\n\\ni.icon.battery.three:before {\\n  content: \\\"\\\\f241\\\";\\n}\\n\\ni.icon.battery.two:before {\\n  content: \\\"\\\\f242\\\";\\n}\\n\\ni.icon.battery.zero:before {\\n  content: \\\"\\\\f244\\\";\\n}\\n\\ni.icon.birthday:before {\\n  content: \\\"\\\\f1fd\\\";\\n}\\n\\ni.icon.block.layout:before {\\n  content: \\\"\\\\f009\\\";\\n}\\n\\ni.icon.broken.chain:before {\\n  content: \\\"\\\\f127\\\";\\n}\\n\\ni.icon.browser:before {\\n  content: \\\"\\\\f022\\\";\\n}\\n\\ni.icon.call:before {\\n  content: \\\"\\\\f095\\\";\\n}\\n\\ni.icon.call.square:before {\\n  content: \\\"\\\\f098\\\";\\n}\\n\\ni.icon.cancel:before {\\n  content: \\\"\\\\f00d\\\";\\n}\\n\\ni.icon.cart:before {\\n  content: \\\"\\\\f07a\\\";\\n}\\n\\ni.icon.cc:before {\\n  content: \\\"\\\\f20a\\\";\\n}\\n\\ni.icon.chain:before {\\n  content: \\\"\\\\f0c1\\\";\\n}\\n\\ni.icon.chat:before {\\n  content: \\\"\\\\f075\\\";\\n}\\n\\ni.icon.checked.calendar:before {\\n  content: \\\"\\\\f274\\\";\\n}\\n\\ni.icon.checkmark:before {\\n  content: \\\"\\\\f00c\\\";\\n}\\n\\ni.icon.checkmark.box:before {\\n  content: \\\"\\\\f14a\\\";\\n}\\n\\ni.icon.chess.rock:before {\\n  content: \\\"\\\\f447\\\";\\n}\\n\\ni.icon.circle.notched:before {\\n  content: \\\"\\\\f1ce\\\";\\n}\\n\\ni.icon.circle.thin:before {\\n  content: \\\"\\\\f111\\\";\\n}\\n\\ni.icon.close:before {\\n  content: \\\"\\\\f00d\\\";\\n}\\n\\ni.icon.cloud.download:before {\\n  content: \\\"\\\\f381\\\";\\n}\\n\\ni.icon.cloud.upload:before {\\n  content: \\\"\\\\f382\\\";\\n}\\n\\ni.icon.cny:before {\\n  content: \\\"\\\\f157\\\";\\n}\\n\\ni.icon.cocktail:before {\\n  content: \\\"\\\\f000\\\";\\n}\\n\\ni.icon.commenting:before {\\n  content: \\\"\\\\f27a\\\";\\n}\\n\\ni.icon.compose:before {\\n  content: \\\"\\\\f303\\\";\\n}\\n\\ni.icon.computer:before {\\n  content: \\\"\\\\f108\\\";\\n}\\n\\ni.icon.configure:before {\\n  content: \\\"\\\\f0ad\\\";\\n}\\n\\ni.icon.content:before {\\n  content: \\\"\\\\f0c9\\\";\\n}\\n\\ni.icon.conversation:before {\\n  content: \\\"\\\\f086\\\";\\n}\\n\\ni.icon.credit.card.alternative:before {\\n  content: \\\"\\\\f09d\\\";\\n}\\n\\ni.icon.currency:before {\\n  content: \\\"\\\\f3d1\\\";\\n}\\n\\ni.icon.dashboard:before {\\n  content: \\\"\\\\f3fd\\\";\\n}\\n\\ni.icon.deafness:before {\\n  content: \\\"\\\\f2a4\\\";\\n}\\n\\ni.icon.delete:before {\\n  content: \\\"\\\\f00d\\\";\\n}\\n\\ni.icon.delete.calendar:before {\\n  content: \\\"\\\\f273\\\";\\n}\\n\\ni.icon.detective:before {\\n  content: \\\"\\\\f21b\\\";\\n}\\n\\ni.icon.diamond:before {\\n  content: \\\"\\\\f3a5\\\";\\n}\\n\\ni.icon.discussions:before {\\n  content: \\\"\\\\f086\\\";\\n}\\n\\ni.icon.disk:before {\\n  content: \\\"\\\\f0a0\\\";\\n}\\n\\ni.icon.doctor:before {\\n  content: \\\"\\\\f0f0\\\";\\n}\\n\\ni.icon.dollar:before {\\n  content: \\\"\\\\f155\\\";\\n}\\n\\ni.icon.dont:before {\\n  content: \\\"\\\\f05e\\\";\\n}\\n\\ni.icon.drivers.license:before {\\n  content: \\\"\\\\f2c2\\\";\\n}\\n\\ni.icon.dropdown:before {\\n  content: \\\"\\\\f0d7\\\";\\n}\\n\\ni.icon.emergency:before {\\n  content: \\\"\\\\f0f9\\\";\\n}\\n\\ni.icon.erase:before {\\n  content: \\\"\\\\f12d\\\";\\n}\\n\\ni.icon.eur:before {\\n  content: \\\"\\\\f153\\\";\\n}\\n\\ni.icon.euro:before {\\n  content: \\\"\\\\f153\\\";\\n}\\n\\ni.icon.exchange:before {\\n  content: \\\"\\\\f362\\\";\\n}\\n\\ni.icon.external:before {\\n  content: \\\"\\\\f35d\\\";\\n}\\n\\ni.icon.external.share:before {\\n  content: \\\"\\\\f14d\\\";\\n}\\n\\ni.icon.external.square:before {\\n  content: \\\"\\\\f360\\\";\\n}\\n\\ni.icon.eyedropper:before {\\n  content: \\\"\\\\f1fb\\\";\\n}\\n\\ni.icon.factory:before {\\n  content: \\\"\\\\f275\\\";\\n}\\n\\ni.icon.favorite:before {\\n  content: \\\"\\\\f005\\\";\\n}\\n\\ni.icon.feed:before {\\n  content: \\\"\\\\f09e\\\";\\n}\\n\\ni.icon.female.homosexual:before {\\n  content: \\\"\\\\f226\\\";\\n}\\n\\ni.icon.file.text:before {\\n  content: \\\"\\\\f15c\\\";\\n}\\n\\ni.icon.find:before {\\n  content: \\\"\\\\f1e5\\\";\\n}\\n\\ni.icon.first.aid:before {\\n  content: \\\"\\\\f0fa\\\";\\n}\\n\\ni.icon.food:before {\\n  content: \\\"\\\\f2e7\\\";\\n}\\n\\ni.icon.fork:before {\\n  content: \\\"\\\\f126\\\";\\n}\\n\\ni.icon.game:before {\\n  content: \\\"\\\\f11b\\\";\\n}\\n\\ni.icon.gay:before {\\n  content: \\\"\\\\f227\\\";\\n}\\n\\ni.icon.gbp:before {\\n  content: \\\"\\\\f154\\\";\\n}\\n\\ni.icon.grab:before {\\n  content: \\\"\\\\f255\\\";\\n}\\n\\ni.icon.graduation:before {\\n  content: \\\"\\\\f19d\\\";\\n}\\n\\ni.icon.grid.layout:before {\\n  content: \\\"\\\\f00a\\\";\\n}\\n\\ni.icon.group:before {\\n  content: \\\"\\\\f0c0\\\";\\n}\\n\\ni.icon.h:before {\\n  content: \\\"\\\\f0fd\\\";\\n}\\n\\ni.icon.hamburger:before {\\n  content: \\\"\\\\f0c9\\\";\\n}\\n\\ni.icon.hand.victory:before {\\n  content: \\\"\\\\f25b\\\";\\n}\\n\\ni.icon.handicap:before {\\n  content: \\\"\\\\f193\\\";\\n}\\n\\ni.icon.hard.of.hearing:before {\\n  content: \\\"\\\\f2a4\\\";\\n}\\n\\ni.icon.header:before {\\n  content: \\\"\\\\f1dc\\\";\\n}\\n\\ni.icon.heart.empty:before {\\n  content: \\\"\\\\f004\\\";\\n}\\n\\ni.icon.help:before {\\n  content: \\\"\\\\f128\\\";\\n}\\n\\ni.icon.help.circle:before {\\n  content: \\\"\\\\f059\\\";\\n}\\n\\ni.icon.heterosexual:before {\\n  content: \\\"\\\\f228\\\";\\n}\\n\\ni.icon.hide:before {\\n  content: \\\"\\\\f070\\\";\\n}\\n\\ni.icon.hotel:before {\\n  content: \\\"\\\\f236\\\";\\n}\\n\\ni.icon.hourglass.four:before {\\n  content: \\\"\\\\f254\\\";\\n}\\n\\ni.icon.hourglass.full:before {\\n  content: \\\"\\\\f254\\\";\\n}\\n\\ni.icon.hourglass.one:before {\\n  content: \\\"\\\\f251\\\";\\n}\\n\\ni.icon.hourglass.three:before {\\n  content: \\\"\\\\f253\\\";\\n}\\n\\ni.icon.hourglass.two:before {\\n  content: \\\"\\\\f252\\\";\\n}\\n\\ni.icon.hourglass.zero:before {\\n  content: \\\"\\\\f253\\\";\\n}\\n\\ni.icon.idea:before {\\n  content: \\\"\\\\f0eb\\\";\\n}\\n\\ni.icon.ils:before {\\n  content: \\\"\\\\f20b\\\";\\n}\\n\\ni.icon.in.cart:before {\\n  content: \\\"\\\\f218\\\";\\n}\\n\\ni.icon.inr:before {\\n  content: \\\"\\\\f156\\\";\\n}\\n\\ni.icon.intergender:before {\\n  content: \\\"\\\\f224\\\";\\n}\\n\\ni.icon.intersex:before {\\n  content: \\\"\\\\f224\\\";\\n}\\n\\ni.icon.jpy:before {\\n  content: \\\"\\\\f157\\\";\\n}\\n\\ni.icon.krw:before {\\n  content: \\\"\\\\f159\\\";\\n}\\n\\ni.icon.lab:before {\\n  content: \\\"\\\\f0c3\\\";\\n}\\n\\ni.icon.law:before {\\n  content: \\\"\\\\f24e\\\";\\n}\\n\\ni.icon.legal:before {\\n  content: \\\"\\\\f0e3\\\";\\n}\\n\\ni.icon.lesbian:before {\\n  content: \\\"\\\\f226\\\";\\n}\\n\\ni.icon.level.down:before {\\n  content: \\\"\\\\f3be\\\";\\n}\\n\\ni.icon.level.up:before {\\n  content: \\\"\\\\f3bf\\\";\\n}\\n\\ni.icon.lightning:before {\\n  content: \\\"\\\\f0e7\\\";\\n}\\n\\ni.icon.like:before {\\n  content: \\\"\\\\f004\\\";\\n}\\n\\ni.icon.line.graph:before {\\n  content: \\\"\\\\f201\\\";\\n}\\n\\ni.icon.linkify:before {\\n  content: \\\"\\\\f0c1\\\";\\n}\\n\\ni.icon.lira:before {\\n  content: \\\"\\\\f195\\\";\\n}\\n\\ni.icon.list.layout:before {\\n  content: \\\"\\\\f00b\\\";\\n}\\n\\ni.icon.log.out:before {\\n  content: \\\"\\\\f2f5\\\";\\n}\\n\\ni.icon.magnify:before {\\n  content: \\\"\\\\f00e\\\";\\n}\\n\\ni.icon.mail:before {\\n  content: \\\"\\\\f0e0\\\";\\n}\\n\\ni.icon.mail.forward:before {\\n  content: \\\"\\\\f064\\\";\\n}\\n\\ni.icon.mail.square:before {\\n  content: \\\"\\\\f199\\\";\\n}\\n\\ni.icon.male.homosexual:before {\\n  content: \\\"\\\\f227\\\";\\n}\\n\\ni.icon.man:before {\\n  content: \\\"\\\\f222\\\";\\n}\\n\\ni.icon.marker:before {\\n  content: \\\"\\\\f041\\\";\\n}\\n\\ni.icon.mars.alternate:before {\\n  content: \\\"\\\\f229\\\";\\n}\\n\\ni.icon.mars.horizontal:before {\\n  content: \\\"\\\\f22b\\\";\\n}\\n\\ni.icon.mars.vertical:before {\\n  content: \\\"\\\\f22a\\\";\\n}\\n\\ni.icon.meanpath:before {\\n  content: \\\"\\\\f0c8\\\";\\n}\\n\\ni.icon.military:before {\\n  content: \\\"\\\\f0fb\\\";\\n}\\n\\ni.icon.money:before {\\n  content: \\\"\\\\f3d1\\\";\\n}\\n\\ni.icon.move:before {\\n  content: \\\"\\\\f0b2\\\";\\n}\\n\\ni.icon.mute:before {\\n  content: \\\"\\\\f131\\\";\\n}\\n\\ni.icon.non.binary.transgender:before {\\n  content: \\\"\\\\f223\\\";\\n}\\n\\ni.icon.numbered.list:before {\\n  content: \\\"\\\\f0cb\\\";\\n}\\n\\ni.icon.options:before {\\n  content: \\\"\\\\f1de\\\";\\n}\\n\\ni.icon.ordered.list:before {\\n  content: \\\"\\\\f0cb\\\";\\n}\\n\\ni.icon.other.gender:before {\\n  content: \\\"\\\\f229\\\";\\n}\\n\\ni.icon.other.gender.horizontal:before {\\n  content: \\\"\\\\f22b\\\";\\n}\\n\\ni.icon.other.gender.vertical:before {\\n  content: \\\"\\\\f22a\\\";\\n}\\n\\ni.icon.payment:before {\\n  content: \\\"\\\\f09d\\\";\\n}\\n\\ni.icon.pencil:before {\\n  content: \\\"\\\\f303\\\";\\n}\\n\\ni.icon.pencil.square:before {\\n  content: \\\"\\\\f14b\\\";\\n}\\n\\ni.icon.photo:before {\\n  content: \\\"\\\\f030\\\";\\n}\\n\\ni.icon.picture:before {\\n  content: \\\"\\\\f03e\\\";\\n}\\n\\ni.icon.pie.chart:before {\\n  content: \\\"\\\\f200\\\";\\n}\\n\\ni.icon.pie.graph:before {\\n  content: \\\"\\\\f200\\\";\\n}\\n\\ni.icon.pin:before {\\n  content: \\\"\\\\f08d\\\";\\n}\\n\\ni.icon.plus.cart:before {\\n  content: \\\"\\\\f217\\\";\\n}\\n\\ni.icon.point:before {\\n  content: \\\"\\\\f041\\\";\\n}\\n\\ni.icon.pointing.down:before {\\n  content: \\\"\\\\f0a7\\\";\\n}\\n\\ni.icon.pointing.left:before {\\n  content: \\\"\\\\f0a5\\\";\\n}\\n\\ni.icon.pointing.right:before {\\n  content: \\\"\\\\f0a4\\\";\\n}\\n\\ni.icon.pointing.up:before {\\n  content: \\\"\\\\f0a6\\\";\\n}\\n\\ni.icon.pound:before {\\n  content: \\\"\\\\f154\\\";\\n}\\n\\ni.icon.power:before {\\n  content: \\\"\\\\f011\\\";\\n}\\n\\ni.icon.power.cord:before {\\n  content: \\\"\\\\f1e6\\\";\\n}\\n\\ni.icon.privacy:before {\\n  content: \\\"\\\\f084\\\";\\n}\\n\\ni.icon.protect:before {\\n  content: \\\"\\\\f023\\\";\\n}\\n\\ni.icon.puzzle:before {\\n  content: \\\"\\\\f12e\\\";\\n}\\n\\ni.icon.r.circle:before {\\n  content: \\\"\\\\f25d\\\";\\n}\\n\\ni.icon.radio:before {\\n  content: \\\"\\\\f192\\\";\\n}\\n\\ni.icon.rain:before {\\n  content: \\\"\\\\f0e9\\\";\\n}\\n\\ni.icon.record:before {\\n  content: \\\"\\\\f03d\\\";\\n}\\n\\ni.icon.refresh:before {\\n  content: \\\"\\\\f021\\\";\\n}\\n\\ni.icon.remove:before {\\n  content: \\\"\\\\f00d\\\";\\n}\\n\\ni.icon.remove.bookmark:before {\\n  content: \\\"\\\\f02e\\\";\\n}\\n\\ni.icon.remove.circle:before {\\n  content: \\\"\\\\f057\\\";\\n}\\n\\ni.icon.remove.from.calendar:before {\\n  content: \\\"\\\\f272\\\";\\n}\\n\\ni.icon.remove.user:before {\\n  content: \\\"\\\\f235\\\";\\n}\\n\\ni.icon.repeat:before {\\n  content: \\\"\\\\f01e\\\";\\n}\\n\\ni.icon.resize.horizontal:before {\\n  content: \\\"\\\\f337\\\";\\n}\\n\\ni.icon.resize.vertical:before {\\n  content: \\\"\\\\f338\\\";\\n}\\n\\ni.icon.rmb:before {\\n  content: \\\"\\\\f157\\\";\\n}\\n\\ni.icon.rouble:before {\\n  content: \\\"\\\\f158\\\";\\n}\\n\\ni.icon.rub:before {\\n  content: \\\"\\\\f158\\\";\\n}\\n\\ni.icon.ruble:before {\\n  content: \\\"\\\\f158\\\";\\n}\\n\\ni.icon.rupee:before {\\n  content: \\\"\\\\f156\\\";\\n}\\n\\ni.icon.s15:before {\\n  content: \\\"\\\\f2cd\\\";\\n}\\n\\ni.icon.selected.radio:before {\\n  content: \\\"\\\\f192\\\";\\n}\\n\\ni.icon.send:before {\\n  content: \\\"\\\\f1d8\\\";\\n}\\n\\ni.icon.setting:before {\\n  content: \\\"\\\\f013\\\";\\n}\\n\\ni.icon.settings:before {\\n  content: \\\"\\\\f085\\\";\\n}\\n\\ni.icon.shekel:before {\\n  content: \\\"\\\\f20b\\\";\\n}\\n\\ni.icon.sheqel:before {\\n  content: \\\"\\\\f20b\\\";\\n}\\n\\ni.icon.shield:before {\\n  content: \\\"\\\\f3ed\\\";\\n}\\n\\ni.icon.shipping:before {\\n  content: \\\"\\\\f0d1\\\";\\n}\\n\\ni.icon.shop:before {\\n  content: \\\"\\\\f07a\\\";\\n}\\n\\ni.icon.shuffle:before {\\n  content: \\\"\\\\f074\\\";\\n}\\n\\ni.icon.shutdown:before {\\n  content: \\\"\\\\f011\\\";\\n}\\n\\ni.icon.sidebar:before {\\n  content: \\\"\\\\f0c9\\\";\\n}\\n\\ni.icon.sign.in:before {\\n  content: \\\"\\\\f2f6\\\";\\n}\\n\\ni.icon.sign.out:before {\\n  content: \\\"\\\\f2f5\\\";\\n}\\n\\ni.icon.signing:before {\\n  content: \\\"\\\\f2a7\\\";\\n}\\n\\ni.icon.signup:before {\\n  content: \\\"\\\\f044\\\";\\n}\\n\\ni.icon.sliders:before {\\n  content: \\\"\\\\f1de\\\";\\n}\\n\\ni.icon.soccer:before {\\n  content: \\\"\\\\f1e3\\\";\\n}\\n\\ni.icon.sort.alphabet.ascending:before {\\n  content: \\\"\\\\f15d\\\";\\n}\\n\\ni.icon.sort.alphabet.descending:before {\\n  content: \\\"\\\\f15e\\\";\\n}\\n\\ni.icon.sort.ascending:before {\\n  content: \\\"\\\\f0de\\\";\\n}\\n\\ni.icon.sort.content.ascending:before {\\n  content: \\\"\\\\f160\\\";\\n}\\n\\ni.icon.sort.content.descending:before {\\n  content: \\\"\\\\f161\\\";\\n}\\n\\ni.icon.sort.descending:before {\\n  content: \\\"\\\\f0dd\\\";\\n}\\n\\ni.icon.sort.numeric.ascending:before {\\n  content: \\\"\\\\f162\\\";\\n}\\n\\ni.icon.sort.numeric.descending:before {\\n  content: \\\"\\\\f163\\\";\\n}\\n\\ni.icon.sound:before {\\n  content: \\\"\\\\f025\\\";\\n}\\n\\ni.icon.spoon:before {\\n  content: \\\"\\\\f2e5\\\";\\n}\\n\\ni.icon.spy:before {\\n  content: \\\"\\\\f21b\\\";\\n}\\n\\ni.icon.star.empty:before {\\n  content: \\\"\\\\f005\\\";\\n}\\n\\ni.icon.star.half.empty:before {\\n  content: \\\"\\\\f089\\\";\\n}\\n\\ni.icon.star.half.full:before {\\n  content: \\\"\\\\f089\\\";\\n}\\n\\ni.icon.student:before {\\n  content: \\\"\\\\f19d\\\";\\n}\\n\\ni.icon.talk:before {\\n  content: \\\"\\\\f27a\\\";\\n}\\n\\ni.icon.target:before {\\n  content: \\\"\\\\f140\\\";\\n}\\n\\ni.icon.teletype:before {\\n  content: \\\"\\\\f1e4\\\";\\n}\\n\\ni.icon.television:before {\\n  content: \\\"\\\\f26c\\\";\\n}\\n\\ni.icon.text.cursor:before {\\n  content: \\\"\\\\f246\\\";\\n}\\n\\ni.icon.text.telephone:before {\\n  content: \\\"\\\\f1e4\\\";\\n}\\n\\ni.icon.theme:before {\\n  content: \\\"\\\\f043\\\";\\n}\\n\\ni.icon.thermometer:before {\\n  content: \\\"\\\\f2c7\\\";\\n}\\n\\ni.icon.thumb.tack:before {\\n  content: \\\"\\\\f08d\\\";\\n}\\n\\ni.icon.ticket:before {\\n  content: \\\"\\\\f3ff\\\";\\n}\\n\\ni.icon.time:before {\\n  content: \\\"\\\\f017\\\";\\n}\\n\\ni.icon.times.rectangle:before {\\n  content: \\\"\\\\f410\\\";\\n}\\n\\ni.icon.tm:before {\\n  content: \\\"\\\\f25c\\\";\\n}\\n\\ni.icon.toggle.down:before {\\n  content: \\\"\\\\f150\\\";\\n}\\n\\ni.icon.toggle.left:before {\\n  content: \\\"\\\\f191\\\";\\n}\\n\\ni.icon.toggle.right:before {\\n  content: \\\"\\\\f152\\\";\\n}\\n\\ni.icon.toggle.up:before {\\n  content: \\\"\\\\f151\\\";\\n}\\n\\ni.icon.translate:before {\\n  content: \\\"\\\\f1ab\\\";\\n}\\n\\ni.icon.travel:before {\\n  content: \\\"\\\\f0b1\\\";\\n}\\n\\ni.icon.treatment:before {\\n  content: \\\"\\\\f0f1\\\";\\n}\\n\\ni.icon.triangle.down:before {\\n  content: \\\"\\\\f0d7\\\";\\n}\\n\\ni.icon.triangle.left:before {\\n  content: \\\"\\\\f0d9\\\";\\n}\\n\\ni.icon.triangle.right:before {\\n  content: \\\"\\\\f0da\\\";\\n}\\n\\ni.icon.triangle.up:before {\\n  content: \\\"\\\\f0d8\\\";\\n}\\n\\ni.icon.try:before {\\n  content: \\\"\\\\f195\\\";\\n}\\n\\ni.icon.unhide:before {\\n  content: \\\"\\\\f06e\\\";\\n}\\n\\ni.icon.unlinkify:before {\\n  content: \\\"\\\\f127\\\";\\n}\\n\\ni.icon.unmute:before {\\n  content: \\\"\\\\f130\\\";\\n}\\n\\ni.icon.unordered.list:before {\\n  content: \\\"\\\\f0ca\\\";\\n}\\n\\ni.icon.usd:before {\\n  content: \\\"\\\\f155\\\";\\n}\\n\\ni.icon.user.cancel:before {\\n  content: \\\"\\\\f235\\\";\\n}\\n\\ni.icon.user.close:before {\\n  content: \\\"\\\\f235\\\";\\n}\\n\\ni.icon.user.delete:before {\\n  content: \\\"\\\\f235\\\";\\n}\\n\\ni.icon.user.doctor:before {\\n  content: \\\"\\\\f0f0\\\";\\n}\\n\\ni.icon.user.x:before {\\n  content: \\\"\\\\f235\\\";\\n}\\n\\ni.icon.vcard:before {\\n  content: \\\"\\\\f2bb\\\";\\n}\\n\\ni.icon.video.camera:before {\\n  content: \\\"\\\\f03d\\\";\\n}\\n\\ni.icon.video.play:before {\\n  content: \\\"\\\\f144\\\";\\n}\\n\\ni.icon.volume.control.phone:before {\\n  content: \\\"\\\\f2a0\\\";\\n}\\n\\ni.icon.wait:before {\\n  content: \\\"\\\\f017\\\";\\n}\\n\\ni.icon.warning:before {\\n  content: \\\"\\\\f12a\\\";\\n}\\n\\ni.icon.warning.circle:before {\\n  content: \\\"\\\\f06a\\\";\\n}\\n\\ni.icon.warning.sign:before {\\n  content: \\\"\\\\f071\\\";\\n}\\n\\ni.icon.wi.fi:before {\\n  content: \\\"\\\\f1eb\\\";\\n}\\n\\ni.icon.winner:before {\\n  content: \\\"\\\\f091\\\";\\n}\\n\\ni.icon.wizard:before {\\n  content: \\\"\\\\f0d0\\\";\\n}\\n\\ni.icon.woman:before {\\n  content: \\\"\\\\f221\\\";\\n}\\n\\ni.icon.won:before {\\n  content: \\\"\\\\f159\\\";\\n}\\n\\ni.icon.world:before {\\n  content: \\\"\\\\f0ac\\\";\\n}\\n\\ni.icon.write:before {\\n  content: \\\"\\\\f303\\\";\\n}\\n\\ni.icon.write.square:before {\\n  content: \\\"\\\\f14b\\\";\\n}\\n\\ni.icon.x:before {\\n  content: \\\"\\\\f00d\\\";\\n}\\n\\ni.icon.yen:before {\\n  content: \\\"\\\\f157\\\";\\n}\\n\\ni.icon.zip:before {\\n  content: \\\"\\\\f187\\\";\\n}\\n\\ni.icon.zoom:before {\\n  content: \\\"\\\\f00e\\\";\\n}\\n\\ni.icon.zoom.in:before {\\n  content: \\\"\\\\f00e\\\";\\n}\\n\\ni.icon.zoom.out:before {\\n  content: \\\"\\\\f010\\\";\\n}\\n\\n/*******************************\\n         Outline Icons\\n*******************************/\\n\\n/* Outline Icon */\\n\\n/* Load & Define Icon Font */\\n\\n@font-face {\\n  font-family: 'outline-icons';\\n  src: url(\" + ___CSS_LOADER_URL___7___ + \");\\n  src: url(\" + ___CSS_LOADER_URL___8___ + \") format('embedded-opentype'), url(\" + ___CSS_LOADER_URL___9___ + \") format('woff2'), url(\" + ___CSS_LOADER_URL___10___ + \") format('woff'), url(\" + ___CSS_LOADER_URL___11___ + \") format('truetype'), url(\" + ___CSS_LOADER_URL___12___ + \") format('svg');\\n  font-style: normal;\\n  font-weight: normal;\\n  font-variant: normal;\\n  text-decoration: inherit;\\n  text-transform: none;\\n}\\n\\ni.icon.outline {\\n  font-family: 'outline-icons';\\n}\\n\\n/* Icons */\\n\\ni.icon.address.book.outline:before {\\n  content: \\\"\\\\f2b9\\\";\\n}\\n\\ni.icon.address.card.outline:before {\\n  content: \\\"\\\\f2bb\\\";\\n}\\n\\ni.icon.angry.outline:before {\\n  content: \\\"\\\\f556\\\";\\n}\\n\\ni.icon.arrow.alternate.circle.down.outline:before {\\n  content: \\\"\\\\f358\\\";\\n}\\n\\ni.icon.arrow.alternate.circle.left.outline:before {\\n  content: \\\"\\\\f359\\\";\\n}\\n\\ni.icon.arrow.alternate.circle.right.outline:before {\\n  content: \\\"\\\\f35a\\\";\\n}\\n\\ni.icon.arrow.alternate.circle.up.outline:before {\\n  content: \\\"\\\\f35b\\\";\\n}\\n\\ni.icon.bell.outline:before {\\n  content: \\\"\\\\f0f3\\\";\\n}\\n\\ni.icon.bell.slash.outline:before {\\n  content: \\\"\\\\f1f6\\\";\\n}\\n\\ni.icon.bookmark.outline:before {\\n  content: \\\"\\\\f02e\\\";\\n}\\n\\ni.icon.building.outline:before {\\n  content: \\\"\\\\f1ad\\\";\\n}\\n\\ni.icon.calendar.alternate.outline:before {\\n  content: \\\"\\\\f073\\\";\\n}\\n\\ni.icon.calendar.check.outline:before {\\n  content: \\\"\\\\f274\\\";\\n}\\n\\ni.icon.calendar.minus.outline:before {\\n  content: \\\"\\\\f272\\\";\\n}\\n\\ni.icon.calendar.outline:before {\\n  content: \\\"\\\\f133\\\";\\n}\\n\\ni.icon.calendar.plus.outline:before {\\n  content: \\\"\\\\f271\\\";\\n}\\n\\ni.icon.calendar.times.outline:before {\\n  content: \\\"\\\\f273\\\";\\n}\\n\\ni.icon.caret.square.down.outline:before {\\n  content: \\\"\\\\f150\\\";\\n}\\n\\ni.icon.caret.square.left.outline:before {\\n  content: \\\"\\\\f191\\\";\\n}\\n\\ni.icon.caret.square.right.outline:before {\\n  content: \\\"\\\\f152\\\";\\n}\\n\\ni.icon.caret.square.up.outline:before {\\n  content: \\\"\\\\f151\\\";\\n}\\n\\ni.icon.chart.bar.outline:before {\\n  content: \\\"\\\\f080\\\";\\n}\\n\\ni.icon.check.circle.outline:before {\\n  content: \\\"\\\\f058\\\";\\n}\\n\\ni.icon.check.square.outline:before {\\n  content: \\\"\\\\f14a\\\";\\n}\\n\\ni.icon.circle.outline:before {\\n  content: \\\"\\\\f111\\\";\\n}\\n\\ni.icon.clipboard.outline:before {\\n  content: \\\"\\\\f328\\\";\\n}\\n\\ni.icon.clock.outline:before {\\n  content: \\\"\\\\f017\\\";\\n}\\n\\ni.icon.clone.outline:before {\\n  content: \\\"\\\\f24d\\\";\\n}\\n\\ni.icon.closed.captioning.outline:before {\\n  content: \\\"\\\\f20a\\\";\\n}\\n\\ni.icon.comment.alternate.outline:before {\\n  content: \\\"\\\\f27a\\\";\\n}\\n\\ni.icon.comment.dots.outline:before {\\n  content: \\\"\\\\f4ad\\\";\\n}\\n\\ni.icon.comment.outline:before {\\n  content: \\\"\\\\f075\\\";\\n}\\n\\ni.icon.comments.outline:before {\\n  content: \\\"\\\\f086\\\";\\n}\\n\\ni.icon.compass.outline:before {\\n  content: \\\"\\\\f14e\\\";\\n}\\n\\ni.icon.copy.outline:before {\\n  content: \\\"\\\\f0c5\\\";\\n}\\n\\ni.icon.copyright.outline:before {\\n  content: \\\"\\\\f1f9\\\";\\n}\\n\\ni.icon.credit.card.outline:before {\\n  content: \\\"\\\\f09d\\\";\\n}\\n\\ni.icon.dizzy.outline:before {\\n  content: \\\"\\\\f567\\\";\\n}\\n\\ni.icon.dot.circle.outline:before {\\n  content: \\\"\\\\f192\\\";\\n}\\n\\ni.icon.edit.outline:before {\\n  content: \\\"\\\\f044\\\";\\n}\\n\\ni.icon.envelope.open.outline:before {\\n  content: \\\"\\\\f2b6\\\";\\n}\\n\\ni.icon.envelope.outline:before {\\n  content: \\\"\\\\f0e0\\\";\\n}\\n\\ni.icon.eye.outline:before {\\n  content: \\\"\\\\f06e\\\";\\n}\\n\\ni.icon.eye.slash.outline:before {\\n  content: \\\"\\\\f070\\\";\\n}\\n\\ni.icon.file.alternate.outline:before {\\n  content: \\\"\\\\f15c\\\";\\n}\\n\\ni.icon.file.archive.outline:before {\\n  content: \\\"\\\\f1c6\\\";\\n}\\n\\ni.icon.file.audio.outline:before {\\n  content: \\\"\\\\f1c7\\\";\\n}\\n\\ni.icon.file.code.outline:before {\\n  content: \\\"\\\\f1c9\\\";\\n}\\n\\ni.icon.file.excel.outline:before {\\n  content: \\\"\\\\f1c3\\\";\\n}\\n\\ni.icon.file.image.outline:before {\\n  content: \\\"\\\\f1c5\\\";\\n}\\n\\ni.icon.file.outline:before {\\n  content: \\\"\\\\f15b\\\";\\n}\\n\\ni.icon.file.pdf.outline:before {\\n  content: \\\"\\\\f1c1\\\";\\n}\\n\\ni.icon.file.powerpoint.outline:before {\\n  content: \\\"\\\\f1c4\\\";\\n}\\n\\ni.icon.file.video.outline:before {\\n  content: \\\"\\\\f1c8\\\";\\n}\\n\\ni.icon.file.word.outline:before {\\n  content: \\\"\\\\f1c2\\\";\\n}\\n\\ni.icon.flag.outline:before {\\n  content: \\\"\\\\f024\\\";\\n}\\n\\ni.icon.flushed.outline:before {\\n  content: \\\"\\\\f579\\\";\\n}\\n\\ni.icon.folder.open.outline:before {\\n  content: \\\"\\\\f07c\\\";\\n}\\n\\ni.icon.folder.outline:before {\\n  content: \\\"\\\\f07b\\\";\\n}\\n\\ni.icon.frown.open.outline:before {\\n  content: \\\"\\\\f57a\\\";\\n}\\n\\ni.icon.frown.outline:before {\\n  content: \\\"\\\\f119\\\";\\n}\\n\\ni.icon.futbol.outline:before {\\n  content: \\\"\\\\f1e3\\\";\\n}\\n\\ni.icon.gem.outline:before {\\n  content: \\\"\\\\f3a5\\\";\\n}\\n\\ni.icon.grimace.outline:before {\\n  content: \\\"\\\\f57f\\\";\\n}\\n\\ni.icon.grin.alternate.outline:before {\\n  content: \\\"\\\\f581\\\";\\n}\\n\\ni.icon.grin.beam.outline:before {\\n  content: \\\"\\\\f582\\\";\\n}\\n\\ni.icon.grin.beam.sweat.outline:before {\\n  content: \\\"\\\\f583\\\";\\n}\\n\\ni.icon.grin.hearts.outline:before {\\n  content: \\\"\\\\f584\\\";\\n}\\n\\ni.icon.grin.outline:before {\\n  content: \\\"\\\\f580\\\";\\n}\\n\\ni.icon.grin.squint.outline:before {\\n  content: \\\"\\\\f585\\\";\\n}\\n\\ni.icon.grin.squint.tears.outline:before {\\n  content: \\\"\\\\f586\\\";\\n}\\n\\ni.icon.grin.stars.outline:before {\\n  content: \\\"\\\\f587\\\";\\n}\\n\\ni.icon.grin.tears.outline:before {\\n  content: \\\"\\\\f588\\\";\\n}\\n\\ni.icon.grin.tongue.outline:before {\\n  content: \\\"\\\\f589\\\";\\n}\\n\\ni.icon.grin.tongue.squint.outline:before {\\n  content: \\\"\\\\f58a\\\";\\n}\\n\\ni.icon.grin.tongue.wink.outline:before {\\n  content: \\\"\\\\f58b\\\";\\n}\\n\\ni.icon.grin.wink.outline:before {\\n  content: \\\"\\\\f58c\\\";\\n}\\n\\ni.icon.hand.lizard.outline:before {\\n  content: \\\"\\\\f258\\\";\\n}\\n\\ni.icon.hand.paper.outline:before {\\n  content: \\\"\\\\f256\\\";\\n}\\n\\ni.icon.hand.peace.outline:before {\\n  content: \\\"\\\\f25b\\\";\\n}\\n\\ni.icon.hand.point.down.outline:before {\\n  content: \\\"\\\\f0a7\\\";\\n}\\n\\ni.icon.hand.point.left.outline:before {\\n  content: \\\"\\\\f0a5\\\";\\n}\\n\\ni.icon.hand.point.right.outline:before {\\n  content: \\\"\\\\f0a4\\\";\\n}\\n\\ni.icon.hand.point.up.outline:before {\\n  content: \\\"\\\\f0a6\\\";\\n}\\n\\ni.icon.hand.pointer.outline:before {\\n  content: \\\"\\\\f25a\\\";\\n}\\n\\ni.icon.hand.rock.outline:before {\\n  content: \\\"\\\\f255\\\";\\n}\\n\\ni.icon.hand.scissors.outline:before {\\n  content: \\\"\\\\f257\\\";\\n}\\n\\ni.icon.hand.spock.outline:before {\\n  content: \\\"\\\\f259\\\";\\n}\\n\\ni.icon.handshake.outline:before {\\n  content: \\\"\\\\f2b5\\\";\\n}\\n\\ni.icon.hdd.outline:before {\\n  content: \\\"\\\\f0a0\\\";\\n}\\n\\ni.icon.heart.outline:before {\\n  content: \\\"\\\\f004\\\";\\n}\\n\\ni.icon.hospital.outline:before {\\n  content: \\\"\\\\f0f8\\\";\\n}\\n\\ni.icon.hourglass.outline:before {\\n  content: \\\"\\\\f254\\\";\\n}\\n\\ni.icon.id.badge.outline:before {\\n  content: \\\"\\\\f2c1\\\";\\n}\\n\\ni.icon.id.card.outline:before {\\n  content: \\\"\\\\f2c2\\\";\\n}\\n\\ni.icon.image.outline:before {\\n  content: \\\"\\\\f03e\\\";\\n}\\n\\ni.icon.images.outline:before {\\n  content: \\\"\\\\f302\\\";\\n}\\n\\ni.icon.keyboard.outline:before {\\n  content: \\\"\\\\f11c\\\";\\n}\\n\\ni.icon.kiss.beam.outline:before {\\n  content: \\\"\\\\f597\\\";\\n}\\n\\ni.icon.kiss.outline:before {\\n  content: \\\"\\\\f596\\\";\\n}\\n\\ni.icon.kiss.wink.heart.outline:before {\\n  content: \\\"\\\\f598\\\";\\n}\\n\\ni.icon.laugh.beam.outline:before {\\n  content: \\\"\\\\f59a\\\";\\n}\\n\\ni.icon.laugh.outline:before {\\n  content: \\\"\\\\f599\\\";\\n}\\n\\ni.icon.laugh.squint.outline:before {\\n  content: \\\"\\\\f59b\\\";\\n}\\n\\ni.icon.laugh.wink.outline:before {\\n  content: \\\"\\\\f59c\\\";\\n}\\n\\ni.icon.lemon.outline:before {\\n  content: \\\"\\\\f094\\\";\\n}\\n\\ni.icon.life.ring.outline:before {\\n  content: \\\"\\\\f1cd\\\";\\n}\\n\\ni.icon.lightbulb.outline:before {\\n  content: \\\"\\\\f0eb\\\";\\n}\\n\\ni.icon.list.alternate.outline:before {\\n  content: \\\"\\\\f022\\\";\\n}\\n\\ni.icon.map.outline:before {\\n  content: \\\"\\\\f279\\\";\\n}\\n\\ni.icon.meh.blank.outline:before {\\n  content: \\\"\\\\f5a4\\\";\\n}\\n\\ni.icon.meh.outline:before {\\n  content: \\\"\\\\f11a\\\";\\n}\\n\\ni.icon.meh.rolling.eyes.outline:before {\\n  content: \\\"\\\\f5a5\\\";\\n}\\n\\ni.icon.minus.square.outline:before {\\n  content: \\\"\\\\f146\\\";\\n}\\n\\ni.icon.money.bill.alternate.outline:before {\\n  content: \\\"\\\\f3d1\\\";\\n}\\n\\ni.icon.moon.outline:before {\\n  content: \\\"\\\\f186\\\";\\n}\\n\\ni.icon.newspaper.outline:before {\\n  content: \\\"\\\\f1ea\\\";\\n}\\n\\ni.icon.object.group.outline:before {\\n  content: \\\"\\\\f247\\\";\\n}\\n\\ni.icon.object.ungroup.outline:before {\\n  content: \\\"\\\\f248\\\";\\n}\\n\\ni.icon.paper.plane.outline:before {\\n  content: \\\"\\\\f1d8\\\";\\n}\\n\\ni.icon.pause.circle.outline:before {\\n  content: \\\"\\\\f28b\\\";\\n}\\n\\ni.icon.play.circle.outline:before {\\n  content: \\\"\\\\f144\\\";\\n}\\n\\ni.icon.plus.square.outline:before {\\n  content: \\\"\\\\f0fe\\\";\\n}\\n\\ni.icon.question.circle.outline:before {\\n  content: \\\"\\\\f059\\\";\\n}\\n\\ni.icon.registered.outline:before {\\n  content: \\\"\\\\f25d\\\";\\n}\\n\\ni.icon.sad.cry.outline:before {\\n  content: \\\"\\\\f5b3\\\";\\n}\\n\\ni.icon.sad.tear.outline:before {\\n  content: \\\"\\\\f5b4\\\";\\n}\\n\\ni.icon.save.outline:before {\\n  content: \\\"\\\\f0c7\\\";\\n}\\n\\ni.icon.share.square.outline:before {\\n  content: \\\"\\\\f14d\\\";\\n}\\n\\ni.icon.smile.beam.outline:before {\\n  content: \\\"\\\\f5b8\\\";\\n}\\n\\ni.icon.smile.outline:before {\\n  content: \\\"\\\\f118\\\";\\n}\\n\\ni.icon.smile.wink.outline:before {\\n  content: \\\"\\\\f4da\\\";\\n}\\n\\ni.icon.snowflake.outline:before {\\n  content: \\\"\\\\f2dc\\\";\\n}\\n\\ni.icon.square.outline:before {\\n  content: \\\"\\\\f0c8\\\";\\n}\\n\\ni.icon.star.half.outline:before {\\n  content: \\\"\\\\f089\\\";\\n}\\n\\ni.icon.star.outline:before {\\n  content: \\\"\\\\f005\\\";\\n}\\n\\ni.icon.sticky.note.outline:before {\\n  content: \\\"\\\\f249\\\";\\n}\\n\\ni.icon.stop.circle.outline:before {\\n  content: \\\"\\\\f28d\\\";\\n}\\n\\ni.icon.sun.outline:before {\\n  content: \\\"\\\\f185\\\";\\n}\\n\\ni.icon.surprise.outline:before {\\n  content: \\\"\\\\f5c2\\\";\\n}\\n\\ni.icon.thumbs.down.outline:before {\\n  content: \\\"\\\\f165\\\";\\n}\\n\\ni.icon.thumbs.up.outline:before {\\n  content: \\\"\\\\f164\\\";\\n}\\n\\ni.icon.times.circle.outline:before {\\n  content: \\\"\\\\f057\\\";\\n}\\n\\ni.icon.tired.outline:before {\\n  content: \\\"\\\\f5c8\\\";\\n}\\n\\ni.icon.trash.alternate.outline:before {\\n  content: \\\"\\\\f2ed\\\";\\n}\\n\\ni.icon.user.circle.outline:before {\\n  content: \\\"\\\\f2bd\\\";\\n}\\n\\ni.icon.user.outline:before {\\n  content: \\\"\\\\f007\\\";\\n}\\n\\ni.icon.window.close.outline:before {\\n  content: \\\"\\\\f410\\\";\\n}\\n\\ni.icon.window.maximize.outline:before {\\n  content: \\\"\\\\f2d0\\\";\\n}\\n\\ni.icon.window.minimize.outline:before {\\n  content: \\\"\\\\f2d1\\\";\\n}\\n\\ni.icon.window.restore.outline:before {\\n  content: \\\"\\\\f2d2\\\";\\n}\\n\\n/*******************************\\n          Brand Icons\\n*******************************/\\n\\n/* Load & Define Brand Font */\\n\\n@font-face {\\n  font-family: 'brand-icons';\\n  src: url(\" + ___CSS_LOADER_URL___13___ + \");\\n  src: url(\" + ___CSS_LOADER_URL___14___ + \") format('embedded-opentype'), url(\" + ___CSS_LOADER_URL___15___ + \") format('woff2'), url(\" + ___CSS_LOADER_URL___16___ + \") format('woff'), url(\" + ___CSS_LOADER_URL___17___ + \") format('truetype'), url(\" + ___CSS_LOADER_URL___18___ + \") format('svg');\\n  font-style: normal;\\n  font-weight: normal;\\n  font-variant: normal;\\n  text-decoration: inherit;\\n  text-transform: none;\\n}\\n\\n/* Icons */\\n\\ni.icon.\\\\35 00px:before {\\n  content: \\\"\\\\f26e\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.accessible:before {\\n  content: \\\"\\\\f368\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.accusoft:before {\\n  content: \\\"\\\\f369\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.acquisitions.incorporated:before {\\n  content: \\\"\\\\f6af\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.adn:before {\\n  content: \\\"\\\\f170\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.adobe:before {\\n  content: \\\"\\\\f778\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.adversal:before {\\n  content: \\\"\\\\f36a\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.affiliatetheme:before {\\n  content: \\\"\\\\f36b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.airbnb:before {\\n  content: \\\"\\\\f834\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.algolia:before {\\n  content: \\\"\\\\f36c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.alipay:before {\\n  content: \\\"\\\\f642\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.amazon:before {\\n  content: \\\"\\\\f270\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.amazon.pay:before {\\n  content: \\\"\\\\f42c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.amilia:before {\\n  content: \\\"\\\\f36d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.android:before {\\n  content: \\\"\\\\f17b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.angellist:before {\\n  content: \\\"\\\\f209\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.angrycreative:before {\\n  content: \\\"\\\\f36e\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.angular:before {\\n  content: \\\"\\\\f420\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.app.store:before {\\n  content: \\\"\\\\f36f\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.app.store.ios:before {\\n  content: \\\"\\\\f370\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.apper:before {\\n  content: \\\"\\\\f371\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.apple:before {\\n  content: \\\"\\\\f179\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.apple.pay:before {\\n  content: \\\"\\\\f415\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.artstation:before {\\n  content: \\\"\\\\f77a\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.asymmetrik:before {\\n  content: \\\"\\\\f372\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.atlassian:before {\\n  content: \\\"\\\\f77b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.audible:before {\\n  content: \\\"\\\\f373\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.autoprefixer:before {\\n  content: \\\"\\\\f41c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.avianex:before {\\n  content: \\\"\\\\f374\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.aviato:before {\\n  content: \\\"\\\\f421\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.aws:before {\\n  content: \\\"\\\\f375\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.bandcamp:before {\\n  content: \\\"\\\\f2d5\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.battle.net:before {\\n  content: \\\"\\\\f835\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.behance:before {\\n  content: \\\"\\\\f1b4\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.behance.square:before {\\n  content: \\\"\\\\f1b5\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.bimobject:before {\\n  content: \\\"\\\\f378\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.bitbucket:before {\\n  content: \\\"\\\\f171\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.bitcoin:before {\\n  content: \\\"\\\\f379\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.bity:before {\\n  content: \\\"\\\\f37a\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.black.tie:before {\\n  content: \\\"\\\\f27e\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.blackberry:before {\\n  content: \\\"\\\\f37b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.blogger:before {\\n  content: \\\"\\\\f37c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.blogger.b:before {\\n  content: \\\"\\\\f37d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.bluetooth:before {\\n  content: \\\"\\\\f293\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.bluetooth.b:before {\\n  content: \\\"\\\\f294\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.bootstrap:before {\\n  content: \\\"\\\\f836\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.btc:before {\\n  content: \\\"\\\\f15a\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.buffer:before {\\n  content: \\\"\\\\f837\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.buromobelexperte:before {\\n  content: \\\"\\\\f37f\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.buysellads:before {\\n  content: \\\"\\\\f20d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.canadian.maple.leaf:before {\\n  content: \\\"\\\\f785\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.cc.amazon.pay:before {\\n  content: \\\"\\\\f42d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.cc.amex:before {\\n  content: \\\"\\\\f1f3\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.cc.apple.pay:before {\\n  content: \\\"\\\\f416\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.cc.diners.club:before {\\n  content: \\\"\\\\f24c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.cc.discover:before {\\n  content: \\\"\\\\f1f2\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.cc.jcb:before {\\n  content: \\\"\\\\f24b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.cc.mastercard:before {\\n  content: \\\"\\\\f1f1\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.cc.paypal:before {\\n  content: \\\"\\\\f1f4\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.cc.stripe:before {\\n  content: \\\"\\\\f1f5\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.cc.visa:before {\\n  content: \\\"\\\\f1f0\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.centercode:before {\\n  content: \\\"\\\\f380\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.centos:before {\\n  content: \\\"\\\\f789\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.chrome:before {\\n  content: \\\"\\\\f268\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.chromecast:before {\\n  content: \\\"\\\\f838\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.cloudscale:before {\\n  content: \\\"\\\\f383\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.cloudsmith:before {\\n  content: \\\"\\\\f384\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.cloudversify:before {\\n  content: \\\"\\\\f385\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.codepen:before {\\n  content: \\\"\\\\f1cb\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.codiepie:before {\\n  content: \\\"\\\\f284\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.confluence:before {\\n  content: \\\"\\\\f78d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.connectdevelop:before {\\n  content: \\\"\\\\f20e\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.contao:before {\\n  content: \\\"\\\\f26d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.cpanel:before {\\n  content: \\\"\\\\f388\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.creative.commons:before {\\n  content: \\\"\\\\f25e\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.creative.commons.by:before {\\n  content: \\\"\\\\f4e7\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.creative.commons.nc:before {\\n  content: \\\"\\\\f4e8\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.creative.commons.nc.eu:before {\\n  content: \\\"\\\\f4e9\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.creative.commons.nc.jp:before {\\n  content: \\\"\\\\f4ea\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.creative.commons.nd:before {\\n  content: \\\"\\\\f4eb\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.creative.commons.pd:before {\\n  content: \\\"\\\\f4ec\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.creative.commons.pd.alternate:before {\\n  content: \\\"\\\\f4ed\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.creative.commons.remix:before {\\n  content: \\\"\\\\f4ee\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.creative.commons.sa:before {\\n  content: \\\"\\\\f4ef\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.creative.commons.sampling:before {\\n  content: \\\"\\\\f4f0\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.creative.commons.sampling.plus:before {\\n  content: \\\"\\\\f4f1\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.creative.commons.share:before {\\n  content: \\\"\\\\f4f2\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.creative.commons.zero:before {\\n  content: \\\"\\\\f4f3\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.critical.role:before {\\n  content: \\\"\\\\f6c9\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.css3:before {\\n  content: \\\"\\\\f13c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.css3.alternate:before {\\n  content: \\\"\\\\f38b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.cuttlefish:before {\\n  content: \\\"\\\\f38c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.d.and.d:before {\\n  content: \\\"\\\\f38d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.d.and.d.beyond:before {\\n  content: \\\"\\\\f6ca\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.dashcube:before {\\n  content: \\\"\\\\f210\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.delicious:before {\\n  content: \\\"\\\\f1a5\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.deploydog:before {\\n  content: \\\"\\\\f38e\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.deskpro:before {\\n  content: \\\"\\\\f38f\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.dev:before {\\n  content: \\\"\\\\f6cc\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.deviantart:before {\\n  content: \\\"\\\\f1bd\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.dhl:before {\\n  content: \\\"\\\\f790\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.diaspora:before {\\n  content: \\\"\\\\f791\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.digg:before {\\n  content: \\\"\\\\f1a6\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.digital.ocean:before {\\n  content: \\\"\\\\f391\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.discord:before {\\n  content: \\\"\\\\f392\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.discourse:before {\\n  content: \\\"\\\\f393\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.dochub:before {\\n  content: \\\"\\\\f394\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.docker:before {\\n  content: \\\"\\\\f395\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.draft2digital:before {\\n  content: \\\"\\\\f396\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.dribbble:before {\\n  content: \\\"\\\\f17d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.dribbble.square:before {\\n  content: \\\"\\\\f397\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.dropbox:before {\\n  content: \\\"\\\\f16b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.drupal:before {\\n  content: \\\"\\\\f1a9\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.dyalog:before {\\n  content: \\\"\\\\f399\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.earlybirds:before {\\n  content: \\\"\\\\f39a\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.ebay:before {\\n  content: \\\"\\\\f4f4\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.edge:before {\\n  content: \\\"\\\\f282\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.elementor:before {\\n  content: \\\"\\\\f430\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.ello:before {\\n  content: \\\"\\\\f5f1\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.ember:before {\\n  content: \\\"\\\\f423\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.empire:before {\\n  content: \\\"\\\\f1d1\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.envira:before {\\n  content: \\\"\\\\f299\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.erlang:before {\\n  content: \\\"\\\\f39d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.ethereum:before {\\n  content: \\\"\\\\f42e\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.etsy:before {\\n  content: \\\"\\\\f2d7\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.evernote:before {\\n  content: \\\"\\\\f839\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.expeditedssl:before {\\n  content: \\\"\\\\f23e\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.facebook:before {\\n  content: \\\"\\\\f09a\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.facebook.f:before {\\n  content: \\\"\\\\f39e\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.facebook.messenger:before {\\n  content: \\\"\\\\f39f\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.facebook.square:before {\\n  content: \\\"\\\\f082\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.fantasy.flight.games:before {\\n  content: \\\"\\\\f6dc\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.fedex:before {\\n  content: \\\"\\\\f797\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.fedora:before {\\n  content: \\\"\\\\f798\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.figma:before {\\n  content: \\\"\\\\f799\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.firefox:before {\\n  content: \\\"\\\\f269\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.first.order:before {\\n  content: \\\"\\\\f2b0\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.first.order.alternate:before {\\n  content: \\\"\\\\f50a\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.firstdraft:before {\\n  content: \\\"\\\\f3a1\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.flickr:before {\\n  content: \\\"\\\\f16e\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.flipboard:before {\\n  content: \\\"\\\\f44d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.fly:before {\\n  content: \\\"\\\\f417\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.font.awesome:before {\\n  content: \\\"\\\\f2b4\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.font.awesome.alternate:before {\\n  content: \\\"\\\\f35c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.font.awesome.flag:before {\\n  content: \\\"\\\\f425\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.fonticons:before {\\n  content: \\\"\\\\f280\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.fonticons.fi:before {\\n  content: \\\"\\\\f3a2\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.fort.awesome:before {\\n  content: \\\"\\\\f286\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.fort.awesome.alternate:before {\\n  content: \\\"\\\\f3a3\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.forumbee:before {\\n  content: \\\"\\\\f211\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.foursquare:before {\\n  content: \\\"\\\\f180\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.free.code.camp:before {\\n  content: \\\"\\\\f2c5\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.freebsd:before {\\n  content: \\\"\\\\f3a4\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.fulcrum:before {\\n  content: \\\"\\\\f50b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.galactic.republic:before {\\n  content: \\\"\\\\f50c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.galactic.senate:before {\\n  content: \\\"\\\\f50d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.get.pocket:before {\\n  content: \\\"\\\\f265\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.gg:before {\\n  content: \\\"\\\\f260\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.gg.circle:before {\\n  content: \\\"\\\\f261\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.git:before {\\n  content: \\\"\\\\f1d3\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.git.alternate:before {\\n  content: \\\"\\\\f841\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.git.square:before {\\n  content: \\\"\\\\f1d2\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.github:before {\\n  content: \\\"\\\\f09b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.github.alternate:before {\\n  content: \\\"\\\\f113\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.github.square:before {\\n  content: \\\"\\\\f092\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.gitkraken:before {\\n  content: \\\"\\\\f3a6\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.gitlab:before {\\n  content: \\\"\\\\f296\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.gitter:before {\\n  content: \\\"\\\\f426\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.glide:before {\\n  content: \\\"\\\\f2a5\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.glide.g:before {\\n  content: \\\"\\\\f2a6\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.gofore:before {\\n  content: \\\"\\\\f3a7\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.goodreads:before {\\n  content: \\\"\\\\f3a8\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.goodreads.g:before {\\n  content: \\\"\\\\f3a9\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.google:before {\\n  content: \\\"\\\\f1a0\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.google.drive:before {\\n  content: \\\"\\\\f3aa\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.google.play:before {\\n  content: \\\"\\\\f3ab\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.google.plus:before {\\n  content: \\\"\\\\f2b3\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.google.plus.g:before {\\n  content: \\\"\\\\f0d5\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.google.plus.square:before {\\n  content: \\\"\\\\f0d4\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.google.wallet:before {\\n  content: \\\"\\\\f1ee\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.gratipay:before {\\n  content: \\\"\\\\f184\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.grav:before {\\n  content: \\\"\\\\f2d6\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.gripfire:before {\\n  content: \\\"\\\\f3ac\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.grunt:before {\\n  content: \\\"\\\\f3ad\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.gulp:before {\\n  content: \\\"\\\\f3ae\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.hacker.news:before {\\n  content: \\\"\\\\f1d4\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.hacker.news.square:before {\\n  content: \\\"\\\\f3af\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.hackerrank:before {\\n  content: \\\"\\\\f5f7\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.hips:before {\\n  content: \\\"\\\\f452\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.hire.a.helper:before {\\n  content: \\\"\\\\f3b0\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.hooli:before {\\n  content: \\\"\\\\f427\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.hornbill:before {\\n  content: \\\"\\\\f592\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.hotjar:before {\\n  content: \\\"\\\\f3b1\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.houzz:before {\\n  content: \\\"\\\\f27c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.html5:before {\\n  content: \\\"\\\\f13b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.hubspot:before {\\n  content: \\\"\\\\f3b2\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.imdb:before {\\n  content: \\\"\\\\f2d8\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.instagram:before {\\n  content: \\\"\\\\f16d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.intercom:before {\\n  content: \\\"\\\\f7af\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.internet.explorer:before {\\n  content: \\\"\\\\f26b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.invision:before {\\n  content: \\\"\\\\f7b0\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.ioxhost:before {\\n  content: \\\"\\\\f208\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.itch.io:before {\\n  content: \\\"\\\\f83a\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.itunes:before {\\n  content: \\\"\\\\f3b4\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.itunes.note:before {\\n  content: \\\"\\\\f3b5\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.java:before {\\n  content: \\\"\\\\f4e4\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.jedi.order:before {\\n  content: \\\"\\\\f50e\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.jenkins:before {\\n  content: \\\"\\\\f3b6\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.jira:before {\\n  content: \\\"\\\\f7b1\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.joget:before {\\n  content: \\\"\\\\f3b7\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.joomla:before {\\n  content: \\\"\\\\f1aa\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.js:before {\\n  content: \\\"\\\\f3b8\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.js.square:before {\\n  content: \\\"\\\\f3b9\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.jsfiddle:before {\\n  content: \\\"\\\\f1cc\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.kaggle:before {\\n  content: \\\"\\\\f5fa\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.keybase:before {\\n  content: \\\"\\\\f4f5\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.keycdn:before {\\n  content: \\\"\\\\f3ba\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.kickstarter:before {\\n  content: \\\"\\\\f3bb\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.kickstarter.k:before {\\n  content: \\\"\\\\f3bc\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.korvue:before {\\n  content: \\\"\\\\f42f\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.laravel:before {\\n  content: \\\"\\\\f3bd\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.lastfm:before {\\n  content: \\\"\\\\f202\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.lastfm.square:before {\\n  content: \\\"\\\\f203\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.leanpub:before {\\n  content: \\\"\\\\f212\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.lesscss:before {\\n  content: \\\"\\\\f41d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.linechat:before {\\n  content: \\\"\\\\f3c0\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.linkedin:before {\\n  content: \\\"\\\\f08c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.linkedin.in:before {\\n  content: \\\"\\\\f0e1\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.linode:before {\\n  content: \\\"\\\\f2b8\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.linux:before {\\n  content: \\\"\\\\f17c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.lyft:before {\\n  content: \\\"\\\\f3c3\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.magento:before {\\n  content: \\\"\\\\f3c4\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.mailchimp:before {\\n  content: \\\"\\\\f59e\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.mandalorian:before {\\n  content: \\\"\\\\f50f\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.markdown:before {\\n  content: \\\"\\\\f60f\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.mastodon:before {\\n  content: \\\"\\\\f4f6\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.maxcdn:before {\\n  content: \\\"\\\\f136\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.medapps:before {\\n  content: \\\"\\\\f3c6\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.medium:before {\\n  content: \\\"\\\\f23a\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.medium.m:before {\\n  content: \\\"\\\\f3c7\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.medrt:before {\\n  content: \\\"\\\\f3c8\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.meetup:before {\\n  content: \\\"\\\\f2e0\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.megaport:before {\\n  content: \\\"\\\\f5a3\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.mendeley:before {\\n  content: \\\"\\\\f7b3\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.microsoft:before {\\n  content: \\\"\\\\f3ca\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.mix:before {\\n  content: \\\"\\\\f3cb\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.mixcloud:before {\\n  content: \\\"\\\\f289\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.mizuni:before {\\n  content: \\\"\\\\f3cc\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.modx:before {\\n  content: \\\"\\\\f285\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.monero:before {\\n  content: \\\"\\\\f3d0\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.napster:before {\\n  content: \\\"\\\\f3d2\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.neos:before {\\n  content: \\\"\\\\f612\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.nimblr:before {\\n  content: \\\"\\\\f5a8\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.nintendo.switch:before {\\n  content: \\\"\\\\f418\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.node:before {\\n  content: \\\"\\\\f419\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.node.js:before {\\n  content: \\\"\\\\f3d3\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.npm:before {\\n  content: \\\"\\\\f3d4\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.ns8:before {\\n  content: \\\"\\\\f3d5\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.nutritionix:before {\\n  content: \\\"\\\\f3d6\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.odnoklassniki:before {\\n  content: \\\"\\\\f263\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.odnoklassniki.square:before {\\n  content: \\\"\\\\f264\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.old.republic:before {\\n  content: \\\"\\\\f510\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.opencart:before {\\n  content: \\\"\\\\f23d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.openid:before {\\n  content: \\\"\\\\f19b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.opera:before {\\n  content: \\\"\\\\f26a\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.optin.monster:before {\\n  content: \\\"\\\\f23c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.osi:before {\\n  content: \\\"\\\\f41a\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.page4:before {\\n  content: \\\"\\\\f3d7\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.pagelines:before {\\n  content: \\\"\\\\f18c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.palfed:before {\\n  content: \\\"\\\\f3d8\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.patreon:before {\\n  content: \\\"\\\\f3d9\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.paypal:before {\\n  content: \\\"\\\\f1ed\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.penny.arcade:before {\\n  content: \\\"\\\\f704\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.periscope:before {\\n  content: \\\"\\\\f3da\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.phabricator:before {\\n  content: \\\"\\\\f3db\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.phoenix.framework:before {\\n  content: \\\"\\\\f3dc\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.phoenix.squadron:before {\\n  content: \\\"\\\\f511\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.php:before {\\n  content: \\\"\\\\f457\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.pied.piper:before {\\n  content: \\\"\\\\f2ae\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.pied.piper.alternate:before {\\n  content: \\\"\\\\f1a8\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.pied.piper.hat:before {\\n  content: \\\"\\\\f4e5\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.pied.piper.pp:before {\\n  content: \\\"\\\\f1a7\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.pinterest:before {\\n  content: \\\"\\\\f0d2\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.pinterest.p:before {\\n  content: \\\"\\\\f231\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.pinterest.square:before {\\n  content: \\\"\\\\f0d3\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.playstation:before {\\n  content: \\\"\\\\f3df\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.product.hunt:before {\\n  content: \\\"\\\\f288\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.pushed:before {\\n  content: \\\"\\\\f3e1\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.python:before {\\n  content: \\\"\\\\f3e2\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.qq:before {\\n  content: \\\"\\\\f1d6\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.quinscape:before {\\n  content: \\\"\\\\f459\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.quora:before {\\n  content: \\\"\\\\f2c4\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.r.project:before {\\n  content: \\\"\\\\f4f7\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.raspberry.pi:before {\\n  content: \\\"\\\\f7bb\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.ravelry:before {\\n  content: \\\"\\\\f2d9\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.react:before {\\n  content: \\\"\\\\f41b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.reacteurope:before {\\n  content: \\\"\\\\f75d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.readme:before {\\n  content: \\\"\\\\f4d5\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.rebel:before {\\n  content: \\\"\\\\f1d0\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.reddit:before {\\n  content: \\\"\\\\f1a1\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.reddit.alien:before {\\n  content: \\\"\\\\f281\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.reddit.square:before {\\n  content: \\\"\\\\f1a2\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.redhat:before {\\n  content: \\\"\\\\f7bc\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.redriver:before {\\n  content: \\\"\\\\f3e3\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.redyeti:before {\\n  content: \\\"\\\\f69d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.renren:before {\\n  content: \\\"\\\\f18b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.replyd:before {\\n  content: \\\"\\\\f3e6\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.researchgate:before {\\n  content: \\\"\\\\f4f8\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.resolving:before {\\n  content: \\\"\\\\f3e7\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.rev:before {\\n  content: \\\"\\\\f5b2\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.rocketchat:before {\\n  content: \\\"\\\\f3e8\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.rockrms:before {\\n  content: \\\"\\\\f3e9\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.safari:before {\\n  content: \\\"\\\\f267\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.salesforce:before {\\n  content: \\\"\\\\f83b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.sass:before {\\n  content: \\\"\\\\f41e\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.schlix:before {\\n  content: \\\"\\\\f3ea\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.scribd:before {\\n  content: \\\"\\\\f28a\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.searchengin:before {\\n  content: \\\"\\\\f3eb\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.sellcast:before {\\n  content: \\\"\\\\f2da\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.sellsy:before {\\n  content: \\\"\\\\f213\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.servicestack:before {\\n  content: \\\"\\\\f3ec\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.shirtsinbulk:before {\\n  content: \\\"\\\\f214\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.shopware:before {\\n  content: \\\"\\\\f5b5\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.simplybuilt:before {\\n  content: \\\"\\\\f215\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.sistrix:before {\\n  content: \\\"\\\\f3ee\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.sith:before {\\n  content: \\\"\\\\f512\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.sketch:before {\\n  content: \\\"\\\\f7c6\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.skyatlas:before {\\n  content: \\\"\\\\f216\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.skype:before {\\n  content: \\\"\\\\f17e\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.slack:before {\\n  content: \\\"\\\\f198\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.slack.hash:before {\\n  content: \\\"\\\\f3ef\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.slideshare:before {\\n  content: \\\"\\\\f1e7\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.snapchat:before {\\n  content: \\\"\\\\f2ab\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.snapchat.ghost:before {\\n  content: \\\"\\\\f2ac\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.snapchat.square:before {\\n  content: \\\"\\\\f2ad\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.soundcloud:before {\\n  content: \\\"\\\\f1be\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.sourcetree:before {\\n  content: \\\"\\\\f7d3\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.speakap:before {\\n  content: \\\"\\\\f3f3\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.speaker.deck:before {\\n  content: \\\"\\\\f83c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.spotify:before {\\n  content: \\\"\\\\f1bc\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.squarespace:before {\\n  content: \\\"\\\\f5be\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.stack.exchange:before {\\n  content: \\\"\\\\f18d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.stack.overflow:before {\\n  content: \\\"\\\\f16c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.stackpath:before {\\n  content: \\\"\\\\f842\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.staylinked:before {\\n  content: \\\"\\\\f3f5\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.steam:before {\\n  content: \\\"\\\\f1b6\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.steam.square:before {\\n  content: \\\"\\\\f1b7\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.steam.symbol:before {\\n  content: \\\"\\\\f3f6\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.sticker.mule:before {\\n  content: \\\"\\\\f3f7\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.strava:before {\\n  content: \\\"\\\\f428\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.stripe:before {\\n  content: \\\"\\\\f429\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.stripe.s:before {\\n  content: \\\"\\\\f42a\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.studiovinari:before {\\n  content: \\\"\\\\f3f8\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.stumbleupon:before {\\n  content: \\\"\\\\f1a4\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.stumbleupon.circle:before {\\n  content: \\\"\\\\f1a3\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.superpowers:before {\\n  content: \\\"\\\\f2dd\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.supple:before {\\n  content: \\\"\\\\f3f9\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.suse:before {\\n  content: \\\"\\\\f7d6\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.symfony:before {\\n  content: \\\"\\\\f83d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.teamspeak:before {\\n  content: \\\"\\\\f4f9\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.telegram:before {\\n  content: \\\"\\\\f2c6\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.telegram.plane:before {\\n  content: \\\"\\\\f3fe\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.tencent.weibo:before {\\n  content: \\\"\\\\f1d5\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.themeco:before {\\n  content: \\\"\\\\f5c6\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.themeisle:before {\\n  content: \\\"\\\\f2b2\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.think.peaks:before {\\n  content: \\\"\\\\f731\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.trade.federation:before {\\n  content: \\\"\\\\f513\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.trello:before {\\n  content: \\\"\\\\f181\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.tripadvisor:before {\\n  content: \\\"\\\\f262\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.tumblr:before {\\n  content: \\\"\\\\f173\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.tumblr.square:before {\\n  content: \\\"\\\\f174\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.twitch:before {\\n  content: \\\"\\\\f1e8\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.twitter:before {\\n  content: \\\"\\\\f099\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.twitter.square:before {\\n  content: \\\"\\\\f081\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.typo3:before {\\n  content: \\\"\\\\f42b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.uber:before {\\n  content: \\\"\\\\f402\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.ubuntu:before {\\n  content: \\\"\\\\f7df\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.uikit:before {\\n  content: \\\"\\\\f403\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.uniregistry:before {\\n  content: \\\"\\\\f404\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.untappd:before {\\n  content: \\\"\\\\f405\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.ups:before {\\n  content: \\\"\\\\f7e0\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.usb:before {\\n  content: \\\"\\\\f287\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.usps:before {\\n  content: \\\"\\\\f7e1\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.ussunnah:before {\\n  content: \\\"\\\\f407\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.vaadin:before {\\n  content: \\\"\\\\f408\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.viacoin:before {\\n  content: \\\"\\\\f237\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.viadeo:before {\\n  content: \\\"\\\\f2a9\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.viadeo.square:before {\\n  content: \\\"\\\\f2aa\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.viber:before {\\n  content: \\\"\\\\f409\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.vimeo:before {\\n  content: \\\"\\\\f40a\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.vimeo.square:before {\\n  content: \\\"\\\\f194\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.vimeo.v:before {\\n  content: \\\"\\\\f27d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.vine:before {\\n  content: \\\"\\\\f1ca\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.vk:before {\\n  content: \\\"\\\\f189\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.vnv:before {\\n  content: \\\"\\\\f40b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.vuejs:before {\\n  content: \\\"\\\\f41f\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.waze:before {\\n  content: \\\"\\\\f83f\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.weebly:before {\\n  content: \\\"\\\\f5cc\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.weibo:before {\\n  content: \\\"\\\\f18a\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.weixin:before {\\n  content: \\\"\\\\f1d7\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.whatsapp:before {\\n  content: \\\"\\\\f232\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.whatsapp.square:before {\\n  content: \\\"\\\\f40c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.whmcs:before {\\n  content: \\\"\\\\f40d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.wikipedia.w:before {\\n  content: \\\"\\\\f266\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.windows:before {\\n  content: \\\"\\\\f17a\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.wix:before {\\n  content: \\\"\\\\f5cf\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.wizards.of.the.coast:before {\\n  content: \\\"\\\\f730\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.wolf.pack.battalion:before {\\n  content: \\\"\\\\f514\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.wordpress:before {\\n  content: \\\"\\\\f19a\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.wordpress.simple:before {\\n  content: \\\"\\\\f411\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.wpbeginner:before {\\n  content: \\\"\\\\f297\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.wpexplorer:before {\\n  content: \\\"\\\\f2de\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.wpforms:before {\\n  content: \\\"\\\\f298\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.wpressr:before {\\n  content: \\\"\\\\f3e4\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.xbox:before {\\n  content: \\\"\\\\f412\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.xing:before {\\n  content: \\\"\\\\f168\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.xing.square:before {\\n  content: \\\"\\\\f169\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.y.combinator:before {\\n  content: \\\"\\\\f23b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.yahoo:before {\\n  content: \\\"\\\\f19e\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.yammer:before {\\n  content: \\\"\\\\f840\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.yandex:before {\\n  content: \\\"\\\\f413\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.yandex.international:before {\\n  content: \\\"\\\\f414\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.yarn:before {\\n  content: \\\"\\\\f7e3\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.yelp:before {\\n  content: \\\"\\\\f1e9\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.yoast:before {\\n  content: \\\"\\\\f2b1\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.youtube:before {\\n  content: \\\"\\\\f167\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.youtube.square:before {\\n  content: \\\"\\\\f431\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.zhihu:before {\\n  content: \\\"\\\\f63f\\\";\\n  font-family: 'brand-icons';\\n}\\n\\n/* Aliases */\\n\\ni.icon.american.express:before {\\n  content: \\\"\\\\f1f3\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.american.express.card:before {\\n  content: \\\"\\\\f1f3\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.amex:before {\\n  content: \\\"\\\\f1f3\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.bitbucket.square:before {\\n  content: \\\"\\\\f171\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.bluetooth.alternative:before {\\n  content: \\\"\\\\f294\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.credit.card.amazon.pay:before {\\n  content: \\\"\\\\f42d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.credit.card.american.express:before {\\n  content: \\\"\\\\f1f3\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.credit.card.diners.club:before {\\n  content: \\\"\\\\f24c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.credit.card.discover:before {\\n  content: \\\"\\\\f1f2\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.credit.card.jcb:before {\\n  content: \\\"\\\\f24b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.credit.card.mastercard:before {\\n  content: \\\"\\\\f1f1\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.credit.card.paypal:before {\\n  content: \\\"\\\\f1f4\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.credit.card.stripe:before {\\n  content: \\\"\\\\f1f5\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.credit.card.visa:before {\\n  content: \\\"\\\\f1f0\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.diners.club:before {\\n  content: \\\"\\\\f24c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.diners.club.card:before {\\n  content: \\\"\\\\f24c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.discover:before {\\n  content: \\\"\\\\f1f2\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.discover.card:before {\\n  content: \\\"\\\\f1f2\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.disk.outline:before {\\n  content: \\\"\\\\f369\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.dribble:before {\\n  content: \\\"\\\\f17d\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.eercast:before {\\n  content: \\\"\\\\f2da\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.envira.gallery:before {\\n  content: \\\"\\\\f299\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.fa:before {\\n  content: \\\"\\\\f2b4\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.facebook.official:before {\\n  content: \\\"\\\\f082\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.five.hundred.pixels:before {\\n  content: \\\"\\\\f26e\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.gittip:before {\\n  content: \\\"\\\\f184\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.google.plus.circle:before {\\n  content: \\\"\\\\f2b3\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.google.plus.official:before {\\n  content: \\\"\\\\f2b3\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.japan.credit.bureau:before {\\n  content: \\\"\\\\f24b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.japan.credit.bureau.card:before {\\n  content: \\\"\\\\f24b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.jcb:before {\\n  content: \\\"\\\\f24b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.linkedin.square:before {\\n  content: \\\"\\\\f08c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.mastercard:before {\\n  content: \\\"\\\\f1f1\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.mastercard.card:before {\\n  content: \\\"\\\\f1f1\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.microsoft.edge:before {\\n  content: \\\"\\\\f282\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.ms.edge:before {\\n  content: \\\"\\\\f282\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.new.pied.piper:before {\\n  content: \\\"\\\\f2ae\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.optinmonster:before {\\n  content: \\\"\\\\f23c\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.paypal.card:before {\\n  content: \\\"\\\\f1f4\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.pied.piper.hat:before {\\n  content: \\\"\\\\f2ae\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.pocket:before {\\n  content: \\\"\\\\f265\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.stripe.card:before {\\n  content: \\\"\\\\f1f5\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.theme.isle:before {\\n  content: \\\"\\\\f2b2\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.visa:before {\\n  content: \\\"\\\\f1f0\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.visa.card:before {\\n  content: \\\"\\\\f1f0\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.wechat:before {\\n  content: \\\"\\\\f1d7\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.wikipedia:before {\\n  content: \\\"\\\\f266\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.wordpress.beginner:before {\\n  content: \\\"\\\\f297\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.wordpress.forms:before {\\n  content: \\\"\\\\f298\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.yc:before {\\n  content: \\\"\\\\f23b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.ycombinator:before {\\n  content: \\\"\\\\f23b\\\";\\n  font-family: 'brand-icons';\\n}\\n\\ni.icon.youtube.play:before {\\n  content: \\\"\\\\f167\\\";\\n  font-family: 'brand-icons';\\n}\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Image\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n             Image\\n*******************************/\\n\\n.ui.image {\\n  position: relative;\\n  display: inline-block;\\n  vertical-align: middle;\\n  max-width: 100%;\\n  background-color: transparent;\\n}\\n\\nimg.ui.image {\\n  display: block;\\n}\\n\\n.ui.image svg,\\n.ui.image img {\\n  display: block;\\n  max-width: 100%;\\n  height: auto;\\n}\\n\\n/*******************************\\n            States\\n*******************************/\\n\\n.ui.hidden.images,\\n.ui.hidden.image {\\n  display: none;\\n}\\n\\n.ui.hidden.transition.images,\\n.ui.hidden.transition.image {\\n  display: block;\\n  visibility: hidden;\\n}\\n\\n.ui.images > .hidden.transition {\\n  display: inline-block;\\n  visibility: hidden;\\n}\\n\\n.ui.disabled.images,\\n.ui.disabled.image {\\n  cursor: default;\\n  opacity: 0.45;\\n}\\n\\n/*******************************\\n          Variations\\n*******************************/\\n\\n/*--------------\\n     Inline\\n---------------*/\\n\\n.ui.inline.image,\\n.ui.inline.image svg,\\n.ui.inline.image img {\\n  display: inline-block;\\n}\\n\\n/*------------------\\n  Vertical Aligned\\n-------------------*/\\n\\n.ui.top.aligned.images .image,\\n.ui.top.aligned.image,\\n.ui.top.aligned.image svg,\\n.ui.top.aligned.image img {\\n  display: inline-block;\\n  vertical-align: top;\\n}\\n\\n.ui.middle.aligned.images .image,\\n.ui.middle.aligned.image,\\n.ui.middle.aligned.image svg,\\n.ui.middle.aligned.image img {\\n  display: inline-block;\\n  vertical-align: middle;\\n}\\n\\n.ui.bottom.aligned.images .image,\\n.ui.bottom.aligned.image,\\n.ui.bottom.aligned.image svg,\\n.ui.bottom.aligned.image img {\\n  display: inline-block;\\n  vertical-align: bottom;\\n}\\n\\n/*--------------\\n     Rounded\\n---------------*/\\n\\n.ui.rounded.images .image,\\n.ui.rounded.image,\\n.ui.rounded.images .image > *,\\n.ui.rounded.image > * {\\n  border-radius: 0.3125em;\\n}\\n\\n/*--------------\\n    Bordered\\n---------------*/\\n\\n.ui.bordered.images .image,\\n.ui.bordered.images img,\\n.ui.bordered.images svg,\\n.ui.bordered.image img,\\n.ui.bordered.image svg,\\nimg.ui.bordered.image {\\n  border: 1px solid rgba(0, 0, 0, 0.1);\\n}\\n\\n/*--------------\\n    Circular\\n---------------*/\\n\\n.ui.circular.images,\\n.ui.circular.image {\\n  overflow: hidden;\\n}\\n\\n.ui.circular.images .image,\\n.ui.circular.image,\\n.ui.circular.images .image > *,\\n.ui.circular.image > * {\\n  border-radius: 500rem;\\n}\\n\\n/*--------------\\n     Fluid\\n---------------*/\\n\\n.ui.fluid.images,\\n.ui.fluid.image,\\n.ui.fluid.images img,\\n.ui.fluid.images svg,\\n.ui.fluid.image svg,\\n.ui.fluid.image img {\\n  display: block;\\n  width: 100%;\\n  height: auto;\\n}\\n\\n/*--------------\\n     Avatar\\n---------------*/\\n\\n.ui.avatar.images .image,\\n.ui.avatar.images img,\\n.ui.avatar.images svg,\\n.ui.avatar.image img,\\n.ui.avatar.image svg,\\n.ui.avatar.image {\\n  margin-right: 0.25em;\\n  display: inline-block;\\n  width: 2em;\\n  height: 2em;\\n  border-radius: 500rem;\\n}\\n\\n/*-------------------\\n       Spaced\\n--------------------*/\\n\\n.ui.spaced.image {\\n  display: inline-block !important;\\n  margin-left: 0.5em;\\n  margin-right: 0.5em;\\n}\\n\\n.ui[class*=\\\"left spaced\\\"].image {\\n  margin-left: 0.5em;\\n  margin-right: 0;\\n}\\n\\n.ui[class*=\\\"right spaced\\\"].image {\\n  margin-left: 0;\\n  margin-right: 0.5em;\\n}\\n\\n/*-------------------\\n       Floated\\n--------------------*/\\n\\n.ui.floated.image,\\n.ui.floated.images {\\n  float: left;\\n  margin-right: 1em;\\n  margin-bottom: 1em;\\n}\\n\\n.ui.right.floated.images,\\n.ui.right.floated.image {\\n  float: right;\\n  margin-right: 0;\\n  margin-bottom: 1em;\\n  margin-left: 1em;\\n}\\n\\n.ui.floated.images:last-child,\\n.ui.floated.image:last-child {\\n  margin-bottom: 0;\\n}\\n\\n.ui.centered.images,\\n.ui.centered.image {\\n  margin-left: auto;\\n  margin-right: auto;\\n}\\n\\n/*--------------\\n     Sizes\\n---------------*/\\n\\n.ui.mini.images .image,\\n.ui.mini.images img,\\n.ui.mini.images svg,\\n.ui.mini.image {\\n  width: 35px;\\n  height: auto;\\n  font-size: 0.78571429rem;\\n}\\n\\n.ui.tiny.images .image,\\n.ui.tiny.images img,\\n.ui.tiny.images svg,\\n.ui.tiny.image {\\n  width: 80px;\\n  height: auto;\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.small.images .image,\\n.ui.small.images img,\\n.ui.small.images svg,\\n.ui.small.image {\\n  width: 150px;\\n  height: auto;\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.medium.images .image,\\n.ui.medium.images img,\\n.ui.medium.images svg,\\n.ui.medium.image {\\n  width: 300px;\\n  height: auto;\\n  font-size: 1rem;\\n}\\n\\n.ui.large.images .image,\\n.ui.large.images img,\\n.ui.large.images svg,\\n.ui.large.image {\\n  width: 450px;\\n  height: auto;\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.big.images .image,\\n.ui.big.images img,\\n.ui.big.images svg,\\n.ui.big.image {\\n  width: 600px;\\n  height: auto;\\n  font-size: 1.28571429rem;\\n}\\n\\n.ui.huge.images .image,\\n.ui.huge.images img,\\n.ui.huge.images svg,\\n.ui.huge.image {\\n  width: 800px;\\n  height: auto;\\n  font-size: 1.42857143rem;\\n}\\n\\n.ui.massive.images .image,\\n.ui.massive.images img,\\n.ui.massive.images svg,\\n.ui.massive.image {\\n  width: 960px;\\n  height: auto;\\n  font-size: 1.71428571rem;\\n}\\n\\n/*******************************\\n              Groups\\n*******************************/\\n\\n.ui.images {\\n  font-size: 0;\\n  margin: 0 -0.25rem 0;\\n}\\n\\n.ui.images .image,\\n.ui.images > img,\\n.ui.images > svg {\\n  display: inline-block;\\n  margin: 0 0.25rem 0.5rem;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Input\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n           Standard\\n*******************************/\\n\\n/*--------------------\\n        Inputs\\n---------------------*/\\n\\n.ui.input {\\n  position: relative;\\n  font-weight: normal;\\n  font-style: normal;\\n  display: -webkit-inline-box;\\n  display: -ms-inline-flexbox;\\n  display: inline-flex;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.input > input {\\n  margin: 0;\\n  max-width: 100%;\\n  -webkit-box-flex: 1;\\n      -ms-flex: 1 0 auto;\\n          flex: 1 0 auto;\\n  outline: none;\\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\\n  text-align: left;\\n  line-height: 1.21428571em;\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  padding: 0.67857143em 1em;\\n  background: #FFFFFF;\\n  border: 1px solid rgba(34, 36, 38, 0.15);\\n  color: rgba(0, 0, 0, 0.87);\\n  border-radius: 0.28571429rem;\\n  -webkit-transition: border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: box-shadow 0.1s ease, border-color 0.1s ease;\\n  transition: box-shadow 0.1s ease, border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/*--------------------\\n      Placeholder\\n---------------------*/\\n\\n/* browsers require these rules separate */\\n\\n.ui.input > input::-webkit-input-placeholder {\\n  color: rgba(191, 191, 191, 0.87);\\n}\\n\\n.ui.input > input::-moz-placeholder {\\n  color: rgba(191, 191, 191, 0.87);\\n}\\n\\n.ui.input > input:-ms-input-placeholder {\\n  color: rgba(191, 191, 191, 0.87);\\n}\\n\\n/*******************************\\n            States\\n*******************************/\\n\\n/*--------------------\\n        Disabled\\n---------------------*/\\n\\n.ui.disabled.input,\\n.ui.input:not(.disabled) input[disabled] {\\n  opacity: 0.45;\\n}\\n\\n.ui.disabled.input > input,\\n.ui.input:not(.disabled) input[disabled] {\\n  pointer-events: none;\\n}\\n\\n/*--------------------\\n        Active\\n---------------------*/\\n\\n.ui.input > input:active,\\n.ui.input.down input {\\n  border-color: rgba(0, 0, 0, 0.3);\\n  background: #FAFAFA;\\n  color: rgba(0, 0, 0, 0.87);\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/*--------------------\\n       Loading\\n---------------------*/\\n\\n.ui.loading.loading.input > i.icon:before {\\n  position: absolute;\\n  content: '';\\n  top: 50%;\\n  left: 50%;\\n  margin: -0.64285714em 0 0 -0.64285714em;\\n  width: 1.28571429em;\\n  height: 1.28571429em;\\n  border-radius: 500rem;\\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.loading.loading.input > i.icon:after {\\n  position: absolute;\\n  content: '';\\n  top: 50%;\\n  left: 50%;\\n  margin: -0.64285714em 0 0 -0.64285714em;\\n  width: 1.28571429em;\\n  height: 1.28571429em;\\n  -webkit-animation: loader 0.6s infinite linear;\\n  animation: loader 0.6s infinite linear;\\n  border: 0.2em solid #767676;\\n  border-radius: 500rem;\\n  -webkit-box-shadow: 0 0 0 1px transparent;\\n          box-shadow: 0 0 0 1px transparent;\\n}\\n\\n/*--------------------\\n        Focus\\n---------------------*/\\n\\n.ui.input.focus > input,\\n.ui.input > input:focus {\\n  border-color: #85B7D9;\\n  background: #FFFFFF;\\n  color: rgba(0, 0, 0, 0.8);\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.input.focus > input::-webkit-input-placeholder,\\n.ui.input > input:focus::-webkit-input-placeholder {\\n  color: rgba(115, 115, 115, 0.87);\\n}\\n\\n.ui.input.focus > input::-moz-placeholder,\\n.ui.input > input:focus::-moz-placeholder {\\n  color: rgba(115, 115, 115, 0.87);\\n}\\n\\n.ui.input.focus > input:-ms-input-placeholder,\\n.ui.input > input:focus:-ms-input-placeholder {\\n  color: rgba(115, 115, 115, 0.87);\\n}\\n\\n/*--------------------\\n        Error\\n---------------------*/\\n\\n.ui.input.error > input {\\n  background-color: #FFF6F6;\\n  border-color: #E0B4B4;\\n  color: #9F3A38;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/* Error Placeholder */\\n\\n.ui.input.error > input::-webkit-input-placeholder {\\n  color: #e7bdbc;\\n}\\n\\n.ui.input.error > input::-moz-placeholder {\\n  color: #e7bdbc;\\n}\\n\\n.ui.input.error > input:-ms-input-placeholder {\\n  color: #e7bdbc !important;\\n}\\n\\n/* Focused Error Placeholder */\\n\\n.ui.input.error > input:focus::-webkit-input-placeholder {\\n  color: #da9796;\\n}\\n\\n.ui.input.error > input:focus::-moz-placeholder {\\n  color: #da9796;\\n}\\n\\n.ui.input.error > input:focus:-ms-input-placeholder {\\n  color: #da9796 !important;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*--------------------\\n      Transparent\\n---------------------*/\\n\\n.ui.transparent.input > textarea,\\n.ui.transparent.input > input {\\n  border-color: transparent !important;\\n  background-color: transparent !important;\\n  padding: 0;\\n  -webkit-box-shadow: none !important;\\n          box-shadow: none !important;\\n  border-radius: 0 !important;\\n}\\n\\n.field .ui.transparent.input > textarea {\\n  padding: 0.67857143em 1em;\\n}\\n\\n/* Transparent Icon */\\n\\n:not(.field) > .ui.transparent.icon.input > i.icon {\\n  width: 1.1em;\\n}\\n\\n:not(.field) > .ui.transparent.icon.input > input {\\n  padding-left: 0;\\n  padding-right: 2em;\\n}\\n\\n:not(.field) > .ui.transparent[class*=\\\"left icon\\\"].input > input {\\n  padding-left: 2em;\\n  padding-right: 0;\\n}\\n\\n/* Transparent Inverted */\\n\\n.ui.transparent.inverted.input {\\n  color: #FFFFFF;\\n}\\n\\n.ui.ui.transparent.inverted.input > textarea,\\n.ui.ui.transparent.inverted.input > input {\\n  color: inherit;\\n}\\n\\n.ui.transparent.inverted.input > input::-webkit-input-placeholder {\\n  color: rgba(255, 255, 255, 0.5);\\n}\\n\\n.ui.transparent.inverted.input > input::-moz-placeholder {\\n  color: rgba(255, 255, 255, 0.5);\\n}\\n\\n.ui.transparent.inverted.input > input:-ms-input-placeholder {\\n  color: rgba(255, 255, 255, 0.5);\\n}\\n\\n/*--------------------\\n         Icon\\n---------------------*/\\n\\n.ui.icon.input > i.icon {\\n  cursor: default;\\n  position: absolute;\\n  line-height: 1;\\n  text-align: center;\\n  top: 0;\\n  right: 0;\\n  margin: 0;\\n  height: 100%;\\n  width: 2.67142857em;\\n  opacity: 0.5;\\n  border-radius: 0 0.28571429rem 0.28571429rem 0;\\n  -webkit-transition: opacity 0.3s ease;\\n  transition: opacity 0.3s ease;\\n}\\n\\n.ui.icon.input > i.icon:not(.link) {\\n  pointer-events: none;\\n}\\n\\n.ui.ui.icon.input > textarea,\\n.ui.ui.icon.input > input {\\n  padding-right: 2.67142857em;\\n}\\n\\n.ui.icon.input > i.icon:before,\\n.ui.icon.input > i.icon:after {\\n  left: 0;\\n  position: absolute;\\n  text-align: center;\\n  top: 50%;\\n  width: 100%;\\n  margin-top: -0.5em;\\n}\\n\\n.ui.icon.input > i.link.icon {\\n  cursor: pointer;\\n}\\n\\n.ui.icon.input > i.circular.icon {\\n  top: 0.35em;\\n  right: 0.5em;\\n}\\n\\n/* Left Icon Input */\\n\\n.ui[class*=\\\"left icon\\\"].input > i.icon {\\n  right: auto;\\n  left: 1px;\\n  border-radius: 0.28571429rem 0 0 0.28571429rem;\\n}\\n\\n.ui[class*=\\\"left icon\\\"].input > i.circular.icon {\\n  right: auto;\\n  left: 0.5em;\\n}\\n\\n.ui.ui[class*=\\\"left icon\\\"].input > textarea,\\n.ui.ui[class*=\\\"left icon\\\"].input > input {\\n  padding-left: 2.67142857em;\\n  padding-right: 1em;\\n}\\n\\n/* Focus */\\n\\n.ui.icon.input > textarea:focus ~ i.icon,\\n.ui.icon.input > input:focus ~ i.icon {\\n  opacity: 1;\\n}\\n\\n/*--------------------\\n        Labeled\\n---------------------*/\\n\\n/* Adjacent Label */\\n\\n.ui.labeled.input > .label {\\n  -webkit-box-flex: 0;\\n      -ms-flex: 0 0 auto;\\n          flex: 0 0 auto;\\n  margin: 0;\\n  font-size: 1em;\\n}\\n\\n.ui.labeled.input > .label:not(.corner) {\\n  padding-top: 0.78571429em;\\n  padding-bottom: 0.78571429em;\\n}\\n\\n/* Regular Label on Left */\\n\\n.ui.labeled.input:not([class*=\\\"corner labeled\\\"]) .label:first-child {\\n  border-top-right-radius: 0;\\n  border-bottom-right-radius: 0;\\n}\\n\\n.ui.labeled.input:not([class*=\\\"corner labeled\\\"]) .label:first-child + input {\\n  border-top-left-radius: 0;\\n  border-bottom-left-radius: 0;\\n  border-left-color: transparent;\\n}\\n\\n.ui.labeled.input:not([class*=\\\"corner labeled\\\"]) .label:first-child + input:focus {\\n  border-left-color: #85B7D9;\\n}\\n\\n/* Regular Label on Right */\\n\\n.ui[class*=\\\"right labeled\\\"].input > input {\\n  border-top-right-radius: 0 !important;\\n  border-bottom-right-radius: 0 !important;\\n  border-right-color: transparent !important;\\n}\\n\\n.ui[class*=\\\"right labeled\\\"].input > input + .label {\\n  border-top-left-radius: 0;\\n  border-bottom-left-radius: 0;\\n}\\n\\n.ui[class*=\\\"right labeled\\\"].input > input:focus {\\n  border-right-color: #85B7D9 !important;\\n}\\n\\n/* Corner Label */\\n\\n.ui.labeled.input .corner.label {\\n  top: 1px;\\n  right: 1px;\\n  font-size: 0.64285714em;\\n  border-radius: 0 0.28571429rem 0 0;\\n}\\n\\n/* Spacing with corner label */\\n\\n.ui[class*=\\\"corner labeled\\\"]:not([class*=\\\"left corner labeled\\\"]).labeled.input > textarea,\\n.ui[class*=\\\"corner labeled\\\"]:not([class*=\\\"left corner labeled\\\"]).labeled.input > input {\\n  padding-right: 2.5em !important;\\n}\\n\\n.ui[class*=\\\"corner labeled\\\"].icon.input:not([class*=\\\"left corner labeled\\\"]) > textarea,\\n.ui[class*=\\\"corner labeled\\\"].icon.input:not([class*=\\\"left corner labeled\\\"]) > input {\\n  padding-right: 3.25em !important;\\n}\\n\\n.ui[class*=\\\"corner labeled\\\"].icon.input:not([class*=\\\"left corner labeled\\\"]) > .icon {\\n  margin-right: 1.25em;\\n}\\n\\n/* Left Labeled */\\n\\n.ui[class*=\\\"left corner labeled\\\"].labeled.input > textarea,\\n.ui[class*=\\\"left corner labeled\\\"].labeled.input > input {\\n  padding-left: 2.5em !important;\\n}\\n\\n.ui[class*=\\\"left corner labeled\\\"].icon.input > textarea,\\n.ui[class*=\\\"left corner labeled\\\"].icon.input > input {\\n  padding-left: 3.25em !important;\\n}\\n\\n.ui[class*=\\\"left corner labeled\\\"].icon.input > .icon {\\n  margin-left: 1.25em;\\n}\\n\\n.ui.icon.input > textarea ~ .icon {\\n  height: 3em;\\n}\\n\\n:not(.field) > .ui.transparent.icon.input > textarea ~ .icon {\\n  height: 1.3em;\\n}\\n\\n/* Corner Label Position  */\\n\\n.ui.input > .ui.corner.label {\\n  top: 1px;\\n  right: 1px;\\n}\\n\\n.ui.input > .ui.left.corner.label {\\n  right: auto;\\n  left: 1px;\\n}\\n\\n/* Labeled and action input error */\\n\\n.ui.form > .field.error > .ui.action.input > .ui.button,\\n.ui.form > .field.error > .ui.labeled.input:not([class*=\\\"corner labeled\\\"]) > .ui.label,\\n.ui.action.input.error > .ui.button,\\n.ui.labeled.input.error:not([class*=\\\"corner labeled\\\"]) > .ui.label {\\n  border-top: 1px solid #E0B4B4;\\n  border-bottom: 1px solid #E0B4B4;\\n}\\n\\n.ui.form > .field.error > .ui.left.action.input > .ui.button,\\n.ui.form > .field.error > .ui.labeled.input:not(.right):not([class*=\\\"corner labeled\\\"]) > .ui.label,\\n.ui.left.action.input.error > .ui.button,\\n.ui.labeled.input.error:not(.right):not([class*=\\\"corner labeled\\\"]) > .ui.label {\\n  border-left: 1px solid #E0B4B4;\\n}\\n\\n.ui.form > .field.error > .ui.action.input:not(.left) > input + .ui.button,\\n.ui.form > .field.error > .ui.right.labeled.input:not([class*=\\\"corner labeled\\\"]) > input + .ui.label,\\n.ui.action.input.error:not(.left) > input + .ui.button,\\n.ui.right.labeled.input.error:not([class*=\\\"corner labeled\\\"]) > input + .ui.label {\\n  border-right: 1px solid #E0B4B4;\\n}\\n\\n.ui.form > .field.error > .ui.right.labeled.input:not([class*=\\\"corner labeled\\\"]) > .ui.label:first-child,\\n.ui.right.labeled.input.error:not([class*=\\\"corner labeled\\\"]) > .ui.label:first-child {\\n  border-left: 1px solid #E0B4B4;\\n}\\n\\n/*--------------------\\n        Action\\n---------------------*/\\n\\n.ui.action.input > .button,\\n.ui.action.input > .buttons {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-align: center;\\n      -ms-flex-align: center;\\n          align-items: center;\\n  -webkit-box-flex: 0;\\n      -ms-flex: 0 0 auto;\\n          flex: 0 0 auto;\\n}\\n\\n.ui.action.input > .button,\\n.ui.action.input > .buttons > .button {\\n  padding-top: 0.78571429em;\\n  padding-bottom: 0.78571429em;\\n  margin: 0;\\n}\\n\\n/* Button on Right */\\n\\n.ui.action.input:not([class*=\\\"left action\\\"]) > input {\\n  border-top-right-radius: 0 !important;\\n  border-bottom-right-radius: 0 !important;\\n  border-right-color: transparent !important;\\n}\\n\\n.ui.action.input:not([class*=\\\"left action\\\"]) > .dropdown:not(:first-child),\\n.ui.action.input:not([class*=\\\"left action\\\"]) > .button:not(:first-child),\\n.ui.action.input:not([class*=\\\"left action\\\"]) > .buttons:not(:first-child) > .button {\\n  border-radius: 0;\\n}\\n\\n.ui.action.input:not([class*=\\\"left action\\\"]) > .dropdown:last-child,\\n.ui.action.input:not([class*=\\\"left action\\\"]) > .button:last-child,\\n.ui.action.input:not([class*=\\\"left action\\\"]) > .buttons:last-child > .button {\\n  border-radius: 0 0.28571429rem 0.28571429rem 0;\\n}\\n\\n/* Input Focus */\\n\\n.ui.action.input:not([class*=\\\"left action\\\"]) > input:focus {\\n  border-right-color: #85B7D9 !important;\\n}\\n\\n/* Button on Left */\\n\\n.ui[class*=\\\"left action\\\"].input > input {\\n  border-top-left-radius: 0 !important;\\n  border-bottom-left-radius: 0 !important;\\n  border-left-color: transparent !important;\\n}\\n\\n.ui[class*=\\\"left action\\\"].input > .dropdown,\\n.ui[class*=\\\"left action\\\"].input > .button,\\n.ui[class*=\\\"left action\\\"].input > .buttons > .button {\\n  border-radius: 0;\\n}\\n\\n.ui[class*=\\\"left action\\\"].input > .dropdown:first-child,\\n.ui[class*=\\\"left action\\\"].input > .button:first-child,\\n.ui[class*=\\\"left action\\\"].input > .buttons:first-child > .button {\\n  border-radius: 0.28571429rem 0 0 0.28571429rem;\\n}\\n\\n/* Input Focus */\\n\\n.ui[class*=\\\"left action\\\"].input > input:focus {\\n  border-left-color: #85B7D9 !important;\\n}\\n\\n/*--------------------\\n       Inverted\\n---------------------*/\\n\\n/* Standard */\\n\\n.ui.inverted.input > input {\\n  border: none;\\n}\\n\\n/*--------------------\\n        Fluid\\n---------------------*/\\n\\n.ui.fluid.input {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n}\\n\\n.ui.fluid.input > input {\\n  width: 0 !important;\\n}\\n\\n/*--------------------\\n        Size\\n---------------------*/\\n\\n.ui.mini.input {\\n  font-size: 0.78571429em;\\n}\\n\\n.ui.tiny.input {\\n  font-size: 0.85714286em;\\n}\\n\\n.ui.small.input {\\n  font-size: 0.92857143em;\\n}\\n\\n.ui.input {\\n  font-size: 1em;\\n}\\n\\n.ui.large.input {\\n  font-size: 1.14285714em;\\n}\\n\\n.ui.big.input {\\n  font-size: 1.28571429em;\\n}\\n\\n.ui.huge.input {\\n  font-size: 1.42857143em;\\n}\\n\\n.ui.massive.input {\\n  font-size: 1.71428571em;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Label\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Label\\n*******************************/\\n\\n.ui.label {\\n  display: inline-block;\\n  line-height: 1;\\n  vertical-align: baseline;\\n  margin: 0 0.14285714em;\\n  background-color: #E8E8E8;\\n  background-image: none;\\n  padding: 0.5833em 0.833em;\\n  color: rgba(0, 0, 0, 0.6);\\n  text-transform: none;\\n  font-weight: bold;\\n  border: 0 solid transparent;\\n  border-radius: 0.28571429rem;\\n  -webkit-transition: background 0.1s ease;\\n  transition: background 0.1s ease;\\n}\\n\\n.ui.label:first-child {\\n  margin-left: 0;\\n}\\n\\n.ui.label:last-child {\\n  margin-right: 0;\\n}\\n\\n/* Link */\\n\\na.ui.label {\\n  cursor: pointer;\\n}\\n\\n/* Inside Link */\\n\\n.ui.label > a {\\n  cursor: pointer;\\n  color: inherit;\\n  opacity: 0.5;\\n  -webkit-transition: 0.1s opacity ease;\\n  transition: 0.1s opacity ease;\\n}\\n\\n.ui.label > a:hover {\\n  opacity: 1;\\n}\\n\\n/* Image */\\n\\n.ui.label > img {\\n  width: auto !important;\\n  vertical-align: middle;\\n  height: 2.1666em;\\n}\\n\\n/* Icon */\\n\\n.ui.left.icon.label > .icon,\\n.ui.label > .icon {\\n  width: auto;\\n  margin: 0 0.75em 0 0;\\n}\\n\\n/* Detail */\\n\\n.ui.label > .detail {\\n  display: inline-block;\\n  vertical-align: top;\\n  font-weight: bold;\\n  margin-left: 1em;\\n  opacity: 0.8;\\n}\\n\\n.ui.label > .detail .icon {\\n  margin: 0 0.25em 0 0;\\n}\\n\\n/* Removable label */\\n\\n.ui.label > .close.icon,\\n.ui.label > .delete.icon {\\n  cursor: pointer;\\n  font-size: 0.92857143em;\\n  opacity: 0.5;\\n  -webkit-transition: background 0.1s ease;\\n  transition: background 0.1s ease;\\n}\\n\\n.ui.label > .close.icon:hover,\\n.ui.label > .delete.icon:hover {\\n  opacity: 1;\\n}\\n\\n/* Backward compatible positioning */\\n\\n.ui.label.left.icon > .close.icon,\\n.ui.label.left.icon > .delete.icon {\\n  margin: 0 0.5em 0 0;\\n}\\n\\n.ui.label:not(.icon) > .close.icon,\\n.ui.label:not(.icon) > .delete.icon {\\n  margin: 0 0 0 0.5em;\\n}\\n\\n/* Label for only an icon */\\n\\n.ui.icon.label > .icon {\\n  margin: 0 auto;\\n}\\n\\n/* Right Side Icon */\\n\\n.ui.right.icon.label > .icon {\\n  margin: 0 0 0 0.75em;\\n}\\n\\n/*-------------------\\n       Group\\n--------------------*/\\n\\n.ui.labels > .label {\\n  margin: 0 0.5em 0.5em 0;\\n}\\n\\n/*-------------------\\n       Coupling\\n--------------------*/\\n\\n.ui.header > .ui.label {\\n  margin-top: -0.29165em;\\n}\\n\\n/* Remove border radius on attached segment */\\n\\n.ui.attached.segment > .ui.top.left.attached.label,\\n.ui.bottom.attached.segment > .ui.top.left.attached.label {\\n  border-top-left-radius: 0;\\n}\\n\\n.ui.attached.segment > .ui.top.right.attached.label,\\n.ui.bottom.attached.segment > .ui.top.right.attached.label {\\n  border-top-right-radius: 0;\\n}\\n\\n.ui.top.attached.segment > .ui.bottom.left.attached.label {\\n  border-bottom-left-radius: 0;\\n}\\n\\n.ui.top.attached.segment > .ui.bottom.right.attached.label {\\n  border-bottom-right-radius: 0;\\n}\\n\\n/* Padding on next content after a label */\\n\\n.ui.top.attached.label:first-child + :not(.attached),\\n.ui.top.attached.label + [class*=\\\"right floated\\\"] + * {\\n  margin-top: 2rem !important;\\n}\\n\\n.ui.bottom.attached.label:first-child ~ :last-child:not(.attached) {\\n  margin-top: 0;\\n  margin-bottom: 2rem !important;\\n}\\n\\n/*******************************\\n             Types\\n*******************************/\\n\\n.ui.image.label {\\n  width: auto !important;\\n  margin-top: 0;\\n  margin-bottom: 0;\\n  max-width: 9999px;\\n  vertical-align: baseline;\\n  text-transform: none;\\n  background: #E8E8E8;\\n  padding: 0.5833em 0.833em 0.5833em 0.5em;\\n  border-radius: 0.28571429rem;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.image.label img {\\n  display: inline-block;\\n  vertical-align: top;\\n  height: 2.1666em;\\n  margin: -0.5833em 0.5em -0.5833em -0.5em;\\n  border-radius: 0.28571429rem 0 0 0.28571429rem;\\n}\\n\\n.ui.image.label .detail {\\n  background: rgba(0, 0, 0, 0.1);\\n  margin: -0.5833em -0.833em -0.5833em 0.5em;\\n  padding: 0.5833em 0.833em;\\n  border-radius: 0 0.28571429rem 0.28571429rem 0;\\n}\\n\\n/*-------------------\\n         Tag\\n--------------------*/\\n\\n.ui.tag.labels .label,\\n.ui.tag.label {\\n  margin-left: 1em;\\n  position: relative;\\n  padding-left: 1.5em;\\n  padding-right: 1.5em;\\n  border-radius: 0 0.28571429rem 0.28571429rem 0;\\n  -webkit-transition: none;\\n  transition: none;\\n}\\n\\n.ui.tag.labels .label:before,\\n.ui.tag.label:before {\\n  position: absolute;\\n  -webkit-transform: translateY(-50%) translateX(50%) rotate(-45deg);\\n  transform: translateY(-50%) translateX(50%) rotate(-45deg);\\n  top: 50%;\\n  right: 100%;\\n  content: '';\\n  background-color: inherit;\\n  background-image: none;\\n  width: 1.56em;\\n  height: 1.56em;\\n  -webkit-transition: none;\\n  transition: none;\\n}\\n\\n.ui.tag.labels .label:after,\\n.ui.tag.label:after {\\n  position: absolute;\\n  content: '';\\n  top: 50%;\\n  left: -0.25em;\\n  margin-top: -0.25em;\\n  background-color: #FFFFFF;\\n  width: 0.5em;\\n  height: 0.5em;\\n  -webkit-box-shadow: 0 -1px 1px 0 rgba(0, 0, 0, 0.3);\\n          box-shadow: 0 -1px 1px 0 rgba(0, 0, 0, 0.3);\\n  border-radius: 500rem;\\n}\\n\\n.ui.basic.tag.labels .label:before,\\n.ui.basic.tag.label:before {\\n  border-color: inherit;\\n  border-width: 1px 0 0 1px;\\n  border-style: inherit;\\n  right: calc(100% + 1px);\\n}\\n\\n.ui.basic.tag.labels .label:after,\\n.ui.basic.tag.label:after {\\n  -webkit-box-shadow: 0 -1px 3px 0 rgba(0, 0, 0, 0.8);\\n          box-shadow: 0 -1px 3px 0 rgba(0, 0, 0, 0.8);\\n}\\n\\n/*-------------------\\n    Corner Label\\n--------------------*/\\n\\n.ui.corner.label {\\n  position: absolute;\\n  top: 0;\\n  right: 0;\\n  margin: 0;\\n  padding: 0;\\n  text-align: center;\\n  border-color: #E8E8E8;\\n  width: 4em;\\n  height: 4em;\\n  z-index: 1;\\n  -webkit-transition: border-color 0.1s ease;\\n  transition: border-color 0.1s ease;\\n}\\n\\n/* Icon Label */\\n\\n.ui.corner.label {\\n  background-color: transparent !important;\\n}\\n\\n.ui.corner.label:after {\\n  position: absolute;\\n  content: \\\"\\\";\\n  right: 0;\\n  top: 0;\\n  z-index: -1;\\n  width: 0;\\n  height: 0;\\n  background-color: transparent;\\n  border-top: 0 solid transparent;\\n  border-right: 4em solid transparent;\\n  border-bottom: 4em solid transparent;\\n  border-left: 0 solid transparent;\\n  border-right-color: inherit;\\n  -webkit-transition: border-color 0.1s ease;\\n  transition: border-color 0.1s ease;\\n}\\n\\n.ui.corner.label .icon {\\n  cursor: inherit;\\n  position: absolute;\\n  top: 0.64285714em;\\n  left: auto;\\n  right: 0.57142857em;\\n  font-size: 1.14285714em;\\n  margin: 0;\\n}\\n\\n/* Left Corner */\\n\\n.ui.left.corner.label,\\n.ui.left.corner.label:after {\\n  right: auto;\\n  left: 0;\\n}\\n\\n.ui.left.corner.label:after {\\n  border-top: 4em solid transparent;\\n  border-right: 4em solid transparent;\\n  border-bottom: 0 solid transparent;\\n  border-left: 0 solid transparent;\\n  border-top-color: inherit;\\n}\\n\\n.ui.left.corner.label .icon {\\n  left: 0.57142857em;\\n  right: auto;\\n}\\n\\n/* Segment */\\n\\n.ui.segment > .ui.corner.label {\\n  top: -1px;\\n  right: -1px;\\n}\\n\\n.ui.segment > .ui.left.corner.label {\\n  right: auto;\\n  left: -1px;\\n}\\n\\n/*-------------------\\n       Ribbon\\n--------------------*/\\n\\n.ui.ribbon.label {\\n  position: relative;\\n  margin: 0;\\n  min-width: -webkit-max-content;\\n  min-width: -moz-max-content;\\n  min-width: max-content;\\n  border-radius: 0 0.28571429rem 0.28571429rem 0;\\n  border-color: rgba(0, 0, 0, 0.15);\\n}\\n\\n.ui.ribbon.label:after {\\n  position: absolute;\\n  content: '';\\n  top: 100%;\\n  left: 0;\\n  background-color: transparent;\\n  border-style: solid;\\n  border-width: 0 1.2em 1.2em 0;\\n  border-color: transparent;\\n  border-right-color: inherit;\\n  width: 0;\\n  height: 0;\\n}\\n\\n/* Positioning */\\n\\n.ui.ribbon.label {\\n  left: calc(-1rem - 1.2em);\\n  margin-right: -1.2em;\\n  padding-left: calc(1rem + 1.2em);\\n  padding-right: 1.2em;\\n}\\n\\n.ui[class*=\\\"right ribbon\\\"].label {\\n  left: calc(100% + 1rem + 1.2em);\\n  padding-left: 1.2em;\\n  padding-right: calc(1rem + 1.2em);\\n}\\n\\n.ui.basic.ribbon.label {\\n  padding-top: calc(0.5833em - 1px);\\n  padding-bottom: calc(0.5833em - 1px);\\n}\\n\\n.ui.basic.ribbon.label:not([class*=\\\"right ribbon\\\"]) {\\n  padding-left: calc(1rem + 1.2em - 1px);\\n  padding-right: calc(1.2em - 1px);\\n}\\n\\n.ui.basic[class*=\\\"right ribbon\\\"].label {\\n  padding-left: calc(1.2em - 1px);\\n  padding-right: calc(1rem + 1.2em - 1px);\\n}\\n\\n.ui.basic.ribbon.label::after {\\n  top: calc(100% + 1px);\\n}\\n\\n.ui.basic.ribbon.label:not([class*=\\\"right ribbon\\\"])::after {\\n  left: -1px;\\n}\\n\\n.ui.basic[class*=\\\"right ribbon\\\"].label::after {\\n  right: -1px;\\n}\\n\\n/* Right Ribbon */\\n\\n.ui[class*=\\\"right ribbon\\\"].label {\\n  text-align: left;\\n  -webkit-transform: translateX(-100%);\\n  transform: translateX(-100%);\\n  border-radius: 0.28571429rem 0 0 0.28571429rem;\\n}\\n\\n.ui[class*=\\\"right ribbon\\\"].label:after {\\n  left: auto;\\n  right: 0;\\n  border-style: solid;\\n  border-width: 1.2em 1.2em 0 0;\\n  border-color: transparent;\\n  border-top-color: inherit;\\n}\\n\\n/* Inside Table */\\n\\n.ui.image > .ribbon.label,\\n.ui.card .image > .ribbon.label {\\n  position: absolute;\\n  top: 1rem;\\n}\\n\\n.ui.card .image > .ui.ribbon.label,\\n.ui.image > .ui.ribbon.label {\\n  left: calc(0.05rem - 1.2em);\\n}\\n\\n.ui.card .image > .ui[class*=\\\"right ribbon\\\"].label,\\n.ui.image > .ui[class*=\\\"right ribbon\\\"].label {\\n  left: calc(100% + -0.05rem + 1.2em);\\n  padding-left: 0.833em;\\n}\\n\\n/* Inside Table */\\n\\n.ui.table td > .ui.ribbon.label {\\n  left: calc(-1em - 1.2em);\\n}\\n\\n.ui.table td > .ui[class*=\\\"right ribbon\\\"].label {\\n  left: calc(100% + 1em + 1.2em);\\n  padding-left: 0.833em;\\n}\\n\\n/*-------------------\\n      Attached\\n--------------------*/\\n\\n.ui[class*=\\\"top attached\\\"].label,\\n.ui.attached.label {\\n  width: 100%;\\n  position: absolute;\\n  margin: 0;\\n  top: 0;\\n  left: 0;\\n  padding: 0.75em 1em;\\n  border-radius: 0.21428571rem 0.21428571rem 0 0;\\n}\\n\\n.ui[class*=\\\"bottom attached\\\"].label {\\n  top: auto;\\n  bottom: 0;\\n  border-radius: 0 0 0.21428571rem 0.21428571rem;\\n}\\n\\n.ui[class*=\\\"top left attached\\\"].label {\\n  width: auto;\\n  margin-top: 0 !important;\\n  border-radius: 0.21428571rem 0 0.28571429rem 0;\\n}\\n\\n.ui[class*=\\\"top right attached\\\"].label {\\n  width: auto;\\n  left: auto;\\n  right: 0;\\n  border-radius: 0 0.21428571rem 0 0.28571429rem;\\n}\\n\\n.ui[class*=\\\"bottom left attached\\\"].label {\\n  width: auto;\\n  top: auto;\\n  bottom: 0;\\n  border-radius: 0 0.28571429rem 0 0.21428571rem;\\n}\\n\\n.ui[class*=\\\"bottom right attached\\\"].label {\\n  top: auto;\\n  bottom: 0;\\n  left: auto;\\n  right: 0;\\n  width: auto;\\n  border-radius: 0.28571429rem 0 0.21428571rem 0;\\n}\\n\\n/*******************************\\n             States\\n*******************************/\\n\\n/*-------------------\\n      Disabled\\n--------------------*/\\n\\n.ui.label.disabled {\\n  opacity: 0.5;\\n}\\n\\n/*-------------------\\n        Hover\\n--------------------*/\\n\\n.ui.labels a.label:hover,\\na.ui.label:hover {\\n  background-color: #E0E0E0;\\n  border-color: #E0E0E0;\\n  background-image: none;\\n  color: rgba(0, 0, 0, 0.8);\\n}\\n\\n.ui.labels a.label:hover:before,\\na.ui.label:hover:before {\\n  color: rgba(0, 0, 0, 0.8);\\n}\\n\\n/*-------------------\\n        Active\\n--------------------*/\\n\\n.ui.active.label {\\n  background-color: #D0D0D0;\\n  border-color: #D0D0D0;\\n  background-image: none;\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n.ui.active.label:before {\\n  background-color: #D0D0D0;\\n  background-image: none;\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/*-------------------\\n     Active Hover\\n--------------------*/\\n\\n.ui.labels a.active.label:hover,\\na.ui.active.label:hover {\\n  background-color: #C8C8C8;\\n  border-color: #C8C8C8;\\n  background-image: none;\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n.ui.labels a.active.label:hover:before,\\na.ui.active.label:hover:before {\\n  background-color: #C8C8C8;\\n  background-image: none;\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/*-------------------\\n      Visible\\n--------------------*/\\n\\n.ui.labels.visible .label,\\n.ui.label.visible:not(.dropdown) {\\n  display: inline-block !important;\\n}\\n\\n/*-------------------\\n      Hidden\\n--------------------*/\\n\\n.ui.labels.hidden .label,\\n.ui.label.hidden {\\n  display: none !important;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*-------------------\\n        Basic\\n--------------------*/\\n\\n.ui.basic.labels .label,\\n.ui.basic.label {\\n  background: none #FFFFFF;\\n  border: 1px solid rgba(34, 36, 38, 0.15);\\n  color: rgba(0, 0, 0, 0.87);\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/* Link */\\n\\n.ui.basic.labels a.label:hover,\\na.ui.basic.label:hover {\\n  text-decoration: none;\\n  background: none #FFFFFF;\\n  color: #1e70bf;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/* Pointing */\\n\\n.ui.basic.pointing.label:before {\\n  border-color: inherit;\\n}\\n\\n/*-------------------\\n       Fluid\\n--------------------*/\\n\\n.ui.label.fluid,\\n.ui.fluid.labels > .label {\\n  width: 100%;\\n  -webkit-box-sizing: border-box;\\n          box-sizing: border-box;\\n}\\n\\n/*-------------------\\n       Inverted\\n--------------------*/\\n\\n.ui.inverted.labels .label,\\n.ui.inverted.label {\\n  color: rgba(255, 255, 255, 0.9);\\n  background-color: #b5b5b5;\\n}\\n\\n.ui.inverted.corner.label {\\n  border-color: #b5b5b5;\\n}\\n\\n.ui.inverted.corner.label:hover {\\n  border-color: #E8E8E8;\\n  -webkit-transition: none;\\n  transition: none;\\n}\\n\\n.ui.inverted.basic.labels .label,\\n.ui.inverted.basic.label,\\n.ui.inverted.basic.label:hover {\\n  border-color: rgba(255, 255, 255, 0.5);\\n  background: #1B1C1D;\\n}\\n\\n.ui.inverted.basic.label:hover {\\n  color: #4183C4;\\n}\\n\\n/*-------------------\\n       Colors\\n--------------------*/\\n\\n.ui.primary.labels .label,\\n.ui.ui.ui.primary.label {\\n  background-color: #2185D0;\\n  border-color: #2185D0;\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n/* Link */\\n\\n.ui.primary.labels a.label:hover,\\na.ui.ui.ui.primary.label:hover {\\n  background-color: #1678c2;\\n  border-color: #1678c2;\\n  color: #FFFFFF;\\n}\\n\\n/* Ribbon */\\n\\n.ui.ui.ui.primary.ribbon.label {\\n  border-color: #1a69a4;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.labels .primary.label,\\n.ui.ui.ui.basic.primary.label {\\n  background: none #FFFFFF;\\n  border-color: #2185D0;\\n  color: #2185D0;\\n}\\n\\n.ui.basic.labels a.primary.label:hover,\\na.ui.ui.ui.basic.primary.label:hover {\\n  background: none #FFFFFF;\\n  border-color: #1678c2;\\n  color: #1678c2;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.labels .primary.label,\\n.ui.ui.ui.inverted.primary.label {\\n  background-color: #54C8FF;\\n  border-color: #54C8FF;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Link */\\n\\n.ui.inverted.labels a.primary.label:hover,\\na.ui.ui.ui.inverted.primary.label:hover {\\n  background-color: #21b8ff;\\n  border-color: #21b8ff;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Ribbon */\\n\\n.ui.ui.ui.inverted.primary.ribbon.label {\\n  border-color: #21b8ff;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.basic.labels .primary.label,\\n.ui.ui.ui.inverted.basic.primary.label {\\n  background-color: #1B1C1D;\\n  border-color: #54C8FF;\\n  color: #54C8FF;\\n}\\n\\n.ui.inverted.basic.labels a.primary.label:hover,\\na.ui.ui.ui.inverted.basic.primary.label:hover {\\n  border-color: #21b8ff;\\n  background-color: #1B1C1D;\\n  color: #21b8ff;\\n}\\n\\n/* Inverted Basic Tags */\\n\\n.ui.inverted.basic.tag.labels .primary.label,\\n.ui.ui.ui.inverted.primary.basic.tag.label {\\n  border: 1px solid #54C8FF;\\n}\\n\\n.ui.inverted.basic.tag.labels .primary.label:before,\\n.ui.ui.ui.inverted.primary.basic.tag.label:before {\\n  border-color: inherit;\\n  border-width: 1px 0 0 1px;\\n  border-style: inherit;\\n  background-color: #1B1C1D;\\n  right: calc(100% + 1px);\\n}\\n\\n.ui.secondary.labels .label,\\n.ui.ui.ui.secondary.label {\\n  background-color: #1B1C1D;\\n  border-color: #1B1C1D;\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n/* Link */\\n\\n.ui.secondary.labels a.label:hover,\\na.ui.ui.ui.secondary.label:hover {\\n  background-color: #27292a;\\n  border-color: #27292a;\\n  color: #FFFFFF;\\n}\\n\\n/* Ribbon */\\n\\n.ui.ui.ui.secondary.ribbon.label {\\n  border-color: #020203;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.labels .secondary.label,\\n.ui.ui.ui.basic.secondary.label {\\n  background: none #FFFFFF;\\n  border-color: #1B1C1D;\\n  color: #1B1C1D;\\n}\\n\\n.ui.basic.labels a.secondary.label:hover,\\na.ui.ui.ui.basic.secondary.label:hover {\\n  background: none #FFFFFF;\\n  border-color: #27292a;\\n  color: #27292a;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.labels .secondary.label,\\n.ui.ui.ui.inverted.secondary.label {\\n  background-color: #545454;\\n  border-color: #545454;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Link */\\n\\n.ui.inverted.labels a.secondary.label:hover,\\na.ui.ui.ui.inverted.secondary.label:hover {\\n  background-color: #6e6e6e;\\n  border-color: #6e6e6e;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Ribbon */\\n\\n.ui.ui.ui.inverted.secondary.ribbon.label {\\n  border-color: #3b3b3b;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.basic.labels .secondary.label,\\n.ui.ui.ui.inverted.basic.secondary.label {\\n  background-color: #1B1C1D;\\n  border-color: #545454;\\n  color: #545454;\\n}\\n\\n.ui.inverted.basic.labels a.secondary.label:hover,\\na.ui.ui.ui.inverted.basic.secondary.label:hover {\\n  border-color: #6e6e6e;\\n  background-color: #1B1C1D;\\n  color: #6e6e6e;\\n}\\n\\n/* Inverted Basic Tags */\\n\\n.ui.inverted.basic.tag.labels .secondary.label,\\n.ui.ui.ui.inverted.secondary.basic.tag.label {\\n  border: 1px solid #545454;\\n}\\n\\n.ui.inverted.basic.tag.labels .secondary.label:before,\\n.ui.ui.ui.inverted.secondary.basic.tag.label:before {\\n  border-color: inherit;\\n  border-width: 1px 0 0 1px;\\n  border-style: inherit;\\n  background-color: #1B1C1D;\\n  right: calc(100% + 1px);\\n}\\n\\n.ui.red.labels .label,\\n.ui.ui.ui.red.label {\\n  background-color: #DB2828;\\n  border-color: #DB2828;\\n  color: #FFFFFF;\\n}\\n\\n/* Link */\\n\\n.ui.red.labels a.label:hover,\\na.ui.ui.ui.red.label:hover {\\n  background-color: #d01919;\\n  border-color: #d01919;\\n  color: #FFFFFF;\\n}\\n\\n/* Ribbon */\\n\\n.ui.ui.ui.red.ribbon.label {\\n  border-color: #b21e1e;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.labels .red.label,\\n.ui.ui.ui.basic.red.label {\\n  background: none #FFFFFF;\\n  border-color: #DB2828;\\n  color: #DB2828;\\n}\\n\\n.ui.basic.labels a.red.label:hover,\\na.ui.ui.ui.basic.red.label:hover {\\n  background: none #FFFFFF;\\n  border-color: #d01919;\\n  color: #d01919;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.labels .red.label,\\n.ui.ui.ui.inverted.red.label {\\n  background-color: #FF695E;\\n  border-color: #FF695E;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Link */\\n\\n.ui.inverted.labels a.red.label:hover,\\na.ui.ui.ui.inverted.red.label:hover {\\n  background-color: #ff392b;\\n  border-color: #ff392b;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Ribbon */\\n\\n.ui.ui.ui.inverted.red.ribbon.label {\\n  border-color: #ff392b;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.basic.labels .red.label,\\n.ui.ui.ui.inverted.basic.red.label {\\n  background-color: #1B1C1D;\\n  border-color: #FF695E;\\n  color: #FF695E;\\n}\\n\\n.ui.inverted.basic.labels a.red.label:hover,\\na.ui.ui.ui.inverted.basic.red.label:hover {\\n  border-color: #ff392b;\\n  background-color: #1B1C1D;\\n  color: #ff392b;\\n}\\n\\n/* Inverted Basic Tags */\\n\\n.ui.inverted.basic.tag.labels .red.label,\\n.ui.ui.ui.inverted.red.basic.tag.label {\\n  border: 1px solid #FF695E;\\n}\\n\\n.ui.inverted.basic.tag.labels .red.label:before,\\n.ui.ui.ui.inverted.red.basic.tag.label:before {\\n  border-color: inherit;\\n  border-width: 1px 0 0 1px;\\n  border-style: inherit;\\n  background-color: #1B1C1D;\\n  right: calc(100% + 1px);\\n}\\n\\n.ui.orange.labels .label,\\n.ui.ui.ui.orange.label {\\n  background-color: #F2711C;\\n  border-color: #F2711C;\\n  color: #FFFFFF;\\n}\\n\\n/* Link */\\n\\n.ui.orange.labels a.label:hover,\\na.ui.ui.ui.orange.label:hover {\\n  background-color: #f26202;\\n  border-color: #f26202;\\n  color: #FFFFFF;\\n}\\n\\n/* Ribbon */\\n\\n.ui.ui.ui.orange.ribbon.label {\\n  border-color: #cf590c;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.labels .orange.label,\\n.ui.ui.ui.basic.orange.label {\\n  background: none #FFFFFF;\\n  border-color: #F2711C;\\n  color: #F2711C;\\n}\\n\\n.ui.basic.labels a.orange.label:hover,\\na.ui.ui.ui.basic.orange.label:hover {\\n  background: none #FFFFFF;\\n  border-color: #f26202;\\n  color: #f26202;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.labels .orange.label,\\n.ui.ui.ui.inverted.orange.label {\\n  background-color: #FF851B;\\n  border-color: #FF851B;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Link */\\n\\n.ui.inverted.labels a.orange.label:hover,\\na.ui.ui.ui.inverted.orange.label:hover {\\n  background-color: #e76b00;\\n  border-color: #e76b00;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Ribbon */\\n\\n.ui.ui.ui.inverted.orange.ribbon.label {\\n  border-color: #e76b00;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.basic.labels .orange.label,\\n.ui.ui.ui.inverted.basic.orange.label {\\n  background-color: #1B1C1D;\\n  border-color: #FF851B;\\n  color: #FF851B;\\n}\\n\\n.ui.inverted.basic.labels a.orange.label:hover,\\na.ui.ui.ui.inverted.basic.orange.label:hover {\\n  border-color: #e76b00;\\n  background-color: #1B1C1D;\\n  color: #e76b00;\\n}\\n\\n/* Inverted Basic Tags */\\n\\n.ui.inverted.basic.tag.labels .orange.label,\\n.ui.ui.ui.inverted.orange.basic.tag.label {\\n  border: 1px solid #FF851B;\\n}\\n\\n.ui.inverted.basic.tag.labels .orange.label:before,\\n.ui.ui.ui.inverted.orange.basic.tag.label:before {\\n  border-color: inherit;\\n  border-width: 1px 0 0 1px;\\n  border-style: inherit;\\n  background-color: #1B1C1D;\\n  right: calc(100% + 1px);\\n}\\n\\n.ui.yellow.labels .label,\\n.ui.ui.ui.yellow.label {\\n  background-color: #FBBD08;\\n  border-color: #FBBD08;\\n  color: #FFFFFF;\\n}\\n\\n/* Link */\\n\\n.ui.yellow.labels a.label:hover,\\na.ui.ui.ui.yellow.label:hover {\\n  background-color: #eaae00;\\n  border-color: #eaae00;\\n  color: #FFFFFF;\\n}\\n\\n/* Ribbon */\\n\\n.ui.ui.ui.yellow.ribbon.label {\\n  border-color: #cd9903;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.labels .yellow.label,\\n.ui.ui.ui.basic.yellow.label {\\n  background: none #FFFFFF;\\n  border-color: #FBBD08;\\n  color: #FBBD08;\\n}\\n\\n.ui.basic.labels a.yellow.label:hover,\\na.ui.ui.ui.basic.yellow.label:hover {\\n  background: none #FFFFFF;\\n  border-color: #eaae00;\\n  color: #eaae00;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.labels .yellow.label,\\n.ui.ui.ui.inverted.yellow.label {\\n  background-color: #FFE21F;\\n  border-color: #FFE21F;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Link */\\n\\n.ui.inverted.labels a.yellow.label:hover,\\na.ui.ui.ui.inverted.yellow.label:hover {\\n  background-color: #ebcd00;\\n  border-color: #ebcd00;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Ribbon */\\n\\n.ui.ui.ui.inverted.yellow.ribbon.label {\\n  border-color: #ebcd00;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.basic.labels .yellow.label,\\n.ui.ui.ui.inverted.basic.yellow.label {\\n  background-color: #1B1C1D;\\n  border-color: #FFE21F;\\n  color: #FFE21F;\\n}\\n\\n.ui.inverted.basic.labels a.yellow.label:hover,\\na.ui.ui.ui.inverted.basic.yellow.label:hover {\\n  border-color: #ebcd00;\\n  background-color: #1B1C1D;\\n  color: #ebcd00;\\n}\\n\\n/* Inverted Basic Tags */\\n\\n.ui.inverted.basic.tag.labels .yellow.label,\\n.ui.ui.ui.inverted.yellow.basic.tag.label {\\n  border: 1px solid #FFE21F;\\n}\\n\\n.ui.inverted.basic.tag.labels .yellow.label:before,\\n.ui.ui.ui.inverted.yellow.basic.tag.label:before {\\n  border-color: inherit;\\n  border-width: 1px 0 0 1px;\\n  border-style: inherit;\\n  background-color: #1B1C1D;\\n  right: calc(100% + 1px);\\n}\\n\\n.ui.olive.labels .label,\\n.ui.ui.ui.olive.label {\\n  background-color: #B5CC18;\\n  border-color: #B5CC18;\\n  color: #FFFFFF;\\n}\\n\\n/* Link */\\n\\n.ui.olive.labels a.label:hover,\\na.ui.ui.ui.olive.label:hover {\\n  background-color: #a7bd0d;\\n  border-color: #a7bd0d;\\n  color: #FFFFFF;\\n}\\n\\n/* Ribbon */\\n\\n.ui.ui.ui.olive.ribbon.label {\\n  border-color: #8d9e13;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.labels .olive.label,\\n.ui.ui.ui.basic.olive.label {\\n  background: none #FFFFFF;\\n  border-color: #B5CC18;\\n  color: #B5CC18;\\n}\\n\\n.ui.basic.labels a.olive.label:hover,\\na.ui.ui.ui.basic.olive.label:hover {\\n  background: none #FFFFFF;\\n  border-color: #a7bd0d;\\n  color: #a7bd0d;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.labels .olive.label,\\n.ui.ui.ui.inverted.olive.label {\\n  background-color: #D9E778;\\n  border-color: #D9E778;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Link */\\n\\n.ui.inverted.labels a.olive.label:hover,\\na.ui.ui.ui.inverted.olive.label:hover {\\n  background-color: #d2e745;\\n  border-color: #d2e745;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Ribbon */\\n\\n.ui.ui.ui.inverted.olive.ribbon.label {\\n  border-color: #cddf4d;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.basic.labels .olive.label,\\n.ui.ui.ui.inverted.basic.olive.label {\\n  background-color: #1B1C1D;\\n  border-color: #D9E778;\\n  color: #D9E778;\\n}\\n\\n.ui.inverted.basic.labels a.olive.label:hover,\\na.ui.ui.ui.inverted.basic.olive.label:hover {\\n  border-color: #d2e745;\\n  background-color: #1B1C1D;\\n  color: #d2e745;\\n}\\n\\n/* Inverted Basic Tags */\\n\\n.ui.inverted.basic.tag.labels .olive.label,\\n.ui.ui.ui.inverted.olive.basic.tag.label {\\n  border: 1px solid #D9E778;\\n}\\n\\n.ui.inverted.basic.tag.labels .olive.label:before,\\n.ui.ui.ui.inverted.olive.basic.tag.label:before {\\n  border-color: inherit;\\n  border-width: 1px 0 0 1px;\\n  border-style: inherit;\\n  background-color: #1B1C1D;\\n  right: calc(100% + 1px);\\n}\\n\\n.ui.green.labels .label,\\n.ui.ui.ui.green.label {\\n  background-color: #21BA45;\\n  border-color: #21BA45;\\n  color: #FFFFFF;\\n}\\n\\n/* Link */\\n\\n.ui.green.labels a.label:hover,\\na.ui.ui.ui.green.label:hover {\\n  background-color: #16ab39;\\n  border-color: #16ab39;\\n  color: #FFFFFF;\\n}\\n\\n/* Ribbon */\\n\\n.ui.ui.ui.green.ribbon.label {\\n  border-color: #198f35;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.labels .green.label,\\n.ui.ui.ui.basic.green.label {\\n  background: none #FFFFFF;\\n  border-color: #21BA45;\\n  color: #21BA45;\\n}\\n\\n.ui.basic.labels a.green.label:hover,\\na.ui.ui.ui.basic.green.label:hover {\\n  background: none #FFFFFF;\\n  border-color: #16ab39;\\n  color: #16ab39;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.labels .green.label,\\n.ui.ui.ui.inverted.green.label {\\n  background-color: #2ECC40;\\n  border-color: #2ECC40;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Link */\\n\\n.ui.inverted.labels a.green.label:hover,\\na.ui.ui.ui.inverted.green.label:hover {\\n  background-color: #1ea92e;\\n  border-color: #1ea92e;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Ribbon */\\n\\n.ui.ui.ui.inverted.green.ribbon.label {\\n  border-color: #25a233;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.basic.labels .green.label,\\n.ui.ui.ui.inverted.basic.green.label {\\n  background-color: #1B1C1D;\\n  border-color: #2ECC40;\\n  color: #2ECC40;\\n}\\n\\n.ui.inverted.basic.labels a.green.label:hover,\\na.ui.ui.ui.inverted.basic.green.label:hover {\\n  border-color: #1ea92e;\\n  background-color: #1B1C1D;\\n  color: #1ea92e;\\n}\\n\\n/* Inverted Basic Tags */\\n\\n.ui.inverted.basic.tag.labels .green.label,\\n.ui.ui.ui.inverted.green.basic.tag.label {\\n  border: 1px solid #2ECC40;\\n}\\n\\n.ui.inverted.basic.tag.labels .green.label:before,\\n.ui.ui.ui.inverted.green.basic.tag.label:before {\\n  border-color: inherit;\\n  border-width: 1px 0 0 1px;\\n  border-style: inherit;\\n  background-color: #1B1C1D;\\n  right: calc(100% + 1px);\\n}\\n\\n.ui.teal.labels .label,\\n.ui.ui.ui.teal.label {\\n  background-color: #00B5AD;\\n  border-color: #00B5AD;\\n  color: #FFFFFF;\\n}\\n\\n/* Link */\\n\\n.ui.teal.labels a.label:hover,\\na.ui.ui.ui.teal.label:hover {\\n  background-color: #009c95;\\n  border-color: #009c95;\\n  color: #FFFFFF;\\n}\\n\\n/* Ribbon */\\n\\n.ui.ui.ui.teal.ribbon.label {\\n  border-color: #00827c;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.labels .teal.label,\\n.ui.ui.ui.basic.teal.label {\\n  background: none #FFFFFF;\\n  border-color: #00B5AD;\\n  color: #00B5AD;\\n}\\n\\n.ui.basic.labels a.teal.label:hover,\\na.ui.ui.ui.basic.teal.label:hover {\\n  background: none #FFFFFF;\\n  border-color: #009c95;\\n  color: #009c95;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.labels .teal.label,\\n.ui.ui.ui.inverted.teal.label {\\n  background-color: #6DFFFF;\\n  border-color: #6DFFFF;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Link */\\n\\n.ui.inverted.labels a.teal.label:hover,\\na.ui.ui.ui.inverted.teal.label:hover {\\n  background-color: #3affff;\\n  border-color: #3affff;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Ribbon */\\n\\n.ui.ui.ui.inverted.teal.ribbon.label {\\n  border-color: #3affff;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.basic.labels .teal.label,\\n.ui.ui.ui.inverted.basic.teal.label {\\n  background-color: #1B1C1D;\\n  border-color: #6DFFFF;\\n  color: #6DFFFF;\\n}\\n\\n.ui.inverted.basic.labels a.teal.label:hover,\\na.ui.ui.ui.inverted.basic.teal.label:hover {\\n  border-color: #3affff;\\n  background-color: #1B1C1D;\\n  color: #3affff;\\n}\\n\\n/* Inverted Basic Tags */\\n\\n.ui.inverted.basic.tag.labels .teal.label,\\n.ui.ui.ui.inverted.teal.basic.tag.label {\\n  border: 1px solid #6DFFFF;\\n}\\n\\n.ui.inverted.basic.tag.labels .teal.label:before,\\n.ui.ui.ui.inverted.teal.basic.tag.label:before {\\n  border-color: inherit;\\n  border-width: 1px 0 0 1px;\\n  border-style: inherit;\\n  background-color: #1B1C1D;\\n  right: calc(100% + 1px);\\n}\\n\\n.ui.blue.labels .label,\\n.ui.ui.ui.blue.label {\\n  background-color: #2185D0;\\n  border-color: #2185D0;\\n  color: #FFFFFF;\\n}\\n\\n/* Link */\\n\\n.ui.blue.labels a.label:hover,\\na.ui.ui.ui.blue.label:hover {\\n  background-color: #1678c2;\\n  border-color: #1678c2;\\n  color: #FFFFFF;\\n}\\n\\n/* Ribbon */\\n\\n.ui.ui.ui.blue.ribbon.label {\\n  border-color: #1a69a4;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.labels .blue.label,\\n.ui.ui.ui.basic.blue.label {\\n  background: none #FFFFFF;\\n  border-color: #2185D0;\\n  color: #2185D0;\\n}\\n\\n.ui.basic.labels a.blue.label:hover,\\na.ui.ui.ui.basic.blue.label:hover {\\n  background: none #FFFFFF;\\n  border-color: #1678c2;\\n  color: #1678c2;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.labels .blue.label,\\n.ui.ui.ui.inverted.blue.label {\\n  background-color: #54C8FF;\\n  border-color: #54C8FF;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Link */\\n\\n.ui.inverted.labels a.blue.label:hover,\\na.ui.ui.ui.inverted.blue.label:hover {\\n  background-color: #21b8ff;\\n  border-color: #21b8ff;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Ribbon */\\n\\n.ui.ui.ui.inverted.blue.ribbon.label {\\n  border-color: #21b8ff;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.basic.labels .blue.label,\\n.ui.ui.ui.inverted.basic.blue.label {\\n  background-color: #1B1C1D;\\n  border-color: #54C8FF;\\n  color: #54C8FF;\\n}\\n\\n.ui.inverted.basic.labels a.blue.label:hover,\\na.ui.ui.ui.inverted.basic.blue.label:hover {\\n  border-color: #21b8ff;\\n  background-color: #1B1C1D;\\n  color: #21b8ff;\\n}\\n\\n/* Inverted Basic Tags */\\n\\n.ui.inverted.basic.tag.labels .blue.label,\\n.ui.ui.ui.inverted.blue.basic.tag.label {\\n  border: 1px solid #54C8FF;\\n}\\n\\n.ui.inverted.basic.tag.labels .blue.label:before,\\n.ui.ui.ui.inverted.blue.basic.tag.label:before {\\n  border-color: inherit;\\n  border-width: 1px 0 0 1px;\\n  border-style: inherit;\\n  background-color: #1B1C1D;\\n  right: calc(100% + 1px);\\n}\\n\\n.ui.violet.labels .label,\\n.ui.ui.ui.violet.label {\\n  background-color: #6435C9;\\n  border-color: #6435C9;\\n  color: #FFFFFF;\\n}\\n\\n/* Link */\\n\\n.ui.violet.labels a.label:hover,\\na.ui.ui.ui.violet.label:hover {\\n  background-color: #5829bb;\\n  border-color: #5829bb;\\n  color: #FFFFFF;\\n}\\n\\n/* Ribbon */\\n\\n.ui.ui.ui.violet.ribbon.label {\\n  border-color: #502aa1;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.labels .violet.label,\\n.ui.ui.ui.basic.violet.label {\\n  background: none #FFFFFF;\\n  border-color: #6435C9;\\n  color: #6435C9;\\n}\\n\\n.ui.basic.labels a.violet.label:hover,\\na.ui.ui.ui.basic.violet.label:hover {\\n  background: none #FFFFFF;\\n  border-color: #5829bb;\\n  color: #5829bb;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.labels .violet.label,\\n.ui.ui.ui.inverted.violet.label {\\n  background-color: #A291FB;\\n  border-color: #A291FB;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Link */\\n\\n.ui.inverted.labels a.violet.label:hover,\\na.ui.ui.ui.inverted.violet.label:hover {\\n  background-color: #745aff;\\n  border-color: #745aff;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Ribbon */\\n\\n.ui.ui.ui.inverted.violet.ribbon.label {\\n  border-color: #7860f9;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.basic.labels .violet.label,\\n.ui.ui.ui.inverted.basic.violet.label {\\n  background-color: #1B1C1D;\\n  border-color: #A291FB;\\n  color: #A291FB;\\n}\\n\\n.ui.inverted.basic.labels a.violet.label:hover,\\na.ui.ui.ui.inverted.basic.violet.label:hover {\\n  border-color: #745aff;\\n  background-color: #1B1C1D;\\n  color: #745aff;\\n}\\n\\n/* Inverted Basic Tags */\\n\\n.ui.inverted.basic.tag.labels .violet.label,\\n.ui.ui.ui.inverted.violet.basic.tag.label {\\n  border: 1px solid #A291FB;\\n}\\n\\n.ui.inverted.basic.tag.labels .violet.label:before,\\n.ui.ui.ui.inverted.violet.basic.tag.label:before {\\n  border-color: inherit;\\n  border-width: 1px 0 0 1px;\\n  border-style: inherit;\\n  background-color: #1B1C1D;\\n  right: calc(100% + 1px);\\n}\\n\\n.ui.purple.labels .label,\\n.ui.ui.ui.purple.label {\\n  background-color: #A333C8;\\n  border-color: #A333C8;\\n  color: #FFFFFF;\\n}\\n\\n/* Link */\\n\\n.ui.purple.labels a.label:hover,\\na.ui.ui.ui.purple.label:hover {\\n  background-color: #9627ba;\\n  border-color: #9627ba;\\n  color: #FFFFFF;\\n}\\n\\n/* Ribbon */\\n\\n.ui.ui.ui.purple.ribbon.label {\\n  border-color: #82299f;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.labels .purple.label,\\n.ui.ui.ui.basic.purple.label {\\n  background: none #FFFFFF;\\n  border-color: #A333C8;\\n  color: #A333C8;\\n}\\n\\n.ui.basic.labels a.purple.label:hover,\\na.ui.ui.ui.basic.purple.label:hover {\\n  background: none #FFFFFF;\\n  border-color: #9627ba;\\n  color: #9627ba;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.labels .purple.label,\\n.ui.ui.ui.inverted.purple.label {\\n  background-color: #DC73FF;\\n  border-color: #DC73FF;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Link */\\n\\n.ui.inverted.labels a.purple.label:hover,\\na.ui.ui.ui.inverted.purple.label:hover {\\n  background-color: #cf40ff;\\n  border-color: #cf40ff;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Ribbon */\\n\\n.ui.ui.ui.inverted.purple.ribbon.label {\\n  border-color: #cf40ff;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.basic.labels .purple.label,\\n.ui.ui.ui.inverted.basic.purple.label {\\n  background-color: #1B1C1D;\\n  border-color: #DC73FF;\\n  color: #DC73FF;\\n}\\n\\n.ui.inverted.basic.labels a.purple.label:hover,\\na.ui.ui.ui.inverted.basic.purple.label:hover {\\n  border-color: #cf40ff;\\n  background-color: #1B1C1D;\\n  color: #cf40ff;\\n}\\n\\n/* Inverted Basic Tags */\\n\\n.ui.inverted.basic.tag.labels .purple.label,\\n.ui.ui.ui.inverted.purple.basic.tag.label {\\n  border: 1px solid #DC73FF;\\n}\\n\\n.ui.inverted.basic.tag.labels .purple.label:before,\\n.ui.ui.ui.inverted.purple.basic.tag.label:before {\\n  border-color: inherit;\\n  border-width: 1px 0 0 1px;\\n  border-style: inherit;\\n  background-color: #1B1C1D;\\n  right: calc(100% + 1px);\\n}\\n\\n.ui.pink.labels .label,\\n.ui.ui.ui.pink.label {\\n  background-color: #E03997;\\n  border-color: #E03997;\\n  color: #FFFFFF;\\n}\\n\\n/* Link */\\n\\n.ui.pink.labels a.label:hover,\\na.ui.ui.ui.pink.label:hover {\\n  background-color: #e61a8d;\\n  border-color: #e61a8d;\\n  color: #FFFFFF;\\n}\\n\\n/* Ribbon */\\n\\n.ui.ui.ui.pink.ribbon.label {\\n  border-color: #c71f7e;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.labels .pink.label,\\n.ui.ui.ui.basic.pink.label {\\n  background: none #FFFFFF;\\n  border-color: #E03997;\\n  color: #E03997;\\n}\\n\\n.ui.basic.labels a.pink.label:hover,\\na.ui.ui.ui.basic.pink.label:hover {\\n  background: none #FFFFFF;\\n  border-color: #e61a8d;\\n  color: #e61a8d;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.labels .pink.label,\\n.ui.ui.ui.inverted.pink.label {\\n  background-color: #FF8EDF;\\n  border-color: #FF8EDF;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Link */\\n\\n.ui.inverted.labels a.pink.label:hover,\\na.ui.ui.ui.inverted.pink.label:hover {\\n  background-color: #ff5bd1;\\n  border-color: #ff5bd1;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Ribbon */\\n\\n.ui.ui.ui.inverted.pink.ribbon.label {\\n  border-color: #ff5bd1;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.basic.labels .pink.label,\\n.ui.ui.ui.inverted.basic.pink.label {\\n  background-color: #1B1C1D;\\n  border-color: #FF8EDF;\\n  color: #FF8EDF;\\n}\\n\\n.ui.inverted.basic.labels a.pink.label:hover,\\na.ui.ui.ui.inverted.basic.pink.label:hover {\\n  border-color: #ff5bd1;\\n  background-color: #1B1C1D;\\n  color: #ff5bd1;\\n}\\n\\n/* Inverted Basic Tags */\\n\\n.ui.inverted.basic.tag.labels .pink.label,\\n.ui.ui.ui.inverted.pink.basic.tag.label {\\n  border: 1px solid #FF8EDF;\\n}\\n\\n.ui.inverted.basic.tag.labels .pink.label:before,\\n.ui.ui.ui.inverted.pink.basic.tag.label:before {\\n  border-color: inherit;\\n  border-width: 1px 0 0 1px;\\n  border-style: inherit;\\n  background-color: #1B1C1D;\\n  right: calc(100% + 1px);\\n}\\n\\n.ui.brown.labels .label,\\n.ui.ui.ui.brown.label {\\n  background-color: #A5673F;\\n  border-color: #A5673F;\\n  color: #FFFFFF;\\n}\\n\\n/* Link */\\n\\n.ui.brown.labels a.label:hover,\\na.ui.ui.ui.brown.label:hover {\\n  background-color: #975b33;\\n  border-color: #975b33;\\n  color: #FFFFFF;\\n}\\n\\n/* Ribbon */\\n\\n.ui.ui.ui.brown.ribbon.label {\\n  border-color: #805031;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.labels .brown.label,\\n.ui.ui.ui.basic.brown.label {\\n  background: none #FFFFFF;\\n  border-color: #A5673F;\\n  color: #A5673F;\\n}\\n\\n.ui.basic.labels a.brown.label:hover,\\na.ui.ui.ui.basic.brown.label:hover {\\n  background: none #FFFFFF;\\n  border-color: #975b33;\\n  color: #975b33;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.labels .brown.label,\\n.ui.ui.ui.inverted.brown.label {\\n  background-color: #D67C1C;\\n  border-color: #D67C1C;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Link */\\n\\n.ui.inverted.labels a.brown.label:hover,\\na.ui.ui.ui.inverted.brown.label:hover {\\n  background-color: #b0620f;\\n  border-color: #b0620f;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Ribbon */\\n\\n.ui.ui.ui.inverted.brown.ribbon.label {\\n  border-color: #a96216;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.basic.labels .brown.label,\\n.ui.ui.ui.inverted.basic.brown.label {\\n  background-color: #1B1C1D;\\n  border-color: #D67C1C;\\n  color: #D67C1C;\\n}\\n\\n.ui.inverted.basic.labels a.brown.label:hover,\\na.ui.ui.ui.inverted.basic.brown.label:hover {\\n  border-color: #b0620f;\\n  background-color: #1B1C1D;\\n  color: #b0620f;\\n}\\n\\n/* Inverted Basic Tags */\\n\\n.ui.inverted.basic.tag.labels .brown.label,\\n.ui.ui.ui.inverted.brown.basic.tag.label {\\n  border: 1px solid #D67C1C;\\n}\\n\\n.ui.inverted.basic.tag.labels .brown.label:before,\\n.ui.ui.ui.inverted.brown.basic.tag.label:before {\\n  border-color: inherit;\\n  border-width: 1px 0 0 1px;\\n  border-style: inherit;\\n  background-color: #1B1C1D;\\n  right: calc(100% + 1px);\\n}\\n\\n.ui.grey.labels .label,\\n.ui.ui.ui.grey.label {\\n  background-color: #767676;\\n  border-color: #767676;\\n  color: #FFFFFF;\\n}\\n\\n/* Link */\\n\\n.ui.grey.labels a.label:hover,\\na.ui.ui.ui.grey.label:hover {\\n  background-color: #838383;\\n  border-color: #838383;\\n  color: #FFFFFF;\\n}\\n\\n/* Ribbon */\\n\\n.ui.ui.ui.grey.ribbon.label {\\n  border-color: #5d5d5d;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.labels .grey.label,\\n.ui.ui.ui.basic.grey.label {\\n  background: none #FFFFFF;\\n  border-color: #767676;\\n  color: #767676;\\n}\\n\\n.ui.basic.labels a.grey.label:hover,\\na.ui.ui.ui.basic.grey.label:hover {\\n  background: none #FFFFFF;\\n  border-color: #838383;\\n  color: #838383;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.labels .grey.label,\\n.ui.ui.ui.inverted.grey.label {\\n  background-color: #DCDDDE;\\n  border-color: #DCDDDE;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Link */\\n\\n.ui.inverted.labels a.grey.label:hover,\\na.ui.ui.ui.inverted.grey.label:hover {\\n  background-color: #c2c4c5;\\n  border-color: #c2c4c5;\\n  color: #FFFFFF;\\n}\\n\\n/* Inverted Ribbon */\\n\\n.ui.ui.ui.inverted.grey.ribbon.label {\\n  border-color: #e9eaea;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.basic.labels .grey.label,\\n.ui.ui.ui.inverted.basic.grey.label {\\n  background-color: #1B1C1D;\\n  border-color: #DCDDDE;\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.inverted.basic.labels a.grey.label:hover,\\na.ui.ui.ui.inverted.basic.grey.label:hover {\\n  border-color: #c2c4c5;\\n  background-color: #1B1C1D;\\n}\\n\\n/* Inverted Basic Tags */\\n\\n.ui.inverted.basic.tag.labels .grey.label,\\n.ui.ui.ui.inverted.grey.basic.tag.label {\\n  border: 1px solid #DCDDDE;\\n}\\n\\n.ui.inverted.basic.tag.labels .grey.label:before,\\n.ui.ui.ui.inverted.grey.basic.tag.label:before {\\n  border-color: inherit;\\n  border-width: 1px 0 0 1px;\\n  border-style: inherit;\\n  background-color: #1B1C1D;\\n  right: calc(100% + 1px);\\n}\\n\\n.ui.black.labels .label,\\n.ui.ui.ui.black.label {\\n  background-color: #1B1C1D;\\n  border-color: #1B1C1D;\\n  color: #FFFFFF;\\n}\\n\\n/* Link */\\n\\n.ui.black.labels a.label:hover,\\na.ui.ui.ui.black.label:hover {\\n  background-color: #27292a;\\n  border-color: #27292a;\\n  color: #FFFFFF;\\n}\\n\\n/* Ribbon */\\n\\n.ui.ui.ui.black.ribbon.label {\\n  border-color: #020203;\\n}\\n\\n/* Basic */\\n\\n.ui.basic.labels .black.label,\\n.ui.ui.ui.basic.black.label {\\n  background: none #FFFFFF;\\n  border-color: #1B1C1D;\\n  color: #1B1C1D;\\n}\\n\\n.ui.basic.labels a.black.label:hover,\\na.ui.ui.ui.basic.black.label:hover {\\n  background: none #FFFFFF;\\n  border-color: #27292a;\\n  color: #27292a;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.labels .black.label,\\n.ui.ui.ui.inverted.black.label {\\n  background-color: #545454;\\n  border-color: #545454;\\n  color: #1B1C1D;\\n}\\n\\n/* Inverted Link */\\n\\n.ui.inverted.labels a.black.label:hover,\\na.ui.ui.ui.inverted.black.label:hover {\\n  background-color: #000000;\\n  border-color: #000000;\\n  color: #FFFFFF;\\n}\\n\\n/* Inverted Ribbon */\\n\\n.ui.ui.ui.inverted.black.ribbon.label {\\n  border-color: #616161;\\n}\\n\\n/* Inverted Basic */\\n\\n.ui.inverted.basic.labels .black.label,\\n.ui.ui.ui.inverted.basic.black.label {\\n  background-color: #1B1C1D;\\n  border-color: #545454;\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.inverted.basic.labels a.black.label:hover,\\na.ui.ui.ui.inverted.basic.black.label:hover {\\n  border-color: #000000;\\n  background-color: #1B1C1D;\\n}\\n\\n/* Inverted Basic Tags */\\n\\n.ui.inverted.basic.tag.labels .black.label,\\n.ui.ui.ui.inverted.black.basic.tag.label {\\n  border: 1px solid #545454;\\n}\\n\\n.ui.inverted.basic.tag.labels .black.label:before,\\n.ui.ui.ui.inverted.black.basic.tag.label:before {\\n  border-color: inherit;\\n  border-width: 1px 0 0 1px;\\n  border-style: inherit;\\n  background-color: #1B1C1D;\\n  right: calc(100% + 1px);\\n}\\n\\n/*-------------------\\n     Horizontal\\n--------------------*/\\n\\n.ui.horizontal.labels .label,\\n.ui.horizontal.label {\\n  margin: 0 0.5em 0 0;\\n  padding: 0.4em 0.833em;\\n  min-width: 3em;\\n  text-align: center;\\n}\\n\\n/*-------------------\\n       Circular\\n--------------------*/\\n\\n.ui.circular.labels .label,\\n.ui.circular.label {\\n  min-width: 2em;\\n  min-height: 2em;\\n  padding: 0.5em !important;\\n  line-height: 1em;\\n  text-align: center;\\n  border-radius: 500rem;\\n}\\n\\n.ui.empty.circular.labels .label,\\n.ui.empty.circular.label {\\n  min-width: 0;\\n  min-height: 0;\\n  overflow: hidden;\\n  width: 0.5em;\\n  height: 0.5em;\\n  vertical-align: baseline;\\n}\\n\\n/*-------------------\\n       Pointing\\n--------------------*/\\n\\n.ui.pointing.label {\\n  position: relative;\\n}\\n\\n.ui.attached.pointing.label {\\n  position: absolute;\\n}\\n\\n.ui.pointing.label:before {\\n  background-color: inherit;\\n  background-image: inherit;\\n  border-width: 0;\\n  border-style: solid;\\n  border-color: inherit;\\n}\\n\\n/* Arrow */\\n\\n.ui.pointing.label:before {\\n  position: absolute;\\n  content: '';\\n  -webkit-transform: rotate(45deg);\\n  transform: rotate(45deg);\\n  background-image: none;\\n  z-index: 2;\\n  width: 0.6666em;\\n  height: 0.6666em;\\n  -webkit-transition: none;\\n  transition: none;\\n}\\n\\n/*--- Above ---*/\\n\\n.ui.pointing.label,\\n.ui[class*=\\\"pointing above\\\"].label {\\n  margin-top: 1em;\\n}\\n\\n.ui.pointing.label:before,\\n.ui[class*=\\\"pointing above\\\"].label:before {\\n  border-width: 1px 0 0 1px;\\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\\n  transform: translateX(-50%) translateY(-50%) rotate(45deg);\\n  top: 0;\\n  left: 50%;\\n}\\n\\n/*--- Below ---*/\\n\\n.ui[class*=\\\"bottom pointing\\\"].label,\\n.ui[class*=\\\"pointing below\\\"].label {\\n  margin-top: 0;\\n  margin-bottom: 1em;\\n}\\n\\n.ui[class*=\\\"bottom pointing\\\"].label:before,\\n.ui[class*=\\\"pointing below\\\"].label:before {\\n  border-width: 0 1px 1px 0;\\n  top: auto;\\n  right: auto;\\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\\n  transform: translateX(-50%) translateY(-50%) rotate(45deg);\\n  top: 100%;\\n  left: 50%;\\n}\\n\\n/*--- Left ---*/\\n\\n.ui[class*=\\\"left pointing\\\"].label {\\n  margin-top: 0;\\n  margin-left: 0.6666em;\\n}\\n\\n.ui[class*=\\\"left pointing\\\"].label:before {\\n  border-width: 0 0 1px 1px;\\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\\n  transform: translateX(-50%) translateY(-50%) rotate(45deg);\\n  bottom: auto;\\n  right: auto;\\n  top: 50%;\\n  left: 0;\\n}\\n\\n/*--- Right ---*/\\n\\n.ui[class*=\\\"right pointing\\\"].label {\\n  margin-top: 0;\\n  margin-right: 0.6666em;\\n}\\n\\n.ui[class*=\\\"right pointing\\\"].label:before {\\n  border-width: 1px 1px 0 0;\\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\\n  transform: translateX(50%) translateY(-50%) rotate(45deg);\\n  top: 50%;\\n  right: 0;\\n  bottom: auto;\\n  left: auto;\\n}\\n\\n/* Basic Pointing */\\n\\n/*--- Above ---*/\\n\\n.ui.basic.pointing.label:before,\\n.ui.basic[class*=\\\"pointing above\\\"].label:before {\\n  margin-top: -1px;\\n}\\n\\n/*--- Below ---*/\\n\\n.ui.basic[class*=\\\"bottom pointing\\\"].label:before,\\n.ui.basic[class*=\\\"pointing below\\\"].label:before {\\n  bottom: auto;\\n  top: 100%;\\n  margin-top: 1px;\\n}\\n\\n/*--- Left ---*/\\n\\n.ui.basic[class*=\\\"left pointing\\\"].label:before {\\n  top: 50%;\\n  left: -1px;\\n}\\n\\n/*--- Right ---*/\\n\\n.ui.basic[class*=\\\"right pointing\\\"].label:before {\\n  top: 50%;\\n  right: -1px;\\n}\\n\\n/*------------------\\n   Floating Label\\n-------------------*/\\n\\n.ui.floating.label {\\n  position: absolute;\\n  z-index: 100;\\n  top: -1em;\\n  right: 0;\\n  white-space: nowrap;\\n  -webkit-transform: translateX(50%);\\n  transform: translateX(50%);\\n}\\n\\n.ui.right.aligned.floating.label {\\n  -webkit-transform: translateX(1.2em);\\n  transform: translateX(1.2em);\\n}\\n\\n.ui.left.floating.label {\\n  left: 0;\\n  right: auto;\\n  -webkit-transform: translateX(-50%);\\n  transform: translateX(-50%);\\n}\\n\\n.ui.left.aligned.floating.label {\\n  -webkit-transform: translateX(-1.2em);\\n  transform: translateX(-1.2em);\\n}\\n\\n.ui.bottom.floating.label {\\n  top: auto;\\n  bottom: -1em;\\n}\\n\\n/*-------------------\\n        Sizes\\n--------------------*/\\n\\n.ui.mini.labels .label,\\n.ui.mini.label {\\n  font-size: 0.64285714rem;\\n}\\n\\n.ui.tiny.labels .label,\\n.ui.tiny.label {\\n  font-size: 0.71428571rem;\\n}\\n\\n.ui.small.labels .label,\\n.ui.small.label {\\n  font-size: 0.78571429rem;\\n}\\n\\n.ui.labels .label,\\n.ui.label {\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.large.labels .label,\\n.ui.large.label {\\n  font-size: 1rem;\\n}\\n\\n.ui.big.labels .label,\\n.ui.big.label {\\n  font-size: 1.28571429rem;\\n}\\n\\n.ui.huge.labels .label,\\n.ui.huge.label {\\n  font-size: 1.42857143rem;\\n}\\n\\n.ui.massive.labels .label,\\n.ui.massive.label {\\n  font-size: 1.71428571rem;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - List\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            List\\n*******************************/\\n\\nul.ui.list,\\nol.ui.list,\\n.ui.list {\\n  list-style-type: none;\\n  margin: 1em 0;\\n  padding: 0 0;\\n}\\n\\nul.ui.list:first-child,\\nol.ui.list:first-child,\\n.ui.list:first-child {\\n  margin-top: 0;\\n  padding-top: 0;\\n}\\n\\nul.ui.list:last-child,\\nol.ui.list:last-child,\\n.ui.list:last-child {\\n  margin-bottom: 0;\\n  padding-bottom: 0;\\n}\\n\\n/*******************************\\n            Content\\n*******************************/\\n\\n/* List Item */\\n\\nul.ui.list li,\\nol.ui.list li,\\n.ui.list > .item,\\n.ui.list .list > .item {\\n  display: list-item;\\n  table-layout: fixed;\\n  list-style-type: none;\\n  list-style-position: outside;\\n  padding: 0.21428571em 0;\\n  line-height: 1.14285714em;\\n}\\n\\nul.ui.list > li:first-child:after,\\nol.ui.list > li:first-child:after,\\n.ui.list > .list > .item:after,\\n.ui.list > .item:after {\\n  content: '';\\n  display: block;\\n  height: 0;\\n  clear: both;\\n  visibility: hidden;\\n}\\n\\nul.ui.list li:first-child,\\nol.ui.list li:first-child,\\n.ui.list .list > .item:first-child,\\n.ui.list > .item:first-child {\\n  padding-top: 0;\\n}\\n\\nul.ui.list li:last-child,\\nol.ui.list li:last-child,\\n.ui.list .list > .item:last-child,\\n.ui.list > .item:last-child {\\n  padding-bottom: 0;\\n}\\n\\n/* Child List */\\n\\nul.ui.list ul,\\nol.ui.list ol,\\n.ui.list .list:not(.icon) {\\n  clear: both;\\n  margin: 0;\\n  padding: 0.75em 0 0.25em 0.5em;\\n}\\n\\n/* Child Item */\\n\\nul.ui.list ul li,\\nol.ui.list ol li,\\n.ui.list .list > .item {\\n  padding: 0.14285714em 0;\\n  line-height: inherit;\\n}\\n\\n/* Icon */\\n\\n.ui.list .list > .item > i.icon,\\n.ui.list > .item > i.icon {\\n  display: table-cell;\\n  min-width: 1.55em;\\n  margin: 0;\\n  padding-top: 0;\\n  -webkit-transition: color 0.1s ease;\\n  transition: color 0.1s ease;\\n}\\n\\n.ui.list .list > .item > i.icon:not(.loading),\\n.ui.list > .item > i.icon:not(.loading) {\\n  padding-right: 0.28571429em;\\n  vertical-align: top;\\n}\\n\\n.ui.list .list > .item > i.icon:only-child,\\n.ui.list > .item > i.icon:only-child {\\n  display: inline-block;\\n  min-width: auto;\\n  vertical-align: top;\\n}\\n\\n/* Image */\\n\\n.ui.list .list > .item > .image,\\n.ui.list > .item > .image {\\n  display: table-cell;\\n  background-color: transparent;\\n  margin: 0;\\n  vertical-align: top;\\n}\\n\\n.ui.list .list > .item > .image:not(:only-child):not(img),\\n.ui.list > .item > .image:not(:only-child):not(img) {\\n  padding-right: 0.5em;\\n}\\n\\n.ui.list .list > .item > .image img,\\n.ui.list > .item > .image img {\\n  vertical-align: top;\\n}\\n\\n.ui.list .list > .item > img.image,\\n.ui.list .list > .item > .image:only-child,\\n.ui.list > .item > img.image,\\n.ui.list > .item > .image:only-child {\\n  display: inline-block;\\n}\\n\\n/* Content */\\n\\n.ui.list .list > .item > .content,\\n.ui.list > .item > .content {\\n  line-height: 1.14285714em;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.list .list > .item > .image + .content,\\n.ui.list .list > .item > .icon + .content,\\n.ui.list > .item > .image + .content,\\n.ui.list > .item > .icon + .content {\\n  display: table-cell;\\n  width: 100%;\\n  padding: 0 0 0 0.5em;\\n  vertical-align: top;\\n}\\n\\n.ui.list .list > .item > .loading.icon + .content,\\n.ui.list > .item > .loading.icon + .content {\\n  padding-left: calc(0.2857142857142857em + 0.5em);\\n}\\n\\n.ui.list .list > .item > img.image + .content,\\n.ui.list > .item > img.image + .content {\\n  display: inline-block;\\n  width: auto;\\n}\\n\\n.ui.list .list > .item > .content > .list,\\n.ui.list > .item > .content > .list {\\n  margin-left: 0;\\n  padding-left: 0;\\n}\\n\\n/* Header */\\n\\n.ui.list .list > .item .header,\\n.ui.list > .item .header {\\n  display: block;\\n  margin: 0;\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  font-weight: bold;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n/* Description */\\n\\n.ui.list .list > .item .description,\\n.ui.list > .item .description {\\n  display: block;\\n  color: rgba(0, 0, 0, 0.7);\\n}\\n\\n/* Child Link */\\n\\n.ui.list > .item a,\\n.ui.list .list > .item a {\\n  cursor: pointer;\\n}\\n\\n/* Linking Item */\\n\\n.ui.list .list > a.item,\\n.ui.list > a.item {\\n  cursor: pointer;\\n  color: #4183C4;\\n}\\n\\n.ui.list .list > a.item:hover,\\n.ui.list > a.item:hover {\\n  color: #1e70bf;\\n}\\n\\n/* Linked Item Icons */\\n\\n.ui.list .list > a.item > i.icon,\\n.ui.list > a.item > i.icon {\\n  color: rgba(0, 0, 0, 0.4);\\n}\\n\\n/* Header Link */\\n\\n.ui.list .list > .item a.header,\\n.ui.list > .item a.header {\\n  cursor: pointer;\\n  color: #4183C4 !important;\\n}\\n\\n.ui.list .list > .item > a.header:hover,\\n.ui.list > .item > a.header:hover {\\n  color: #1e70bf !important;\\n}\\n\\n/* Floated Content */\\n\\n.ui[class*=\\\"left floated\\\"].list {\\n  float: left;\\n}\\n\\n.ui[class*=\\\"right floated\\\"].list {\\n  float: right;\\n}\\n\\n.ui.list .list > .item [class*=\\\"left floated\\\"],\\n.ui.list > .item [class*=\\\"left floated\\\"] {\\n  float: left;\\n  margin: 0 1em 0 0;\\n}\\n\\n.ui.list .list > .item [class*=\\\"right floated\\\"],\\n.ui.list > .item [class*=\\\"right floated\\\"] {\\n  float: right;\\n  margin: 0 0 0 1em;\\n}\\n\\n/*******************************\\n            Coupling\\n*******************************/\\n\\n.ui.menu .ui.list > .item,\\n.ui.menu .ui.list .list > .item {\\n  display: list-item;\\n  table-layout: fixed;\\n  background-color: transparent;\\n  list-style-type: none;\\n  list-style-position: outside;\\n  padding: 0.21428571em 0;\\n  line-height: 1.14285714em;\\n}\\n\\n.ui.menu .ui.list .list > .item:before,\\n.ui.menu .ui.list > .item:before {\\n  border: none;\\n  background: none;\\n}\\n\\n.ui.menu .ui.list .list > .item:first-child,\\n.ui.menu .ui.list > .item:first-child {\\n  padding-top: 0;\\n}\\n\\n.ui.menu .ui.list .list > .item:last-child,\\n.ui.menu .ui.list > .item:last-child {\\n  padding-bottom: 0;\\n}\\n\\n/*******************************\\n            Types\\n*******************************/\\n\\n/*-------------------\\n      Horizontal\\n--------------------*/\\n\\n.ui.horizontal.list {\\n  display: inline-block;\\n  font-size: 0;\\n}\\n\\n.ui.horizontal.list > .item {\\n  display: inline-block;\\n  margin-right: 1em;\\n  font-size: 1rem;\\n}\\n\\n.ui.horizontal.list:not(.celled) > .item:last-child {\\n  margin-right: 0;\\n  padding-right: 0;\\n}\\n\\n.ui.horizontal.list .list:not(.icon) {\\n  padding-left: 0;\\n  padding-bottom: 0;\\n}\\n\\n.ui.horizontal.list > .item > .image,\\n.ui.horizontal.list .list > .item > .image,\\n.ui.horizontal.list > .item > .icon,\\n.ui.horizontal.list .list > .item > .icon,\\n.ui.horizontal.list > .item > .content,\\n.ui.horizontal.list .list > .item > .content {\\n  vertical-align: middle;\\n}\\n\\n/* Padding on all elements */\\n\\n.ui.horizontal.list > .item:first-child,\\n.ui.horizontal.list > .item:last-child {\\n  padding-top: 0.21428571em;\\n  padding-bottom: 0.21428571em;\\n}\\n\\n/* Horizontal List */\\n\\n.ui.horizontal.list > .item > i.icon {\\n  margin: 0;\\n  padding: 0 0.25em 0 0;\\n}\\n\\n.ui.horizontal.list > .item > .image + .content,\\n.ui.horizontal.list > .item > .icon,\\n.ui.horizontal.list > .item > .icon + .content {\\n  float: none;\\n  display: inline-block;\\n  width: auto;\\n}\\n\\n.ui.horizontal.list > .item > .image {\\n  display: inline-block;\\n}\\n\\n/*******************************\\n             States\\n*******************************/\\n\\n/*-------------------\\n       Disabled\\n--------------------*/\\n\\n.ui.list .list > .disabled.item,\\n.ui.list > .disabled.item {\\n  pointer-events: none;\\n  color: rgba(40, 40, 40, 0.3) !important;\\n}\\n\\n.ui.inverted.list .list > .disabled.item,\\n.ui.inverted.list > .disabled.item {\\n  color: rgba(225, 225, 225, 0.3) !important;\\n}\\n\\n/*-------------------\\n        Hover\\n--------------------*/\\n\\n.ui.list .list > a.item:hover > .icon,\\n.ui.list > a.item:hover > .icon {\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*-------------------\\n       Inverted\\n--------------------*/\\n\\n.ui.inverted.list .list > a.item > .icon,\\n.ui.inverted.list > a.item > .icon {\\n  color: rgba(255, 255, 255, 0.7);\\n}\\n\\n.ui.inverted.list .list > .item .header,\\n.ui.inverted.list > .item .header {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.inverted.list .list > .item .description,\\n.ui.inverted.list > .item .description {\\n  color: rgba(255, 255, 255, 0.7);\\n}\\n\\n.ui.inverted.list .list > .item > .content,\\n.ui.inverted.list > .item > .content {\\n  color: rgba(255, 255, 255, 0.7);\\n}\\n\\n/* Item Link */\\n\\n.ui.inverted.list .list > a.item,\\n.ui.inverted.list > a.item {\\n  cursor: pointer;\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.inverted.list .list > a.item:hover,\\n.ui.inverted.list > a.item:hover {\\n  color: #1e70bf;\\n}\\n\\n/* Linking Content */\\n\\n.ui.inverted.list .item a:not(.ui) {\\n  color: rgba(255, 255, 255, 0.9) !important;\\n}\\n\\n.ui.inverted.list .item a:not(.ui):hover {\\n  color: #1e70bf !important;\\n}\\n\\n/*-------------------\\n       Aligned\\n--------------------*/\\n\\n.ui.list[class*=\\\"top aligned\\\"] .image,\\n.ui.list[class*=\\\"top aligned\\\"] .content,\\n.ui.list [class*=\\\"top aligned\\\"] {\\n  vertical-align: top !important;\\n}\\n\\n.ui.list[class*=\\\"middle aligned\\\"] .image,\\n.ui.list[class*=\\\"middle aligned\\\"] .content,\\n.ui.list [class*=\\\"middle aligned\\\"] {\\n  vertical-align: middle !important;\\n}\\n\\n.ui.list[class*=\\\"bottom aligned\\\"] .image,\\n.ui.list[class*=\\\"bottom aligned\\\"] .content,\\n.ui.list [class*=\\\"bottom aligned\\\"] {\\n  vertical-align: bottom !important;\\n}\\n\\n/*-------------------\\n       Link\\n--------------------*/\\n\\n.ui.link.list .item,\\n.ui.link.list a.item,\\n.ui.link.list .item a:not(.ui) {\\n  color: rgba(0, 0, 0, 0.4);\\n  -webkit-transition: 0.1s color ease;\\n  transition: 0.1s color ease;\\n}\\n\\n.ui.link.list.list a.item:hover,\\n.ui.link.list.list .item a:not(.ui):hover {\\n  color: rgba(0, 0, 0, 0.8);\\n}\\n\\n.ui.link.list.list a.item:active,\\n.ui.link.list.list .item a:not(.ui):active {\\n  color: rgba(0, 0, 0, 0.9);\\n}\\n\\n.ui.link.list.list .active.item,\\n.ui.link.list.list .active.item a:not(.ui) {\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.link.list .item,\\n.ui.inverted.link.list a.item,\\n.ui.inverted.link.list .item a:not(.ui) {\\n  color: rgba(255, 255, 255, 0.5);\\n}\\n\\n.ui.inverted.link.list.list a.item:hover,\\n.ui.inverted.link.list.list .item a:not(.ui):hover {\\n  color: #ffffff;\\n}\\n\\n.ui.inverted.link.list.list a.item:active,\\n.ui.inverted.link.list.list .item a:not(.ui):active {\\n  color: #ffffff;\\n}\\n\\n.ui.inverted.link.list.list a.active.item,\\n.ui.inverted.link.list.list .active.item a:not(.ui) {\\n  color: #ffffff;\\n}\\n\\n/*-------------------\\n      Selection\\n--------------------*/\\n\\n.ui.selection.list .list > .item,\\n.ui.selection.list > .item {\\n  cursor: pointer;\\n  background: transparent;\\n  padding: 0.5em 0.5em;\\n  margin: 0;\\n  color: rgba(0, 0, 0, 0.4);\\n  border-radius: 0.5em;\\n  -webkit-transition: 0.1s color ease, 0.1s padding-left ease, 0.1s background-color ease;\\n  transition: 0.1s color ease, 0.1s padding-left ease, 0.1s background-color ease;\\n}\\n\\n.ui.selection.list .list > .item:last-child,\\n.ui.selection.list > .item:last-child {\\n  margin-bottom: 0;\\n}\\n\\n.ui.selection.list .list > .item:hover,\\n.ui.selection.list > .item:hover {\\n  background: rgba(0, 0, 0, 0.03);\\n  color: rgba(0, 0, 0, 0.8);\\n}\\n\\n.ui.selection.list .list > .item:active,\\n.ui.selection.list > .item:active {\\n  background: rgba(0, 0, 0, 0.05);\\n  color: rgba(0, 0, 0, 0.9);\\n}\\n\\n.ui.selection.list .list > .item.active,\\n.ui.selection.list > .item.active {\\n  background: rgba(0, 0, 0, 0.05);\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.selection.list > .item {\\n  background: transparent;\\n  color: rgba(255, 255, 255, 0.5);\\n}\\n\\n.ui.inverted.selection.list > .item:hover {\\n  background: rgba(255, 255, 255, 0.02);\\n  color: #ffffff;\\n}\\n\\n.ui.inverted.selection.list > .item:active {\\n  background: rgba(255, 255, 255, 0.08);\\n  color: #ffffff;\\n}\\n\\n.ui.inverted.selection.list > .item.active {\\n  background: rgba(255, 255, 255, 0.08);\\n  color: #ffffff;\\n}\\n\\n/* Celled / Divided Selection List */\\n\\n.ui.celled.selection.list .list > .item,\\n.ui.divided.selection.list .list > .item,\\n.ui.celled.selection.list > .item,\\n.ui.divided.selection.list > .item {\\n  border-radius: 0;\\n}\\n\\n/*-------------------\\n       Animated\\n--------------------*/\\n\\n.ui.animated.list > .item {\\n  -webkit-transition: 0.25s color ease 0.1s, 0.25s padding-left ease 0.1s, 0.25s background-color ease 0.1s;\\n  transition: 0.25s color ease 0.1s, 0.25s padding-left ease 0.1s, 0.25s background-color ease 0.1s;\\n}\\n\\n.ui.animated.list:not(.horizontal) > .item:hover {\\n  padding-left: 1em;\\n}\\n\\n/*-------------------\\n       Fitted\\n--------------------*/\\n\\n.ui.fitted.list:not(.selection) .list > .item,\\n.ui.fitted.list:not(.selection) > .item {\\n  padding-left: 0;\\n  padding-right: 0;\\n}\\n\\n.ui.fitted.selection.list .list > .item,\\n.ui.fitted.selection.list > .item {\\n  margin-left: -0.5em;\\n  margin-right: -0.5em;\\n}\\n\\n/*-------------------\\n      Bulleted\\n--------------------*/\\n\\nul.ui.list,\\n.ui.bulleted.list {\\n  margin-left: 1.25rem;\\n}\\n\\nul.ui.list li,\\n.ui.bulleted.list .list > .item,\\n.ui.bulleted.list > .item {\\n  position: relative;\\n}\\n\\nul.ui.list li:before,\\n.ui.bulleted.list .list > .item:before,\\n.ui.bulleted.list > .item:before {\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n  pointer-events: none;\\n  position: absolute;\\n  top: auto;\\n  left: auto;\\n  font-weight: normal;\\n  margin-left: -1.25rem;\\n  content: '•';\\n  opacity: 1;\\n  color: inherit;\\n  vertical-align: top;\\n}\\n\\nul.ui.list li:before,\\n.ui.bulleted.list .list > a.item:before,\\n.ui.bulleted.list > a.item:before {\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\nul.ui.list ul,\\n.ui.bulleted.list .list:not(.icon) {\\n  padding-left: 1.25rem;\\n}\\n\\n/* Horizontal Bulleted */\\n\\nul.ui.horizontal.bulleted.list,\\n.ui.horizontal.bulleted.list {\\n  margin-left: 0;\\n}\\n\\nul.ui.horizontal.bulleted.list li,\\n.ui.horizontal.bulleted.list > .item {\\n  margin-left: 1.75rem;\\n}\\n\\nul.ui.horizontal.bulleted.list li:first-child,\\n.ui.horizontal.bulleted.list > .item:first-child {\\n  margin-left: 0;\\n}\\n\\nul.ui.horizontal.bulleted.list li::before,\\n.ui.horizontal.bulleted.list > .item::before {\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\nul.ui.horizontal.bulleted.list li:first-child::before,\\n.ui.horizontal.bulleted.list > .item:first-child::before {\\n  display: none;\\n}\\n\\n/*-------------------\\n       Ordered\\n--------------------*/\\n\\nol.ui.list,\\n.ui.ordered.list,\\n.ui.ordered.list .list:not(.icon),\\nol.ui.list ol {\\n  counter-reset: ordered;\\n  margin-left: 1.25rem;\\n  list-style-type: none;\\n}\\n\\nol.ui.list li,\\n.ui.ordered.list .list > .item,\\n.ui.ordered.list > .item {\\n  list-style-type: none;\\n  position: relative;\\n}\\n\\nol.ui.list li:before,\\n.ui.ordered.list .list > .item:before,\\n.ui.ordered.list > .item:before {\\n  position: absolute;\\n  top: auto;\\n  left: auto;\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n  pointer-events: none;\\n  margin-left: -1.25rem;\\n  counter-increment: ordered;\\n  content: counters(ordered, \\\".\\\") \\\" \\\";\\n  text-align: right;\\n  color: rgba(0, 0, 0, 0.87);\\n  vertical-align: middle;\\n  opacity: 0.8;\\n}\\n\\nol.ui.inverted.list li:before,\\n.ui.ordered.inverted.list .list > .item:before,\\n.ui.ordered.inverted.list > .item:before {\\n  color: rgba(255, 255, 255, 0.7);\\n}\\n\\n/* Value */\\n\\n.ui.ordered.list .list > .item[data-value]:before,\\n.ui.ordered.list > .item[data-value]:before {\\n  content: attr(data-value);\\n}\\n\\nol.ui.list li[value]:before {\\n  content: attr(value);\\n}\\n\\n/* Child Lists */\\n\\nol.ui.list ol,\\n.ui.ordered.list .list:not(.icon) {\\n  margin-left: 1em;\\n}\\n\\nol.ui.list ol li:before,\\n.ui.ordered.list .list > .item:before {\\n  margin-left: -2em;\\n}\\n\\n/* Horizontal Ordered */\\n\\nol.ui.horizontal.list,\\n.ui.ordered.horizontal.list {\\n  margin-left: 0;\\n}\\n\\nol.ui.horizontal.list li:before,\\n.ui.ordered.horizontal.list .list > .item:before,\\n.ui.ordered.horizontal.list > .item:before {\\n  position: static;\\n  margin: 0 0.5em 0 0;\\n}\\n\\n/* Suffixed Ordered */\\n\\nol.ui.suffixed.list li:before,\\n.ui.suffixed.ordered.list .list > .item:before,\\n.ui.suffixed.ordered.list > .item:before {\\n  content: counters(ordered, \\\".\\\") \\\".\\\";\\n}\\n\\n/*-------------------\\n       Divided\\n--------------------*/\\n\\n.ui.divided.list > .item {\\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.divided.list .list > .item {\\n  border-top: none;\\n}\\n\\n.ui.divided.list .item .list > .item {\\n  border-top: none;\\n}\\n\\n.ui.divided.list .list > .item:first-child,\\n.ui.divided.list > .item:first-child {\\n  border-top: none;\\n}\\n\\n/* Sub Menu */\\n\\n.ui.divided.list:not(.horizontal) .list > .item:first-child {\\n  border-top-width: 1px;\\n}\\n\\n/* Divided bulleted */\\n\\n.ui.divided.bulleted.list:not(.horizontal),\\n.ui.divided.bulleted.list .list:not(.icon) {\\n  margin-left: 0;\\n  padding-left: 0;\\n}\\n\\n.ui.divided.bulleted.list > .item:not(.horizontal) {\\n  padding-left: 1.25rem;\\n}\\n\\n/* Divided Ordered */\\n\\n.ui.divided.ordered.list {\\n  margin-left: 0;\\n}\\n\\n.ui.divided.ordered.list .list > .item,\\n.ui.divided.ordered.list > .item {\\n  padding-left: 1.25rem;\\n}\\n\\n.ui.divided.ordered.list .item .list:not(.icon) {\\n  margin-left: 0;\\n  margin-right: 0;\\n  padding-bottom: 0.21428571em;\\n}\\n\\n.ui.divided.ordered.list .item .list > .item {\\n  padding-left: 1em;\\n}\\n\\n/* Divided Selection */\\n\\n.ui.divided.selection.list .list > .item,\\n.ui.divided.selection.list > .item {\\n  margin: 0;\\n  border-radius: 0;\\n}\\n\\n/* Divided horizontal */\\n\\n.ui.divided.horizontal.list {\\n  margin-left: 0;\\n}\\n\\n.ui.divided.horizontal.list > .item {\\n  padding-left: 0.5em;\\n}\\n\\n.ui.divided.horizontal.list > .item:not(:last-child) {\\n  padding-right: 0.5em;\\n}\\n\\n.ui.divided.horizontal.list > .item {\\n  border-top: none;\\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\\n  margin: 0;\\n  line-height: 0.6;\\n}\\n\\n.ui.horizontal.divided.list > .item:last-child {\\n  border-right: none;\\n}\\n\\n/* Inverted */\\n\\n.ui.divided.inverted.list > .item,\\n.ui.divided.inverted.list > .list,\\n.ui.divided.inverted.horizontal.list > .item {\\n  border-color: rgba(255, 255, 255, 0.1);\\n}\\n\\n/*-------------------\\n        Celled\\n--------------------*/\\n\\n.ui.celled.list > .item,\\n.ui.celled.list > .list {\\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\\n  padding-left: 0.5em;\\n  padding-right: 0.5em;\\n}\\n\\n.ui.celled.list > .item:last-child {\\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\\n}\\n\\n/* Padding on all elements */\\n\\n.ui.celled.list > .item:first-child,\\n.ui.celled.list > .item:last-child {\\n  padding-top: 0.21428571em;\\n  padding-bottom: 0.21428571em;\\n}\\n\\n/* Sub Menu */\\n\\n.ui.celled.list .item .list > .item {\\n  border-width: 0;\\n}\\n\\n.ui.celled.list .list > .item:first-child {\\n  border-top-width: 0;\\n}\\n\\n/* Celled Bulleted */\\n\\n.ui.celled.bulleted.list {\\n  margin-left: 0;\\n}\\n\\n.ui.celled.bulleted.list .list > .item,\\n.ui.celled.bulleted.list > .item {\\n  padding-left: 1.25rem;\\n}\\n\\n.ui.celled.bulleted.list .item .list:not(.icon) {\\n  margin-left: -1.25rem;\\n  margin-right: -1.25rem;\\n  padding-bottom: 0.21428571em;\\n}\\n\\n/* Celled Ordered */\\n\\n.ui.celled.ordered.list {\\n  margin-left: 0;\\n}\\n\\n.ui.celled.ordered.list .list > .item,\\n.ui.celled.ordered.list > .item {\\n  padding-left: 1.25rem;\\n}\\n\\n.ui.celled.ordered.list .item .list:not(.icon) {\\n  margin-left: 0;\\n  margin-right: 0;\\n  padding-bottom: 0.21428571em;\\n}\\n\\n.ui.celled.ordered.list .list > .item {\\n  padding-left: 1em;\\n}\\n\\n/* Celled Horizontal */\\n\\n.ui.horizontal.celled.list {\\n  margin-left: 0;\\n}\\n\\n.ui.horizontal.celled.list .list > .item,\\n.ui.horizontal.celled.list > .item {\\n  border-top: none;\\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\\n  margin: 0;\\n  padding-left: 0.5em;\\n  padding-right: 0.5em;\\n  line-height: 0.6;\\n}\\n\\n.ui.horizontal.celled.list .list > .item:last-child,\\n.ui.horizontal.celled.list > .item:last-child {\\n  border-bottom: none;\\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\\n}\\n\\n/* Inverted */\\n\\n.ui.celled.inverted.list > .item,\\n.ui.celled.inverted.list > .list {\\n  border-color: rgba(255, 255, 255, 0.1);\\n}\\n\\n.ui.celled.inverted.horizontal.list .list > .item,\\n.ui.celled.inverted.horizontal.list > .item {\\n  border-color: rgba(255, 255, 255, 0.1);\\n}\\n\\n/*-------------------\\n       Relaxed\\n--------------------*/\\n\\n.ui.relaxed.list:not(.horizontal) > .item:not(:first-child) {\\n  padding-top: 0.42857143em;\\n}\\n\\n.ui.relaxed.list:not(.horizontal) > .item:not(:last-child) {\\n  padding-bottom: 0.42857143em;\\n}\\n\\n.ui.horizontal.relaxed.list .list > .item:not(:first-child),\\n.ui.horizontal.relaxed.list > .item:not(:first-child) {\\n  padding-left: 1rem;\\n}\\n\\n.ui.horizontal.relaxed.list .list > .item:not(:last-child),\\n.ui.horizontal.relaxed.list > .item:not(:last-child) {\\n  padding-right: 1rem;\\n}\\n\\n/* Very Relaxed */\\n\\n.ui[class*=\\\"very relaxed\\\"].list:not(.horizontal) > .item:not(:first-child) {\\n  padding-top: 0.85714286em;\\n}\\n\\n.ui[class*=\\\"very relaxed\\\"].list:not(.horizontal) > .item:not(:last-child) {\\n  padding-bottom: 0.85714286em;\\n}\\n\\n.ui.horizontal[class*=\\\"very relaxed\\\"].list .list > .item:not(:first-child),\\n.ui.horizontal[class*=\\\"very relaxed\\\"].list > .item:not(:first-child) {\\n  padding-left: 1.5rem;\\n}\\n\\n.ui.horizontal[class*=\\\"very relaxed\\\"].list .list > .item:not(:last-child),\\n.ui.horizontal[class*=\\\"very relaxed\\\"].list > .item:not(:last-child) {\\n  padding-right: 1.5rem;\\n}\\n\\n/*-------------------\\n      Sizes\\n--------------------*/\\n\\n.ui.mini.list {\\n  font-size: 0.78571429em;\\n}\\n\\n.ui.tiny.list {\\n  font-size: 0.85714286em;\\n}\\n\\n.ui.small.list {\\n  font-size: 0.92857143em;\\n}\\n\\n.ui.list {\\n  font-size: 1em;\\n}\\n\\n.ui.large.list {\\n  font-size: 1.14285714em;\\n}\\n\\n.ui.big.list {\\n  font-size: 1.28571429em;\\n}\\n\\n.ui.huge.list {\\n  font-size: 1.42857143em;\\n}\\n\\n.ui.massive.list {\\n  font-size: 1.71428571em;\\n}\\n\\n.ui.mini.horizontal.list .list > .item,\\n.ui.mini.horizontal.list > .item {\\n  font-size: 0.78571429rem;\\n}\\n\\n.ui.tiny.horizontal.list .list > .item,\\n.ui.tiny.horizontal.list > .item {\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.small.horizontal.list .list > .item,\\n.ui.small.horizontal.list > .item {\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.horizontal.list .list > .item,\\n.ui.horizontal.list > .item {\\n  font-size: 1rem;\\n}\\n\\n.ui.large.horizontal.list .list > .item,\\n.ui.large.horizontal.list > .item {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.big.horizontal.list .list > .item,\\n.ui.big.horizontal.list > .item {\\n  font-size: 1.28571429rem;\\n}\\n\\n.ui.huge.horizontal.list .list > .item,\\n.ui.huge.horizontal.list > .item {\\n  font-size: 1.42857143rem;\\n}\\n\\n.ui.massive.horizontal.list .list > .item,\\n.ui.massive.horizontal.list > .item {\\n  font-size: 1.71428571rem;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n    User Variable Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Loader\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Loader\\n*******************************/\\n\\n/* Standard Size */\\n\\n.ui.loader {\\n  display: none;\\n  position: absolute;\\n  top: 50%;\\n  left: 50%;\\n  margin: 0;\\n  text-align: center;\\n  z-index: 1000;\\n  -webkit-transform: translateX(-50%) translateY(-50%);\\n  transform: translateX(-50%) translateY(-50%);\\n}\\n\\n/* Static Shape */\\n\\n.ui.loader:before {\\n  position: absolute;\\n  content: '';\\n  top: 0;\\n  left: 50%;\\n  width: 100%;\\n  height: 100%;\\n  border-radius: 500rem;\\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\\n}\\n\\n/* Active Shape */\\n\\n.ui.loader:after {\\n  position: absolute;\\n  content: '';\\n  top: 0;\\n  left: 50%;\\n  width: 100%;\\n  height: 100%;\\n  -webkit-animation: loader 0.6s infinite linear;\\n  animation: loader 0.6s infinite linear;\\n  border: 0.2em solid #767676;\\n  border-radius: 500rem;\\n  -webkit-box-shadow: 0 0 0 1px transparent;\\n          box-shadow: 0 0 0 1px transparent;\\n}\\n\\n/* Speeds */\\n\\n.ui.fast.loading.loading:after,\\n.ui.fast.loading.loading .input > i.icon:after,\\n.ui.fast.loading.loading > i.icon:after,\\n.ui.fast.loader:after {\\n  -webkit-animation-duration: 0.3s;\\n  animation-duration: 0.3s;\\n}\\n\\n.ui.slow.loading.loading:after,\\n.ui.slow.loading.loading .input > i.icon:after,\\n.ui.slow.loading.loading > i.icon:after,\\n.ui.slow.loader:after {\\n  -webkit-animation-duration: 0.9s;\\n  animation-duration: 0.9s;\\n}\\n\\n/* Active Animation */\\n\\n@-webkit-keyframes loader {\\n  100% {\\n    -webkit-transform: rotate(360deg);\\n    transform: rotate(360deg);\\n  }\\n}\\n\\n@keyframes loader {\\n  100% {\\n    -webkit-transform: rotate(360deg);\\n    transform: rotate(360deg);\\n  }\\n}\\n\\n/* Sizes */\\n\\n.ui.mini.loader:before,\\n.ui.mini.loader:after {\\n  width: 1rem;\\n  height: 1rem;\\n  margin: 0 0 0 -0.5rem;\\n}\\n\\n.ui.tiny.loader:before,\\n.ui.tiny.loader:after {\\n  width: 1.14285714rem;\\n  height: 1.14285714rem;\\n  margin: 0 0 0 -0.57142857rem;\\n}\\n\\n.ui.small.loader:before,\\n.ui.small.loader:after {\\n  width: 1.71428571rem;\\n  height: 1.71428571rem;\\n  margin: 0 0 0 -0.85714286rem;\\n}\\n\\n.ui.loader:before,\\n.ui.loader:after {\\n  width: 2.28571429rem;\\n  height: 2.28571429rem;\\n  margin: 0 0 0 -1.14285714rem;\\n}\\n\\n.ui.large.loader:before,\\n.ui.large.loader:after {\\n  width: 3.42857143rem;\\n  height: 3.42857143rem;\\n  margin: 0 0 0 -1.71428571rem;\\n}\\n\\n.ui.big.loader:before,\\n.ui.big.loader:after {\\n  width: 3.71428571rem;\\n  height: 3.71428571rem;\\n  margin: 0 0 0 -1.85714286rem;\\n}\\n\\n.ui.huge.loader:before,\\n.ui.huge.loader:after {\\n  width: 4.14285714rem;\\n  height: 4.14285714rem;\\n  margin: 0 0 0 -2.07142857rem;\\n}\\n\\n.ui.massive.loader:before,\\n.ui.massive.loader:after {\\n  width: 4.57142857rem;\\n  height: 4.57142857rem;\\n  margin: 0 0 0 -2.28571429rem;\\n}\\n\\n/*-------------------\\n      Coupling\\n--------------------*/\\n\\n/* Show inside active dimmer */\\n\\n.ui.dimmer > .loader {\\n  display: block;\\n}\\n\\n/* Black Dimmer */\\n\\n.ui.dimmer > .ui.loader {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.dimmer > .ui.loader:not(.elastic):before {\\n  border-color: rgba(255, 255, 255, 0.15);\\n}\\n\\n/* White Dimmer (Inverted) */\\n\\n.ui.inverted.dimmer > .ui.loader {\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.inverted.dimmer > .ui.loader:not(.elastic):before {\\n  border-color: rgba(0, 0, 0, 0.1);\\n}\\n\\n/*******************************\\n             Types\\n*******************************/\\n\\n/*-------------------\\n        Text\\n--------------------*/\\n\\n.ui.ui.ui.ui.text.loader {\\n  width: auto;\\n  height: auto;\\n  text-align: center;\\n  font-style: normal;\\n}\\n\\n/*******************************\\n            States\\n*******************************/\\n\\n.ui.indeterminate.loader:after {\\n  -webkit-animation-direction: reverse;\\n          animation-direction: reverse;\\n  -webkit-animation-duration: 1.2s;\\n  animation-duration: 1.2s;\\n}\\n\\n.ui.loader.active,\\n.ui.loader.visible {\\n  display: block;\\n}\\n\\n.ui.loader.disabled,\\n.ui.loader.hidden {\\n  display: none;\\n}\\n\\n/*******************************\\n            Variations\\n*******************************/\\n\\n/*-------------------\\n        Sizes\\n--------------------*/\\n\\n/* Loader */\\n\\n.ui.mini.loader {\\n  width: 1rem;\\n  height: 1rem;\\n  font-size: 0.78571429em;\\n}\\n\\n.ui.tiny.loader {\\n  width: 1.14285714rem;\\n  height: 1.14285714rem;\\n  font-size: 0.85714286em;\\n}\\n\\n.ui.small.loader {\\n  width: 1.71428571rem;\\n  height: 1.71428571rem;\\n  font-size: 0.92857143em;\\n}\\n\\n.ui.loader {\\n  width: 2.28571429rem;\\n  height: 2.28571429rem;\\n  font-size: 1em;\\n}\\n\\n.ui.large.loader {\\n  width: 3.42857143rem;\\n  height: 3.42857143rem;\\n  font-size: 1.14285714em;\\n}\\n\\n.ui.big.loader {\\n  width: 3.71428571rem;\\n  height: 3.71428571rem;\\n  font-size: 1.28571429em;\\n}\\n\\n.ui.huge.loader {\\n  width: 4.14285714rem;\\n  height: 4.14285714rem;\\n  font-size: 1.42857143em;\\n}\\n\\n.ui.massive.loader {\\n  width: 4.57142857rem;\\n  height: 4.57142857rem;\\n  font-size: 1.71428571em;\\n}\\n\\n/* Text Loader */\\n\\n.ui.mini.text.loader {\\n  min-width: 1rem;\\n  padding-top: 1.78571429rem;\\n}\\n\\n.ui.tiny.text.loader {\\n  min-width: 1.14285714rem;\\n  padding-top: 1.92857143rem;\\n}\\n\\n.ui.small.text.loader {\\n  min-width: 1.71428571rem;\\n  padding-top: 2.5rem;\\n}\\n\\n.ui.text.loader {\\n  min-width: 2.28571429rem;\\n  padding-top: 3.07142857rem;\\n}\\n\\n.ui.large.text.loader {\\n  min-width: 3.42857143rem;\\n  padding-top: 4.21428571rem;\\n}\\n\\n.ui.big.text.loader {\\n  min-width: 3.71428571rem;\\n  padding-top: 4.5rem;\\n}\\n\\n.ui.huge.text.loader {\\n  min-width: 4.14285714rem;\\n  padding-top: 4.92857143rem;\\n}\\n\\n.ui.massive.text.loader {\\n  min-width: 4.57142857rem;\\n  padding-top: 5.35714286rem;\\n}\\n\\n/*-------------------\\n       Colors\\n--------------------*/\\n\\n.ui.primary.elastic.loader.loader:before,\\n.ui.primary.basic.elastic.loading.button:before,\\n.ui.primary.basic.elastic.loading.button:after,\\n.ui.primary.elastic.loading.loading.loading:not(.segment):before,\\n.ui.primary.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.primary.elastic.loading.loading.loading.loading > i.icon:before,\\n.ui.primary.loading.loading.loading.loading:not(.usual):not(.button):after,\\n.ui.primary.loading.loading.loading.loading .input > i.icon:after,\\n.ui.primary.loading.loading.loading.loading > i.icon:after,\\n.ui.primary.loader.loader.loader:after {\\n  color: #2185D0;\\n}\\n\\n.ui.inverted.primary.elastic.loader:before,\\n.ui.inverted.primary.elastic.loading.loading.loading:not(.segment):before,\\n.ui.inverted.primary.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.inverted.primary.elastic.loading.loading.loading > i.icon:before,\\n.ui.inverted.primary.loading.loading.loading.loading:not(.usual):after,\\n.ui.inverted.primary.loading.loading.loading.loading .input > i.icon:after,\\n.ui.inverted.primary.loading.loading.loading.loading > i.icon:after,\\n.ui.inverted.primary.loader.loader.loader:after {\\n  color: #54C8FF;\\n}\\n\\n.ui.secondary.elastic.loader.loader:before,\\n.ui.secondary.basic.elastic.loading.button:before,\\n.ui.secondary.basic.elastic.loading.button:after,\\n.ui.secondary.elastic.loading.loading.loading:not(.segment):before,\\n.ui.secondary.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.secondary.elastic.loading.loading.loading.loading > i.icon:before,\\n.ui.secondary.loading.loading.loading.loading:not(.usual):not(.button):after,\\n.ui.secondary.loading.loading.loading.loading .input > i.icon:after,\\n.ui.secondary.loading.loading.loading.loading > i.icon:after,\\n.ui.secondary.loader.loader.loader:after {\\n  color: #1B1C1D;\\n}\\n\\n.ui.inverted.secondary.elastic.loader:before,\\n.ui.inverted.secondary.elastic.loading.loading.loading:not(.segment):before,\\n.ui.inverted.secondary.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.inverted.secondary.elastic.loading.loading.loading > i.icon:before,\\n.ui.inverted.secondary.loading.loading.loading.loading:not(.usual):after,\\n.ui.inverted.secondary.loading.loading.loading.loading .input > i.icon:after,\\n.ui.inverted.secondary.loading.loading.loading.loading > i.icon:after,\\n.ui.inverted.secondary.loader.loader.loader:after {\\n  color: #545454;\\n}\\n\\n.ui.red.elastic.loader.loader:before,\\n.ui.red.basic.elastic.loading.button:before,\\n.ui.red.basic.elastic.loading.button:after,\\n.ui.red.elastic.loading.loading.loading:not(.segment):before,\\n.ui.red.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.red.elastic.loading.loading.loading.loading > i.icon:before,\\n.ui.red.loading.loading.loading.loading:not(.usual):not(.button):after,\\n.ui.red.loading.loading.loading.loading .input > i.icon:after,\\n.ui.red.loading.loading.loading.loading > i.icon:after,\\n.ui.red.loader.loader.loader:after {\\n  color: #DB2828;\\n}\\n\\n.ui.inverted.red.elastic.loader:before,\\n.ui.inverted.red.elastic.loading.loading.loading:not(.segment):before,\\n.ui.inverted.red.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.inverted.red.elastic.loading.loading.loading > i.icon:before,\\n.ui.inverted.red.loading.loading.loading.loading:not(.usual):after,\\n.ui.inverted.red.loading.loading.loading.loading .input > i.icon:after,\\n.ui.inverted.red.loading.loading.loading.loading > i.icon:after,\\n.ui.inverted.red.loader.loader.loader:after {\\n  color: #FF695E;\\n}\\n\\n.ui.orange.elastic.loader.loader:before,\\n.ui.orange.basic.elastic.loading.button:before,\\n.ui.orange.basic.elastic.loading.button:after,\\n.ui.orange.elastic.loading.loading.loading:not(.segment):before,\\n.ui.orange.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.orange.elastic.loading.loading.loading.loading > i.icon:before,\\n.ui.orange.loading.loading.loading.loading:not(.usual):not(.button):after,\\n.ui.orange.loading.loading.loading.loading .input > i.icon:after,\\n.ui.orange.loading.loading.loading.loading > i.icon:after,\\n.ui.orange.loader.loader.loader:after {\\n  color: #F2711C;\\n}\\n\\n.ui.inverted.orange.elastic.loader:before,\\n.ui.inverted.orange.elastic.loading.loading.loading:not(.segment):before,\\n.ui.inverted.orange.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.inverted.orange.elastic.loading.loading.loading > i.icon:before,\\n.ui.inverted.orange.loading.loading.loading.loading:not(.usual):after,\\n.ui.inverted.orange.loading.loading.loading.loading .input > i.icon:after,\\n.ui.inverted.orange.loading.loading.loading.loading > i.icon:after,\\n.ui.inverted.orange.loader.loader.loader:after {\\n  color: #FF851B;\\n}\\n\\n.ui.yellow.elastic.loader.loader:before,\\n.ui.yellow.basic.elastic.loading.button:before,\\n.ui.yellow.basic.elastic.loading.button:after,\\n.ui.yellow.elastic.loading.loading.loading:not(.segment):before,\\n.ui.yellow.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.yellow.elastic.loading.loading.loading.loading > i.icon:before,\\n.ui.yellow.loading.loading.loading.loading:not(.usual):not(.button):after,\\n.ui.yellow.loading.loading.loading.loading .input > i.icon:after,\\n.ui.yellow.loading.loading.loading.loading > i.icon:after,\\n.ui.yellow.loader.loader.loader:after {\\n  color: #FBBD08;\\n}\\n\\n.ui.inverted.yellow.elastic.loader:before,\\n.ui.inverted.yellow.elastic.loading.loading.loading:not(.segment):before,\\n.ui.inverted.yellow.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.inverted.yellow.elastic.loading.loading.loading > i.icon:before,\\n.ui.inverted.yellow.loading.loading.loading.loading:not(.usual):after,\\n.ui.inverted.yellow.loading.loading.loading.loading .input > i.icon:after,\\n.ui.inverted.yellow.loading.loading.loading.loading > i.icon:after,\\n.ui.inverted.yellow.loader.loader.loader:after {\\n  color: #FFE21F;\\n}\\n\\n.ui.olive.elastic.loader.loader:before,\\n.ui.olive.basic.elastic.loading.button:before,\\n.ui.olive.basic.elastic.loading.button:after,\\n.ui.olive.elastic.loading.loading.loading:not(.segment):before,\\n.ui.olive.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.olive.elastic.loading.loading.loading.loading > i.icon:before,\\n.ui.olive.loading.loading.loading.loading:not(.usual):not(.button):after,\\n.ui.olive.loading.loading.loading.loading .input > i.icon:after,\\n.ui.olive.loading.loading.loading.loading > i.icon:after,\\n.ui.olive.loader.loader.loader:after {\\n  color: #B5CC18;\\n}\\n\\n.ui.inverted.olive.elastic.loader:before,\\n.ui.inverted.olive.elastic.loading.loading.loading:not(.segment):before,\\n.ui.inverted.olive.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.inverted.olive.elastic.loading.loading.loading > i.icon:before,\\n.ui.inverted.olive.loading.loading.loading.loading:not(.usual):after,\\n.ui.inverted.olive.loading.loading.loading.loading .input > i.icon:after,\\n.ui.inverted.olive.loading.loading.loading.loading > i.icon:after,\\n.ui.inverted.olive.loader.loader.loader:after {\\n  color: #D9E778;\\n}\\n\\n.ui.green.elastic.loader.loader:before,\\n.ui.green.basic.elastic.loading.button:before,\\n.ui.green.basic.elastic.loading.button:after,\\n.ui.green.elastic.loading.loading.loading:not(.segment):before,\\n.ui.green.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.green.elastic.loading.loading.loading.loading > i.icon:before,\\n.ui.green.loading.loading.loading.loading:not(.usual):not(.button):after,\\n.ui.green.loading.loading.loading.loading .input > i.icon:after,\\n.ui.green.loading.loading.loading.loading > i.icon:after,\\n.ui.green.loader.loader.loader:after {\\n  color: #21BA45;\\n}\\n\\n.ui.inverted.green.elastic.loader:before,\\n.ui.inverted.green.elastic.loading.loading.loading:not(.segment):before,\\n.ui.inverted.green.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.inverted.green.elastic.loading.loading.loading > i.icon:before,\\n.ui.inverted.green.loading.loading.loading.loading:not(.usual):after,\\n.ui.inverted.green.loading.loading.loading.loading .input > i.icon:after,\\n.ui.inverted.green.loading.loading.loading.loading > i.icon:after,\\n.ui.inverted.green.loader.loader.loader:after {\\n  color: #2ECC40;\\n}\\n\\n.ui.teal.elastic.loader.loader:before,\\n.ui.teal.basic.elastic.loading.button:before,\\n.ui.teal.basic.elastic.loading.button:after,\\n.ui.teal.elastic.loading.loading.loading:not(.segment):before,\\n.ui.teal.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.teal.elastic.loading.loading.loading.loading > i.icon:before,\\n.ui.teal.loading.loading.loading.loading:not(.usual):not(.button):after,\\n.ui.teal.loading.loading.loading.loading .input > i.icon:after,\\n.ui.teal.loading.loading.loading.loading > i.icon:after,\\n.ui.teal.loader.loader.loader:after {\\n  color: #00B5AD;\\n}\\n\\n.ui.inverted.teal.elastic.loader:before,\\n.ui.inverted.teal.elastic.loading.loading.loading:not(.segment):before,\\n.ui.inverted.teal.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.inverted.teal.elastic.loading.loading.loading > i.icon:before,\\n.ui.inverted.teal.loading.loading.loading.loading:not(.usual):after,\\n.ui.inverted.teal.loading.loading.loading.loading .input > i.icon:after,\\n.ui.inverted.teal.loading.loading.loading.loading > i.icon:after,\\n.ui.inverted.teal.loader.loader.loader:after {\\n  color: #6DFFFF;\\n}\\n\\n.ui.blue.elastic.loader.loader:before,\\n.ui.blue.basic.elastic.loading.button:before,\\n.ui.blue.basic.elastic.loading.button:after,\\n.ui.blue.elastic.loading.loading.loading:not(.segment):before,\\n.ui.blue.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.blue.elastic.loading.loading.loading.loading > i.icon:before,\\n.ui.blue.loading.loading.loading.loading:not(.usual):not(.button):after,\\n.ui.blue.loading.loading.loading.loading .input > i.icon:after,\\n.ui.blue.loading.loading.loading.loading > i.icon:after,\\n.ui.blue.loader.loader.loader:after {\\n  color: #2185D0;\\n}\\n\\n.ui.inverted.blue.elastic.loader:before,\\n.ui.inverted.blue.elastic.loading.loading.loading:not(.segment):before,\\n.ui.inverted.blue.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.inverted.blue.elastic.loading.loading.loading > i.icon:before,\\n.ui.inverted.blue.loading.loading.loading.loading:not(.usual):after,\\n.ui.inverted.blue.loading.loading.loading.loading .input > i.icon:after,\\n.ui.inverted.blue.loading.loading.loading.loading > i.icon:after,\\n.ui.inverted.blue.loader.loader.loader:after {\\n  color: #54C8FF;\\n}\\n\\n.ui.violet.elastic.loader.loader:before,\\n.ui.violet.basic.elastic.loading.button:before,\\n.ui.violet.basic.elastic.loading.button:after,\\n.ui.violet.elastic.loading.loading.loading:not(.segment):before,\\n.ui.violet.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.violet.elastic.loading.loading.loading.loading > i.icon:before,\\n.ui.violet.loading.loading.loading.loading:not(.usual):not(.button):after,\\n.ui.violet.loading.loading.loading.loading .input > i.icon:after,\\n.ui.violet.loading.loading.loading.loading > i.icon:after,\\n.ui.violet.loader.loader.loader:after {\\n  color: #6435C9;\\n}\\n\\n.ui.inverted.violet.elastic.loader:before,\\n.ui.inverted.violet.elastic.loading.loading.loading:not(.segment):before,\\n.ui.inverted.violet.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.inverted.violet.elastic.loading.loading.loading > i.icon:before,\\n.ui.inverted.violet.loading.loading.loading.loading:not(.usual):after,\\n.ui.inverted.violet.loading.loading.loading.loading .input > i.icon:after,\\n.ui.inverted.violet.loading.loading.loading.loading > i.icon:after,\\n.ui.inverted.violet.loader.loader.loader:after {\\n  color: #A291FB;\\n}\\n\\n.ui.purple.elastic.loader.loader:before,\\n.ui.purple.basic.elastic.loading.button:before,\\n.ui.purple.basic.elastic.loading.button:after,\\n.ui.purple.elastic.loading.loading.loading:not(.segment):before,\\n.ui.purple.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.purple.elastic.loading.loading.loading.loading > i.icon:before,\\n.ui.purple.loading.loading.loading.loading:not(.usual):not(.button):after,\\n.ui.purple.loading.loading.loading.loading .input > i.icon:after,\\n.ui.purple.loading.loading.loading.loading > i.icon:after,\\n.ui.purple.loader.loader.loader:after {\\n  color: #A333C8;\\n}\\n\\n.ui.inverted.purple.elastic.loader:before,\\n.ui.inverted.purple.elastic.loading.loading.loading:not(.segment):before,\\n.ui.inverted.purple.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.inverted.purple.elastic.loading.loading.loading > i.icon:before,\\n.ui.inverted.purple.loading.loading.loading.loading:not(.usual):after,\\n.ui.inverted.purple.loading.loading.loading.loading .input > i.icon:after,\\n.ui.inverted.purple.loading.loading.loading.loading > i.icon:after,\\n.ui.inverted.purple.loader.loader.loader:after {\\n  color: #DC73FF;\\n}\\n\\n.ui.pink.elastic.loader.loader:before,\\n.ui.pink.basic.elastic.loading.button:before,\\n.ui.pink.basic.elastic.loading.button:after,\\n.ui.pink.elastic.loading.loading.loading:not(.segment):before,\\n.ui.pink.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.pink.elastic.loading.loading.loading.loading > i.icon:before,\\n.ui.pink.loading.loading.loading.loading:not(.usual):not(.button):after,\\n.ui.pink.loading.loading.loading.loading .input > i.icon:after,\\n.ui.pink.loading.loading.loading.loading > i.icon:after,\\n.ui.pink.loader.loader.loader:after {\\n  color: #E03997;\\n}\\n\\n.ui.inverted.pink.elastic.loader:before,\\n.ui.inverted.pink.elastic.loading.loading.loading:not(.segment):before,\\n.ui.inverted.pink.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.inverted.pink.elastic.loading.loading.loading > i.icon:before,\\n.ui.inverted.pink.loading.loading.loading.loading:not(.usual):after,\\n.ui.inverted.pink.loading.loading.loading.loading .input > i.icon:after,\\n.ui.inverted.pink.loading.loading.loading.loading > i.icon:after,\\n.ui.inverted.pink.loader.loader.loader:after {\\n  color: #FF8EDF;\\n}\\n\\n.ui.brown.elastic.loader.loader:before,\\n.ui.brown.basic.elastic.loading.button:before,\\n.ui.brown.basic.elastic.loading.button:after,\\n.ui.brown.elastic.loading.loading.loading:not(.segment):before,\\n.ui.brown.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.brown.elastic.loading.loading.loading.loading > i.icon:before,\\n.ui.brown.loading.loading.loading.loading:not(.usual):not(.button):after,\\n.ui.brown.loading.loading.loading.loading .input > i.icon:after,\\n.ui.brown.loading.loading.loading.loading > i.icon:after,\\n.ui.brown.loader.loader.loader:after {\\n  color: #A5673F;\\n}\\n\\n.ui.inverted.brown.elastic.loader:before,\\n.ui.inverted.brown.elastic.loading.loading.loading:not(.segment):before,\\n.ui.inverted.brown.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.inverted.brown.elastic.loading.loading.loading > i.icon:before,\\n.ui.inverted.brown.loading.loading.loading.loading:not(.usual):after,\\n.ui.inverted.brown.loading.loading.loading.loading .input > i.icon:after,\\n.ui.inverted.brown.loading.loading.loading.loading > i.icon:after,\\n.ui.inverted.brown.loader.loader.loader:after {\\n  color: #D67C1C;\\n}\\n\\n.ui.grey.elastic.loader.loader:before,\\n.ui.grey.basic.elastic.loading.button:before,\\n.ui.grey.basic.elastic.loading.button:after,\\n.ui.grey.elastic.loading.loading.loading:not(.segment):before,\\n.ui.grey.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.grey.elastic.loading.loading.loading.loading > i.icon:before,\\n.ui.grey.loading.loading.loading.loading:not(.usual):not(.button):after,\\n.ui.grey.loading.loading.loading.loading .input > i.icon:after,\\n.ui.grey.loading.loading.loading.loading > i.icon:after,\\n.ui.grey.loader.loader.loader:after {\\n  color: #767676;\\n}\\n\\n.ui.inverted.grey.elastic.loader:before,\\n.ui.inverted.grey.elastic.loading.loading.loading:not(.segment):before,\\n.ui.inverted.grey.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.inverted.grey.elastic.loading.loading.loading > i.icon:before,\\n.ui.inverted.grey.loading.loading.loading.loading:not(.usual):after,\\n.ui.inverted.grey.loading.loading.loading.loading .input > i.icon:after,\\n.ui.inverted.grey.loading.loading.loading.loading > i.icon:after,\\n.ui.inverted.grey.loader.loader.loader:after {\\n  color: #DCDDDE;\\n}\\n\\n.ui.black.elastic.loader.loader:before,\\n.ui.black.basic.elastic.loading.button:before,\\n.ui.black.basic.elastic.loading.button:after,\\n.ui.black.elastic.loading.loading.loading:not(.segment):before,\\n.ui.black.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.black.elastic.loading.loading.loading.loading > i.icon:before,\\n.ui.black.loading.loading.loading.loading:not(.usual):not(.button):after,\\n.ui.black.loading.loading.loading.loading .input > i.icon:after,\\n.ui.black.loading.loading.loading.loading > i.icon:after,\\n.ui.black.loader.loader.loader:after {\\n  color: #1B1C1D;\\n}\\n\\n.ui.inverted.black.elastic.loader:before,\\n.ui.inverted.black.elastic.loading.loading.loading:not(.segment):before,\\n.ui.inverted.black.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.inverted.black.elastic.loading.loading.loading > i.icon:before,\\n.ui.inverted.black.loading.loading.loading.loading:not(.usual):after,\\n.ui.inverted.black.loading.loading.loading.loading .input > i.icon:after,\\n.ui.inverted.black.loading.loading.loading.loading > i.icon:after,\\n.ui.inverted.black.loader.loader.loader:after {\\n  color: #545454;\\n}\\n\\n.ui.elastic.loader.loader:before,\\n.ui.elastic.loading.loading.loading:before,\\n.ui.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.elastic.loading.loading.loading > i.icon:before,\\n.ui.loading.loading.loading.loading:not(.usual):after,\\n.ui.loading.loading.loading.loading .input > i.icon:after,\\n.ui.loading.loading.loading.loading > i.icon:after,\\n.ui.loader.loader.loader:after {\\n  border-color: currentColor;\\n}\\n\\n.ui.elastic.loading.loading.loading.loading.button:not(.inverted):not(.basic):before {\\n  color: #FFFFFF;\\n}\\n\\n.ui.elastic.basic.loading.button:before,\\n.ui.elastic.basic.loading.button:after {\\n  color: #767676;\\n}\\n\\n.ui.double.loading.loading.loading.loading.button:after {\\n  border-bottom-color: currentColor;\\n}\\n\\n/*-------------------\\n       Inline\\n--------------------*/\\n\\n.ui.inline.loader {\\n  position: relative;\\n  vertical-align: middle;\\n  margin: 0;\\n  left: 0;\\n  top: 0;\\n  -webkit-transform: none;\\n  transform: none;\\n}\\n\\n.ui.inline.loader.active,\\n.ui.inline.loader.visible {\\n  display: inline-block;\\n}\\n\\n/* Centered Inline */\\n\\n.ui.centered.inline.loader.active,\\n.ui.centered.inline.loader.visible {\\n  display: block;\\n  margin-left: auto;\\n  margin-right: auto;\\n}\\n\\n.ui.loading.loading.loading.loading.loading.loading:after,\\n.ui.loading.loading.loading.loading.loading.loading .input > i.icon:after,\\n.ui.loading.loading.loading.loading.loading.loading > i.icon:after,\\n.ui.loader.loader.loader.loader.loader:after {\\n  border-left-color: transparent;\\n  border-right-color: transparent;\\n}\\n\\n.ui.loading.loading.loading.loading.loading.loading.loading:not(.double):after,\\n.ui.loading.loading.loading.loading.loading.loading.loading:not(.double) .input > i.icon:after,\\n.ui.loading.loading.loading.loading.loading.loading.loading:not(.double) > i.icon:after,\\n.ui.loader.loader.loader.loader.loader.loader:not(.double):after {\\n  border-bottom-color: transparent;\\n}\\n\\n.ui.loading.loading.loading.loading.loading.loading.segment:after,\\n.ui.loading.loading.loading.loading.loading.loading.form:after {\\n  border-left-color: rgba(0, 0, 0, 0.1);\\n  border-right-color: rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.loading.loading.loading.loading.loading.loading.segment:not(.double):after,\\n.ui.loading.loading.loading.loading.loading.loading.form:not(.double):after {\\n  border-bottom-color: rgba(0, 0, 0, 0.1);\\n}\\n\\n/*-------------------\\n       Elastic\\n--------------------*/\\n\\n.ui.dimmer > .ui.elastic.loader {\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.dimmer > .ui.elastic.loader {\\n  color: #767676;\\n}\\n\\n.ui.elastic.loading.loading:not(.form):not(.segment):after,\\n.ui.elastic.loading.loading .input > i.icon:after,\\n.ui.elastic.loading.loading > i.icon:after,\\n.ui.elastic.loader.loader:after {\\n  -webkit-animation: loader 1s infinite cubic-bezier(0.27, 1.05, 0.92, 0.61);\\n  animation: loader 1s infinite cubic-bezier(0.27, 1.05, 0.92, 0.61);\\n  -webkit-animation-delay: 0.3s;\\n  animation-delay: 0.3s;\\n}\\n\\n.ui.elastic.loading.loading.loading:not(.form):not(.segment):before,\\n.ui.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.elastic.loading.loading.loading > i.icon:before,\\n.ui.elastic.loader.loader:before {\\n  -webkit-animation: elastic-loader 1s infinite cubic-bezier(0.27, 1.05, 0.92, 0.61);\\n  animation: elastic-loader 1s infinite cubic-bezier(0.27, 1.05, 0.92, 0.61);\\n  -moz-animation: currentcolor-elastic-loader 1s infinite cubic-bezier(0.27, 1.05, 0.92, 0.61);\\n  border-right-color: transparent;\\n}\\n\\n.ui.elastic.inline.loader:empty {\\n  -webkit-animation: loader 8s infinite linear;\\n  animation: loader 8s infinite linear;\\n}\\n\\n.ui.slow.elastic.loading.loading:not(.form):not(.segment):after,\\n.ui.slow.elastic.loading.loading .input > i.icon:after,\\n.ui.slow.elastic.loading.loading > i.icon:after,\\n.ui.slow.elastic.loader.loader:after {\\n  -webkit-animation-duration: 1.5s;\\n  animation-duration: 1.5s;\\n  -webkit-animation-delay: 0.45s;\\n  animation-delay: 0.45s;\\n}\\n\\n.ui.slow.elastic.loading.loading.loading:not(.form):not(.segment):before,\\n.ui.slow.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.slow.elastic.loading.loading.loading > i.icon:before,\\n.ui.slow.elastic.loader.loader:before {\\n  -webkit-animation-duration: 1.5s;\\n  animation-duration: 1.5s;\\n}\\n\\n.ui.fast.elastic.loading.loading:not(.form):not(.segment):after,\\n.ui.fast.elastic.loading.loading .input > i.icon:after,\\n.ui.fast.elastic.loading.loading > i.icon:after,\\n.ui.fast.elastic.loader.loader:after {\\n  -webkit-animation-duration: 0.66s;\\n  animation-duration: 0.66s;\\n  -webkit-animation-delay: 0.2s;\\n  animation-delay: 0.2s;\\n}\\n\\n.ui.fast.elastic.loading.loading.loading:not(.form):not(.segment):before,\\n.ui.fast.elastic.loading.loading.loading .input > i.icon:before,\\n.ui.fast.elastic.loading.loading.loading > i.icon:before,\\n.ui.fast.elastic.loader.loader:before {\\n  -webkit-animation-duration: 0.66s;\\n  animation-duration: 0.66s;\\n}\\n\\n@-webkit-keyframes elastic-loader {\\n  0%, 1% {\\n    border-left-color: transparent;\\n    border-bottom-color: transparent;\\n  }\\n\\n  1.1%, 50% {\\n    border-left-color: inherit;\\n  }\\n\\n  10%, 35.1% {\\n    border-bottom-color: transparent;\\n  }\\n\\n  10.1%, 35% {\\n    border-bottom-color: inherit;\\n  }\\n\\n  50.1% {\\n    border-left-color: transparent;\\n  }\\n\\n  100% {\\n    border-left-color: transparent;\\n    border-bottom-color: transparent;\\n    -webkit-transform: rotate(360deg);\\n    transform: rotate(360deg);\\n  }\\n}\\n\\n@keyframes elastic-loader {\\n  0%, 1% {\\n    border-left-color: transparent;\\n    border-bottom-color: transparent;\\n  }\\n\\n  1.1%, 50% {\\n    border-left-color: inherit;\\n  }\\n\\n  10%, 35.1% {\\n    border-bottom-color: transparent;\\n  }\\n\\n  10.1%, 35% {\\n    border-bottom-color: inherit;\\n  }\\n\\n  50.1% {\\n    border-left-color: transparent;\\n  }\\n\\n  100% {\\n    border-left-color: transparent;\\n    border-bottom-color: transparent;\\n    -webkit-transform: rotate(360deg);\\n    transform: rotate(360deg);\\n  }\\n}\\n\\n@-webkit-keyframes currentcolor-elastic-loader {\\n  0%, 1% {\\n    border-left-color: transparent;\\n    border-bottom-color: transparent;\\n  }\\n\\n  1.1%, 50% {\\n    border-left-color: currentColor;\\n  }\\n\\n  10%, 35.1% {\\n    border-bottom-color: transparent;\\n  }\\n\\n  10.1%, 35% {\\n    border-bottom-color: currentColor;\\n  }\\n\\n  50.1% {\\n    border-left-color: transparent;\\n  }\\n\\n  100% {\\n    border-left-color: transparent;\\n    border-bottom-color: transparent;\\n    -webkit-transform: rotate(360deg);\\n    transform: rotate(360deg);\\n  }\\n}\\n\\n@keyframes currentcolor-elastic-loader {\\n  0%, 1% {\\n    border-left-color: transparent;\\n    border-bottom-color: transparent;\\n  }\\n\\n  1.1%, 50% {\\n    border-left-color: currentColor;\\n  }\\n\\n  10%, 35.1% {\\n    border-bottom-color: transparent;\\n  }\\n\\n  10.1%, 35% {\\n    border-bottom-color: currentColor;\\n  }\\n\\n  50.1% {\\n    border-left-color: transparent;\\n  }\\n\\n  100% {\\n    border-left-color: transparent;\\n    border-bottom-color: transparent;\\n    -webkit-transform: rotate(360deg);\\n    transform: rotate(360deg);\\n  }\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Loader\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*-------------------\\n      Content\\n--------------------*/\\n\\n.ui.placeholder {\\n  position: static;\\n  overflow: hidden;\\n  -webkit-animation: placeholderShimmer 2s linear;\\n  animation: placeholderShimmer 2s linear;\\n  -webkit-animation-iteration-count: infinite;\\n  animation-iteration-count: infinite;\\n  background-color: #FFFFFF;\\n  background-image: -webkit-gradient(linear, left top, right top, color-stop(0, rgba(0, 0, 0, 0.08)), color-stop(15%, rgba(0, 0, 0, 0.15)), color-stop(30%, rgba(0, 0, 0, 0.08)));\\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.08) 0, rgba(0, 0, 0, 0.15) 15%, rgba(0, 0, 0, 0.08) 30%);\\n  background-size: 1200px 100%;\\n  max-width: 30rem;\\n}\\n\\n@-webkit-keyframes placeholderShimmer {\\n  0% {\\n    background-position: -1200px 0;\\n  }\\n\\n  100% {\\n    background-position: 1200px 0;\\n  }\\n}\\n\\n@keyframes placeholderShimmer {\\n  0% {\\n    background-position: -1200px 0;\\n  }\\n\\n  100% {\\n    background-position: 1200px 0;\\n  }\\n}\\n\\n.ui.placeholder + .ui.placeholder {\\n  margin-top: 2rem;\\n}\\n\\n.ui.placeholder + .ui.placeholder {\\n  -webkit-animation-delay: 0.15s;\\n  animation-delay: 0.15s;\\n}\\n\\n.ui.placeholder + .ui.placeholder + .ui.placeholder {\\n  -webkit-animation-delay: 0.3s;\\n  animation-delay: 0.3s;\\n}\\n\\n.ui.placeholder + .ui.placeholder + .ui.placeholder + .ui.placeholder {\\n  -webkit-animation-delay: 0.45s;\\n  animation-delay: 0.45s;\\n}\\n\\n.ui.placeholder + .ui.placeholder + .ui.placeholder + .ui.placeholder + .ui.placeholder {\\n  -webkit-animation-delay: 0.6s;\\n  animation-delay: 0.6s;\\n}\\n\\n.ui.placeholder,\\n.ui.placeholder > :before,\\n.ui.placeholder .image.header:after,\\n.ui.placeholder .line,\\n.ui.placeholder .line:after {\\n  background-color: #FFFFFF;\\n}\\n\\n.ui.placeholder.hidden {\\n  display: none;\\n}\\n\\n/* Image */\\n\\n.ui.placeholder .image:not(.header):not(.ui):not(.icon) {\\n  height: 100px;\\n}\\n\\n.ui.placeholder .square.image:not(.header) {\\n  height: 0;\\n  overflow: hidden;\\n  /* 1/1 aspect ratio */\\n  padding-top: 100%;\\n}\\n\\n.ui.placeholder .rectangular.image:not(.header) {\\n  height: 0;\\n  overflow: hidden;\\n  /* 4/3 aspect ratio */\\n  padding-top: 75%;\\n}\\n\\n/* Lines */\\n\\n.ui.placeholder .line {\\n  position: relative;\\n  height: 0.85714286em;\\n}\\n\\n.ui.placeholder .line:before,\\n.ui.placeholder .line:after {\\n  top: 100%;\\n  position: absolute;\\n  content: '';\\n  background-color: inherit;\\n}\\n\\n.ui.placeholder .line:before {\\n  left: 0;\\n}\\n\\n.ui.placeholder .line:after {\\n  right: 0;\\n}\\n\\n/* Any Lines */\\n\\n.ui.placeholder .line {\\n  margin-bottom: 0.5em;\\n}\\n\\n.ui.placeholder .line:before,\\n.ui.placeholder .line:after {\\n  height: 0.5em;\\n}\\n\\n.ui.placeholder .line:not(:first-child) {\\n  margin-top: 0.5em;\\n}\\n\\n/* Header Image + 2 Lines */\\n\\n.ui.placeholder .header {\\n  position: relative;\\n  overflow: hidden;\\n}\\n\\n/* Line Outdent */\\n\\n.ui.placeholder .line:nth-child(1):after {\\n  width: 0;\\n}\\n\\n.ui.placeholder .line:nth-child(2):after {\\n  width: 50%;\\n}\\n\\n.ui.placeholder .line:nth-child(3):after {\\n  width: 10%;\\n}\\n\\n.ui.placeholder .line:nth-child(4):after {\\n  width: 35%;\\n}\\n\\n.ui.placeholder .line:nth-child(5):after {\\n  width: 65%;\\n}\\n\\n/* Header Line 1 & 2*/\\n\\n.ui.placeholder .header .line {\\n  margin-bottom: 0.64285714em;\\n}\\n\\n.ui.placeholder .header .line:before,\\n.ui.placeholder .header .line:after {\\n  height: 0.64285714em;\\n}\\n\\n.ui.placeholder .header .line:not(:first-child) {\\n  margin-top: 0.64285714em;\\n}\\n\\n.ui.placeholder .header .line:after {\\n  width: 20%;\\n}\\n\\n.ui.placeholder .header .line:nth-child(2):after {\\n  width: 60%;\\n}\\n\\n/* Image Header */\\n\\n.ui.placeholder .image.header .line {\\n  margin-left: 3em;\\n}\\n\\n.ui.placeholder .image.header .line:before {\\n  width: 0.71428571rem;\\n}\\n\\n.ui.placeholder .image.header:after {\\n  display: block;\\n  height: 0.85714286em;\\n  content: '';\\n  margin-left: 3em;\\n}\\n\\n/* Spacing */\\n\\n.ui.placeholder .image .line:first-child,\\n.ui.placeholder .paragraph .line:first-child,\\n.ui.placeholder .header .line:first-child {\\n  height: 0.01px;\\n}\\n\\n.ui.placeholder .image:not(:first-child):before,\\n.ui.placeholder .paragraph:not(:first-child):before,\\n.ui.placeholder .header:not(:first-child):before {\\n  height: 1.42857143em;\\n  content: '';\\n  display: block;\\n}\\n\\n/* Inverted Content Loader */\\n\\n.ui.inverted.placeholder {\\n  background-image: -webkit-gradient(linear, left top, right top, color-stop(0, rgba(255, 255, 255, 0.08)), color-stop(15%, rgba(255, 255, 255, 0.14)), color-stop(30%, rgba(255, 255, 255, 0.08)));\\n  background-image: linear-gradient(to right, rgba(255, 255, 255, 0.08) 0, rgba(255, 255, 255, 0.14) 15%, rgba(255, 255, 255, 0.08) 30%);\\n}\\n\\n.ui.inverted.placeholder,\\n.ui.inverted.placeholder > :before,\\n.ui.inverted.placeholder .image.header:after,\\n.ui.inverted.placeholder .line,\\n.ui.inverted.placeholder .line:after {\\n  background-color: #1B1C1D;\\n}\\n\\n/*******************************\\n            Variations\\n*******************************/\\n\\n/*-------------------\\n        Sizes\\n--------------------*/\\n\\n.ui.placeholder .full.line.line.line:after {\\n  width: 0;\\n}\\n\\n.ui.placeholder .very.long.line.line.line:after {\\n  width: 10%;\\n}\\n\\n.ui.placeholder .long.line.line.line:after {\\n  width: 35%;\\n}\\n\\n.ui.placeholder .medium.line.line.line:after {\\n  width: 50%;\\n}\\n\\n.ui.placeholder .short.line.line.line:after {\\n  width: 65%;\\n}\\n\\n.ui.placeholder .very.short.line.line.line:after {\\n  width: 80%;\\n}\\n\\n/*-------------------\\n        Fluid\\n--------------------*/\\n\\n.ui.fluid.placeholder {\\n  max-width: none;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Rail\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n             Rails\\n*******************************/\\n\\n.ui.rail {\\n  position: absolute;\\n  top: 0;\\n  width: 300px;\\n  height: 100%;\\n}\\n\\n.ui.left.rail {\\n  left: auto;\\n  right: 100%;\\n  padding: 0 2rem 0 0;\\n  margin: 0 2rem 0 0;\\n}\\n\\n.ui.right.rail {\\n  left: 100%;\\n  right: auto;\\n  padding: 0 0 0 2rem;\\n  margin: 0 0 0 2rem;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*--------------\\n     Internal\\n---------------*/\\n\\n.ui.left.internal.rail {\\n  left: 0;\\n  right: auto;\\n  padding: 0 0 0 2rem;\\n  margin: 0 0 0 2rem;\\n}\\n\\n.ui.right.internal.rail {\\n  left: auto;\\n  right: 0;\\n  padding: 0 2rem 0 0;\\n  margin: 0 2rem 0 0;\\n}\\n\\n/*--------------\\n    Dividing\\n---------------*/\\n\\n.ui.dividing.rail {\\n  width: 302.5px;\\n}\\n\\n.ui.left.dividing.rail {\\n  padding: 0 2.5rem 0 0;\\n  margin: 0 2.5rem 0 0;\\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.right.dividing.rail {\\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\\n  padding: 0 0 0 2.5rem;\\n  margin: 0 0 0 2.5rem;\\n}\\n\\n/*--------------\\n    Distance\\n---------------*/\\n\\n.ui.close.rail {\\n  width: calc(300px + 1em);\\n}\\n\\n.ui.close.left.rail {\\n  padding: 0 1em 0 0;\\n  margin: 0 1em 0 0;\\n}\\n\\n.ui.close.right.rail {\\n  padding: 0 0 0 1em;\\n  margin: 0 0 0 1em;\\n}\\n\\n.ui.very.close.rail {\\n  width: calc(300px + 0.5em);\\n}\\n\\n.ui.very.close.left.rail {\\n  padding: 0 0.5em 0 0;\\n  margin: 0 0.5em 0 0;\\n}\\n\\n.ui.very.close.right.rail {\\n  padding: 0 0 0 0.5em;\\n  margin: 0 0 0 0.5em;\\n}\\n\\n/*--------------\\n    Attached\\n---------------*/\\n\\n.ui.attached.left.rail,\\n.ui.attached.right.rail {\\n  padding: 0;\\n  margin: 0;\\n}\\n\\n/*--------------\\n     Sizing\\n---------------*/\\n\\n.ui.mini.rail {\\n  font-size: 0.78571429rem;\\n}\\n\\n.ui.tiny.rail {\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.small.rail {\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.rail {\\n  font-size: 1rem;\\n}\\n\\n.ui.large.rail {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.big.rail {\\n  font-size: 1.28571429rem;\\n}\\n\\n.ui.huge.rail {\\n  font-size: 1.42857143rem;\\n}\\n\\n.ui.massive.rail {\\n  font-size: 1.71428571rem;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Reveal\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Reveal\\n*******************************/\\n\\n.ui.reveal {\\n  display: inherit;\\n  position: relative !important;\\n  font-size: 0 !important;\\n}\\n\\n.ui.reveal > .visible.content {\\n  position: absolute !important;\\n  top: 0 !important;\\n  left: 0 !important;\\n  z-index: 3 !important;\\n  -webkit-transition: all 0.5s ease 0.1s;\\n  transition: all 0.5s ease 0.1s;\\n}\\n\\n.ui.reveal > .hidden.content {\\n  position: relative !important;\\n  z-index: 2 !important;\\n}\\n\\n/* Make sure hovered element is on top of other reveal */\\n\\n.ui.active.reveal .visible.content,\\n.ui.reveal:hover .visible.content {\\n  z-index: 4 !important;\\n}\\n\\n/*******************************\\n              Types\\n*******************************/\\n\\n/*--------------\\n      Slide\\n---------------*/\\n\\n.ui.slide.reveal {\\n  position: relative !important;\\n  overflow: hidden !important;\\n  white-space: nowrap;\\n}\\n\\n.ui.slide.reveal > .content {\\n  display: block;\\n  width: 100%;\\n  white-space: normal;\\n  float: left;\\n  margin: 0;\\n  transition: -webkit-transform 0.5s ease 0.1s;\\n  -webkit-transition: -webkit-transform 0.5s ease 0.1s;\\n  transition: transform 0.5s ease 0.1s;\\n  transition: transform 0.5s ease 0.1s, -webkit-transform 0.5s ease 0.1s;\\n}\\n\\n.ui.slide.reveal > .visible.content {\\n  position: relative !important;\\n}\\n\\n.ui.slide.reveal > .hidden.content {\\n  position: absolute !important;\\n  left: 0 !important;\\n  width: 100% !important;\\n  -webkit-transform: translateX(100%) !important;\\n  transform: translateX(100%) !important;\\n}\\n\\n.ui.slide.active.reveal > .visible.content,\\n.ui.slide.reveal:hover > .visible.content {\\n  -webkit-transform: translateX(-100%) !important;\\n  transform: translateX(-100%) !important;\\n}\\n\\n.ui.slide.active.reveal > .hidden.content,\\n.ui.slide.reveal:hover > .hidden.content {\\n  -webkit-transform: translateX(0%) !important;\\n  transform: translateX(0%) !important;\\n}\\n\\n.ui.slide.right.reveal > .visible.content {\\n  -webkit-transform: translateX(0%) !important;\\n  transform: translateX(0%) !important;\\n}\\n\\n.ui.slide.right.reveal > .hidden.content {\\n  -webkit-transform: translateX(-100%) !important;\\n  transform: translateX(-100%) !important;\\n}\\n\\n.ui.slide.right.active.reveal > .visible.content,\\n.ui.slide.right.reveal:hover > .visible.content {\\n  -webkit-transform: translateX(100%) !important;\\n  transform: translateX(100%) !important;\\n}\\n\\n.ui.slide.right.active.reveal > .hidden.content,\\n.ui.slide.right.reveal:hover > .hidden.content {\\n  -webkit-transform: translateX(0%) !important;\\n  transform: translateX(0%) !important;\\n}\\n\\n.ui.slide.up.reveal > .hidden.content {\\n  -webkit-transform: translateY(100%) !important;\\n  transform: translateY(100%) !important;\\n}\\n\\n.ui.slide.up.active.reveal > .visible.content,\\n.ui.slide.up.reveal:hover > .visible.content {\\n  -webkit-transform: translateY(-100%) !important;\\n  transform: translateY(-100%) !important;\\n}\\n\\n.ui.slide.up.active.reveal > .hidden.content,\\n.ui.slide.up.reveal:hover > .hidden.content {\\n  -webkit-transform: translateY(0%) !important;\\n  transform: translateY(0%) !important;\\n}\\n\\n.ui.slide.down.reveal > .hidden.content {\\n  -webkit-transform: translateY(-100%) !important;\\n  transform: translateY(-100%) !important;\\n}\\n\\n.ui.slide.down.active.reveal > .visible.content,\\n.ui.slide.down.reveal:hover > .visible.content {\\n  -webkit-transform: translateY(100%) !important;\\n  transform: translateY(100%) !important;\\n}\\n\\n.ui.slide.down.active.reveal > .hidden.content,\\n.ui.slide.down.reveal:hover > .hidden.content {\\n  -webkit-transform: translateY(0%) !important;\\n  transform: translateY(0%) !important;\\n}\\n\\n/*--------------\\n      Fade\\n---------------*/\\n\\n.ui.fade.reveal > .visible.content {\\n  opacity: 1;\\n}\\n\\n.ui.fade.active.reveal > .visible.content,\\n.ui.fade.reveal:hover > .visible.content {\\n  opacity: 0;\\n}\\n\\n/*--------------\\n      Move\\n---------------*/\\n\\n.ui.move.reveal {\\n  position: relative !important;\\n  overflow: hidden !important;\\n  white-space: nowrap;\\n}\\n\\n.ui.move.reveal > .content {\\n  display: block;\\n  float: left;\\n  white-space: normal;\\n  margin: 0;\\n  transition: -webkit-transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\\n  -webkit-transition: -webkit-transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\\n  transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\\n  transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s, -webkit-transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\\n}\\n\\n.ui.move.reveal > .visible.content {\\n  position: relative !important;\\n}\\n\\n.ui.move.reveal > .hidden.content {\\n  position: absolute !important;\\n  left: 0 !important;\\n  width: 100% !important;\\n}\\n\\n.ui.move.active.reveal > .visible.content,\\n.ui.move.reveal:hover > .visible.content {\\n  -webkit-transform: translateX(-100%) !important;\\n  transform: translateX(-100%) !important;\\n}\\n\\n.ui.move.right.active.reveal > .visible.content,\\n.ui.move.right.reveal:hover > .visible.content {\\n  -webkit-transform: translateX(100%) !important;\\n  transform: translateX(100%) !important;\\n}\\n\\n.ui.move.up.active.reveal > .visible.content,\\n.ui.move.up.reveal:hover > .visible.content {\\n  -webkit-transform: translateY(-100%) !important;\\n  transform: translateY(-100%) !important;\\n}\\n\\n.ui.move.down.active.reveal > .visible.content,\\n.ui.move.down.reveal:hover > .visible.content {\\n  -webkit-transform: translateY(100%) !important;\\n  transform: translateY(100%) !important;\\n}\\n\\n/*--------------\\n     Rotate\\n---------------*/\\n\\n.ui.rotate.reveal > .visible.content {\\n  -webkit-transition-duration: 0.5s;\\n          transition-duration: 0.5s;\\n  -webkit-transform: rotate(0deg);\\n  transform: rotate(0deg);\\n}\\n\\n.ui.rotate.reveal > .visible.content,\\n.ui.rotate.right.reveal > .visible.content {\\n  -webkit-transform-origin: bottom right;\\n  transform-origin: bottom right;\\n}\\n\\n.ui.rotate.active.reveal > .visible.content,\\n.ui.rotate.reveal:hover > .visible.content,\\n.ui.rotate.right.active.reveal > .visible.content,\\n.ui.rotate.right.reveal:hover > .visible.content {\\n  -webkit-transform: rotate(110deg);\\n  transform: rotate(110deg);\\n}\\n\\n.ui.rotate.left.reveal > .visible.content {\\n  -webkit-transform-origin: bottom left;\\n  transform-origin: bottom left;\\n}\\n\\n.ui.rotate.left.active.reveal > .visible.content,\\n.ui.rotate.left.reveal:hover > .visible.content {\\n  -webkit-transform: rotate(-110deg);\\n  transform: rotate(-110deg);\\n}\\n\\n/*******************************\\n              States\\n*******************************/\\n\\n.ui.disabled.reveal:hover > .visible.visible.content {\\n  position: static !important;\\n  display: block !important;\\n  opacity: 1 !important;\\n  top: 0 !important;\\n  left: 0 !important;\\n  right: auto !important;\\n  bottom: auto !important;\\n  -webkit-transform: none !important;\\n  transform: none !important;\\n}\\n\\n.ui.disabled.reveal:hover > .hidden.hidden.content {\\n  display: none !important;\\n}\\n\\n/*******************************\\n           Coupling\\n*******************************/\\n\\n.ui.reveal > .ui.ribbon.label {\\n  z-index: 5;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*--------------\\n     Visible\\n---------------*/\\n\\n.ui.visible.reveal {\\n  overflow: visible;\\n}\\n\\n/*--------------\\n     Instant\\n---------------*/\\n\\n.ui.instant.reveal > .content {\\n  -webkit-transition-delay: 0s !important;\\n          transition-delay: 0s !important;\\n}\\n\\n/*--------------\\n     Sizing\\n---------------*/\\n\\n.ui.reveal > .content {\\n  font-size: 1rem !important;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Segment\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Segment\\n*******************************/\\n\\n.ui.segment {\\n  position: relative;\\n  background: #FFFFFF;\\n  -webkit-box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15);\\n  margin: 1rem 0;\\n  padding: 1em 1em;\\n  border-radius: 0.28571429rem;\\n  border: 1px solid rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.segment:first-child {\\n  margin-top: 0;\\n}\\n\\n.ui.segment:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/* Vertical */\\n\\n.ui.vertical.segment {\\n  margin: 0;\\n  padding-left: 0;\\n  padding-right: 0;\\n  background: none transparent;\\n  border-radius: 0;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  border: none;\\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.vertical.segment:last-child {\\n  border-bottom: none;\\n}\\n\\n/*-------------------\\n    Loose Coupling\\n--------------------*/\\n\\n/* Header */\\n\\n.ui.inverted.segment > .ui.header > .sub.header,\\n.ui.inverted.segment > .ui.header {\\n  color: #FFFFFF;\\n}\\n\\n/* Label */\\n\\n.ui[class*=\\\"bottom attached\\\"].segment > [class*=\\\"top attached\\\"].label {\\n  border-top-left-radius: 0;\\n  border-top-right-radius: 0;\\n}\\n\\n.ui[class*=\\\"top attached\\\"].segment > [class*=\\\"bottom attached\\\"].label {\\n  border-bottom-left-radius: 0;\\n  border-bottom-right-radius: 0;\\n}\\n\\n.ui.attached.segment:not(.top):not(.bottom) > [class*=\\\"top attached\\\"].label {\\n  border-top-left-radius: 0;\\n  border-top-right-radius: 0;\\n}\\n\\n.ui.attached.segment:not(.top):not(.bottom) > [class*=\\\"bottom attached\\\"].label {\\n  border-bottom-left-radius: 0;\\n  border-bottom-right-radius: 0;\\n}\\n\\n/* Grid */\\n\\n.ui.page.grid.segment,\\n.ui.grid > .row > .ui.segment.column,\\n.ui.grid > .ui.segment.column {\\n  padding-top: 2em;\\n  padding-bottom: 2em;\\n}\\n\\n.ui.grid.segment {\\n  margin: 1rem 0;\\n  border-radius: 0.28571429rem;\\n}\\n\\n/* Table */\\n\\n.ui.basic.table.segment {\\n  background: #FFFFFF;\\n  border: 1px solid rgba(34, 36, 38, 0.15);\\n  -webkit-box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui[class*=\\\"very basic\\\"].table.segment {\\n  padding: 1em 1em;\\n}\\n\\n/* Tab */\\n\\n.ui.segment.tab:last-child {\\n  margin-bottom: 1rem;\\n}\\n\\n/*******************************\\n             Types\\n*******************************/\\n\\n/*-------------------\\n     Placeholder\\n--------------------*/\\n\\n.ui.placeholder.segment {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  -webkit-box-pack: center;\\n      -ms-flex-pack: center;\\n          justify-content: center;\\n  -webkit-box-align: stretch;\\n      -ms-flex-align: stretch;\\n          align-items: stretch;\\n  max-width: initial;\\n  -webkit-animation: none;\\n  animation: none;\\n  overflow: visible;\\n  padding: 1em 1em;\\n  min-height: 18rem;\\n  background: #F9FAFB;\\n  border-color: rgba(34, 36, 38, 0.15);\\n  -webkit-box-shadow: 0 2px 25px 0 rgba(34, 36, 38, 0.05) inset;\\n          box-shadow: 0 2px 25px 0 rgba(34, 36, 38, 0.05) inset;\\n}\\n\\n.ui.placeholder.segment .button,\\n.ui.placeholder.segment textarea {\\n  display: block;\\n}\\n\\n.ui.placeholder.segment .field,\\n.ui.placeholder.segment textarea,\\n.ui.placeholder.segment > .ui.input,\\n.ui.placeholder.segment .button {\\n  max-width: 15rem;\\n  margin-left: auto;\\n  margin-right: auto;\\n}\\n\\n.ui.placeholder.segment .column .button,\\n.ui.placeholder.segment .column .field,\\n.ui.placeholder.segment .column textarea,\\n.ui.placeholder.segment .column > .ui.input {\\n  max-width: 15rem;\\n  margin-left: auto;\\n  margin-right: auto;\\n}\\n\\n.ui.placeholder.segment > .inline {\\n  -ms-flex-item-align: center;\\n      align-self: center;\\n}\\n\\n.ui.placeholder.segment > .inline > .button {\\n  display: inline-block;\\n  width: auto;\\n  margin: 0 0.35714286rem 0 0;\\n}\\n\\n.ui.placeholder.segment > .inline > .button:last-child {\\n  margin-right: 0;\\n}\\n\\n/*-------------------\\n        Piled\\n--------------------*/\\n\\n.ui.piled.segments,\\n.ui.piled.segment {\\n  margin: 3em 0;\\n  -webkit-box-shadow: '';\\n          box-shadow: '';\\n  z-index: auto;\\n}\\n\\n.ui.piled.segment:first-child {\\n  margin-top: 0;\\n}\\n\\n.ui.piled.segment:last-child {\\n  margin-bottom: 0;\\n}\\n\\n.ui.piled.segments:after,\\n.ui.piled.segments:before,\\n.ui.piled.segment:after,\\n.ui.piled.segment:before {\\n  background-color: #FFFFFF;\\n  visibility: visible;\\n  content: '';\\n  display: block;\\n  height: 100%;\\n  left: 0;\\n  position: absolute;\\n  width: 100%;\\n  border: 1px solid rgba(34, 36, 38, 0.15);\\n  -webkit-box-shadow: '';\\n          box-shadow: '';\\n}\\n\\n.ui.piled.segments:before,\\n.ui.piled.segment:before {\\n  -webkit-transform: rotate(-1.2deg);\\n  transform: rotate(-1.2deg);\\n  top: 0;\\n  z-index: -2;\\n}\\n\\n.ui.piled.segments:after,\\n.ui.piled.segment:after {\\n  -webkit-transform: rotate(1.2deg);\\n  transform: rotate(1.2deg);\\n  top: 0;\\n  z-index: -1;\\n}\\n\\n/* Piled Attached */\\n\\n.ui[class*=\\\"top attached\\\"].piled.segment {\\n  margin-top: 3em;\\n  margin-bottom: 0;\\n}\\n\\n.ui.piled.segment[class*=\\\"top attached\\\"]:first-child {\\n  margin-top: 0;\\n}\\n\\n.ui.piled.segment[class*=\\\"bottom attached\\\"] {\\n  margin-top: 0;\\n  margin-bottom: 3em;\\n}\\n\\n.ui.piled.segment[class*=\\\"bottom attached\\\"]:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/*-------------------\\n       Stacked\\n--------------------*/\\n\\n.ui.stacked.segment {\\n  padding-bottom: 1.4em;\\n}\\n\\n.ui.stacked.segments:before,\\n.ui.stacked.segments:after,\\n.ui.stacked.segment:before,\\n.ui.stacked.segment:after {\\n  content: '';\\n  position: absolute;\\n  bottom: -3px;\\n  left: 0;\\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\\n  background: rgba(0, 0, 0, 0.03);\\n  width: 100%;\\n  height: 6px;\\n  visibility: visible;\\n}\\n\\n.ui.stacked.segments:before,\\n.ui.stacked.segment:before {\\n  display: none;\\n}\\n\\n/* Add additional page */\\n\\n.ui.tall.stacked.segments:before,\\n.ui.tall.stacked.segment:before {\\n  display: block;\\n  bottom: 0;\\n}\\n\\n/* Inverted */\\n\\n.ui.stacked.inverted.segments:before,\\n.ui.stacked.inverted.segments:after,\\n.ui.stacked.inverted.segment:before,\\n.ui.stacked.inverted.segment:after {\\n  background-color: rgba(0, 0, 0, 0.03);\\n  border-top: 1px solid rgba(34, 36, 38, 0.35);\\n}\\n\\n/*-------------------\\n       Padded\\n--------------------*/\\n\\n.ui.padded.segment {\\n  padding: 1.5em;\\n}\\n\\n.ui[class*=\\\"very padded\\\"].segment {\\n  padding: 3em;\\n}\\n\\n/* Padded vertical */\\n\\n.ui.padded.segment.vertical.segment,\\n.ui[class*=\\\"very padded\\\"].vertical.segment {\\n  padding-left: 0;\\n  padding-right: 0;\\n}\\n\\n/*-------------------\\n       Compact\\n--------------------*/\\n\\n.ui.compact.segment {\\n  display: table;\\n}\\n\\n/* Compact Group */\\n\\n.ui.compact.segments {\\n  display: -webkit-inline-box;\\n  display: -ms-inline-flexbox;\\n  display: inline-flex;\\n}\\n\\n.ui.compact.segments .segment,\\n.ui.segments .compact.segment {\\n  display: block;\\n  -webkit-box-flex: 0;\\n      -ms-flex: 0 1 auto;\\n          flex: 0 1 auto;\\n}\\n\\n/*-------------------\\n       Circular\\n--------------------*/\\n\\n.ui.circular.segment {\\n  display: table-cell;\\n  padding: 2em;\\n  text-align: center;\\n  vertical-align: middle;\\n  border-radius: 500em;\\n}\\n\\n/*-------------------\\n       Raised\\n--------------------*/\\n\\n.ui.raised.raised.segments,\\n.ui.raised.raised.segment {\\n  -webkit-box-shadow: 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n/*******************************\\n            Groups\\n*******************************/\\n\\n/* Group */\\n\\n.ui.segments {\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  position: relative;\\n  margin: 1rem 0;\\n  border: 1px solid rgba(34, 36, 38, 0.15);\\n  -webkit-box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15);\\n  border-radius: 0.28571429rem;\\n}\\n\\n.ui.segments:first-child {\\n  margin-top: 0;\\n}\\n\\n.ui.segments:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/* Nested Segment */\\n\\n.ui.segments > .segment {\\n  top: 0;\\n  bottom: 0;\\n  border-radius: 0;\\n  margin: 0;\\n  width: auto;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  border: none;\\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.segments:not(.horizontal) > .segment:first-child {\\n  top: 0;\\n  bottom: 0;\\n  border-top: none;\\n  margin-top: 0;\\n  margin-bottom: 0;\\n  border-radius: 0.28571429rem 0.28571429rem 0 0;\\n}\\n\\n/* Bottom */\\n\\n.ui.segments:not(.horizontal) > .segment:last-child {\\n  top: 0;\\n  bottom: 0;\\n  margin-top: 0;\\n  margin-bottom: 0;\\n  -webkit-box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15), none;\\n          box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15), none;\\n  border-radius: 0 0 0.28571429rem 0.28571429rem;\\n}\\n\\n/* Only */\\n\\n.ui.segments:not(.horizontal) > .segment:only-child {\\n  border-radius: 0.28571429rem;\\n}\\n\\n/* Nested Group */\\n\\n.ui.segments > .ui.segments {\\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\\n  margin: 1rem 1rem;\\n}\\n\\n.ui.segments > .segments:first-child {\\n  border-top: none;\\n}\\n\\n.ui.segments > .segment + .segments:not(.horizontal) {\\n  margin-top: 0;\\n}\\n\\n/* Horizontal Group */\\n\\n.ui.horizontal.segments {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: horizontal;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: row;\\n          flex-direction: row;\\n  background-color: transparent;\\n  padding: 0;\\n  -webkit-box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15);\\n  margin: 1rem 0;\\n  border-radius: 0.28571429rem;\\n  border: 1px solid rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.stackable.horizontal.segments {\\n  -ms-flex-wrap: wrap;\\n      flex-wrap: wrap;\\n}\\n\\n/* Nested Horizontal Group */\\n\\n.ui.segments > .horizontal.segments {\\n  margin: 0;\\n  background-color: transparent;\\n  border-radius: 0;\\n  border: none;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\\n}\\n\\n/* Horizontal Segment */\\n\\n.ui.horizontal.segments:not(.compact) > .segment:not(.compact) {\\n  -webkit-box-flex: 1;\\n          flex: 1 1 auto;\\n  -ms-flex: 1 1 0;\\n  /* Solves #2550 MS Flex */\\n}\\n\\n.ui.horizontal.segments > .segment {\\n  margin: 0;\\n  min-width: 0;\\n  border-radius: 0;\\n  border: none;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\\n}\\n\\n/* Border Fixes */\\n\\n.ui.segments > .horizontal.segments:first-child {\\n  border-top: none;\\n}\\n\\n.ui.horizontal.segments:not(.stackable) > .segment:first-child {\\n  border-left: none;\\n}\\n\\n/*******************************\\n            States\\n*******************************/\\n\\n/*--------------\\n    Disabled\\n---------------*/\\n\\n.ui.disabled.segment {\\n  opacity: 0.45;\\n  color: rgba(40, 40, 40, 0.3);\\n}\\n\\n/*--------------\\n    Loading\\n---------------*/\\n\\n.ui.loading.segment {\\n  position: relative;\\n  cursor: default;\\n  pointer-events: none;\\n  text-shadow: none !important;\\n  -webkit-transition: all 0s linear;\\n  transition: all 0s linear;\\n}\\n\\n.ui.loading.segment:before {\\n  position: absolute;\\n  content: '';\\n  top: 0;\\n  left: 0;\\n  background: rgba(255, 255, 255, 0.8);\\n  width: 100%;\\n  height: 100%;\\n  border-radius: 0.28571429rem;\\n  z-index: 100;\\n}\\n\\n.ui.loading.segment:after {\\n  position: absolute;\\n  content: '';\\n  top: 50%;\\n  left: 50%;\\n  margin: -1.5em 0 0 -1.5em;\\n  width: 3em;\\n  height: 3em;\\n  -webkit-animation: loader 0.6s infinite linear;\\n  animation: loader 0.6s infinite linear;\\n  border: 0.2em solid #767676;\\n  border-radius: 500rem;\\n  -webkit-box-shadow: 0 0 0 1px transparent;\\n          box-shadow: 0 0 0 1px transparent;\\n  visibility: visible;\\n  z-index: 101;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*-------------------\\n       Basic\\n--------------------*/\\n\\n.ui.basic.segment,\\n.ui.segments .ui.basic.segment,\\n.ui.basic.segments {\\n  background: none transparent;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  border: none;\\n  border-radius: 0;\\n}\\n\\n/*-------------------\\n       Clearing\\n--------------------*/\\n\\n.ui.clearing.segment:after {\\n  content: \\\"\\\";\\n  display: block;\\n  clear: both;\\n}\\n\\n/*-------------------\\n       Colors\\n--------------------*/\\n\\n.ui.red.segment.segment.segment.segment.segment:not(.inverted) {\\n  border-top: 2px solid #DB2828;\\n}\\n\\n.ui.inverted.red.segment.segment.segment.segment.segment {\\n  background-color: #DB2828;\\n  color: #FFFFFF;\\n}\\n\\n.ui.orange.segment.segment.segment.segment.segment:not(.inverted) {\\n  border-top: 2px solid #F2711C;\\n}\\n\\n.ui.inverted.orange.segment.segment.segment.segment.segment {\\n  background-color: #F2711C;\\n  color: #FFFFFF;\\n}\\n\\n.ui.yellow.segment.segment.segment.segment.segment:not(.inverted) {\\n  border-top: 2px solid #FBBD08;\\n}\\n\\n.ui.inverted.yellow.segment.segment.segment.segment.segment {\\n  background-color: #FBBD08;\\n  color: #FFFFFF;\\n}\\n\\n.ui.olive.segment.segment.segment.segment.segment:not(.inverted) {\\n  border-top: 2px solid #B5CC18;\\n}\\n\\n.ui.inverted.olive.segment.segment.segment.segment.segment {\\n  background-color: #B5CC18;\\n  color: #FFFFFF;\\n}\\n\\n.ui.green.segment.segment.segment.segment.segment:not(.inverted) {\\n  border-top: 2px solid #21BA45;\\n}\\n\\n.ui.inverted.green.segment.segment.segment.segment.segment {\\n  background-color: #21BA45;\\n  color: #FFFFFF;\\n}\\n\\n.ui.teal.segment.segment.segment.segment.segment:not(.inverted) {\\n  border-top: 2px solid #00B5AD;\\n}\\n\\n.ui.inverted.teal.segment.segment.segment.segment.segment {\\n  background-color: #00B5AD;\\n  color: #FFFFFF;\\n}\\n\\n.ui.blue.segment.segment.segment.segment.segment:not(.inverted) {\\n  border-top: 2px solid #2185D0;\\n}\\n\\n.ui.inverted.blue.segment.segment.segment.segment.segment {\\n  background-color: #2185D0;\\n  color: #FFFFFF;\\n}\\n\\n.ui.violet.segment.segment.segment.segment.segment:not(.inverted) {\\n  border-top: 2px solid #6435C9;\\n}\\n\\n.ui.inverted.violet.segment.segment.segment.segment.segment {\\n  background-color: #6435C9;\\n  color: #FFFFFF;\\n}\\n\\n.ui.purple.segment.segment.segment.segment.segment:not(.inverted) {\\n  border-top: 2px solid #A333C8;\\n}\\n\\n.ui.inverted.purple.segment.segment.segment.segment.segment {\\n  background-color: #A333C8;\\n  color: #FFFFFF;\\n}\\n\\n.ui.pink.segment.segment.segment.segment.segment:not(.inverted) {\\n  border-top: 2px solid #E03997;\\n}\\n\\n.ui.inverted.pink.segment.segment.segment.segment.segment {\\n  background-color: #E03997;\\n  color: #FFFFFF;\\n}\\n\\n.ui.brown.segment.segment.segment.segment.segment:not(.inverted) {\\n  border-top: 2px solid #A5673F;\\n}\\n\\n.ui.inverted.brown.segment.segment.segment.segment.segment {\\n  background-color: #A5673F;\\n  color: #FFFFFF;\\n}\\n\\n.ui.grey.segment.segment.segment.segment.segment:not(.inverted) {\\n  border-top: 2px solid #767676;\\n}\\n\\n.ui.inverted.grey.segment.segment.segment.segment.segment {\\n  background-color: #767676;\\n  color: #FFFFFF;\\n}\\n\\n.ui.black.segment.segment.segment.segment.segment:not(.inverted) {\\n  border-top: 2px solid #1B1C1D;\\n}\\n\\n.ui.inverted.black.segment.segment.segment.segment.segment {\\n  background-color: #1B1C1D;\\n  color: #FFFFFF;\\n}\\n\\n/*-------------------\\n       Aligned\\n--------------------*/\\n\\n.ui[class*=\\\"left aligned\\\"].segment {\\n  text-align: left;\\n}\\n\\n.ui[class*=\\\"right aligned\\\"].segment {\\n  text-align: right;\\n}\\n\\n.ui[class*=\\\"center aligned\\\"].segment {\\n  text-align: center;\\n}\\n\\n/*-------------------\\n       Floated\\n--------------------*/\\n\\n.ui.floated.segment,\\n.ui[class*=\\\"left floated\\\"].segment {\\n  float: left;\\n  margin-right: 1em;\\n}\\n\\n.ui[class*=\\\"right floated\\\"].segment {\\n  float: right;\\n  margin-left: 1em;\\n}\\n\\n/*-------------------\\n      Inverted\\n--------------------*/\\n\\n.ui.inverted.segment {\\n  border: none;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.inverted.segment,\\n.ui.primary.inverted.segment {\\n  background: #1B1C1D;\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n/* Nested */\\n\\n.ui.inverted.segment .segment {\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.inverted.segment .inverted.segment {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n/* Attached */\\n\\n.ui.inverted.attached.segment {\\n  border-color: #555555;\\n}\\n\\n/* Loading */\\n\\n.ui.inverted.loading.segment {\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.loading.segment:before {\\n  background: rgba(0, 0, 0, 0.85);\\n}\\n\\n/*-------------------\\n     Emphasis\\n--------------------*/\\n\\n/* Secondary */\\n\\n.ui.secondary.segment {\\n  background: #F3F4F5;\\n  color: rgba(0, 0, 0, 0.6);\\n}\\n\\n.ui.secondary.inverted.segment {\\n  background: #4c4f52 -webkit-gradient(linear, left top, left bottom, color-stop(0, rgba(255, 255, 255, 0.2)), to(rgba(255, 255, 255, 0.2)));\\n  background: #4c4f52 linear-gradient(rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.2) 100%);\\n  color: rgba(255, 255, 255, 0.8);\\n}\\n\\n/* Tertiary */\\n\\n.ui.tertiary.segment {\\n  background: #DCDDDE;\\n  color: rgba(0, 0, 0, 0.6);\\n}\\n\\n.ui.tertiary.inverted.segment {\\n  background: #717579 -webkit-gradient(linear, left top, left bottom, color-stop(0, rgba(255, 255, 255, 0.35)), to(rgba(255, 255, 255, 0.35)));\\n  background: #717579 linear-gradient(rgba(255, 255, 255, 0.35) 0, rgba(255, 255, 255, 0.35) 100%);\\n  color: rgba(255, 255, 255, 0.8);\\n}\\n\\n/*-------------------\\n      Attached\\n--------------------*/\\n\\n/* Middle */\\n\\n.ui.attached.segment {\\n  top: 0;\\n  bottom: 0;\\n  border-radius: 0;\\n  margin: 0 -1px;\\n  width: calc(100% + 2px);\\n  max-width: calc(100% + 2px);\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  border: 1px solid #D4D4D5;\\n}\\n\\n.ui.attached:not(.message) + .ui.attached.segment:not(.top) {\\n  border-top: none;\\n}\\n\\n/* Top */\\n\\n.ui[class*=\\\"top attached\\\"].segment {\\n  bottom: 0;\\n  margin-bottom: 0;\\n  top: 0;\\n  margin-top: 1rem;\\n  border-radius: 0.28571429rem 0.28571429rem 0 0;\\n}\\n\\n.ui.segment[class*=\\\"top attached\\\"]:first-child {\\n  margin-top: 0;\\n}\\n\\n/* Bottom */\\n\\n.ui.segment[class*=\\\"bottom attached\\\"] {\\n  bottom: 0;\\n  margin-top: 0;\\n  top: 0;\\n  margin-bottom: 1rem;\\n  -webkit-box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15), none;\\n          box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15), none;\\n  border-radius: 0 0 0.28571429rem 0.28571429rem;\\n}\\n\\n.ui.segment[class*=\\\"bottom attached\\\"]:last-child {\\n  margin-bottom: 1rem;\\n}\\n\\n/*--------------\\n     Fitted\\n---------------*/\\n\\n.ui.fitted.segment:not(.horizontally) {\\n  padding-top: 0;\\n  padding-bottom: 0;\\n}\\n\\n.ui.fitted.segment:not(.vertically) {\\n  padding-left: 0;\\n  padding-right: 0;\\n}\\n\\n/*-------------------\\n        Size\\n--------------------*/\\n\\n.ui.mini.segments .segment,\\n.ui.mini.segment {\\n  font-size: 0.78571429rem;\\n}\\n\\n.ui.tiny.segments .segment,\\n.ui.tiny.segment {\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.small.segments .segment,\\n.ui.small.segment {\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.segments .segment,\\n.ui.segment {\\n  font-size: 1rem;\\n}\\n\\n.ui.large.segments .segment,\\n.ui.large.segment {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.big.segments .segment,\\n.ui.big.segment {\\n  font-size: 1.28571429rem;\\n}\\n\\n.ui.huge.segments .segment,\\n.ui.huge.segment {\\n  font-size: 1.42857143rem;\\n}\\n\\n.ui.massive.segments .segment,\\n.ui.massive.segment {\\n  font-size: 1.71428571rem;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Step\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Plural\\n*******************************/\\n\\n.ui.steps {\\n  display: -webkit-inline-box;\\n  display: -ms-inline-flexbox;\\n  display: inline-flex;\\n  -webkit-box-orient: horizontal;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: row;\\n          flex-direction: row;\\n  -webkit-box-align: stretch;\\n      -ms-flex-align: stretch;\\n          align-items: stretch;\\n  margin: 1em 0;\\n  background: '';\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  line-height: 1.14285714em;\\n  border-radius: 0.28571429rem;\\n  border: 1px solid rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.steps:not(.unstackable) {\\n  -ms-flex-wrap: wrap;\\n      flex-wrap: wrap;\\n}\\n\\n/* First Steps */\\n\\n.ui.steps:first-child {\\n  margin-top: 0;\\n}\\n\\n/* Last Steps */\\n\\n.ui.steps:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/*******************************\\n           Singular\\n*******************************/\\n\\n.ui.steps .step {\\n  position: relative;\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-flex: 1;\\n      -ms-flex: 1 0 auto;\\n          flex: 1 0 auto;\\n  -ms-flex-wrap: wrap;\\n      flex-wrap: wrap;\\n  -webkit-box-orient: horizontal;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: row;\\n          flex-direction: row;\\n  vertical-align: middle;\\n  -webkit-box-align: center;\\n      -ms-flex-align: center;\\n          align-items: center;\\n  -webkit-box-pack: center;\\n      -ms-flex-pack: center;\\n          justify-content: center;\\n  margin: 0 0;\\n  padding: 1.14285714em 2em;\\n  background: #FFFFFF;\\n  color: rgba(0, 0, 0, 0.87);\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  border-radius: 0;\\n  border: none;\\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\\n  -webkit-transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease;\\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, -webkit-box-shadow 0.1s ease;\\n}\\n\\n/* Arrow */\\n\\n.ui.steps .step:after {\\n  display: none;\\n  position: absolute;\\n  z-index: 2;\\n  content: '';\\n  top: 50%;\\n  right: 0;\\n  border: medium none;\\n  background-color: #FFFFFF;\\n  width: 1.14285714em;\\n  height: 1.14285714em;\\n  border-style: solid;\\n  border-color: rgba(34, 36, 38, 0.15);\\n  border-width: 0 1px 1px 0;\\n  -webkit-transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease;\\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  -webkit-transform: translateY(-50%) translateX(50%) rotate(-45deg);\\n  transform: translateY(-50%) translateX(50%) rotate(-45deg);\\n}\\n\\n/* First Step */\\n\\n.ui.steps .step:first-child {\\n  padding-left: 2em;\\n  border-radius: 0.28571429rem 0 0 0.28571429rem;\\n}\\n\\n/* Last Step */\\n\\n.ui.steps .step:last-child {\\n  border-radius: 0 0.28571429rem 0.28571429rem 0;\\n  border-right: none;\\n  margin-right: 0;\\n}\\n\\n/* Only Step */\\n\\n.ui.steps .step:only-child {\\n  border-radius: 0.28571429rem;\\n}\\n\\n/*******************************\\n            Content\\n*******************************/\\n\\n/* Title */\\n\\n.ui.steps .step .title {\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  font-size: 1.14285714em;\\n  font-weight: bold;\\n}\\n\\n.ui.steps .step > .title {\\n  width: 100%;\\n}\\n\\n/* Description */\\n\\n.ui.steps .step .description {\\n  font-weight: normal;\\n  font-size: 0.92857143em;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.steps .step > .description {\\n  width: 100%;\\n}\\n\\n.ui.steps .step .title ~ .description {\\n  margin-top: 0.25em;\\n}\\n\\n/* Icon */\\n\\n.ui.steps .step > .icon {\\n  line-height: 1;\\n  font-size: 2.5em;\\n  margin: 0 1rem 0 0;\\n}\\n\\n.ui.steps .step > .icon,\\n.ui.steps .step > .icon ~ .content {\\n  display: block;\\n  -webkit-box-flex: 0;\\n      -ms-flex: 0 1 auto;\\n          flex: 0 1 auto;\\n  -ms-flex-item-align: middle;\\n      align-self: middle;\\n}\\n\\n/* Horizontal Icon */\\n\\n.ui.steps:not(.vertical) .step > .icon {\\n  width: auto;\\n}\\n\\n/* Link */\\n\\n.ui.steps .link.step,\\n.ui.steps a.step {\\n  cursor: pointer;\\n}\\n\\n/*******************************\\n            Types\\n*******************************/\\n\\n/*--------------\\n     Ordered\\n---------------*/\\n\\n.ui.ordered.steps {\\n  counter-reset: ordered;\\n}\\n\\n.ui.ordered.steps .step:before {\\n  display: block;\\n  position: static;\\n  text-align: center;\\n  content: counter(ordered);\\n  -ms-flex-item-align: middle;\\n      align-self: middle;\\n  margin-right: 1rem;\\n  font-size: 2.5em;\\n  counter-increment: ordered;\\n  font-family: inherit;\\n  font-weight: bold;\\n}\\n\\n.ui.ordered.steps .step > * {\\n  display: block;\\n  -ms-flex-item-align: middle;\\n      align-self: middle;\\n}\\n\\n/*--------------\\n    Vertical\\n---------------*/\\n\\n.ui.vertical.steps {\\n  display: -webkit-inline-box;\\n  display: -ms-inline-flexbox;\\n  display: inline-flex;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  overflow: visible;\\n}\\n\\n.ui.vertical.steps .step {\\n  -webkit-box-pack: start;\\n      -ms-flex-pack: start;\\n          justify-content: flex-start;\\n  border-radius: 0;\\n  padding: 1.14285714em 2em;\\n  border-right: none;\\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.vertical.steps .step:first-child {\\n  padding: 1.14285714em 2em;\\n  border-radius: 0.28571429rem 0.28571429rem 0 0;\\n}\\n\\n.ui.vertical.steps .step:last-child {\\n  border-bottom: none;\\n  border-radius: 0 0 0.28571429rem 0.28571429rem;\\n}\\n\\n.ui.vertical.steps .step:only-child {\\n  border-radius: 0.28571429rem;\\n}\\n\\n/* Arrow */\\n\\n.ui.vertical.steps .step:after {\\n  top: 50%;\\n  right: 0;\\n  border-width: 0 1px 1px 0;\\n  display: none;\\n}\\n\\n.ui.vertical.steps .active.step:after {\\n  display: block;\\n}\\n\\n.ui.vertical.steps .step:last-child:after {\\n  display: none;\\n}\\n\\n.ui.vertical.steps .active.step:last-child:after {\\n  display: block;\\n}\\n\\n/*---------------\\n    Responsive\\n----------------*/\\n\\n/* Mobile (Default) */\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.steps:not(.unstackable) {\\n    display: -webkit-inline-box;\\n    display: -ms-inline-flexbox;\\n    display: inline-flex;\\n    overflow: visible;\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: column;\\n            flex-direction: column;\\n  }\\n\\n  .ui.steps:not(.unstackable) .step {\\n    width: 100% !important;\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: column;\\n            flex-direction: column;\\n    border-radius: 0;\\n    padding: 1.14285714em 2em;\\n    border-right: none;\\n    border-bottom: 1px solid rgba(34, 36, 38, 0.15);\\n  }\\n\\n  .ui.steps:not(.unstackable) .step:first-child {\\n    padding: 1.14285714em 2em;\\n    border-radius: 0.28571429rem 0.28571429rem 0 0;\\n  }\\n\\n  .ui.steps:not(.unstackable) .step:last-child {\\n    border-radius: 0 0 0.28571429rem 0.28571429rem;\\n    border-bottom: none;\\n  }\\n\\n  /* Arrow */\\n\\n  .ui.steps:not(.unstackable) .step:after {\\n    top: unset;\\n    bottom: -1.14285714em;\\n    right: 50%;\\n    -webkit-transform: translateY(-50%) translateX(50%) rotate(45deg);\\n    transform: translateY(-50%) translateX(50%) rotate(45deg);\\n  }\\n\\n  .ui.vertical.steps .active.step:last-child:after {\\n    display: none;\\n  }\\n\\n  /* Content */\\n\\n  .ui.steps:not(.unstackable) .step .content {\\n    text-align: center;\\n  }\\n\\n  /* Icon */\\n\\n  .ui.steps:not(.unstackable) .step > .icon,\\n  .ui.ordered.steps:not(.unstackable) .step:before {\\n    margin: 0 0 1rem 0;\\n  }\\n}\\n\\n/*******************************\\n             States\\n*******************************/\\n\\n/* Link Hover */\\n\\n.ui.steps .link.step:hover::after,\\n.ui.steps .link.step:hover,\\n.ui.steps a.step:hover::after,\\n.ui.steps a.step:hover {\\n  background: #F9FAFB;\\n  color: rgba(0, 0, 0, 0.8);\\n}\\n\\n/* Link Down */\\n\\n.ui.steps .link.step:active::after,\\n.ui.steps .link.step:active,\\n.ui.steps a.step:active::after,\\n.ui.steps a.step:active {\\n  background: #F3F4F5;\\n  color: rgba(0, 0, 0, 0.9);\\n}\\n\\n/* Active */\\n\\n.ui.steps .step.active {\\n  cursor: auto;\\n  background: #F3F4F5;\\n}\\n\\n.ui.steps .step.active:after {\\n  background: #F3F4F5;\\n}\\n\\n.ui.steps .step.active .title {\\n  color: #4183C4;\\n}\\n\\n.ui.ordered.steps .step.active:before,\\n.ui.steps .active.step .icon {\\n  color: rgba(0, 0, 0, 0.85);\\n}\\n\\n/* Active Arrow */\\n\\n.ui.steps .active.step:after {\\n  display: block;\\n}\\n\\n.ui.steps .step:last-child:after {\\n  display: none;\\n}\\n\\n.ui.steps .active.step:last-child:after {\\n  display: none;\\n}\\n\\n/* Active Hover */\\n\\n.ui.steps .link.active.step:hover::after,\\n.ui.steps .link.active.step:hover,\\n.ui.steps a.active.step:hover::after,\\n.ui.steps a.active.step:hover {\\n  cursor: pointer;\\n  background: #DCDDDE;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n/* Completed */\\n\\n.ui.steps .step.completed > .icon:before,\\n.ui.ordered.steps .step.completed:before {\\n  color: #21BA45;\\n}\\n\\n/* Disabled */\\n\\n.ui.steps .disabled.step {\\n  cursor: auto;\\n  background: #FFFFFF;\\n  pointer-events: none;\\n}\\n\\n.ui.steps .disabled.step,\\n.ui.steps .disabled.step .title,\\n.ui.steps .disabled.step .description {\\n  color: rgba(40, 40, 40, 0.3);\\n}\\n\\n.ui.steps .disabled.step:after {\\n  background: #FFFFFF;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*--------------\\n   Stackable\\n---------------*/\\n\\n/* Tablet Or Below */\\n\\n@media only screen and (max-width: 991.98px) {\\n  .ui[class*=\\\"tablet stackable\\\"].steps {\\n    display: -webkit-inline-box;\\n    display: -ms-inline-flexbox;\\n    display: inline-flex;\\n    overflow: visible;\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: column;\\n            flex-direction: column;\\n  }\\n\\n  /* Steps */\\n\\n  .ui[class*=\\\"tablet stackable\\\"].steps .step {\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: column;\\n            flex-direction: column;\\n    border-radius: 0;\\n    padding: 1.14285714em 2em;\\n    border-right: none;\\n    border-bottom: 1px solid rgba(34, 36, 38, 0.15);\\n  }\\n\\n  .ui[class*=\\\"tablet stackable\\\"].steps .step:first-child {\\n    padding: 1.14285714em 2em;\\n    border-radius: 0.28571429rem 0.28571429rem 0 0;\\n  }\\n\\n  .ui[class*=\\\"tablet stackable\\\"].steps .step:last-child {\\n    border-radius: 0 0 0.28571429rem 0.28571429rem;\\n    border-bottom: none;\\n  }\\n\\n  /* Arrow */\\n\\n  .ui[class*=\\\"tablet stackable\\\"].steps .step:after {\\n    top: unset;\\n    bottom: -1.14285714em;\\n    right: 50%;\\n    -webkit-transform: translateY(-50%) translateX(50%) rotate(45deg);\\n    transform: translateY(-50%) translateX(50%) rotate(45deg);\\n  }\\n\\n  /* Content */\\n\\n  .ui[class*=\\\"tablet stackable\\\"].steps .step .content {\\n    text-align: center;\\n  }\\n\\n  /* Icon */\\n\\n  .ui[class*=\\\"tablet stackable\\\"].steps .step > .icon,\\n  .ui[class*=\\\"tablet stackable\\\"].ordered.steps .step:before {\\n    margin: 0 0 1rem 0;\\n  }\\n}\\n\\n/*--------------\\n      Fluid\\n---------------*/\\n\\n/* Fluid */\\n\\n.ui.fluid.steps {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  width: 100%;\\n}\\n\\n/*--------------\\n    Attached\\n---------------*/\\n\\n/* Top */\\n\\n.ui.attached.steps {\\n  width: calc(100% + 2px) !important;\\n  margin: 0 -1px 0;\\n  max-width: calc(100% + 2px);\\n  border-radius: 0.28571429rem 0.28571429rem 0 0;\\n}\\n\\n.ui.attached.steps .step:first-child {\\n  border-radius: 0.28571429rem 0 0 0;\\n}\\n\\n.ui.attached.steps .step:last-child {\\n  border-radius: 0 0.28571429rem 0 0;\\n}\\n\\n/* Bottom */\\n\\n.ui.bottom.attached.steps {\\n  margin: 0 -1px 0;\\n  border-radius: 0 0 0.28571429rem 0.28571429rem;\\n}\\n\\n.ui.bottom.attached.steps .step:first-child {\\n  border-radius: 0 0 0 0.28571429rem;\\n}\\n\\n.ui.bottom.attached.steps .step:last-child {\\n  border-radius: 0 0 0.28571429rem 0;\\n}\\n\\n/*-------------------\\n    Evenly Divided\\n--------------------*/\\n\\n.ui.one.steps,\\n.ui.two.steps,\\n.ui.three.steps,\\n.ui.four.steps,\\n.ui.five.steps,\\n.ui.six.steps,\\n.ui.seven.steps,\\n.ui.eight.steps {\\n  width: 100%;\\n}\\n\\n.ui.one.steps > .step,\\n.ui.two.steps > .step,\\n.ui.three.steps > .step,\\n.ui.four.steps > .step,\\n.ui.five.steps > .step,\\n.ui.six.steps > .step,\\n.ui.seven.steps > .step,\\n.ui.eight.steps > .step {\\n  -ms-flex-wrap: nowrap;\\n      flex-wrap: nowrap;\\n}\\n\\n.ui.one.steps > .step {\\n  width: 100%;\\n}\\n\\n.ui.two.steps > .step {\\n  width: 50%;\\n}\\n\\n.ui.three.steps > .step {\\n  width: 33.333%;\\n}\\n\\n.ui.four.steps > .step {\\n  width: 25%;\\n}\\n\\n.ui.five.steps > .step {\\n  width: 20%;\\n}\\n\\n.ui.six.steps > .step {\\n  width: 16.666%;\\n}\\n\\n.ui.seven.steps > .step {\\n  width: 14.285%;\\n}\\n\\n.ui.eight.steps > .step {\\n  width: 12.5%;\\n}\\n\\n/*-------------------\\n       Sizes\\n--------------------*/\\n\\n.ui.mini.steps .step,\\n.ui.mini.step {\\n  font-size: 0.78571429rem;\\n}\\n\\n.ui.tiny.steps .step,\\n.ui.tiny.step {\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.small.steps .step,\\n.ui.small.step {\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.steps .step,\\n.ui.step {\\n  font-size: 1rem;\\n}\\n\\n.ui.large.steps .step,\\n.ui.large.step {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.big.steps .step,\\n.ui.big.step {\\n  font-size: 1.28571429rem;\\n}\\n\\n.ui.huge.steps .step,\\n.ui.huge.step {\\n  font-size: 1.42857143rem;\\n}\\n\\n.ui.massive.steps .step,\\n.ui.massive.step {\\n  font-size: 1.71428571rem;\\n}\\n\\n/*--------------\\n    Inverted\\n---------------*/\\n\\n.ui.inverted.steps {\\n  border: 1px solid #555555;\\n}\\n\\n.ui.inverted.steps .step {\\n  color: rgba(255, 255, 255, 0.9);\\n  background: #1B1C1D;\\n  border-color: #555555;\\n}\\n\\n.ui.inverted.steps .step:after {\\n  background-color: #1B1C1D;\\n  border-color: #555555;\\n}\\n\\n.ui.inverted.steps .step .description {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n/* Active */\\n\\n.ui.inverted.steps .step.active,\\n.ui.inverted.steps .step.active:after {\\n  background: #333333;\\n}\\n\\n.ui.inverted.ordered.steps .step.active:before,\\n.ui.inverted.steps .active.step .icon {\\n  color: #ffffff;\\n}\\n\\n/* Disabled */\\n\\n.ui.inverted.steps .disabled.step,\\n.ui.inverted.steps .disabled.step:after {\\n  background: #222222;\\n}\\n\\n.ui.inverted.steps .disabled.step,\\n.ui.inverted.steps .disabled.step .title,\\n.ui.inverted.steps .disabled.step .description {\\n  color: rgba(225, 225, 225, 0.3);\\n}\\n\\n/* Link Hover */\\n\\n.ui.inverted.steps .link.step:hover::after,\\n.ui.inverted.steps .link.step:hover,\\n.ui.inverted.steps a.step:hover::after,\\n.ui.inverted.steps a.step:hover {\\n  background: #3F3F3F;\\n  color: #ffffff;\\n}\\n\\n/* Link Down */\\n\\n.ui.inverted.steps .link.step:active::after,\\n.ui.inverted.steps .link.step:active,\\n.ui.inverted.steps a.step:active::after,\\n.ui.inverted.steps a.step:active {\\n  background: #444444;\\n  color: #ffffff;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n@font-face {\\n  font-family: 'Step';\\n  src: url(data:application/x-font-ttf;charset=utf-8;;base64,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) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,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) format('woff');\\n}\\n\\n.ui.steps .step.completed > .icon:before,\\n.ui.ordered.steps .step.completed:before {\\n  font-family: 'Step';\\n  content: '\\\\e800';\\n  /* '' */\\n}\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Text\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * https://github.com/fomantic/Fomantic-UI/blob/master/LICENSE.md\\n *\\n */\\n\\n/*******************************\\n             Text\\n*******************************/\\n\\nspan.ui.primary.text {\\n  color: #2185D0;\\n}\\n\\nspan.ui.inverted.primary.text {\\n  color: #54C8FF;\\n}\\n\\nspan.ui.secondary.text {\\n  color: #1B1C1D;\\n}\\n\\nspan.ui.inverted.secondary.text {\\n  color: #545454;\\n}\\n\\nspan.ui.red.text {\\n  color: #DB2828;\\n}\\n\\nspan.ui.inverted.red.text {\\n  color: #FF695E;\\n}\\n\\nspan.ui.orange.text {\\n  color: #F2711C;\\n}\\n\\nspan.ui.inverted.orange.text {\\n  color: #FF851B;\\n}\\n\\nspan.ui.yellow.text {\\n  color: #FBBD08;\\n}\\n\\nspan.ui.inverted.yellow.text {\\n  color: #FFE21F;\\n}\\n\\nspan.ui.olive.text {\\n  color: #B5CC18;\\n}\\n\\nspan.ui.inverted.olive.text {\\n  color: #D9E778;\\n}\\n\\nspan.ui.green.text {\\n  color: #21BA45;\\n}\\n\\nspan.ui.inverted.green.text {\\n  color: #2ECC40;\\n}\\n\\nspan.ui.teal.text {\\n  color: #00B5AD;\\n}\\n\\nspan.ui.inverted.teal.text {\\n  color: #6DFFFF;\\n}\\n\\nspan.ui.blue.text {\\n  color: #2185D0;\\n}\\n\\nspan.ui.inverted.blue.text {\\n  color: #54C8FF;\\n}\\n\\nspan.ui.violet.text {\\n  color: #6435C9;\\n}\\n\\nspan.ui.inverted.violet.text {\\n  color: #A291FB;\\n}\\n\\nspan.ui.purple.text {\\n  color: #A333C8;\\n}\\n\\nspan.ui.inverted.purple.text {\\n  color: #DC73FF;\\n}\\n\\nspan.ui.pink.text {\\n  color: #E03997;\\n}\\n\\nspan.ui.inverted.pink.text {\\n  color: #FF8EDF;\\n}\\n\\nspan.ui.brown.text {\\n  color: #A5673F;\\n}\\n\\nspan.ui.inverted.brown.text {\\n  color: #D67C1C;\\n}\\n\\nspan.ui.grey.text {\\n  color: #767676;\\n}\\n\\nspan.ui.inverted.grey.text {\\n  color: #DCDDDE;\\n}\\n\\nspan.ui.black.text {\\n  color: #1B1C1D;\\n}\\n\\nspan.ui.inverted.black.text {\\n  color: #545454;\\n}\\n\\nspan.ui.disabled.text {\\n  opacity: 0.45;\\n}\\n\\n/* Sizes */\\n\\nspan.ui.mini.text {\\n  font-size: 0.4em;\\n}\\n\\nspan.ui.tiny.text {\\n  font-size: 0.5em;\\n}\\n\\nspan.ui.small.text {\\n  font-size: 0.75em;\\n}\\n\\nspan.ui.medium.text {\\n  font-size: 1em;\\n}\\n\\nspan.ui.large.text {\\n  font-size: 1.5em;\\n}\\n\\nspan.ui.big.text {\\n  font-size: 2em;\\n}\\n\\nspan.ui.huge.text {\\n  font-size: 4em;\\n}\\n\\nspan.ui.massive.text {\\n  font-size: 8em;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Breadcrumb\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n           Breadcrumb\\n*******************************/\\n\\n.ui.breadcrumb {\\n  line-height: 1.4285em;\\n  display: inline-block;\\n  margin: 0 0;\\n  vertical-align: middle;\\n}\\n\\n.ui.breadcrumb:first-child {\\n  margin-top: 0;\\n}\\n\\n.ui.breadcrumb:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/*******************************\\n          Content\\n*******************************/\\n\\n/* Divider */\\n\\n.ui.breadcrumb .divider {\\n  display: inline-block;\\n  opacity: 0.7;\\n  margin: 0 0.21428571rem 0;\\n  font-size: 0.92857143em;\\n  color: rgba(0, 0, 0, 0.4);\\n  vertical-align: baseline;\\n}\\n\\n/* Link */\\n\\n.ui.breadcrumb a {\\n  color: #4183C4;\\n}\\n\\n.ui.breadcrumb a:hover {\\n  color: #1e70bf;\\n}\\n\\n/* Icon Divider */\\n\\n.ui.breadcrumb .icon.divider {\\n  font-size: 0.85714286em;\\n  vertical-align: baseline;\\n}\\n\\n/* Section */\\n\\n.ui.breadcrumb a.section {\\n  cursor: pointer;\\n}\\n\\n.ui.breadcrumb .section {\\n  display: inline-block;\\n  margin: 0;\\n  padding: 0;\\n}\\n\\n/* Loose Coupling */\\n\\n.ui.breadcrumb.segment {\\n  display: inline-block;\\n  padding: 0.78571429em 1em;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.breadcrumb {\\n  color: #DCDDDE;\\n}\\n\\n.ui.inverted.breadcrumb > .active.section {\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.breadcrumb > .divider {\\n  color: rgba(255, 255, 255, 0.7);\\n}\\n\\n/*******************************\\n            States\\n*******************************/\\n\\n.ui.breadcrumb .active.section {\\n  font-weight: bold;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n.ui.mini.breadcrumb {\\n  font-size: 0.78571429rem;\\n}\\n\\n.ui.tiny.breadcrumb {\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.small.breadcrumb {\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.breadcrumb {\\n  font-size: 1rem;\\n}\\n\\n.ui.large.breadcrumb {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.big.breadcrumb {\\n  font-size: 1.28571429rem;\\n}\\n\\n.ui.huge.breadcrumb {\\n  font-size: 1.42857143rem;\\n}\\n\\n.ui.massive.breadcrumb {\\n  font-size: 1.71428571rem;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Form\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Elements\\n*******************************/\\n\\n/*--------------------\\n        Form\\n---------------------*/\\n\\n.ui.form {\\n  position: relative;\\n  max-width: 100%;\\n}\\n\\n/*--------------------\\n        Content\\n---------------------*/\\n\\n.ui.form > p {\\n  margin: 1em 0;\\n}\\n\\n/*--------------------\\n        Field\\n---------------------*/\\n\\n.ui.form .field {\\n  clear: both;\\n  margin: 0 0 1em;\\n}\\n\\n.ui.form .field:last-child,\\n.ui.form .fields:last-child .field {\\n  margin-bottom: 0;\\n}\\n\\n.ui.form .fields .field {\\n  clear: both;\\n  margin: 0;\\n}\\n\\n/*--------------------\\n        Labels\\n---------------------*/\\n\\n.ui.form .field > label {\\n  display: block;\\n  margin: 0 0 0.28571429rem 0;\\n  color: rgba(0, 0, 0, 0.87);\\n  font-size: 0.92857143em;\\n  font-weight: bold;\\n  text-transform: none;\\n}\\n\\n/*--------------------\\n    Standard Inputs\\n---------------------*/\\n\\n.ui.form textarea,\\n.ui.form input:not([type]),\\n.ui.form input[type=\\\"date\\\"],\\n.ui.form input[type=\\\"datetime-local\\\"],\\n.ui.form input[type=\\\"email\\\"],\\n.ui.form input[type=\\\"number\\\"],\\n.ui.form input[type=\\\"password\\\"],\\n.ui.form input[type=\\\"search\\\"],\\n.ui.form input[type=\\\"tel\\\"],\\n.ui.form input[type=\\\"time\\\"],\\n.ui.form input[type=\\\"text\\\"],\\n.ui.form input[type=\\\"file\\\"],\\n.ui.form input[type=\\\"url\\\"] {\\n  width: 100%;\\n  vertical-align: top;\\n}\\n\\n/* Set max height on unusual input */\\n\\n.ui.form ::-webkit-datetime-edit,\\n.ui.form ::-webkit-inner-spin-button {\\n  height: 1.21428571em;\\n}\\n\\n.ui.form input:not([type]),\\n.ui.form input[type=\\\"date\\\"],\\n.ui.form input[type=\\\"datetime-local\\\"],\\n.ui.form input[type=\\\"email\\\"],\\n.ui.form input[type=\\\"number\\\"],\\n.ui.form input[type=\\\"password\\\"],\\n.ui.form input[type=\\\"search\\\"],\\n.ui.form input[type=\\\"tel\\\"],\\n.ui.form input[type=\\\"time\\\"],\\n.ui.form input[type=\\\"text\\\"],\\n.ui.form input[type=\\\"file\\\"],\\n.ui.form input[type=\\\"url\\\"] {\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  margin: 0;\\n  outline: none;\\n  -webkit-appearance: none;\\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\\n  line-height: 1.21428571em;\\n  padding: 0.67857143em 1em;\\n  font-size: 1em;\\n  background: #FFFFFF;\\n  border: 1px solid rgba(34, 36, 38, 0.15);\\n  color: rgba(0, 0, 0, 0.87);\\n  border-radius: 0.28571429rem;\\n  -webkit-box-shadow: 0 0 0 0 transparent inset;\\n          box-shadow: 0 0 0 0 transparent inset;\\n  -webkit-transition: color 0.1s ease, border-color 0.1s ease;\\n  transition: color 0.1s ease, border-color 0.1s ease;\\n}\\n\\n/* Text Area */\\n\\n.ui.input textarea,\\n.ui.form textarea {\\n  margin: 0;\\n  -webkit-appearance: none;\\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\\n  padding: 0.78571429em 1em;\\n  background: #FFFFFF;\\n  border: 1px solid rgba(34, 36, 38, 0.15);\\n  outline: none;\\n  color: rgba(0, 0, 0, 0.87);\\n  border-radius: 0.28571429rem;\\n  -webkit-box-shadow: 0 0 0 0 transparent inset;\\n          box-shadow: 0 0 0 0 transparent inset;\\n  -webkit-transition: color 0.1s ease, border-color 0.1s ease;\\n  transition: color 0.1s ease, border-color 0.1s ease;\\n  font-size: 1em;\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  line-height: 1.2857;\\n  resize: vertical;\\n}\\n\\n.ui.form textarea:not([rows]) {\\n  height: 12em;\\n  min-height: 8em;\\n  max-height: 24em;\\n}\\n\\n.ui.form textarea,\\n.ui.form input[type=\\\"checkbox\\\"] {\\n  vertical-align: top;\\n}\\n\\n/*--------------------\\n    Checkbox margin\\n---------------------*/\\n\\n.ui.form .fields:not(.grouped):not(.inline) .field:not(:only-child) .ui.checkbox {\\n  margin-top: 2.41428571em;\\n}\\n\\n.ui.form .fields:not(.grouped):not(.inline) .field:not(:only-child) .ui.toggle.checkbox {\\n  margin-top: 2.21428571em;\\n}\\n\\n.ui.form .fields:not(.grouped):not(.inline) .field:not(:only-child) .ui.slider.checkbox {\\n  margin-top: 2.61428571em;\\n}\\n\\n.ui.ui.form .field .fields .field:not(:only-child) .ui.checkbox {\\n  margin-top: 0.6em;\\n}\\n\\n.ui.ui.form .field .fields .field:not(:only-child) .ui.toggle.checkbox {\\n  margin-top: 0.5em;\\n}\\n\\n.ui.ui.form .field .fields .field:not(:only-child) .ui.slider.checkbox {\\n  margin-top: 0.7em;\\n}\\n\\n/*--------------------\\n      Transparent\\n---------------------*/\\n\\n.ui.form .field .transparent.input:not(.icon) input,\\n.ui.form .field input.transparent,\\n.ui.form .field textarea.transparent {\\n  padding: 0.67857143em 1em;\\n}\\n\\n.ui.form .field input.transparent,\\n.ui.form .field textarea.transparent {\\n  border-color: transparent !important;\\n  background-color: transparent !important;\\n  -webkit-box-shadow: none !important;\\n          box-shadow: none !important;\\n}\\n\\n.ui.form .field.error .transparent.input input,\\n.ui.form .field.error .transparent.input textarea,\\n.ui.form .field.error input.transparent,\\n.ui.form .field.error textarea.transparent {\\n  background-color: #FFF6F6 !important;\\n  color: #9F3A38 !important;\\n}\\n\\n/*--------------------------\\n  Input w/ attached Button\\n---------------------------*/\\n\\n.ui.form input.attached {\\n  width: auto;\\n}\\n\\n/*--------------------\\n     Basic Select\\n---------------------*/\\n\\n.ui.form select {\\n  display: block;\\n  height: auto;\\n  width: 100%;\\n  background: #FFFFFF;\\n  border: 1px solid rgba(34, 36, 38, 0.15);\\n  border-radius: 0.28571429rem;\\n  -webkit-box-shadow: 0 0 0 0 transparent inset;\\n          box-shadow: 0 0 0 0 transparent inset;\\n  padding: 0.62em 1em;\\n  color: rgba(0, 0, 0, 0.87);\\n  -webkit-transition: color 0.1s ease, border-color 0.1s ease;\\n  transition: color 0.1s ease, border-color 0.1s ease;\\n}\\n\\n/*--------------------\\n       Dropdown\\n---------------------*/\\n\\n/* Block */\\n\\n.ui.form .field > .selection.dropdown {\\n  min-width: auto;\\n  width: 100%;\\n}\\n\\n.ui.form .field > .selection.dropdown > .dropdown.icon {\\n  float: right;\\n}\\n\\n/* Inline */\\n\\n.ui.form .inline.fields .field > .selection.dropdown,\\n.ui.form .inline.field > .selection.dropdown {\\n  width: auto;\\n}\\n\\n.ui.form .inline.fields .field > .selection.dropdown > .dropdown.icon,\\n.ui.form .inline.field > .selection.dropdown > .dropdown.icon {\\n  float: none;\\n}\\n\\n/*--------------------\\n       UI Input\\n---------------------*/\\n\\n/* Block */\\n\\n.ui.form .field .ui.input,\\n.ui.form .fields .field .ui.input,\\n.ui.form .wide.field .ui.input {\\n  width: 100%;\\n}\\n\\n/* Inline  */\\n\\n.ui.form .inline.fields .field:not(.wide) .ui.input,\\n.ui.form .inline.field:not(.wide) .ui.input {\\n  width: auto;\\n  vertical-align: middle;\\n}\\n\\n/* Auto Input */\\n\\n.ui.form .fields .field .ui.input input,\\n.ui.form .field .ui.input input {\\n  width: auto;\\n}\\n\\n/* Full Width Input */\\n\\n.ui.form .ten.fields .ui.input input,\\n.ui.form .nine.fields .ui.input input,\\n.ui.form .eight.fields .ui.input input,\\n.ui.form .seven.fields .ui.input input,\\n.ui.form .six.fields .ui.input input,\\n.ui.form .five.fields .ui.input input,\\n.ui.form .four.fields .ui.input input,\\n.ui.form .three.fields .ui.input input,\\n.ui.form .two.fields .ui.input input,\\n.ui.form .wide.field .ui.input input {\\n  -webkit-box-flex: 1;\\n      -ms-flex: 1 0 auto;\\n          flex: 1 0 auto;\\n  width: 0;\\n}\\n\\n/*--------------------\\n   Types of Messages\\n---------------------*/\\n\\n.ui.form .success.message,\\n.ui.form .warning.message,\\n.ui.form .error.message,\\n.ui.form .error.message:empty {\\n  display: none;\\n}\\n\\n/* Assumptions */\\n\\n.ui.form .message:first-child {\\n  margin-top: 0;\\n}\\n\\n/*--------------------\\n   Validation Prompt\\n---------------------*/\\n\\n.ui.form .field .prompt.label {\\n  white-space: normal;\\n  background: #FFFFFF !important;\\n  border: 1px solid #E0B4B4 !important;\\n  color: #9F3A38 !important;\\n}\\n\\n.ui.form .inline.fields .field .prompt,\\n.ui.form .inline.field .prompt {\\n  vertical-align: top;\\n  margin: -0.25em 0 -0.5em 0.5em;\\n}\\n\\n.ui.form .inline.fields .field .prompt:before,\\n.ui.form .inline.field .prompt:before {\\n  border-width: 0 0 1px 1px;\\n  bottom: auto;\\n  right: auto;\\n  top: 50%;\\n  left: 0;\\n}\\n\\n/*******************************\\n            States\\n*******************************/\\n\\n/*--------------------\\n      Autofilled\\n---------------------*/\\n\\n.ui.form .field.field input:-webkit-autofill {\\n  -webkit-box-shadow: 0 0 0 100px #FFFFF0 inset !important;\\n          box-shadow: 0 0 0 100px #FFFFF0 inset !important;\\n  border-color: #E5DFA1 !important;\\n}\\n\\n/* Focus */\\n\\n.ui.form .field.field input:-webkit-autofill:focus {\\n  -webkit-box-shadow: 0 0 0 100px #FFFFF0 inset !important;\\n          box-shadow: 0 0 0 100px #FFFFF0 inset !important;\\n  border-color: #D5C315 !important;\\n}\\n\\n/* Error */\\n\\n.ui.form .error.error input:-webkit-autofill {\\n  -webkit-box-shadow: 0 0 0 100px #FFFAF0 inset !important;\\n          box-shadow: 0 0 0 100px #FFFAF0 inset !important;\\n  border-color: #E0B4B4 !important;\\n}\\n\\n/*--------------------\\n      Placeholder\\n---------------------*/\\n\\n/* browsers require these rules separate */\\n\\n.ui.form ::-webkit-input-placeholder {\\n  color: rgba(191, 191, 191, 0.87);\\n}\\n\\n.ui.form :-ms-input-placeholder {\\n  color: rgba(191, 191, 191, 0.87) !important;\\n}\\n\\n.ui.form ::-moz-placeholder {\\n  color: rgba(191, 191, 191, 0.87);\\n}\\n\\n.ui.form :focus::-webkit-input-placeholder {\\n  color: rgba(115, 115, 115, 0.87);\\n}\\n\\n.ui.form :focus:-ms-input-placeholder {\\n  color: rgba(115, 115, 115, 0.87) !important;\\n}\\n\\n.ui.form :focus::-moz-placeholder {\\n  color: rgba(115, 115, 115, 0.87);\\n}\\n\\n/* Error Placeholder */\\n\\n.ui.form .error ::-webkit-input-placeholder {\\n  color: #e7bdbc;\\n}\\n\\n.ui.form .error :-ms-input-placeholder {\\n  color: #e7bdbc !important;\\n}\\n\\n.ui.form .error ::-moz-placeholder {\\n  color: #e7bdbc;\\n}\\n\\n.ui.form .error :focus::-webkit-input-placeholder {\\n  color: #da9796;\\n}\\n\\n.ui.form .error :focus:-ms-input-placeholder {\\n  color: #da9796 !important;\\n}\\n\\n.ui.form .error :focus::-moz-placeholder {\\n  color: #da9796;\\n}\\n\\n/*--------------------\\n        Focus\\n---------------------*/\\n\\n.ui.form input:not([type]):focus,\\n.ui.form input[type=\\\"date\\\"]:focus,\\n.ui.form input[type=\\\"datetime-local\\\"]:focus,\\n.ui.form input[type=\\\"email\\\"]:focus,\\n.ui.form input[type=\\\"number\\\"]:focus,\\n.ui.form input[type=\\\"password\\\"]:focus,\\n.ui.form input[type=\\\"search\\\"]:focus,\\n.ui.form input[type=\\\"tel\\\"]:focus,\\n.ui.form input[type=\\\"time\\\"]:focus,\\n.ui.form input[type=\\\"text\\\"]:focus,\\n.ui.form input[type=\\\"file\\\"]:focus,\\n.ui.form input[type=\\\"url\\\"]:focus {\\n  color: rgba(0, 0, 0, 0.95);\\n  border-color: #85B7D9;\\n  border-radius: 0.28571429rem;\\n  background: #FFFFFF;\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.35) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.35) inset;\\n}\\n\\n.ui.form textarea:focus {\\n  color: rgba(0, 0, 0, 0.95);\\n  border-color: #85B7D9;\\n  border-radius: 0.28571429rem;\\n  background: #FFFFFF;\\n  -webkit-box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.35) inset;\\n          box-shadow: 0 0 0 0 rgba(34, 36, 38, 0.35) inset;\\n  -webkit-appearance: none;\\n}\\n\\n/*--------------------\\n        Success\\n---------------------*/\\n\\n/* On Form */\\n\\n.ui.form.success .success.message:not(:empty) {\\n  display: block;\\n}\\n\\n.ui.form.success .compact.success.message:not(:empty) {\\n  display: inline-block;\\n}\\n\\n.ui.form.success .icon.success.message:not(:empty) {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n}\\n\\n/*--------------------\\n        Warning\\n---------------------*/\\n\\n/* On Form */\\n\\n.ui.form.warning .warning.message:not(:empty) {\\n  display: block;\\n}\\n\\n.ui.form.warning .compact.warning.message:not(:empty) {\\n  display: inline-block;\\n}\\n\\n.ui.form.warning .icon.warning.message:not(:empty) {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n}\\n\\n/*--------------------\\n        Error\\n---------------------*/\\n\\n/* On Form */\\n\\n.ui.form.error .error.message:not(:empty) {\\n  display: block;\\n}\\n\\n.ui.form.error .compact.error.message:not(:empty) {\\n  display: inline-block;\\n}\\n\\n.ui.form.error .icon.error.message:not(:empty) {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n}\\n\\n/* On Field(s) */\\n\\n.ui.form .fields.error .field label,\\n.ui.form .field.error label,\\n.ui.form .fields.error .field .input,\\n.ui.form .field.error .input {\\n  color: #9F3A38;\\n}\\n\\n.ui.form .fields.error .field .corner.label,\\n.ui.form .field.error .corner.label {\\n  border-color: #9F3A38;\\n  color: #FFFFFF;\\n}\\n\\n.ui.form .fields.error .field textarea,\\n.ui.form .fields.error .field select,\\n.ui.form .fields.error .field input:not([type]),\\n.ui.form .fields.error .field input[type=\\\"date\\\"],\\n.ui.form .fields.error .field input[type=\\\"datetime-local\\\"],\\n.ui.form .fields.error .field input[type=\\\"email\\\"],\\n.ui.form .fields.error .field input[type=\\\"number\\\"],\\n.ui.form .fields.error .field input[type=\\\"password\\\"],\\n.ui.form .fields.error .field input[type=\\\"search\\\"],\\n.ui.form .fields.error .field input[type=\\\"tel\\\"],\\n.ui.form .fields.error .field input[type=\\\"time\\\"],\\n.ui.form .fields.error .field input[type=\\\"text\\\"],\\n.ui.form .fields.error .field input[type=\\\"file\\\"],\\n.ui.form .fields.error .field input[type=\\\"url\\\"],\\n.ui.form .field.error textarea,\\n.ui.form .field.error select,\\n.ui.form .field.error input:not([type]),\\n.ui.form .field.error input[type=\\\"date\\\"],\\n.ui.form .field.error input[type=\\\"datetime-local\\\"],\\n.ui.form .field.error input[type=\\\"email\\\"],\\n.ui.form .field.error input[type=\\\"number\\\"],\\n.ui.form .field.error input[type=\\\"password\\\"],\\n.ui.form .field.error input[type=\\\"search\\\"],\\n.ui.form .field.error input[type=\\\"tel\\\"],\\n.ui.form .field.error input[type=\\\"time\\\"],\\n.ui.form .field.error input[type=\\\"text\\\"],\\n.ui.form .field.error input[type=\\\"file\\\"],\\n.ui.form .field.error input[type=\\\"url\\\"] {\\n  background: #FFF6F6;\\n  border-color: #E0B4B4;\\n  color: #9F3A38;\\n  border-radius: '';\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.form .field.error textarea:focus,\\n.ui.form .field.error select:focus,\\n.ui.form .field.error input:not([type]):focus,\\n.ui.form .field.error input[type=\\\"date\\\"]:focus,\\n.ui.form .field.error input[type=\\\"datetime-local\\\"]:focus,\\n.ui.form .field.error input[type=\\\"email\\\"]:focus,\\n.ui.form .field.error input[type=\\\"number\\\"]:focus,\\n.ui.form .field.error input[type=\\\"password\\\"]:focus,\\n.ui.form .field.error input[type=\\\"search\\\"]:focus,\\n.ui.form .field.error input[type=\\\"tel\\\"]:focus,\\n.ui.form .field.error input[type=\\\"time\\\"]:focus,\\n.ui.form .field.error input[type=\\\"text\\\"]:focus,\\n.ui.form .field.error input[type=\\\"file\\\"]:focus,\\n.ui.form .field.error input[type=\\\"url\\\"]:focus {\\n  background: #FFF6F6;\\n  border-color: #E0B4B4;\\n  color: #9F3A38;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/* Preserve Native Select Stylings */\\n\\n.ui.form .field.error select {\\n  -webkit-appearance: menulist-button;\\n}\\n\\n/*------------------\\n    Dropdown Error\\n--------------------*/\\n\\n.ui.form .fields.error .field .ui.dropdown,\\n.ui.form .fields.error .field .ui.dropdown .item,\\n.ui.form .field.error .ui.dropdown,\\n.ui.form .field.error .ui.dropdown .text,\\n.ui.form .field.error .ui.dropdown .item {\\n  background: #FFF6F6;\\n  color: #9F3A38;\\n}\\n\\n.ui.form .fields.error .field .ui.dropdown,\\n.ui.form .field.error .ui.dropdown {\\n  border-color: #E0B4B4 !important;\\n}\\n\\n.ui.form .fields.error .field .ui.dropdown:hover,\\n.ui.form .field.error .ui.dropdown:hover {\\n  border-color: #E0B4B4 !important;\\n}\\n\\n.ui.form .fields.error .field .ui.dropdown:hover .menu,\\n.ui.form .field.error .ui.dropdown:hover .menu {\\n  border-color: #E0B4B4;\\n}\\n\\n.ui.form .fields.error .field .ui.multiple.selection.dropdown > .label,\\n.ui.form .field.error .ui.multiple.selection.dropdown > .label {\\n  background-color: #EACBCB;\\n  color: #9F3A38;\\n}\\n\\n/* Hover */\\n\\n.ui.form .fields.error .field .ui.dropdown .menu .item:hover,\\n.ui.form .field.error .ui.dropdown .menu .item:hover {\\n  background-color: #FBE7E7;\\n}\\n\\n/* Selected */\\n\\n.ui.form .fields.error .field .ui.dropdown .menu .selected.item,\\n.ui.form .field.error .ui.dropdown .menu .selected.item {\\n  background-color: #FBE7E7;\\n}\\n\\n/* Active */\\n\\n.ui.form .fields.error .field .ui.dropdown .menu .active.item,\\n.ui.form .field.error .ui.dropdown .menu .active.item {\\n  background-color: #FDCFCF !important;\\n}\\n\\n/*--------------------\\n    Checkbox Error\\n---------------------*/\\n\\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label,\\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) label,\\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box,\\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box {\\n  color: #9F3A38;\\n}\\n\\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label:before,\\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) label:before,\\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box:before,\\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box:before {\\n  background: #FFF6F6;\\n  border-color: #E0B4B4;\\n}\\n\\n.ui.form .fields.error .field .checkbox label:after,\\n.ui.form .field.error .checkbox label:after,\\n.ui.form .fields.error .field .checkbox .box:after,\\n.ui.form .field.error .checkbox .box:after {\\n  color: #9F3A38;\\n}\\n\\n/*--------------------\\n       Disabled\\n---------------------*/\\n\\n.ui.form .disabled.fields .field,\\n.ui.form .disabled.field,\\n.ui.form .field :disabled {\\n  pointer-events: none;\\n  opacity: 0.45;\\n}\\n\\n.ui.form .field.disabled > label,\\n.ui.form .fields.disabled > label {\\n  opacity: 0.45;\\n}\\n\\n.ui.form .field.disabled :disabled {\\n  opacity: 1;\\n}\\n\\n/*--------------\\n    Loading\\n---------------*/\\n\\n.ui.loading.form {\\n  position: relative;\\n  cursor: default;\\n  pointer-events: none;\\n}\\n\\n.ui.loading.form:before {\\n  position: absolute;\\n  content: '';\\n  top: 0;\\n  left: 0;\\n  background: rgba(255, 255, 255, 0.8);\\n  width: 100%;\\n  height: 100%;\\n  z-index: 100;\\n}\\n\\n.ui.loading.form.segments:before {\\n  border-radius: 0.28571429rem;\\n}\\n\\n.ui.loading.form:after {\\n  position: absolute;\\n  content: '';\\n  top: 50%;\\n  left: 50%;\\n  margin: -1.5em 0 0 -1.5em;\\n  width: 3em;\\n  height: 3em;\\n  -webkit-animation: loader 0.6s infinite linear;\\n  animation: loader 0.6s infinite linear;\\n  border: 0.2em solid #767676;\\n  border-radius: 500rem;\\n  -webkit-box-shadow: 0 0 0 1px transparent;\\n          box-shadow: 0 0 0 1px transparent;\\n  visibility: visible;\\n  z-index: 101;\\n}\\n\\n/*******************************\\n         Element Types\\n*******************************/\\n\\n/*--------------------\\n     Required Field\\n---------------------*/\\n\\n.ui.form .required.fields:not(.grouped) > .field > label:after,\\n.ui.form .required.fields.grouped > label:after,\\n.ui.form .required.field > label:after,\\n.ui.form .required.fields:not(.grouped) > .field > .checkbox:after,\\n.ui.form .required.field > .checkbox:after,\\n.ui.form label.required:after {\\n  margin: -0.2em 0 0 0.2em;\\n  content: '*';\\n  color: #DB2828;\\n}\\n\\n.ui.form .required.fields:not(.grouped) > .field > label:after,\\n.ui.form .required.fields.grouped > label:after,\\n.ui.form .required.field > label:after,\\n.ui.form label.required:after {\\n  display: inline-block;\\n  vertical-align: top;\\n}\\n\\n.ui.form .required.fields:not(.grouped) > .field > .checkbox:after,\\n.ui.form .required.field > .checkbox:after {\\n  position: absolute;\\n  top: 0;\\n  left: 100%;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*--------------------\\n    Inverted Colors\\n---------------------*/\\n\\n.ui.inverted.form label,\\n.ui.form .inverted.segment label,\\n.ui.form .inverted.segment .ui.checkbox label,\\n.ui.form .inverted.segment .ui.checkbox .box,\\n.ui.inverted.form .ui.checkbox label,\\n.ui.inverted.form .ui.checkbox .box,\\n.ui.inverted.form .inline.fields > label,\\n.ui.inverted.form .inline.fields .field > label,\\n.ui.inverted.form .inline.fields .field > p,\\n.ui.inverted.form .inline.field > label,\\n.ui.inverted.form .inline.field > p {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.inverted.loading.form {\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.loading.form:before {\\n  background: rgba(0, 0, 0, 0.85);\\n}\\n\\n/* Inverted Field */\\n\\n.ui.inverted.form input:not([type]),\\n.ui.inverted.form input[type=\\\"date\\\"],\\n.ui.inverted.form input[type=\\\"datetime-local\\\"],\\n.ui.inverted.form input[type=\\\"email\\\"],\\n.ui.inverted.form input[type=\\\"number\\\"],\\n.ui.inverted.form input[type=\\\"password\\\"],\\n.ui.inverted.form input[type=\\\"search\\\"],\\n.ui.inverted.form input[type=\\\"tel\\\"],\\n.ui.inverted.form input[type=\\\"time\\\"],\\n.ui.inverted.form input[type=\\\"text\\\"],\\n.ui.inverted.form input[type=\\\"file\\\"],\\n.ui.inverted.form input[type=\\\"url\\\"] {\\n  background: #FFFFFF;\\n  border-color: rgba(255, 255, 255, 0.1);\\n  color: rgba(0, 0, 0, 0.87);\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/*--------------------\\n     Field Groups\\n---------------------*/\\n\\n/* Grouped Vertically */\\n\\n.ui.form .grouped.fields {\\n  display: block;\\n  margin: 0 0 1em;\\n}\\n\\n.ui.form .grouped.fields:last-child {\\n  margin-bottom: 0;\\n}\\n\\n.ui.form .grouped.fields > label {\\n  margin: 0 0 0.28571429rem 0;\\n  color: rgba(0, 0, 0, 0.87);\\n  font-size: 0.92857143em;\\n  font-weight: bold;\\n  text-transform: none;\\n}\\n\\n.ui.form .grouped.fields .field,\\n.ui.form .grouped.inline.fields .field {\\n  display: block;\\n  margin: 0.5em 0;\\n  padding: 0;\\n}\\n\\n/*--------------------\\n        Fields\\n---------------------*/\\n\\n/* Split fields */\\n\\n.ui.form .fields {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: horizontal;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: row;\\n          flex-direction: row;\\n  margin: 0 -0.5em 1em;\\n}\\n\\n.ui.form .fields > .field {\\n  -webkit-box-flex: 0;\\n      -ms-flex: 0 1 auto;\\n          flex: 0 1 auto;\\n  padding-left: 0.5em;\\n  padding-right: 0.5em;\\n}\\n\\n.ui.form .fields > .field:first-child {\\n  border-left: none;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/* Other Combinations */\\n\\n.ui.form .two.fields > .fields,\\n.ui.form .two.fields > .field {\\n  width: 50%;\\n}\\n\\n.ui.form .three.fields > .fields,\\n.ui.form .three.fields > .field {\\n  width: 33.33333333%;\\n}\\n\\n.ui.form .four.fields > .fields,\\n.ui.form .four.fields > .field {\\n  width: 25%;\\n}\\n\\n.ui.form .five.fields > .fields,\\n.ui.form .five.fields > .field {\\n  width: 20%;\\n}\\n\\n.ui.form .six.fields > .fields,\\n.ui.form .six.fields > .field {\\n  width: 16.66666667%;\\n}\\n\\n.ui.form .seven.fields > .fields,\\n.ui.form .seven.fields > .field {\\n  width: 14.28571429%;\\n}\\n\\n.ui.form .eight.fields > .fields,\\n.ui.form .eight.fields > .field {\\n  width: 12.5%;\\n}\\n\\n.ui.form .nine.fields > .fields,\\n.ui.form .nine.fields > .field {\\n  width: 11.11111111%;\\n}\\n\\n.ui.form .ten.fields > .fields,\\n.ui.form .ten.fields > .field {\\n  width: 10%;\\n}\\n\\n/* Swap to full width on mobile */\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.form .fields {\\n    -ms-flex-wrap: wrap;\\n        flex-wrap: wrap;\\n  }\\n\\n  .ui[class*=\\\"equal width\\\"].form:not(.unstackable) .fields > .field,\\n  .ui.form:not(.unstackable) [class*=\\\"equal width\\\"].fields:not(.unstackable) > .field,\\n  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .fields,\\n  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .field,\\n  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .fields,\\n  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .field,\\n  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .fields,\\n  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .field,\\n  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .fields,\\n  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .field,\\n  .ui.form:not(.unstackable) .six.fields:not(.unstackable) > .fields,\\n  .ui.form:not(.unstackable) .six.fields:not(.unstackable) > .field,\\n  .ui.form:not(.unstackable) .seven.fields:not(.unstackable) > .fields,\\n  .ui.form:not(.unstackable) .seven.fields:not(.unstackable) > .field,\\n  .ui.form:not(.unstackable) .eight.fields:not(.unstackable) > .fields,\\n  .ui.form:not(.unstackable) .eight.fields:not(.unstackable) > .field,\\n  .ui.form:not(.unstackable) .nine.fields:not(.unstackable) > .fields,\\n  .ui.form:not(.unstackable) .nine.fields:not(.unstackable) > .field,\\n  .ui.form:not(.unstackable) .ten.fields:not(.unstackable) > .fields,\\n  .ui.form:not(.unstackable) .ten.fields:not(.unstackable) > .field {\\n    width: 100% !important;\\n    margin: 0 0 1em;\\n  }\\n}\\n\\n/* Sizing Combinations */\\n\\n.ui.form .fields .wide.field {\\n  width: 6.25%;\\n  padding-left: 0.5em;\\n  padding-right: 0.5em;\\n}\\n\\n.ui.form .one.wide.field {\\n  width: 6.25% !important;\\n}\\n\\n.ui.form .two.wide.field {\\n  width: 12.5% !important;\\n}\\n\\n.ui.form .three.wide.field {\\n  width: 18.75% !important;\\n}\\n\\n.ui.form .four.wide.field {\\n  width: 25% !important;\\n}\\n\\n.ui.form .five.wide.field {\\n  width: 31.25% !important;\\n}\\n\\n.ui.form .six.wide.field {\\n  width: 37.5% !important;\\n}\\n\\n.ui.form .seven.wide.field {\\n  width: 43.75% !important;\\n}\\n\\n.ui.form .eight.wide.field {\\n  width: 50% !important;\\n}\\n\\n.ui.form .nine.wide.field {\\n  width: 56.25% !important;\\n}\\n\\n.ui.form .ten.wide.field {\\n  width: 62.5% !important;\\n}\\n\\n.ui.form .eleven.wide.field {\\n  width: 68.75% !important;\\n}\\n\\n.ui.form .twelve.wide.field {\\n  width: 75% !important;\\n}\\n\\n.ui.form .thirteen.wide.field {\\n  width: 81.25% !important;\\n}\\n\\n.ui.form .fourteen.wide.field {\\n  width: 87.5% !important;\\n}\\n\\n.ui.form .fifteen.wide.field {\\n  width: 93.75% !important;\\n}\\n\\n.ui.form .sixteen.wide.field {\\n  width: 100% !important;\\n}\\n\\n/* Swap to full width on mobile */\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .fields,\\n  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .field,\\n  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .fields,\\n  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .field,\\n  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .fields,\\n  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .field,\\n  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .fields,\\n  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .field,\\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .two.wide.field,\\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .three.wide.field,\\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .four.wide.field,\\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .five.wide.field,\\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .six.wide.field,\\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .seven.wide.field,\\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .eight.wide.field,\\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .nine.wide.field,\\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .ten.wide.field,\\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .eleven.wide.field,\\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .twelve.wide.field,\\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .thirteen.wide.field,\\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .fourteen.wide.field,\\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .fifteen.wide.field,\\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .sixteen.wide.field {\\n    width: 100% !important;\\n  }\\n\\n  .ui.form .fields {\\n    margin-bottom: 0;\\n  }\\n}\\n\\n/*--------------------\\n     Equal Width\\n---------------------*/\\n\\n.ui[class*=\\\"equal width\\\"].form .fields > .field,\\n.ui.form [class*=\\\"equal width\\\"].fields > .field {\\n  width: 100%;\\n  -webkit-box-flex: 1;\\n      -ms-flex: 1 1 auto;\\n          flex: 1 1 auto;\\n}\\n\\n/*--------------------\\n    Inline Fields\\n---------------------*/\\n\\n.ui.form .inline.fields {\\n  margin: 0 0 1em;\\n  -webkit-box-align: center;\\n      -ms-flex-align: center;\\n          align-items: center;\\n}\\n\\n.ui.form .inline.fields .field {\\n  margin: 0;\\n  padding: 0 1em 0 0;\\n}\\n\\n/* Inline Label */\\n\\n.ui.form .inline.fields > label,\\n.ui.form .inline.fields .field > label,\\n.ui.form .inline.fields .field > p,\\n.ui.form .inline.field > label,\\n.ui.form .inline.field > p {\\n  display: inline-block;\\n  width: auto;\\n  margin-top: 0;\\n  margin-bottom: 0;\\n  vertical-align: baseline;\\n  font-size: 0.92857143em;\\n  font-weight: bold;\\n  color: rgba(0, 0, 0, 0.87);\\n  text-transform: none;\\n}\\n\\n/* Grouped Inline Label */\\n\\n.ui.form .inline.fields > label {\\n  margin: 0.035714em 1em 0 0;\\n}\\n\\n/* Inline Input */\\n\\n.ui.form .inline.fields .field > input,\\n.ui.form .inline.fields .field > select,\\n.ui.form .inline.field > input,\\n.ui.form .inline.field > select {\\n  display: inline-block;\\n  width: auto;\\n  margin-top: 0;\\n  margin-bottom: 0;\\n  vertical-align: middle;\\n  font-size: 1em;\\n}\\n\\n/* Label */\\n\\n.ui.form .inline.fields .field > :first-child,\\n.ui.form .inline.field > :first-child {\\n  margin: 0 0.85714286em 0 0;\\n}\\n\\n.ui.form .inline.fields .field > :only-child,\\n.ui.form .inline.field > :only-child {\\n  margin: 0;\\n}\\n\\n/* Wide */\\n\\n.ui.form .inline.fields .wide.field {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-align: center;\\n      -ms-flex-align: center;\\n          align-items: center;\\n}\\n\\n.ui.form .inline.fields .wide.field > input,\\n.ui.form .inline.fields .wide.field > select {\\n  width: 100%;\\n}\\n\\n/*--------------------\\n        Sizes\\n---------------------*/\\n\\n.ui.mini.form {\\n  font-size: 0.78571429rem;\\n}\\n\\n.ui.tiny.form {\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.small.form {\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.form {\\n  font-size: 1rem;\\n}\\n\\n.ui.large.form {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.big.form {\\n  font-size: 1.28571429rem;\\n}\\n\\n.ui.huge.form {\\n  font-size: 1.42857143rem;\\n}\\n\\n.ui.massive.form {\\n  font-size: 1.71428571rem;\\n}\\n\\n/* Dropdown */\\n\\n.ui.mini.form .field .dropdown {\\n  font-size: 0.78571429rem;\\n}\\n\\n.ui.tiny.form .field .dropdown {\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.small.form .field .dropdown {\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.form .field .dropdown {\\n  font-size: 1rem;\\n}\\n\\n.ui.large.form .field .dropdown {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.big.form .field .dropdown {\\n  font-size: 1.28571429rem;\\n}\\n\\n.ui.huge.form .field .dropdown {\\n  font-size: 1.42857143rem;\\n}\\n\\n.ui.massive.form .field .dropdown {\\n  font-size: 1.71428571rem;\\n}\\n\\n/* Dropdown Items */\\n\\n.ui.mini.form .field .dropdown .menu > .item {\\n  font-size: 0.78571429rem;\\n}\\n\\n.ui.tiny.form .field .dropdown .menu > .item {\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.small.form .field .dropdown .menu > .item {\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.form .field .dropdown .menu > .item {\\n  font-size: 1rem;\\n}\\n\\n.ui.large.form .field .dropdown .menu > .item {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.big.form .field .dropdown .menu > .item {\\n  font-size: 1.28571429rem;\\n}\\n\\n.ui.huge.form .field .dropdown .menu > .item {\\n  font-size: 1.42857143rem;\\n}\\n\\n.ui.massive.form .field .dropdown .menu > .item {\\n  font-size: 1.71428571rem;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Grid\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Standard\\n*******************************/\\n\\n.ui.grid {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: horizontal;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: row;\\n          flex-direction: row;\\n  -ms-flex-wrap: wrap;\\n      flex-wrap: wrap;\\n  -webkit-box-align: stretch;\\n      -ms-flex-align: stretch;\\n          align-items: stretch;\\n  padding: 0;\\n}\\n\\n/*----------------------\\n      Remove Gutters\\n-----------------------*/\\n\\n.ui.grid {\\n  margin-top: -1rem;\\n  margin-bottom: -1rem;\\n  margin-left: -1rem;\\n  margin-right: -1rem;\\n}\\n\\n.ui.relaxed.grid {\\n  margin-left: -1.5rem;\\n  margin-right: -1.5rem;\\n}\\n\\n.ui[class*=\\\"very relaxed\\\"].grid {\\n  margin-left: -2.5rem;\\n  margin-right: -2.5rem;\\n}\\n\\n/* Preserve Rows Spacing on Consecutive Grids */\\n\\n.ui.grid + .grid {\\n  margin-top: 1rem;\\n}\\n\\n/*-------------------\\n       Columns\\n--------------------*/\\n\\n/* Standard 16 column */\\n\\n.ui.grid > .column:not(.row),\\n.ui.grid > .row > .column {\\n  position: relative;\\n  display: inline-block;\\n  width: 6.25%;\\n  padding-left: 1rem;\\n  padding-right: 1rem;\\n  vertical-align: top;\\n}\\n\\n.ui.grid > * {\\n  padding-left: 1rem;\\n  padding-right: 1rem;\\n}\\n\\n/*-------------------\\n        Rows\\n--------------------*/\\n\\n.ui.grid > .row {\\n  position: relative;\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: horizontal;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: row;\\n          flex-direction: row;\\n  -ms-flex-wrap: wrap;\\n      flex-wrap: wrap;\\n  -webkit-box-pack: inherit;\\n      -ms-flex-pack: inherit;\\n          justify-content: inherit;\\n  -webkit-box-align: stretch;\\n      -ms-flex-align: stretch;\\n          align-items: stretch;\\n  width: 100% !important;\\n  padding: 0;\\n  padding-top: 1rem;\\n  padding-bottom: 1rem;\\n}\\n\\n/*-------------------\\n       Columns\\n--------------------*/\\n\\n/* Vertical padding when no rows */\\n\\n.ui.grid > .column:not(.row) {\\n  padding-top: 1rem;\\n  padding-bottom: 1rem;\\n}\\n\\n.ui.grid > .row > .column {\\n  margin-top: 0;\\n  margin-bottom: 0;\\n}\\n\\n/*-------------------\\n      Content\\n--------------------*/\\n\\n.ui.grid > .row > img,\\n.ui.grid > .row > .column > img {\\n  max-width: 100%;\\n}\\n\\n/*-------------------\\n    Loose Coupling\\n--------------------*/\\n\\n/* Collapse Margin on Consecutive Grid */\\n\\n.ui.grid > .ui.grid:first-child {\\n  margin-top: 0;\\n}\\n\\n.ui.grid > .ui.grid:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/* Segment inside Aligned Grid */\\n\\n.ui.grid .aligned.row > .column > .segment:not(.compact):not(.attached),\\n.ui.aligned.grid .column > .segment:not(.compact):not(.attached) {\\n  width: 100%;\\n}\\n\\n/* Align Dividers with Gutter */\\n\\n.ui.grid .row + .ui.divider {\\n  -webkit-box-flex: 1;\\n      -ms-flex-positive: 1;\\n          flex-grow: 1;\\n  margin: 1rem 1rem;\\n}\\n\\n.ui.grid .column + .ui.vertical.divider {\\n  height: calc(50% - 1rem);\\n}\\n\\n/* Remove Border on Last Horizontal Segment */\\n\\n.ui.grid > .row > .column:last-child > .horizontal.segment,\\n.ui.grid > .column:last-child > .horizontal.segment {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*-----------------------\\n       Page Grid\\n-------------------------*/\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.page.grid {\\n    width: auto;\\n    padding-left: 0;\\n    padding-right: 0;\\n    margin-left: 0;\\n    margin-right: 0;\\n  }\\n}\\n\\n@media only screen and (min-width: 768px) and (max-width: 991.98px) {\\n  .ui.page.grid {\\n    width: auto;\\n    margin-left: 0;\\n    margin-right: 0;\\n    padding-left: 2em;\\n    padding-right: 2em;\\n  }\\n}\\n\\n@media only screen and (min-width: 992px) and (max-width: 1199.98px) {\\n  .ui.page.grid {\\n    width: auto;\\n    margin-left: 0;\\n    margin-right: 0;\\n    padding-left: 3%;\\n    padding-right: 3%;\\n  }\\n}\\n\\n@media only screen and (min-width: 1200px) and (max-width: 1919.98px) {\\n  .ui.page.grid {\\n    width: auto;\\n    margin-left: 0;\\n    margin-right: 0;\\n    padding-left: 15%;\\n    padding-right: 15%;\\n  }\\n}\\n\\n@media only screen and (min-width: 1920px) {\\n  .ui.page.grid {\\n    width: auto;\\n    margin-left: 0;\\n    margin-right: 0;\\n    padding-left: 23%;\\n    padding-right: 23%;\\n  }\\n}\\n\\n/*-------------------\\n     Column Count\\n--------------------*/\\n\\n/* Assume full width with one column */\\n\\n.ui.grid > .column:only-child,\\n.ui.grid > .row > .column:only-child {\\n  width: 100%;\\n}\\n\\n/* Grid Based */\\n\\n.ui[class*=\\\"one column\\\"].grid > .row > .column,\\n.ui[class*=\\\"one column\\\"].grid > .column:not(.row) {\\n  width: 100%;\\n}\\n\\n.ui[class*=\\\"two column\\\"].grid > .row > .column,\\n.ui[class*=\\\"two column\\\"].grid > .column:not(.row) {\\n  width: 50%;\\n}\\n\\n.ui[class*=\\\"three column\\\"].grid > .row > .column,\\n.ui[class*=\\\"three column\\\"].grid > .column:not(.row) {\\n  width: 33.33333333%;\\n}\\n\\n.ui[class*=\\\"four column\\\"].grid > .row > .column,\\n.ui[class*=\\\"four column\\\"].grid > .column:not(.row) {\\n  width: 25%;\\n}\\n\\n.ui[class*=\\\"five column\\\"].grid > .row > .column,\\n.ui[class*=\\\"five column\\\"].grid > .column:not(.row) {\\n  width: 20%;\\n}\\n\\n.ui[class*=\\\"six column\\\"].grid > .row > .column,\\n.ui[class*=\\\"six column\\\"].grid > .column:not(.row) {\\n  width: 16.66666667%;\\n}\\n\\n.ui[class*=\\\"seven column\\\"].grid > .row > .column,\\n.ui[class*=\\\"seven column\\\"].grid > .column:not(.row) {\\n  width: 14.28571429%;\\n}\\n\\n.ui[class*=\\\"eight column\\\"].grid > .row > .column,\\n.ui[class*=\\\"eight column\\\"].grid > .column:not(.row) {\\n  width: 12.5%;\\n}\\n\\n.ui[class*=\\\"nine column\\\"].grid > .row > .column,\\n.ui[class*=\\\"nine column\\\"].grid > .column:not(.row) {\\n  width: 11.11111111%;\\n}\\n\\n.ui[class*=\\\"ten column\\\"].grid > .row > .column,\\n.ui[class*=\\\"ten column\\\"].grid > .column:not(.row) {\\n  width: 10%;\\n}\\n\\n.ui[class*=\\\"eleven column\\\"].grid > .row > .column,\\n.ui[class*=\\\"eleven column\\\"].grid > .column:not(.row) {\\n  width: 9.09090909%;\\n}\\n\\n.ui[class*=\\\"twelve column\\\"].grid > .row > .column,\\n.ui[class*=\\\"twelve column\\\"].grid > .column:not(.row) {\\n  width: 8.33333333%;\\n}\\n\\n.ui[class*=\\\"thirteen column\\\"].grid > .row > .column,\\n.ui[class*=\\\"thirteen column\\\"].grid > .column:not(.row) {\\n  width: 7.69230769%;\\n}\\n\\n.ui[class*=\\\"fourteen column\\\"].grid > .row > .column,\\n.ui[class*=\\\"fourteen column\\\"].grid > .column:not(.row) {\\n  width: 7.14285714%;\\n}\\n\\n.ui[class*=\\\"fifteen column\\\"].grid > .row > .column,\\n.ui[class*=\\\"fifteen column\\\"].grid > .column:not(.row) {\\n  width: 6.66666667%;\\n}\\n\\n.ui[class*=\\\"sixteen column\\\"].grid > .row > .column,\\n.ui[class*=\\\"sixteen column\\\"].grid > .column:not(.row) {\\n  width: 6.25%;\\n}\\n\\n/* Row Based Overrides */\\n\\n.ui.grid > [class*=\\\"one column\\\"].row > .column {\\n  width: 100% !important;\\n}\\n\\n.ui.grid > [class*=\\\"two column\\\"].row > .column {\\n  width: 50% !important;\\n}\\n\\n.ui.grid > [class*=\\\"three column\\\"].row > .column {\\n  width: 33.33333333% !important;\\n}\\n\\n.ui.grid > [class*=\\\"four column\\\"].row > .column {\\n  width: 25% !important;\\n}\\n\\n.ui.grid > [class*=\\\"five column\\\"].row > .column {\\n  width: 20% !important;\\n}\\n\\n.ui.grid > [class*=\\\"six column\\\"].row > .column {\\n  width: 16.66666667% !important;\\n}\\n\\n.ui.grid > [class*=\\\"seven column\\\"].row > .column {\\n  width: 14.28571429% !important;\\n}\\n\\n.ui.grid > [class*=\\\"eight column\\\"].row > .column {\\n  width: 12.5% !important;\\n}\\n\\n.ui.grid > [class*=\\\"nine column\\\"].row > .column {\\n  width: 11.11111111% !important;\\n}\\n\\n.ui.grid > [class*=\\\"ten column\\\"].row > .column {\\n  width: 10% !important;\\n}\\n\\n.ui.grid > [class*=\\\"eleven column\\\"].row > .column {\\n  width: 9.09090909% !important;\\n}\\n\\n.ui.grid > [class*=\\\"twelve column\\\"].row > .column {\\n  width: 8.33333333% !important;\\n}\\n\\n.ui.grid > [class*=\\\"thirteen column\\\"].row > .column {\\n  width: 7.69230769% !important;\\n}\\n\\n.ui.grid > [class*=\\\"fourteen column\\\"].row > .column {\\n  width: 7.14285714% !important;\\n}\\n\\n.ui.grid > [class*=\\\"fifteen column\\\"].row > .column {\\n  width: 6.66666667% !important;\\n}\\n\\n.ui.grid > [class*=\\\"sixteen column\\\"].row > .column {\\n  width: 6.25% !important;\\n}\\n\\n/* Celled Page */\\n\\n.ui.celled.page.grid {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/*-------------------\\n    Column Width\\n--------------------*/\\n\\n/* Sizing Combinations */\\n\\n.ui.grid > .row > [class*=\\\"one wide\\\"].column,\\n.ui.grid > .column.row > [class*=\\\"one wide\\\"].column,\\n.ui.grid > [class*=\\\"one wide\\\"].column,\\n.ui.column.grid > [class*=\\\"one wide\\\"].column {\\n  width: 6.25% !important;\\n}\\n\\n.ui.grid > .row > [class*=\\\"two wide\\\"].column,\\n.ui.grid > .column.row > [class*=\\\"two wide\\\"].column,\\n.ui.grid > [class*=\\\"two wide\\\"].column,\\n.ui.column.grid > [class*=\\\"two wide\\\"].column {\\n  width: 12.5% !important;\\n}\\n\\n.ui.grid > .row > [class*=\\\"three wide\\\"].column,\\n.ui.grid > .column.row > [class*=\\\"three wide\\\"].column,\\n.ui.grid > [class*=\\\"three wide\\\"].column,\\n.ui.column.grid > [class*=\\\"three wide\\\"].column {\\n  width: 18.75% !important;\\n}\\n\\n.ui.grid > .row > [class*=\\\"four wide\\\"].column,\\n.ui.grid > .column.row > [class*=\\\"four wide\\\"].column,\\n.ui.grid > [class*=\\\"four wide\\\"].column,\\n.ui.column.grid > [class*=\\\"four wide\\\"].column {\\n  width: 25% !important;\\n}\\n\\n.ui.grid > .row > [class*=\\\"five wide\\\"].column,\\n.ui.grid > .column.row > [class*=\\\"five wide\\\"].column,\\n.ui.grid > [class*=\\\"five wide\\\"].column,\\n.ui.column.grid > [class*=\\\"five wide\\\"].column {\\n  width: 31.25% !important;\\n}\\n\\n.ui.grid > .row > [class*=\\\"six wide\\\"].column,\\n.ui.grid > .column.row > [class*=\\\"six wide\\\"].column,\\n.ui.grid > [class*=\\\"six wide\\\"].column,\\n.ui.column.grid > [class*=\\\"six wide\\\"].column {\\n  width: 37.5% !important;\\n}\\n\\n.ui.grid > .row > [class*=\\\"seven wide\\\"].column,\\n.ui.grid > .column.row > [class*=\\\"seven wide\\\"].column,\\n.ui.grid > [class*=\\\"seven wide\\\"].column,\\n.ui.column.grid > [class*=\\\"seven wide\\\"].column {\\n  width: 43.75% !important;\\n}\\n\\n.ui.grid > .row > [class*=\\\"eight wide\\\"].column,\\n.ui.grid > .column.row > [class*=\\\"eight wide\\\"].column,\\n.ui.grid > [class*=\\\"eight wide\\\"].column,\\n.ui.column.grid > [class*=\\\"eight wide\\\"].column {\\n  width: 50% !important;\\n}\\n\\n.ui.grid > .row > [class*=\\\"nine wide\\\"].column,\\n.ui.grid > .column.row > [class*=\\\"nine wide\\\"].column,\\n.ui.grid > [class*=\\\"nine wide\\\"].column,\\n.ui.column.grid > [class*=\\\"nine wide\\\"].column {\\n  width: 56.25% !important;\\n}\\n\\n.ui.grid > .row > [class*=\\\"ten wide\\\"].column,\\n.ui.grid > .column.row > [class*=\\\"ten wide\\\"].column,\\n.ui.grid > [class*=\\\"ten wide\\\"].column,\\n.ui.column.grid > [class*=\\\"ten wide\\\"].column {\\n  width: 62.5% !important;\\n}\\n\\n.ui.grid > .row > [class*=\\\"eleven wide\\\"].column,\\n.ui.grid > .column.row > [class*=\\\"eleven wide\\\"].column,\\n.ui.grid > [class*=\\\"eleven wide\\\"].column,\\n.ui.column.grid > [class*=\\\"eleven wide\\\"].column {\\n  width: 68.75% !important;\\n}\\n\\n.ui.grid > .row > [class*=\\\"twelve wide\\\"].column,\\n.ui.grid > .column.row > [class*=\\\"twelve wide\\\"].column,\\n.ui.grid > [class*=\\\"twelve wide\\\"].column,\\n.ui.column.grid > [class*=\\\"twelve wide\\\"].column {\\n  width: 75% !important;\\n}\\n\\n.ui.grid > .row > [class*=\\\"thirteen wide\\\"].column,\\n.ui.grid > .column.row > [class*=\\\"thirteen wide\\\"].column,\\n.ui.grid > [class*=\\\"thirteen wide\\\"].column,\\n.ui.column.grid > [class*=\\\"thirteen wide\\\"].column {\\n  width: 81.25% !important;\\n}\\n\\n.ui.grid > .row > [class*=\\\"fourteen wide\\\"].column,\\n.ui.grid > .column.row > [class*=\\\"fourteen wide\\\"].column,\\n.ui.grid > [class*=\\\"fourteen wide\\\"].column,\\n.ui.column.grid > [class*=\\\"fourteen wide\\\"].column {\\n  width: 87.5% !important;\\n}\\n\\n.ui.grid > .row > [class*=\\\"fifteen wide\\\"].column,\\n.ui.grid > .column.row > [class*=\\\"fifteen wide\\\"].column,\\n.ui.grid > [class*=\\\"fifteen wide\\\"].column,\\n.ui.column.grid > [class*=\\\"fifteen wide\\\"].column {\\n  width: 93.75% !important;\\n}\\n\\n.ui.grid > .row > [class*=\\\"sixteen wide\\\"].column,\\n.ui.grid > .column.row > [class*=\\\"sixteen wide\\\"].column,\\n.ui.grid > [class*=\\\"sixteen wide\\\"].column,\\n.ui.column.grid > [class*=\\\"sixteen wide\\\"].column {\\n  width: 100% !important;\\n}\\n\\n/*----------------------\\n    Width per Device\\n-----------------------*/\\n\\n/* Mobile Sizing Combinations */\\n\\n@media only screen and (min-width: 320px) and (max-width: 767.98px) {\\n  .ui.grid > .row > [class*=\\\"one wide mobile\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"one wide mobile\\\"].column,\\n  .ui.grid > [class*=\\\"one wide mobile\\\"].column,\\n  .ui.column.grid > [class*=\\\"one wide mobile\\\"].column {\\n    width: 6.25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"two wide mobile\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"two wide mobile\\\"].column,\\n  .ui.grid > [class*=\\\"two wide mobile\\\"].column,\\n  .ui.column.grid > [class*=\\\"two wide mobile\\\"].column {\\n    width: 12.5% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"three wide mobile\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"three wide mobile\\\"].column,\\n  .ui.grid > [class*=\\\"three wide mobile\\\"].column,\\n  .ui.column.grid > [class*=\\\"three wide mobile\\\"].column {\\n    width: 18.75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"four wide mobile\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"four wide mobile\\\"].column,\\n  .ui.grid > [class*=\\\"four wide mobile\\\"].column,\\n  .ui.column.grid > [class*=\\\"four wide mobile\\\"].column {\\n    width: 25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"five wide mobile\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"five wide mobile\\\"].column,\\n  .ui.grid > [class*=\\\"five wide mobile\\\"].column,\\n  .ui.column.grid > [class*=\\\"five wide mobile\\\"].column {\\n    width: 31.25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"six wide mobile\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"six wide mobile\\\"].column,\\n  .ui.grid > [class*=\\\"six wide mobile\\\"].column,\\n  .ui.column.grid > [class*=\\\"six wide mobile\\\"].column {\\n    width: 37.5% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"seven wide mobile\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"seven wide mobile\\\"].column,\\n  .ui.grid > [class*=\\\"seven wide mobile\\\"].column,\\n  .ui.column.grid > [class*=\\\"seven wide mobile\\\"].column {\\n    width: 43.75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"eight wide mobile\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"eight wide mobile\\\"].column,\\n  .ui.grid > [class*=\\\"eight wide mobile\\\"].column,\\n  .ui.column.grid > [class*=\\\"eight wide mobile\\\"].column {\\n    width: 50% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"nine wide mobile\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"nine wide mobile\\\"].column,\\n  .ui.grid > [class*=\\\"nine wide mobile\\\"].column,\\n  .ui.column.grid > [class*=\\\"nine wide mobile\\\"].column {\\n    width: 56.25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"ten wide mobile\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"ten wide mobile\\\"].column,\\n  .ui.grid > [class*=\\\"ten wide mobile\\\"].column,\\n  .ui.column.grid > [class*=\\\"ten wide mobile\\\"].column {\\n    width: 62.5% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"eleven wide mobile\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"eleven wide mobile\\\"].column,\\n  .ui.grid > [class*=\\\"eleven wide mobile\\\"].column,\\n  .ui.column.grid > [class*=\\\"eleven wide mobile\\\"].column {\\n    width: 68.75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"twelve wide mobile\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"twelve wide mobile\\\"].column,\\n  .ui.grid > [class*=\\\"twelve wide mobile\\\"].column,\\n  .ui.column.grid > [class*=\\\"twelve wide mobile\\\"].column {\\n    width: 75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"thirteen wide mobile\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"thirteen wide mobile\\\"].column,\\n  .ui.grid > [class*=\\\"thirteen wide mobile\\\"].column,\\n  .ui.column.grid > [class*=\\\"thirteen wide mobile\\\"].column {\\n    width: 81.25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"fourteen wide mobile\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"fourteen wide mobile\\\"].column,\\n  .ui.grid > [class*=\\\"fourteen wide mobile\\\"].column,\\n  .ui.column.grid > [class*=\\\"fourteen wide mobile\\\"].column {\\n    width: 87.5% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"fifteen wide mobile\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"fifteen wide mobile\\\"].column,\\n  .ui.grid > [class*=\\\"fifteen wide mobile\\\"].column,\\n  .ui.column.grid > [class*=\\\"fifteen wide mobile\\\"].column {\\n    width: 93.75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"sixteen wide mobile\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"sixteen wide mobile\\\"].column,\\n  .ui.grid > [class*=\\\"sixteen wide mobile\\\"].column,\\n  .ui.column.grid > [class*=\\\"sixteen wide mobile\\\"].column {\\n    width: 100% !important;\\n  }\\n}\\n\\n/* Tablet Sizing Combinations */\\n\\n@media only screen and (min-width: 768px) and (max-width: 991.98px) {\\n  .ui.grid > .row > [class*=\\\"one wide tablet\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"one wide tablet\\\"].column,\\n  .ui.grid > [class*=\\\"one wide tablet\\\"].column,\\n  .ui.column.grid > [class*=\\\"one wide tablet\\\"].column {\\n    width: 6.25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"two wide tablet\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"two wide tablet\\\"].column,\\n  .ui.grid > [class*=\\\"two wide tablet\\\"].column,\\n  .ui.column.grid > [class*=\\\"two wide tablet\\\"].column {\\n    width: 12.5% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"three wide tablet\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"three wide tablet\\\"].column,\\n  .ui.grid > [class*=\\\"three wide tablet\\\"].column,\\n  .ui.column.grid > [class*=\\\"three wide tablet\\\"].column {\\n    width: 18.75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"four wide tablet\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"four wide tablet\\\"].column,\\n  .ui.grid > [class*=\\\"four wide tablet\\\"].column,\\n  .ui.column.grid > [class*=\\\"four wide tablet\\\"].column {\\n    width: 25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"five wide tablet\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"five wide tablet\\\"].column,\\n  .ui.grid > [class*=\\\"five wide tablet\\\"].column,\\n  .ui.column.grid > [class*=\\\"five wide tablet\\\"].column {\\n    width: 31.25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"six wide tablet\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"six wide tablet\\\"].column,\\n  .ui.grid > [class*=\\\"six wide tablet\\\"].column,\\n  .ui.column.grid > [class*=\\\"six wide tablet\\\"].column {\\n    width: 37.5% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"seven wide tablet\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"seven wide tablet\\\"].column,\\n  .ui.grid > [class*=\\\"seven wide tablet\\\"].column,\\n  .ui.column.grid > [class*=\\\"seven wide tablet\\\"].column {\\n    width: 43.75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"eight wide tablet\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"eight wide tablet\\\"].column,\\n  .ui.grid > [class*=\\\"eight wide tablet\\\"].column,\\n  .ui.column.grid > [class*=\\\"eight wide tablet\\\"].column {\\n    width: 50% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"nine wide tablet\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"nine wide tablet\\\"].column,\\n  .ui.grid > [class*=\\\"nine wide tablet\\\"].column,\\n  .ui.column.grid > [class*=\\\"nine wide tablet\\\"].column {\\n    width: 56.25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"ten wide tablet\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"ten wide tablet\\\"].column,\\n  .ui.grid > [class*=\\\"ten wide tablet\\\"].column,\\n  .ui.column.grid > [class*=\\\"ten wide tablet\\\"].column {\\n    width: 62.5% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"eleven wide tablet\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"eleven wide tablet\\\"].column,\\n  .ui.grid > [class*=\\\"eleven wide tablet\\\"].column,\\n  .ui.column.grid > [class*=\\\"eleven wide tablet\\\"].column {\\n    width: 68.75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"twelve wide tablet\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"twelve wide tablet\\\"].column,\\n  .ui.grid > [class*=\\\"twelve wide tablet\\\"].column,\\n  .ui.column.grid > [class*=\\\"twelve wide tablet\\\"].column {\\n    width: 75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"thirteen wide tablet\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"thirteen wide tablet\\\"].column,\\n  .ui.grid > [class*=\\\"thirteen wide tablet\\\"].column,\\n  .ui.column.grid > [class*=\\\"thirteen wide tablet\\\"].column {\\n    width: 81.25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"fourteen wide tablet\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"fourteen wide tablet\\\"].column,\\n  .ui.grid > [class*=\\\"fourteen wide tablet\\\"].column,\\n  .ui.column.grid > [class*=\\\"fourteen wide tablet\\\"].column {\\n    width: 87.5% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"fifteen wide tablet\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"fifteen wide tablet\\\"].column,\\n  .ui.grid > [class*=\\\"fifteen wide tablet\\\"].column,\\n  .ui.column.grid > [class*=\\\"fifteen wide tablet\\\"].column {\\n    width: 93.75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"sixteen wide tablet\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"sixteen wide tablet\\\"].column,\\n  .ui.grid > [class*=\\\"sixteen wide tablet\\\"].column,\\n  .ui.column.grid > [class*=\\\"sixteen wide tablet\\\"].column {\\n    width: 100% !important;\\n  }\\n}\\n\\n/* Computer/Desktop Sizing Combinations */\\n\\n@media only screen and (min-width: 992px) {\\n  .ui.grid > .row > [class*=\\\"one wide computer\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"one wide computer\\\"].column,\\n  .ui.grid > [class*=\\\"one wide computer\\\"].column,\\n  .ui.column.grid > [class*=\\\"one wide computer\\\"].column {\\n    width: 6.25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"two wide computer\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"two wide computer\\\"].column,\\n  .ui.grid > [class*=\\\"two wide computer\\\"].column,\\n  .ui.column.grid > [class*=\\\"two wide computer\\\"].column {\\n    width: 12.5% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"three wide computer\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"three wide computer\\\"].column,\\n  .ui.grid > [class*=\\\"three wide computer\\\"].column,\\n  .ui.column.grid > [class*=\\\"three wide computer\\\"].column {\\n    width: 18.75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"four wide computer\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"four wide computer\\\"].column,\\n  .ui.grid > [class*=\\\"four wide computer\\\"].column,\\n  .ui.column.grid > [class*=\\\"four wide computer\\\"].column {\\n    width: 25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"five wide computer\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"five wide computer\\\"].column,\\n  .ui.grid > [class*=\\\"five wide computer\\\"].column,\\n  .ui.column.grid > [class*=\\\"five wide computer\\\"].column {\\n    width: 31.25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"six wide computer\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"six wide computer\\\"].column,\\n  .ui.grid > [class*=\\\"six wide computer\\\"].column,\\n  .ui.column.grid > [class*=\\\"six wide computer\\\"].column {\\n    width: 37.5% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"seven wide computer\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"seven wide computer\\\"].column,\\n  .ui.grid > [class*=\\\"seven wide computer\\\"].column,\\n  .ui.column.grid > [class*=\\\"seven wide computer\\\"].column {\\n    width: 43.75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"eight wide computer\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"eight wide computer\\\"].column,\\n  .ui.grid > [class*=\\\"eight wide computer\\\"].column,\\n  .ui.column.grid > [class*=\\\"eight wide computer\\\"].column {\\n    width: 50% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"nine wide computer\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"nine wide computer\\\"].column,\\n  .ui.grid > [class*=\\\"nine wide computer\\\"].column,\\n  .ui.column.grid > [class*=\\\"nine wide computer\\\"].column {\\n    width: 56.25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"ten wide computer\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"ten wide computer\\\"].column,\\n  .ui.grid > [class*=\\\"ten wide computer\\\"].column,\\n  .ui.column.grid > [class*=\\\"ten wide computer\\\"].column {\\n    width: 62.5% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"eleven wide computer\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"eleven wide computer\\\"].column,\\n  .ui.grid > [class*=\\\"eleven wide computer\\\"].column,\\n  .ui.column.grid > [class*=\\\"eleven wide computer\\\"].column {\\n    width: 68.75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"twelve wide computer\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"twelve wide computer\\\"].column,\\n  .ui.grid > [class*=\\\"twelve wide computer\\\"].column,\\n  .ui.column.grid > [class*=\\\"twelve wide computer\\\"].column {\\n    width: 75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"thirteen wide computer\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"thirteen wide computer\\\"].column,\\n  .ui.grid > [class*=\\\"thirteen wide computer\\\"].column,\\n  .ui.column.grid > [class*=\\\"thirteen wide computer\\\"].column {\\n    width: 81.25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"fourteen wide computer\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"fourteen wide computer\\\"].column,\\n  .ui.grid > [class*=\\\"fourteen wide computer\\\"].column,\\n  .ui.column.grid > [class*=\\\"fourteen wide computer\\\"].column {\\n    width: 87.5% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"fifteen wide computer\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"fifteen wide computer\\\"].column,\\n  .ui.grid > [class*=\\\"fifteen wide computer\\\"].column,\\n  .ui.column.grid > [class*=\\\"fifteen wide computer\\\"].column {\\n    width: 93.75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"sixteen wide computer\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"sixteen wide computer\\\"].column,\\n  .ui.grid > [class*=\\\"sixteen wide computer\\\"].column,\\n  .ui.column.grid > [class*=\\\"sixteen wide computer\\\"].column {\\n    width: 100% !important;\\n  }\\n}\\n\\n/* Large Monitor Sizing Combinations */\\n\\n@media only screen and (min-width: 1200px) and (max-width: 1919.98px) {\\n  .ui.grid > .row > [class*=\\\"one wide large screen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"one wide large screen\\\"].column,\\n  .ui.grid > [class*=\\\"one wide large screen\\\"].column,\\n  .ui.column.grid > [class*=\\\"one wide large screen\\\"].column {\\n    width: 6.25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"two wide large screen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"two wide large screen\\\"].column,\\n  .ui.grid > [class*=\\\"two wide large screen\\\"].column,\\n  .ui.column.grid > [class*=\\\"two wide large screen\\\"].column {\\n    width: 12.5% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"three wide large screen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"three wide large screen\\\"].column,\\n  .ui.grid > [class*=\\\"three wide large screen\\\"].column,\\n  .ui.column.grid > [class*=\\\"three wide large screen\\\"].column {\\n    width: 18.75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"four wide large screen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"four wide large screen\\\"].column,\\n  .ui.grid > [class*=\\\"four wide large screen\\\"].column,\\n  .ui.column.grid > [class*=\\\"four wide large screen\\\"].column {\\n    width: 25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"five wide large screen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"five wide large screen\\\"].column,\\n  .ui.grid > [class*=\\\"five wide large screen\\\"].column,\\n  .ui.column.grid > [class*=\\\"five wide large screen\\\"].column {\\n    width: 31.25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"six wide large screen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"six wide large screen\\\"].column,\\n  .ui.grid > [class*=\\\"six wide large screen\\\"].column,\\n  .ui.column.grid > [class*=\\\"six wide large screen\\\"].column {\\n    width: 37.5% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"seven wide large screen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"seven wide large screen\\\"].column,\\n  .ui.grid > [class*=\\\"seven wide large screen\\\"].column,\\n  .ui.column.grid > [class*=\\\"seven wide large screen\\\"].column {\\n    width: 43.75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"eight wide large screen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"eight wide large screen\\\"].column,\\n  .ui.grid > [class*=\\\"eight wide large screen\\\"].column,\\n  .ui.column.grid > [class*=\\\"eight wide large screen\\\"].column {\\n    width: 50% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"nine wide large screen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"nine wide large screen\\\"].column,\\n  .ui.grid > [class*=\\\"nine wide large screen\\\"].column,\\n  .ui.column.grid > [class*=\\\"nine wide large screen\\\"].column {\\n    width: 56.25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"ten wide large screen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"ten wide large screen\\\"].column,\\n  .ui.grid > [class*=\\\"ten wide large screen\\\"].column,\\n  .ui.column.grid > [class*=\\\"ten wide large screen\\\"].column {\\n    width: 62.5% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"eleven wide large screen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"eleven wide large screen\\\"].column,\\n  .ui.grid > [class*=\\\"eleven wide large screen\\\"].column,\\n  .ui.column.grid > [class*=\\\"eleven wide large screen\\\"].column {\\n    width: 68.75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"twelve wide large screen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"twelve wide large screen\\\"].column,\\n  .ui.grid > [class*=\\\"twelve wide large screen\\\"].column,\\n  .ui.column.grid > [class*=\\\"twelve wide large screen\\\"].column {\\n    width: 75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"thirteen wide large screen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"thirteen wide large screen\\\"].column,\\n  .ui.grid > [class*=\\\"thirteen wide large screen\\\"].column,\\n  .ui.column.grid > [class*=\\\"thirteen wide large screen\\\"].column {\\n    width: 81.25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"fourteen wide large screen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"fourteen wide large screen\\\"].column,\\n  .ui.grid > [class*=\\\"fourteen wide large screen\\\"].column,\\n  .ui.column.grid > [class*=\\\"fourteen wide large screen\\\"].column {\\n    width: 87.5% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"fifteen wide large screen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"fifteen wide large screen\\\"].column,\\n  .ui.grid > [class*=\\\"fifteen wide large screen\\\"].column,\\n  .ui.column.grid > [class*=\\\"fifteen wide large screen\\\"].column {\\n    width: 93.75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"sixteen wide large screen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"sixteen wide large screen\\\"].column,\\n  .ui.grid > [class*=\\\"sixteen wide large screen\\\"].column,\\n  .ui.column.grid > [class*=\\\"sixteen wide large screen\\\"].column {\\n    width: 100% !important;\\n  }\\n}\\n\\n/* Widescreen Sizing Combinations */\\n\\n@media only screen and (min-width: 1920px) {\\n  .ui.grid > .row > [class*=\\\"one wide widescreen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"one wide widescreen\\\"].column,\\n  .ui.grid > [class*=\\\"one wide widescreen\\\"].column,\\n  .ui.column.grid > [class*=\\\"one wide widescreen\\\"].column {\\n    width: 6.25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"two wide widescreen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"two wide widescreen\\\"].column,\\n  .ui.grid > [class*=\\\"two wide widescreen\\\"].column,\\n  .ui.column.grid > [class*=\\\"two wide widescreen\\\"].column {\\n    width: 12.5% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"three wide widescreen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"three wide widescreen\\\"].column,\\n  .ui.grid > [class*=\\\"three wide widescreen\\\"].column,\\n  .ui.column.grid > [class*=\\\"three wide widescreen\\\"].column {\\n    width: 18.75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"four wide widescreen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"four wide widescreen\\\"].column,\\n  .ui.grid > [class*=\\\"four wide widescreen\\\"].column,\\n  .ui.column.grid > [class*=\\\"four wide widescreen\\\"].column {\\n    width: 25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"five wide widescreen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"five wide widescreen\\\"].column,\\n  .ui.grid > [class*=\\\"five wide widescreen\\\"].column,\\n  .ui.column.grid > [class*=\\\"five wide widescreen\\\"].column {\\n    width: 31.25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"six wide widescreen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"six wide widescreen\\\"].column,\\n  .ui.grid > [class*=\\\"six wide widescreen\\\"].column,\\n  .ui.column.grid > [class*=\\\"six wide widescreen\\\"].column {\\n    width: 37.5% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"seven wide widescreen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"seven wide widescreen\\\"].column,\\n  .ui.grid > [class*=\\\"seven wide widescreen\\\"].column,\\n  .ui.column.grid > [class*=\\\"seven wide widescreen\\\"].column {\\n    width: 43.75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"eight wide widescreen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"eight wide widescreen\\\"].column,\\n  .ui.grid > [class*=\\\"eight wide widescreen\\\"].column,\\n  .ui.column.grid > [class*=\\\"eight wide widescreen\\\"].column {\\n    width: 50% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"nine wide widescreen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"nine wide widescreen\\\"].column,\\n  .ui.grid > [class*=\\\"nine wide widescreen\\\"].column,\\n  .ui.column.grid > [class*=\\\"nine wide widescreen\\\"].column {\\n    width: 56.25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"ten wide widescreen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"ten wide widescreen\\\"].column,\\n  .ui.grid > [class*=\\\"ten wide widescreen\\\"].column,\\n  .ui.column.grid > [class*=\\\"ten wide widescreen\\\"].column {\\n    width: 62.5% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"eleven wide widescreen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"eleven wide widescreen\\\"].column,\\n  .ui.grid > [class*=\\\"eleven wide widescreen\\\"].column,\\n  .ui.column.grid > [class*=\\\"eleven wide widescreen\\\"].column {\\n    width: 68.75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"twelve wide widescreen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"twelve wide widescreen\\\"].column,\\n  .ui.grid > [class*=\\\"twelve wide widescreen\\\"].column,\\n  .ui.column.grid > [class*=\\\"twelve wide widescreen\\\"].column {\\n    width: 75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"thirteen wide widescreen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"thirteen wide widescreen\\\"].column,\\n  .ui.grid > [class*=\\\"thirteen wide widescreen\\\"].column,\\n  .ui.column.grid > [class*=\\\"thirteen wide widescreen\\\"].column {\\n    width: 81.25% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"fourteen wide widescreen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"fourteen wide widescreen\\\"].column,\\n  .ui.grid > [class*=\\\"fourteen wide widescreen\\\"].column,\\n  .ui.column.grid > [class*=\\\"fourteen wide widescreen\\\"].column {\\n    width: 87.5% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"fifteen wide widescreen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"fifteen wide widescreen\\\"].column,\\n  .ui.grid > [class*=\\\"fifteen wide widescreen\\\"].column,\\n  .ui.column.grid > [class*=\\\"fifteen wide widescreen\\\"].column {\\n    width: 93.75% !important;\\n  }\\n\\n  .ui.grid > .row > [class*=\\\"sixteen wide widescreen\\\"].column,\\n  .ui.grid > .column.row > [class*=\\\"sixteen wide widescreen\\\"].column,\\n  .ui.grid > [class*=\\\"sixteen wide widescreen\\\"].column,\\n  .ui.column.grid > [class*=\\\"sixteen wide widescreen\\\"].column {\\n    width: 100% !important;\\n  }\\n}\\n\\n/*----------------------\\n        Centered\\n-----------------------*/\\n\\n.ui.centered.grid,\\n.ui.centered.grid > .row,\\n.ui.grid > .centered.row {\\n  text-align: center;\\n  -webkit-box-pack: center;\\n      -ms-flex-pack: center;\\n          justify-content: center;\\n}\\n\\n.ui.centered.grid > .column:not(.aligned):not(.justified):not(.row),\\n.ui.centered.grid > .row > .column:not(.aligned):not(.justified),\\n.ui.grid .centered.row > .column:not(.aligned):not(.justified) {\\n  text-align: left;\\n}\\n\\n.ui.grid > .centered.column,\\n.ui.grid > .row > .centered.column {\\n  display: block;\\n  margin-left: auto;\\n  margin-right: auto;\\n}\\n\\n/*----------------------\\n        Relaxed\\n-----------------------*/\\n\\n.ui.relaxed.grid > .column:not(.row),\\n.ui.relaxed.grid > .row > .column,\\n.ui.grid > .relaxed.row > .column {\\n  padding-left: 1.5rem;\\n  padding-right: 1.5rem;\\n}\\n\\n.ui[class*=\\\"very relaxed\\\"].grid > .column:not(.row),\\n.ui[class*=\\\"very relaxed\\\"].grid > .row > .column,\\n.ui.grid > [class*=\\\"very relaxed\\\"].row > .column {\\n  padding-left: 2.5rem;\\n  padding-right: 2.5rem;\\n}\\n\\n/* Coupling with UI Divider */\\n\\n.ui.relaxed.grid .row + .ui.divider,\\n.ui.grid .relaxed.row + .ui.divider {\\n  margin-left: 1.5rem;\\n  margin-right: 1.5rem;\\n}\\n\\n.ui[class*=\\\"very relaxed\\\"].grid .row + .ui.divider,\\n.ui.grid [class*=\\\"very relaxed\\\"].row + .ui.divider {\\n  margin-left: 2.5rem;\\n  margin-right: 2.5rem;\\n}\\n\\n/*----------------------\\n        Padded\\n-----------------------*/\\n\\n.ui.padded.grid:not(.vertically):not(.horizontally) {\\n  margin: 0 !important;\\n}\\n\\n[class*=\\\"horizontally padded\\\"].ui.grid {\\n  margin-left: 0 !important;\\n  margin-right: 0 !important;\\n}\\n\\n[class*=\\\"vertically padded\\\"].ui.grid {\\n  margin-top: 0 !important;\\n  margin-bottom: 0 !important;\\n}\\n\\n/*----------------------\\n       \\\"Floated\\\"\\n-----------------------*/\\n\\n.ui.grid [class*=\\\"left floated\\\"].column {\\n  margin-right: auto;\\n}\\n\\n.ui.grid [class*=\\\"right floated\\\"].column {\\n  margin-left: auto;\\n}\\n\\n/*----------------------\\n        Divided\\n-----------------------*/\\n\\n.ui.divided.grid:not([class*=\\\"vertically divided\\\"]) > .column:not(.row),\\n.ui.divided.grid:not([class*=\\\"vertically divided\\\"]) > .row > .column {\\n  -webkit-box-shadow: -1px 0 0 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: -1px 0 0 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n/* Swap from padding to margin on columns to have dividers align */\\n\\n.ui[class*=\\\"vertically divided\\\"].grid > .column:not(.row),\\n.ui[class*=\\\"vertically divided\\\"].grid > .row > .column {\\n  margin-top: 1rem;\\n  margin-bottom: 1rem;\\n  padding-top: 0;\\n  padding-bottom: 0;\\n}\\n\\n.ui[class*=\\\"vertically divided\\\"].grid > .row {\\n  margin-top: 0;\\n  margin-bottom: 0;\\n}\\n\\n/* No divider on first column on row */\\n\\n.ui.divided.grid:not([class*=\\\"vertically divided\\\"]) > .column:first-child,\\n.ui.divided.grid:not([class*=\\\"vertically divided\\\"]) > .row > .column:first-child {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/* No space on top of first row */\\n\\n.ui[class*=\\\"vertically divided\\\"].grid > .row:first-child > .column {\\n  margin-top: 0;\\n}\\n\\n/* Divided Row */\\n\\n.ui.grid > .divided.row > .column {\\n  -webkit-box-shadow: -1px 0 0 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: -1px 0 0 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.grid > .divided.row > .column:first-child {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/* Vertically Divided */\\n\\n.ui[class*=\\\"vertically divided\\\"].grid > .row {\\n  position: relative;\\n}\\n\\n.ui[class*=\\\"vertically divided\\\"].grid > .row:before {\\n  position: absolute;\\n  content: \\\"\\\";\\n  top: 0;\\n  left: 0;\\n  width: calc(100% - 2rem);\\n  height: 1px;\\n  margin: 0 1rem;\\n  -webkit-box-shadow: 0 -1px 0 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 -1px 0 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n/* Padded Horizontally Divided */\\n\\n[class*=\\\"horizontally padded\\\"].ui.divided.grid,\\n.ui.padded.divided.grid:not(.vertically):not(.horizontally) {\\n  width: 100%;\\n}\\n\\n/* First Row Vertically Divided */\\n\\n.ui[class*=\\\"vertically divided\\\"].grid > .row:first-child:before {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/* Inverted Divided */\\n\\n.ui.inverted.divided.grid:not([class*=\\\"vertically divided\\\"]) > .column:not(.row),\\n.ui.inverted.divided.grid:not([class*=\\\"vertically divided\\\"]) > .row > .column {\\n  -webkit-box-shadow: -1px 0 0 0 rgba(255, 255, 255, 0.1);\\n          box-shadow: -1px 0 0 0 rgba(255, 255, 255, 0.1);\\n}\\n\\n.ui.inverted.divided.grid:not([class*=\\\"vertically divided\\\"]) > .column:not(.row):first-child,\\n.ui.inverted.divided.grid:not([class*=\\\"vertically divided\\\"]) > .row > .column:first-child {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.inverted[class*=\\\"vertically divided\\\"].grid > .row:before {\\n  -webkit-box-shadow: 0 -1px 0 0 rgba(255, 255, 255, 0.1);\\n          box-shadow: 0 -1px 0 0 rgba(255, 255, 255, 0.1);\\n}\\n\\n/* Relaxed */\\n\\n.ui.relaxed[class*=\\\"vertically divided\\\"].grid > .row:before {\\n  margin-left: 1.5rem;\\n  margin-right: 1.5rem;\\n  width: calc(100% - 3rem);\\n}\\n\\n.ui[class*=\\\"very relaxed\\\"][class*=\\\"vertically divided\\\"].grid > .row:before {\\n  margin-left: 2.5rem;\\n  margin-right: 2.5rem;\\n  width: calc(100% - 5rem);\\n}\\n\\n/*----------------------\\n         Celled\\n-----------------------*/\\n\\n.ui.celled.grid {\\n  width: 100%;\\n  margin: 1em 0;\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5;\\n          box-shadow: 0 0 0 1px #D4D4D5;\\n}\\n\\n.ui.celled.grid > .row {\\n  width: 100% !important;\\n  margin: 0;\\n  padding: 0;\\n  -webkit-box-shadow: 0 -1px 0 0 #D4D4D5;\\n          box-shadow: 0 -1px 0 0 #D4D4D5;\\n}\\n\\n.ui.celled.grid > .column:not(.row),\\n.ui.celled.grid > .row > .column {\\n  -webkit-box-shadow: -1px 0 0 0 #D4D4D5;\\n          box-shadow: -1px 0 0 0 #D4D4D5;\\n}\\n\\n.ui.celled.grid > .column:first-child,\\n.ui.celled.grid > .row > .column:first-child {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.celled.grid > .column:not(.row),\\n.ui.celled.grid > .row > .column {\\n  padding: 1em;\\n}\\n\\n.ui.relaxed.celled.grid > .column:not(.row),\\n.ui.relaxed.celled.grid > .row > .column {\\n  padding: 1.5em;\\n}\\n\\n.ui[class*=\\\"very relaxed\\\"].celled.grid > .column:not(.row),\\n.ui[class*=\\\"very relaxed\\\"].celled.grid > .row > .column {\\n  padding: 2em;\\n}\\n\\n/* Internally Celled */\\n\\n.ui[class*=\\\"internally celled\\\"].grid {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  margin: 0;\\n}\\n\\n.ui[class*=\\\"internally celled\\\"].grid > .row:first-child {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui[class*=\\\"internally celled\\\"].grid > .row > .column:first-child {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/*----------------------\\n   Vertically Aligned\\n-----------------------*/\\n\\n/* Top Aligned */\\n\\n.ui[class*=\\\"top aligned\\\"].grid > .column:not(.row),\\n.ui[class*=\\\"top aligned\\\"].grid > .row > .column,\\n.ui.grid > [class*=\\\"top aligned\\\"].row > .column,\\n.ui.grid > [class*=\\\"top aligned\\\"].column:not(.row),\\n.ui.grid > .row > [class*=\\\"top aligned\\\"].column {\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  vertical-align: top;\\n  -ms-flex-item-align: start !important;\\n      align-self: flex-start !important;\\n}\\n\\n/* Middle Aligned */\\n\\n.ui[class*=\\\"middle aligned\\\"].grid > .column:not(.row),\\n.ui[class*=\\\"middle aligned\\\"].grid > .row > .column,\\n.ui.grid > [class*=\\\"middle aligned\\\"].row > .column,\\n.ui.grid > [class*=\\\"middle aligned\\\"].column:not(.row),\\n.ui.grid > .row > [class*=\\\"middle aligned\\\"].column {\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  vertical-align: middle;\\n  -ms-flex-item-align: center !important;\\n      align-self: center !important;\\n}\\n\\n/* Bottom Aligned */\\n\\n.ui[class*=\\\"bottom aligned\\\"].grid > .column:not(.row),\\n.ui[class*=\\\"bottom aligned\\\"].grid > .row > .column,\\n.ui.grid > [class*=\\\"bottom aligned\\\"].row > .column,\\n.ui.grid > [class*=\\\"bottom aligned\\\"].column:not(.row),\\n.ui.grid > .row > [class*=\\\"bottom aligned\\\"].column {\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  vertical-align: bottom;\\n  -ms-flex-item-align: end !important;\\n      align-self: flex-end !important;\\n}\\n\\n/* Stretched */\\n\\n.ui.stretched.grid > .row > .column,\\n.ui.stretched.grid > .column,\\n.ui.grid > .stretched.row > .column,\\n.ui.grid > .stretched.column:not(.row),\\n.ui.grid > .row > .stretched.column {\\n  display: -webkit-inline-box !important;\\n  display: -ms-inline-flexbox !important;\\n  display: inline-flex !important;\\n  -ms-flex-item-align: stretch;\\n      align-self: stretch;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n}\\n\\n.ui.stretched.grid > .row > .column > *,\\n.ui.stretched.grid > .column > *,\\n.ui.grid > .stretched.row > .column > *,\\n.ui.grid > .stretched.column:not(.row) > *,\\n.ui.grid > .row > .stretched.column > * {\\n  -webkit-box-flex: 1;\\n      -ms-flex-positive: 1;\\n          flex-grow: 1;\\n}\\n\\n/*----------------------\\n  Horizontally Centered\\n-----------------------*/\\n\\n/* Left Aligned */\\n\\n.ui[class*=\\\"left aligned\\\"].grid > .column,\\n.ui[class*=\\\"left aligned\\\"].grid > .row > .column,\\n.ui.grid > [class*=\\\"left aligned\\\"].row > .column,\\n.ui.grid > [class*=\\\"left aligned\\\"].column.column,\\n.ui.grid > .row > [class*=\\\"left aligned\\\"].column.column {\\n  text-align: left;\\n  -ms-flex-item-align: inherit;\\n      align-self: inherit;\\n}\\n\\n/* Center Aligned */\\n\\n.ui[class*=\\\"center aligned\\\"].grid > .column,\\n.ui[class*=\\\"center aligned\\\"].grid > .row > .column,\\n.ui.grid > [class*=\\\"center aligned\\\"].row > .column,\\n.ui.grid > [class*=\\\"center aligned\\\"].column.column,\\n.ui.grid > .row > [class*=\\\"center aligned\\\"].column.column {\\n  text-align: center;\\n  -ms-flex-item-align: inherit;\\n      align-self: inherit;\\n}\\n\\n.ui[class*=\\\"center aligned\\\"].grid {\\n  -webkit-box-pack: center;\\n      -ms-flex-pack: center;\\n          justify-content: center;\\n}\\n\\n/* Right Aligned */\\n\\n.ui[class*=\\\"right aligned\\\"].grid > .column,\\n.ui[class*=\\\"right aligned\\\"].grid > .row > .column,\\n.ui.grid > [class*=\\\"right aligned\\\"].row > .column,\\n.ui.grid > [class*=\\\"right aligned\\\"].column.column,\\n.ui.grid > .row > [class*=\\\"right aligned\\\"].column.column {\\n  text-align: right;\\n  -ms-flex-item-align: inherit;\\n      align-self: inherit;\\n}\\n\\n/* Justified */\\n\\n.ui.justified.grid > .column,\\n.ui.justified.grid > .row > .column,\\n.ui.grid > .justified.row > .column,\\n.ui.grid > .justified.column.column,\\n.ui.grid > .row > .justified.column.column {\\n  text-align: justify;\\n  -webkit-hyphens: auto;\\n  -ms-hyphens: auto;\\n  hyphens: auto;\\n}\\n\\n/*----------------------\\n         Colored\\n-----------------------*/\\n\\n.ui.grid > .primary.row,\\n.ui.grid > .primary.column,\\n.ui.grid > .row > .primary.column {\\n  background-color: #2185D0;\\n  color: #FFFFFF;\\n}\\n\\n.ui.grid > .secondary.row,\\n.ui.grid > .secondary.column,\\n.ui.grid > .row > .secondary.column {\\n  background-color: #1B1C1D;\\n  color: #FFFFFF;\\n}\\n\\n.ui.grid > .red.row,\\n.ui.grid > .red.column,\\n.ui.grid > .row > .red.column {\\n  background-color: #DB2828;\\n  color: #FFFFFF;\\n}\\n\\n.ui.grid > .orange.row,\\n.ui.grid > .orange.column,\\n.ui.grid > .row > .orange.column {\\n  background-color: #F2711C;\\n  color: #FFFFFF;\\n}\\n\\n.ui.grid > .yellow.row,\\n.ui.grid > .yellow.column,\\n.ui.grid > .row > .yellow.column {\\n  background-color: #FBBD08;\\n  color: #FFFFFF;\\n}\\n\\n.ui.grid > .olive.row,\\n.ui.grid > .olive.column,\\n.ui.grid > .row > .olive.column {\\n  background-color: #B5CC18;\\n  color: #FFFFFF;\\n}\\n\\n.ui.grid > .green.row,\\n.ui.grid > .green.column,\\n.ui.grid > .row > .green.column {\\n  background-color: #21BA45;\\n  color: #FFFFFF;\\n}\\n\\n.ui.grid > .teal.row,\\n.ui.grid > .teal.column,\\n.ui.grid > .row > .teal.column {\\n  background-color: #00B5AD;\\n  color: #FFFFFF;\\n}\\n\\n.ui.grid > .blue.row,\\n.ui.grid > .blue.column,\\n.ui.grid > .row > .blue.column {\\n  background-color: #2185D0;\\n  color: #FFFFFF;\\n}\\n\\n.ui.grid > .violet.row,\\n.ui.grid > .violet.column,\\n.ui.grid > .row > .violet.column {\\n  background-color: #6435C9;\\n  color: #FFFFFF;\\n}\\n\\n.ui.grid > .purple.row,\\n.ui.grid > .purple.column,\\n.ui.grid > .row > .purple.column {\\n  background-color: #A333C8;\\n  color: #FFFFFF;\\n}\\n\\n.ui.grid > .pink.row,\\n.ui.grid > .pink.column,\\n.ui.grid > .row > .pink.column {\\n  background-color: #E03997;\\n  color: #FFFFFF;\\n}\\n\\n.ui.grid > .brown.row,\\n.ui.grid > .brown.column,\\n.ui.grid > .row > .brown.column {\\n  background-color: #A5673F;\\n  color: #FFFFFF;\\n}\\n\\n.ui.grid > .grey.row,\\n.ui.grid > .grey.column,\\n.ui.grid > .row > .grey.column {\\n  background-color: #767676;\\n  color: #FFFFFF;\\n}\\n\\n.ui.grid > .black.row,\\n.ui.grid > .black.column,\\n.ui.grid > .row > .black.column {\\n  background-color: #1B1C1D;\\n  color: #FFFFFF;\\n}\\n\\n/*----------------------\\n      Equal Width\\n-----------------------*/\\n\\n.ui[class*=\\\"equal width\\\"].grid > .column:not(.row),\\n.ui[class*=\\\"equal width\\\"].grid > .row > .column,\\n.ui.grid > [class*=\\\"equal width\\\"].row > .column {\\n  display: inline-block;\\n  -webkit-box-flex: 1;\\n      -ms-flex-positive: 1;\\n          flex-grow: 1;\\n}\\n\\n.ui[class*=\\\"equal width\\\"].grid > .wide.column,\\n.ui[class*=\\\"equal width\\\"].grid > .row > .wide.column,\\n.ui.grid > [class*=\\\"equal width\\\"].row > .wide.column {\\n  -webkit-box-flex: 0;\\n      -ms-flex-positive: 0;\\n          flex-grow: 0;\\n}\\n\\n/*----------------------\\n        Reverse\\n-----------------------*/\\n\\n/* Mobile */\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui[class*=\\\"mobile reversed\\\"].grid,\\n  .ui[class*=\\\"mobile reversed\\\"].grid > .row,\\n  .ui.grid > [class*=\\\"mobile reversed\\\"].row {\\n    -webkit-box-orient: horizontal;\\n    -webkit-box-direction: reverse;\\n        -ms-flex-direction: row-reverse;\\n            flex-direction: row-reverse;\\n  }\\n\\n  .ui[class*=\\\"mobile vertically reversed\\\"].grid,\\n  .ui.stackable[class*=\\\"mobile reversed\\\"] {\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: reverse;\\n        -ms-flex-direction: column-reverse;\\n            flex-direction: column-reverse;\\n  }\\n\\n  /* Divided Reversed */\\n\\n  .ui[class*=\\\"mobile reversed\\\"].divided.grid:not([class*=\\\"vertically divided\\\"]) > .column:first-child,\\n  .ui[class*=\\\"mobile reversed\\\"].divided.grid:not([class*=\\\"vertically divided\\\"]) > .row > .column:first-child {\\n    -webkit-box-shadow: -1px 0 0 0 rgba(34, 36, 38, 0.15);\\n            box-shadow: -1px 0 0 0 rgba(34, 36, 38, 0.15);\\n  }\\n\\n  .ui[class*=\\\"mobile reversed\\\"].divided.grid:not([class*=\\\"vertically divided\\\"]) > .column:last-child,\\n  .ui[class*=\\\"mobile reversed\\\"].divided.grid:not([class*=\\\"vertically divided\\\"]) > .row > .column:last-child {\\n    -webkit-box-shadow: none;\\n            box-shadow: none;\\n  }\\n\\n  /* Vertically Divided Reversed */\\n\\n  .ui.grid[class*=\\\"vertically divided\\\"][class*=\\\"mobile vertically reversed\\\"] > .row:first-child:before {\\n    -webkit-box-shadow: 0 -1px 0 0 rgba(34, 36, 38, 0.15);\\n            box-shadow: 0 -1px 0 0 rgba(34, 36, 38, 0.15);\\n  }\\n\\n  .ui.grid[class*=\\\"vertically divided\\\"][class*=\\\"mobile vertically reversed\\\"] > .row:last-child:before {\\n    -webkit-box-shadow: none;\\n            box-shadow: none;\\n  }\\n\\n  /* Celled Reversed */\\n\\n  .ui[class*=\\\"mobile reversed\\\"].celled.grid > .row > .column:first-child {\\n    -webkit-box-shadow: -1px 0 0 0 #D4D4D5;\\n            box-shadow: -1px 0 0 0 #D4D4D5;\\n  }\\n\\n  .ui[class*=\\\"mobile reversed\\\"].celled.grid > .row > .column:last-child {\\n    -webkit-box-shadow: none;\\n            box-shadow: none;\\n  }\\n}\\n\\n/* Tablet */\\n\\n@media only screen and (min-width: 768px) and (max-width: 991.98px) {\\n  .ui[class*=\\\"tablet reversed\\\"].grid,\\n  .ui[class*=\\\"tablet reversed\\\"].grid > .row,\\n  .ui.grid > [class*=\\\"tablet reversed\\\"].row {\\n    -webkit-box-orient: horizontal;\\n    -webkit-box-direction: reverse;\\n        -ms-flex-direction: row-reverse;\\n            flex-direction: row-reverse;\\n  }\\n\\n  .ui[class*=\\\"tablet vertically reversed\\\"].grid {\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: reverse;\\n        -ms-flex-direction: column-reverse;\\n            flex-direction: column-reverse;\\n  }\\n\\n  /* Divided Reversed */\\n\\n  .ui[class*=\\\"tablet reversed\\\"].divided.grid:not([class*=\\\"vertically divided\\\"]) > .column:first-child,\\n  .ui[class*=\\\"tablet reversed\\\"].divided.grid:not([class*=\\\"vertically divided\\\"]) > .row > .column:first-child {\\n    -webkit-box-shadow: -1px 0 0 0 rgba(34, 36, 38, 0.15);\\n            box-shadow: -1px 0 0 0 rgba(34, 36, 38, 0.15);\\n  }\\n\\n  .ui[class*=\\\"tablet reversed\\\"].divided.grid:not([class*=\\\"vertically divided\\\"]) > .column:last-child,\\n  .ui[class*=\\\"tablet reversed\\\"].divided.grid:not([class*=\\\"vertically divided\\\"]) > .row > .column:last-child {\\n    -webkit-box-shadow: none;\\n            box-shadow: none;\\n  }\\n\\n  /* Vertically Divided Reversed */\\n\\n  .ui.grid[class*=\\\"vertically divided\\\"][class*=\\\"tablet vertically reversed\\\"] > .row:first-child:before {\\n    -webkit-box-shadow: 0 -1px 0 0 rgba(34, 36, 38, 0.15);\\n            box-shadow: 0 -1px 0 0 rgba(34, 36, 38, 0.15);\\n  }\\n\\n  .ui.grid[class*=\\\"vertically divided\\\"][class*=\\\"tablet vertically reversed\\\"] > .row:last-child:before {\\n    -webkit-box-shadow: none;\\n            box-shadow: none;\\n  }\\n\\n  /* Celled Reversed */\\n\\n  .ui[class*=\\\"tablet reversed\\\"].celled.grid > .row > .column:first-child {\\n    -webkit-box-shadow: -1px 0 0 0 #D4D4D5;\\n            box-shadow: -1px 0 0 0 #D4D4D5;\\n  }\\n\\n  .ui[class*=\\\"tablet reversed\\\"].celled.grid > .row > .column:last-child {\\n    -webkit-box-shadow: none;\\n            box-shadow: none;\\n  }\\n}\\n\\n/* Computer */\\n\\n@media only screen and (min-width: 992px) {\\n  .ui[class*=\\\"computer reversed\\\"].grid,\\n  .ui[class*=\\\"computer reversed\\\"].grid > .row,\\n  .ui.grid > [class*=\\\"computer reversed\\\"].row {\\n    -webkit-box-orient: horizontal;\\n    -webkit-box-direction: reverse;\\n        -ms-flex-direction: row-reverse;\\n            flex-direction: row-reverse;\\n  }\\n\\n  .ui[class*=\\\"computer vertically reversed\\\"].grid {\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: reverse;\\n        -ms-flex-direction: column-reverse;\\n            flex-direction: column-reverse;\\n  }\\n\\n  /* Divided Reversed */\\n\\n  .ui[class*=\\\"computer reversed\\\"].divided.grid:not([class*=\\\"vertically divided\\\"]) > .column:first-child,\\n  .ui[class*=\\\"computer reversed\\\"].divided.grid:not([class*=\\\"vertically divided\\\"]) > .row > .column:first-child {\\n    -webkit-box-shadow: -1px 0 0 0 rgba(34, 36, 38, 0.15);\\n            box-shadow: -1px 0 0 0 rgba(34, 36, 38, 0.15);\\n  }\\n\\n  .ui[class*=\\\"computer reversed\\\"].divided.grid:not([class*=\\\"vertically divided\\\"]) > .column:last-child,\\n  .ui[class*=\\\"computer reversed\\\"].divided.grid:not([class*=\\\"vertically divided\\\"]) > .row > .column:last-child {\\n    -webkit-box-shadow: none;\\n            box-shadow: none;\\n  }\\n\\n  /* Vertically Divided Reversed */\\n\\n  .ui.grid[class*=\\\"vertically divided\\\"][class*=\\\"computer vertically reversed\\\"] > .row:first-child:before {\\n    -webkit-box-shadow: 0 -1px 0 0 rgba(34, 36, 38, 0.15);\\n            box-shadow: 0 -1px 0 0 rgba(34, 36, 38, 0.15);\\n  }\\n\\n  .ui.grid[class*=\\\"vertically divided\\\"][class*=\\\"computer vertically reversed\\\"] > .row:last-child:before {\\n    -webkit-box-shadow: none;\\n            box-shadow: none;\\n  }\\n\\n  /* Celled Reversed */\\n\\n  .ui[class*=\\\"computer reversed\\\"].celled.grid > .row > .column:first-child {\\n    -webkit-box-shadow: -1px 0 0 0 #D4D4D5;\\n            box-shadow: -1px 0 0 0 #D4D4D5;\\n  }\\n\\n  .ui[class*=\\\"computer reversed\\\"].celled.grid > .row > .column:last-child {\\n    -webkit-box-shadow: none;\\n            box-shadow: none;\\n  }\\n}\\n\\n/*-------------------\\n      Doubling\\n--------------------*/\\n\\n/* Tablet Only */\\n\\n@media only screen and (min-width: 768px) and (max-width: 991.98px) {\\n  .ui.doubling.grid {\\n    width: auto;\\n  }\\n\\n  .ui.grid > .doubling.row,\\n  .ui.doubling.grid > .row {\\n    margin: 0 !important;\\n    padding: 0 !important;\\n  }\\n\\n  .ui.grid > .doubling.row > .column,\\n  .ui.doubling.grid > .row > .column {\\n    display: inline-block !important;\\n    padding-top: 1rem !important;\\n    padding-bottom: 1rem !important;\\n    -webkit-box-shadow: none !important;\\n            box-shadow: none !important;\\n    margin: 0;\\n  }\\n\\n  .ui[class*=\\\"two column\\\"].doubling.grid > .row > .column,\\n  .ui[class*=\\\"two column\\\"].doubling.grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"two column\\\"].doubling.row.row > .column {\\n    width: 100% !important;\\n  }\\n\\n  .ui[class*=\\\"three column\\\"].doubling.grid > .row > .column,\\n  .ui[class*=\\\"three column\\\"].doubling.grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"three column\\\"].doubling.row.row > .column {\\n    width: 50% !important;\\n  }\\n\\n  .ui[class*=\\\"four column\\\"].doubling.grid > .row > .column,\\n  .ui[class*=\\\"four column\\\"].doubling.grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"four column\\\"].doubling.row.row > .column {\\n    width: 50% !important;\\n  }\\n\\n  .ui[class*=\\\"five column\\\"].doubling.grid > .row > .column,\\n  .ui[class*=\\\"five column\\\"].doubling.grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"five column\\\"].doubling.row.row > .column {\\n    width: 33.33333333% !important;\\n  }\\n\\n  .ui[class*=\\\"six column\\\"].doubling.grid > .row > .column,\\n  .ui[class*=\\\"six column\\\"].doubling.grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"six column\\\"].doubling.row.row > .column {\\n    width: 33.33333333% !important;\\n  }\\n\\n  .ui[class*=\\\"seven column\\\"].doubling.grid > .row > .column,\\n  .ui[class*=\\\"seven column\\\"].doubling.grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"seven column\\\"].doubling.row.row > .column {\\n    width: 33.33333333% !important;\\n  }\\n\\n  .ui[class*=\\\"eight column\\\"].doubling.grid > .row > .column,\\n  .ui[class*=\\\"eight column\\\"].doubling.grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"eight column\\\"].doubling.row.row > .column {\\n    width: 25% !important;\\n  }\\n\\n  .ui[class*=\\\"nine column\\\"].doubling.grid > .row > .column,\\n  .ui[class*=\\\"nine column\\\"].doubling.grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"nine column\\\"].doubling.row.row > .column {\\n    width: 25% !important;\\n  }\\n\\n  .ui[class*=\\\"ten column\\\"].doubling.grid > .row > .column,\\n  .ui[class*=\\\"ten column\\\"].doubling.grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"ten column\\\"].doubling.row.row > .column {\\n    width: 20% !important;\\n  }\\n\\n  .ui[class*=\\\"eleven column\\\"].doubling.grid > .row > .column,\\n  .ui[class*=\\\"eleven column\\\"].doubling.grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"eleven column\\\"].doubling.row.row > .column {\\n    width: 20% !important;\\n  }\\n\\n  .ui[class*=\\\"twelve column\\\"].doubling.grid > .row > .column,\\n  .ui[class*=\\\"twelve column\\\"].doubling.grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"twelve column\\\"].doubling.row.row > .column {\\n    width: 16.66666667% !important;\\n  }\\n\\n  .ui[class*=\\\"thirteen column\\\"].doubling.grid > .row > .column,\\n  .ui[class*=\\\"thirteen column\\\"].doubling.grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"thirteen column\\\"].doubling.row.row > .column {\\n    width: 16.66666667% !important;\\n  }\\n\\n  .ui[class*=\\\"fourteen column\\\"].doubling.grid > .row > .column,\\n  .ui[class*=\\\"fourteen column\\\"].doubling.grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"fourteen column\\\"].doubling.row.row > .column {\\n    width: 14.28571429% !important;\\n  }\\n\\n  .ui[class*=\\\"fifteen column\\\"].doubling.grid > .row > .column,\\n  .ui[class*=\\\"fifteen column\\\"].doubling.grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"fifteen column\\\"].doubling.row.row > .column {\\n    width: 14.28571429% !important;\\n  }\\n\\n  .ui[class*=\\\"sixteen column\\\"].doubling.grid > .row > .column,\\n  .ui[class*=\\\"sixteen column\\\"].doubling.grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"sixteen column\\\"].doubling.row.row > .column {\\n    width: 12.5% !important;\\n  }\\n}\\n\\n/* Mobile Only */\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.grid > .doubling.row,\\n  .ui.doubling.grid > .row {\\n    margin: 0 !important;\\n    padding: 0 !important;\\n  }\\n\\n  .ui.grid > .doubling.row > .column,\\n  .ui.doubling.grid > .row > .column {\\n    padding-top: 1rem !important;\\n    padding-bottom: 1rem !important;\\n    margin: 0 !important;\\n    -webkit-box-shadow: none !important;\\n            box-shadow: none !important;\\n  }\\n\\n  .ui[class*=\\\"two column\\\"].doubling:not(.stackable).grid > .row > .column,\\n  .ui[class*=\\\"two column\\\"].doubling:not(.stackable).grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"two column\\\"].doubling:not(.stackable).row.row > .column {\\n    width: 100% !important;\\n  }\\n\\n  .ui[class*=\\\"three column\\\"].doubling:not(.stackable).grid > .row > .column,\\n  .ui[class*=\\\"three column\\\"].doubling:not(.stackable).grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"three column\\\"].doubling:not(.stackable).row.row > .column {\\n    width: 50% !important;\\n  }\\n\\n  .ui[class*=\\\"four column\\\"].doubling:not(.stackable).grid > .row > .column,\\n  .ui[class*=\\\"four column\\\"].doubling:not(.stackable).grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"four column\\\"].doubling:not(.stackable).row.row > .column {\\n    width: 50% !important;\\n  }\\n\\n  .ui[class*=\\\"five column\\\"].doubling:not(.stackable).grid > .row > .column,\\n  .ui[class*=\\\"five column\\\"].doubling:not(.stackable).grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"five column\\\"].doubling:not(.stackable).row.row > .column {\\n    width: 50% !important;\\n  }\\n\\n  .ui[class*=\\\"six column\\\"].doubling:not(.stackable).grid > .row > .column,\\n  .ui[class*=\\\"six column\\\"].doubling:not(.stackable).grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"six column\\\"].doubling:not(.stackable).row.row > .column {\\n    width: 50% !important;\\n  }\\n\\n  .ui[class*=\\\"seven column\\\"].doubling:not(.stackable).grid > .row > .column,\\n  .ui[class*=\\\"seven column\\\"].doubling:not(.stackable).grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"seven column\\\"].doubling:not(.stackable).row.row > .column {\\n    width: 50% !important;\\n  }\\n\\n  .ui[class*=\\\"eight column\\\"].doubling:not(.stackable).grid > .row > .column,\\n  .ui[class*=\\\"eight column\\\"].doubling:not(.stackable).grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"eight column\\\"].doubling:not(.stackable).row.row > .column {\\n    width: 50% !important;\\n  }\\n\\n  .ui[class*=\\\"nine column\\\"].doubling:not(.stackable).grid > .row > .column,\\n  .ui[class*=\\\"nine column\\\"].doubling:not(.stackable).grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"nine column\\\"].doubling:not(.stackable).row.row > .column {\\n    width: 33.33333333% !important;\\n  }\\n\\n  .ui[class*=\\\"ten column\\\"].doubling:not(.stackable).grid > .row > .column,\\n  .ui[class*=\\\"ten column\\\"].doubling:not(.stackable).grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"ten column\\\"].doubling:not(.stackable).row.row > .column {\\n    width: 33.33333333% !important;\\n  }\\n\\n  .ui[class*=\\\"eleven column\\\"].doubling:not(.stackable).grid > .row > .column,\\n  .ui[class*=\\\"eleven column\\\"].doubling:not(.stackable).grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"eleven column\\\"].doubling:not(.stackable).row.row > .column {\\n    width: 33.33333333% !important;\\n  }\\n\\n  .ui[class*=\\\"twelve column\\\"].doubling:not(.stackable).grid > .row > .column,\\n  .ui[class*=\\\"twelve column\\\"].doubling:not(.stackable).grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"twelve column\\\"].doubling:not(.stackable).row.row > .column {\\n    width: 33.33333333% !important;\\n  }\\n\\n  .ui[class*=\\\"thirteen column\\\"].doubling:not(.stackable).grid > .row > .column,\\n  .ui[class*=\\\"thirteen column\\\"].doubling:not(.stackable).grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"thirteen column\\\"].doubling:not(.stackable).row.row > .column {\\n    width: 33.33333333% !important;\\n  }\\n\\n  .ui[class*=\\\"fourteen column\\\"].doubling:not(.stackable).grid > .row > .column,\\n  .ui[class*=\\\"fourteen column\\\"].doubling:not(.stackable).grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"fourteen column\\\"].doubling:not(.stackable).row.row > .column {\\n    width: 25% !important;\\n  }\\n\\n  .ui[class*=\\\"fifteen column\\\"].doubling:not(.stackable).grid > .row > .column,\\n  .ui[class*=\\\"fifteen column\\\"].doubling:not(.stackable).grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"fifteen column\\\"].doubling:not(.stackable).row.row > .column {\\n    width: 25% !important;\\n  }\\n\\n  .ui[class*=\\\"sixteen column\\\"].doubling:not(.stackable).grid > .row > .column,\\n  .ui[class*=\\\"sixteen column\\\"].doubling:not(.stackable).grid > .column:not(.row),\\n  .ui.grid > [class*=\\\"sixteen column\\\"].doubling:not(.stackable).row.row > .column {\\n    width: 25% !important;\\n  }\\n}\\n\\n/*-------------------\\n      Stackable\\n--------------------*/\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.stackable.grid {\\n    width: auto;\\n    margin-left: 0 !important;\\n    margin-right: 0 !important;\\n  }\\n\\n  .ui.stackable.grid > .row > .wide.column,\\n  .ui.stackable.grid > .wide.column,\\n  .ui.stackable.grid > .column.grid > .column,\\n  .ui.stackable.grid > .column.row > .column,\\n  .ui.stackable.grid > .row > .column,\\n  .ui.stackable.grid > .column:not(.row),\\n  .ui.grid > .stackable.stackable.row > .column {\\n    width: 100% !important;\\n    margin: 0 0 !important;\\n    -webkit-box-shadow: none !important;\\n            box-shadow: none !important;\\n    padding: 1rem 1rem !important;\\n  }\\n\\n  .ui.stackable.grid:not(.vertically) > .row {\\n    margin: 0;\\n    padding: 0;\\n  }\\n\\n  /* Coupling */\\n\\n  .ui.container > .ui.stackable.grid > .column,\\n  .ui.container > .ui.stackable.grid > .row > .column {\\n    padding-left: 0 !important;\\n    padding-right: 0 !important;\\n  }\\n\\n  /* Don't pad inside segment or nested grid */\\n\\n  .ui.grid .ui.stackable.grid,\\n  .ui.segment:not(.vertical) .ui.stackable.page.grid {\\n    margin-left: -1rem !important;\\n    margin-right: -1rem !important;\\n  }\\n\\n  /* Divided Stackable */\\n\\n  .ui.stackable.divided.grid > .row:first-child > .column:first-child,\\n  .ui.stackable.celled.grid > .row:first-child > .column:first-child,\\n  .ui.stackable.divided.grid > .column:not(.row):first-child,\\n  .ui.stackable.celled.grid > .column:not(.row):first-child {\\n    border-top: none !important;\\n  }\\n\\n  .ui.inverted.stackable.celled.grid > .column:not(.row),\\n  .ui.inverted.stackable.divided.grid > .column:not(.row),\\n  .ui.inverted.stackable.celled.grid > .row > .column,\\n  .ui.inverted.stackable.divided.grid > .row > .column {\\n    border-top: 1px solid rgba(255, 255, 255, 0.1);\\n  }\\n\\n  .ui.stackable.celled.grid > .column:not(.row),\\n  .ui.stackable.divided:not(.vertically).grid > .column:not(.row),\\n  .ui.stackable.celled.grid > .row > .column,\\n  .ui.stackable.divided:not(.vertically).grid > .row > .column {\\n    border-top: 1px solid rgba(34, 36, 38, 0.15);\\n    -webkit-box-shadow: none !important;\\n            box-shadow: none !important;\\n    padding-top: 2rem !important;\\n    padding-bottom: 2rem !important;\\n  }\\n\\n  .ui.stackable.celled.grid > .row {\\n    -webkit-box-shadow: none !important;\\n            box-shadow: none !important;\\n  }\\n\\n  .ui.stackable.divided:not(.vertically).grid > .column:not(.row),\\n  .ui.stackable.divided:not(.vertically).grid > .row > .column {\\n    padding-left: 0 !important;\\n    padding-right: 0 !important;\\n  }\\n}\\n\\n/*----------------------\\n     Only (Device)\\n-----------------------*/\\n\\n/* These include arbitrary class repetitions for forced specificity */\\n\\n/* Mobile Only Hide */\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui[class*=\\\"tablet only\\\"].grid.grid.grid:not(.mobile),\\n  .ui.grid.grid.grid > [class*=\\\"tablet only\\\"].row:not(.mobile),\\n  .ui.grid.grid.grid > [class*=\\\"tablet only\\\"].column:not(.mobile),\\n  .ui.grid.grid.grid > .row > [class*=\\\"tablet only\\\"].column:not(.mobile) {\\n    display: none !important;\\n  }\\n\\n  .ui[class*=\\\"computer only\\\"].grid.grid.grid:not(.mobile),\\n  .ui.grid.grid.grid > [class*=\\\"computer only\\\"].row:not(.mobile),\\n  .ui.grid.grid.grid > [class*=\\\"computer only\\\"].column:not(.mobile),\\n  .ui.grid.grid.grid > .row > [class*=\\\"computer only\\\"].column:not(.mobile) {\\n    display: none !important;\\n  }\\n\\n  .ui[class*=\\\"large screen only\\\"].grid.grid.grid:not(.mobile),\\n  .ui.grid.grid.grid > [class*=\\\"large screen only\\\"].row:not(.mobile),\\n  .ui.grid.grid.grid > [class*=\\\"large screen only\\\"].column:not(.mobile),\\n  .ui.grid.grid.grid > .row > [class*=\\\"large screen only\\\"].column:not(.mobile) {\\n    display: none !important;\\n  }\\n\\n  .ui[class*=\\\"widescreen only\\\"].grid.grid.grid:not(.mobile),\\n  .ui.grid.grid.grid > [class*=\\\"widescreen only\\\"].row:not(.mobile),\\n  .ui.grid.grid.grid > [class*=\\\"widescreen only\\\"].column:not(.mobile),\\n  .ui.grid.grid.grid > .row > [class*=\\\"widescreen only\\\"].column:not(.mobile) {\\n    display: none !important;\\n  }\\n}\\n\\n/* Tablet Only Hide */\\n\\n@media only screen and (min-width: 768px) and (max-width: 991.98px) {\\n  .ui[class*=\\\"mobile only\\\"].grid.grid.grid:not(.tablet),\\n  .ui.grid.grid.grid > [class*=\\\"mobile only\\\"].row:not(.tablet),\\n  .ui.grid.grid.grid > [class*=\\\"mobile only\\\"].column:not(.tablet),\\n  .ui.grid.grid.grid > .row > [class*=\\\"mobile only\\\"].column:not(.tablet) {\\n    display: none !important;\\n  }\\n\\n  .ui[class*=\\\"computer only\\\"].grid.grid.grid:not(.tablet),\\n  .ui.grid.grid.grid > [class*=\\\"computer only\\\"].row:not(.tablet),\\n  .ui.grid.grid.grid > [class*=\\\"computer only\\\"].column:not(.tablet),\\n  .ui.grid.grid.grid > .row > [class*=\\\"computer only\\\"].column:not(.tablet) {\\n    display: none !important;\\n  }\\n\\n  .ui[class*=\\\"large screen only\\\"].grid.grid.grid:not(.mobile),\\n  .ui.grid.grid.grid > [class*=\\\"large screen only\\\"].row:not(.mobile),\\n  .ui.grid.grid.grid > [class*=\\\"large screen only\\\"].column:not(.mobile),\\n  .ui.grid.grid.grid > .row > [class*=\\\"large screen only\\\"].column:not(.mobile) {\\n    display: none !important;\\n  }\\n\\n  .ui[class*=\\\"widescreen only\\\"].grid.grid.grid:not(.mobile),\\n  .ui.grid.grid.grid > [class*=\\\"widescreen only\\\"].row:not(.mobile),\\n  .ui.grid.grid.grid > [class*=\\\"widescreen only\\\"].column:not(.mobile),\\n  .ui.grid.grid.grid > .row > [class*=\\\"widescreen only\\\"].column:not(.mobile) {\\n    display: none !important;\\n  }\\n}\\n\\n/* Computer Only Hide */\\n\\n@media only screen and (min-width: 992px) and (max-width: 1199.98px) {\\n  .ui[class*=\\\"mobile only\\\"].grid.grid.grid:not(.computer),\\n  .ui.grid.grid.grid > [class*=\\\"mobile only\\\"].row:not(.computer),\\n  .ui.grid.grid.grid > [class*=\\\"mobile only\\\"].column:not(.computer),\\n  .ui.grid.grid.grid > .row > [class*=\\\"mobile only\\\"].column:not(.computer) {\\n    display: none !important;\\n  }\\n\\n  .ui[class*=\\\"tablet only\\\"].grid.grid.grid:not(.computer),\\n  .ui.grid.grid.grid > [class*=\\\"tablet only\\\"].row:not(.computer),\\n  .ui.grid.grid.grid > [class*=\\\"tablet only\\\"].column:not(.computer),\\n  .ui.grid.grid.grid > .row > [class*=\\\"tablet only\\\"].column:not(.computer) {\\n    display: none !important;\\n  }\\n\\n  .ui[class*=\\\"large screen only\\\"].grid.grid.grid:not(.mobile),\\n  .ui.grid.grid.grid > [class*=\\\"large screen only\\\"].row:not(.mobile),\\n  .ui.grid.grid.grid > [class*=\\\"large screen only\\\"].column:not(.mobile),\\n  .ui.grid.grid.grid > .row > [class*=\\\"large screen only\\\"].column:not(.mobile) {\\n    display: none !important;\\n  }\\n\\n  .ui[class*=\\\"widescreen only\\\"].grid.grid.grid:not(.mobile),\\n  .ui.grid.grid.grid > [class*=\\\"widescreen only\\\"].row:not(.mobile),\\n  .ui.grid.grid.grid > [class*=\\\"widescreen only\\\"].column:not(.mobile),\\n  .ui.grid.grid.grid > .row > [class*=\\\"widescreen only\\\"].column:not(.mobile) {\\n    display: none !important;\\n  }\\n}\\n\\n/* Large Screen Only Hide */\\n\\n@media only screen and (min-width: 1200px) and (max-width: 1919.98px) {\\n  .ui[class*=\\\"mobile only\\\"].grid.grid.grid:not(.computer),\\n  .ui.grid.grid.grid > [class*=\\\"mobile only\\\"].row:not(.computer),\\n  .ui.grid.grid.grid > [class*=\\\"mobile only\\\"].column:not(.computer),\\n  .ui.grid.grid.grid > .row > [class*=\\\"mobile only\\\"].column:not(.computer) {\\n    display: none !important;\\n  }\\n\\n  .ui[class*=\\\"tablet only\\\"].grid.grid.grid:not(.computer),\\n  .ui.grid.grid.grid > [class*=\\\"tablet only\\\"].row:not(.computer),\\n  .ui.grid.grid.grid > [class*=\\\"tablet only\\\"].column:not(.computer),\\n  .ui.grid.grid.grid > .row > [class*=\\\"tablet only\\\"].column:not(.computer) {\\n    display: none !important;\\n  }\\n\\n  .ui[class*=\\\"widescreen only\\\"].grid.grid.grid:not(.mobile),\\n  .ui.grid.grid.grid > [class*=\\\"widescreen only\\\"].row:not(.mobile),\\n  .ui.grid.grid.grid > [class*=\\\"widescreen only\\\"].column:not(.mobile),\\n  .ui.grid.grid.grid > .row > [class*=\\\"widescreen only\\\"].column:not(.mobile) {\\n    display: none !important;\\n  }\\n}\\n\\n/* Widescreen Only Hide */\\n\\n@media only screen and (min-width: 1920px) {\\n  .ui[class*=\\\"mobile only\\\"].grid.grid.grid:not(.computer),\\n  .ui.grid.grid.grid > [class*=\\\"mobile only\\\"].row:not(.computer),\\n  .ui.grid.grid.grid > [class*=\\\"mobile only\\\"].column:not(.computer),\\n  .ui.grid.grid.grid > .row > [class*=\\\"mobile only\\\"].column:not(.computer) {\\n    display: none !important;\\n  }\\n\\n  .ui[class*=\\\"tablet only\\\"].grid.grid.grid:not(.computer),\\n  .ui.grid.grid.grid > [class*=\\\"tablet only\\\"].row:not(.computer),\\n  .ui.grid.grid.grid > [class*=\\\"tablet only\\\"].column:not(.computer),\\n  .ui.grid.grid.grid > .row > [class*=\\\"tablet only\\\"].column:not(.computer) {\\n    display: none !important;\\n  }\\n}\\n\\n/*-----------------\\n      Compact\\n-----------------*/\\n\\n.ui.compact.grid > .column:not(.row),\\n.ui.compact.grid > .row > .column {\\n  padding-left: 0.5rem;\\n  padding-right: 0.5rem;\\n}\\n\\n.ui.compact.grid > * {\\n  padding-left: 0.5rem;\\n  padding-right: 0.5rem;\\n}\\n\\n/* Row */\\n\\n.ui.compact.grid > .row {\\n  padding-top: 0.5rem;\\n  padding-bottom: 0.5rem;\\n}\\n\\n/* Columns */\\n\\n.ui.compact.grid > .column:not(.row) {\\n  padding-top: 0.5rem;\\n  padding-bottom: 0.5rem;\\n}\\n\\n/* Relaxed + Celled */\\n\\n.ui.compact.relaxed.celled.grid > .column:not(.row),\\n.ui.compact.relaxed.celled.grid > .row > .column {\\n  padding: 0.75em;\\n}\\n\\n.ui.compact[class*=\\\"very relaxed\\\"].celled.grid > .column:not(.row),\\n.ui.compact[class*=\\\"very relaxed\\\"].celled.grid > .row > .column {\\n  padding: 1em;\\n}\\n\\n/*-----------------\\n    Very compact\\n-----------------*/\\n\\n.ui[class*=\\\"very compact\\\"].grid > .column:not(.row),\\n.ui[class*=\\\"very compact\\\"].grid > .row > .column {\\n  padding-left: 0.25rem;\\n  padding-right: 0.5rem;\\n}\\n\\n.ui[class*=\\\"very compact\\\"].grid > * {\\n  padding-left: 0.25rem;\\n  padding-right: 0.25rem;\\n}\\n\\n/* Row */\\n\\n.ui[class*=\\\"very compact\\\"].grid > .row {\\n  padding-top: 0.25rem;\\n  padding-bottom: 0.25rem;\\n}\\n\\n/* Columns */\\n\\n.ui[class*=\\\"very compact\\\"].grid > .column:not(.row) {\\n  padding-top: 0.25rem;\\n  padding-bottom: 0.25rem;\\n}\\n\\n/* Relaxed + Celled */\\n\\n.ui[class*=\\\"very compact\\\"].relaxed.celled.grid > .column:not(.row),\\n.ui[class*=\\\"very compact\\\"].relaxed.celled.grid > .row > .column {\\n  padding: 0.375em;\\n}\\n\\n.ui[class*=\\\"very compact\\\"][class*=\\\"very relaxed\\\"].celled.grid > .column:not(.row),\\n.ui[class*=\\\"very compact\\\"][class*=\\\"very relaxed\\\"].celled.grid > .row > .column {\\n  padding: 0.5em;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*\\n * # Fomantic - Menu\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Copyright 2015 Contributor\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Standard\\n*******************************/\\n\\n/*--------------\\n      Menu\\n---------------*/\\n\\n.ui.menu {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  margin: 1rem 0;\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  background: #FFFFFF;\\n  font-weight: normal;\\n  border: 1px solid rgba(34, 36, 38, 0.15);\\n  -webkit-box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15);\\n  border-radius: 0.28571429rem;\\n  min-height: 2.85714286em;\\n}\\n\\n.ui.menu:after {\\n  content: '';\\n  display: block;\\n  height: 0;\\n  clear: both;\\n  visibility: hidden;\\n}\\n\\n.ui.menu:first-child {\\n  margin-top: 0;\\n}\\n\\n.ui.menu:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/*--------------\\n    Sub-Menu\\n---------------*/\\n\\n.ui.menu .menu {\\n  margin: 0;\\n}\\n\\n.ui.menu:not(.vertical) > .menu {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n}\\n\\n/*--------------\\n      Item\\n---------------*/\\n\\n.ui.menu:not(.vertical) .item {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-align: center;\\n      -ms-flex-align: center;\\n          align-items: center;\\n}\\n\\n.ui.menu .item {\\n  position: relative;\\n  vertical-align: middle;\\n  line-height: 1;\\n  text-decoration: none;\\n  -webkit-tap-highlight-color: transparent;\\n  -webkit-box-flex: 0;\\n      -ms-flex: 0 0 auto;\\n          flex: 0 0 auto;\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n  background: none;\\n  padding: 0.92857143em 1.14285714em;\\n  text-transform: none;\\n  color: rgba(0, 0, 0, 0.87);\\n  font-weight: normal;\\n  -webkit-transition: background 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: background 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: background 0.1s ease, box-shadow 0.1s ease, color 0.1s ease;\\n  transition: background 0.1s ease, box-shadow 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\\n}\\n\\n.ui.menu > .item:first-child {\\n  border-radius: 0.28571429rem 0 0 0.28571429rem;\\n}\\n\\n/* Border */\\n\\n.ui.menu .item:before {\\n  position: absolute;\\n  content: '';\\n  top: 0;\\n  right: 0;\\n  height: 100%;\\n  width: 1px;\\n  background: rgba(34, 36, 38, 0.1);\\n}\\n\\n/*--------------\\n  Text Content\\n---------------*/\\n\\n.ui.menu .text.item > *,\\n.ui.menu .item > a:not(.ui),\\n.ui.menu .item > p:only-child {\\n  -webkit-user-select: text;\\n  -moz-user-select: text;\\n  -ms-user-select: text;\\n  user-select: text;\\n  line-height: 1.3;\\n}\\n\\n.ui.menu .item > p:first-child {\\n  margin-top: 0;\\n}\\n\\n.ui.menu .item > p:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/*--------------\\n      Icons\\n---------------*/\\n\\n.ui.menu .item > i.icon {\\n  opacity: 0.9;\\n  float: none;\\n  margin: 0 0.35714286em 0 0;\\n}\\n\\n/*--------------\\n     Button\\n---------------*/\\n\\n.ui.menu:not(.vertical) .item > .button {\\n  position: relative;\\n  top: 0;\\n  margin: -0.5em 0;\\n  padding-bottom: 0.78571429em;\\n  padding-top: 0.78571429em;\\n  font-size: 1em;\\n}\\n\\n/*----------------\\n Grid / Container\\n-----------------*/\\n\\n.ui.menu > .grid,\\n.ui.menu > .container {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-align: inherit;\\n      -ms-flex-align: inherit;\\n          align-items: inherit;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: inherit;\\n          flex-direction: inherit;\\n}\\n\\n/*--------------\\n     Inputs\\n---------------*/\\n\\n.ui.menu .item > .input {\\n  width: 100%;\\n}\\n\\n.ui.menu:not(.vertical) .item > .input {\\n  position: relative;\\n  top: 0;\\n  margin: -0.5em 0;\\n}\\n\\n.ui.menu .item > .input input {\\n  font-size: 1em;\\n  padding-top: 0.57142857em;\\n  padding-bottom: 0.57142857em;\\n}\\n\\n/*--------------\\n     Header\\n---------------*/\\n\\n.ui.menu .header.item,\\n.ui.vertical.menu .header.item {\\n  margin: 0;\\n  background: '';\\n  text-transform: normal;\\n  font-weight: bold;\\n}\\n\\n.ui.vertical.menu .item > .header:not(.ui) {\\n  margin: 0 0 0.5em;\\n  font-size: 1em;\\n  font-weight: bold;\\n}\\n\\n/*--------------\\n    Dropdowns\\n---------------*/\\n\\n/* Dropdown Icon */\\n\\n.ui.menu .item > i.dropdown.icon {\\n  padding: 0;\\n  float: right;\\n  margin: 0 0 0 1em;\\n}\\n\\n/* Menu */\\n\\n.ui.menu .dropdown.item .menu {\\n  min-width: calc(100% - 1px);\\n  border-radius: 0 0 0.28571429rem 0.28571429rem;\\n  background: #FFFFFF;\\n  margin: 0 0 0;\\n  -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.08);\\n          box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.08);\\n  -webkit-box-orient: vertical !important;\\n  -webkit-box-direction: normal !important;\\n      -ms-flex-direction: column !important;\\n          flex-direction: column !important;\\n}\\n\\n/* Menu Items */\\n\\n.ui.menu .ui.dropdown .menu > .item {\\n  margin: 0;\\n  text-align: left;\\n  font-size: 1em !important;\\n  padding: 0.78571429em 1.14285714em !important;\\n  background: transparent !important;\\n  color: rgba(0, 0, 0, 0.87) !important;\\n  text-transform: none !important;\\n  font-weight: normal !important;\\n  -webkit-box-shadow: none !important;\\n          box-shadow: none !important;\\n  -webkit-transition: none !important;\\n  transition: none !important;\\n}\\n\\n.ui.menu .ui.dropdown .menu > .item:hover {\\n  background: rgba(0, 0, 0, 0.05) !important;\\n  color: rgba(0, 0, 0, 0.95) !important;\\n}\\n\\n.ui.menu .ui.dropdown .menu > .selected.item {\\n  background: rgba(0, 0, 0, 0.05) !important;\\n  color: rgba(0, 0, 0, 0.95) !important;\\n}\\n\\n.ui.menu .ui.dropdown .menu > .active.item {\\n  background: rgba(0, 0, 0, 0.03) !important;\\n  font-weight: bold !important;\\n  color: rgba(0, 0, 0, 0.95) !important;\\n}\\n\\n.ui.menu .ui.dropdown.item .menu .item:not(.filtered) {\\n  display: block;\\n}\\n\\n.ui.menu .ui.dropdown .menu > .item .icon:not(.dropdown) {\\n  display: inline-block;\\n  font-size: 1em !important;\\n  float: none;\\n  margin: 0 0.75em 0 0 !important;\\n}\\n\\n/* Secondary */\\n\\n.ui.secondary.menu .dropdown.item > .menu,\\n.ui.text.menu .dropdown.item > .menu {\\n  border-radius: 0.28571429rem;\\n  margin-top: 0.35714286em;\\n}\\n\\n/* Pointing */\\n\\n.ui.menu .pointing.dropdown.item .menu {\\n  margin-top: 0.75em;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.menu .search.dropdown.item > .search,\\n.ui.inverted.menu .search.dropdown.item > .text {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n/* Vertical */\\n\\n.ui.vertical.menu .dropdown.item > .icon {\\n  float: right;\\n  content: \\\"\\\\f0da\\\";\\n  margin-left: 1em;\\n}\\n\\n.ui.vertical.menu .dropdown.item .menu {\\n  left: 100%;\\n  /* IE needs 0, all others support max-content to show dropdown icon inline, so keep both settings! */\\n  min-width: 0;\\n  min-width: -webkit-max-content;\\n  min-width: -moz-max-content;\\n  min-width: max-content;\\n  margin: 0 0 0 0;\\n  -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.08);\\n          box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.08);\\n  border-radius: 0 0.28571429rem 0.28571429rem 0.28571429rem;\\n}\\n\\n.ui.vertical.menu .dropdown.item.upward .menu {\\n  bottom: 0;\\n}\\n\\n.ui.vertical.menu .dropdown.item:not(.upward) .menu {\\n  top: 0;\\n}\\n\\n.ui.vertical.menu .active.dropdown.item {\\n  border-top-right-radius: 0;\\n  border-bottom-right-radius: 0;\\n}\\n\\n.ui.vertical.menu .dropdown.active.item {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/* Evenly Divided */\\n\\n.ui.item.menu .dropdown .menu .item {\\n  width: 100%;\\n}\\n\\n/*--------------\\n     Labels\\n---------------*/\\n\\n.ui.menu .item > .label:not(.floating) {\\n  margin-left: 1em;\\n  padding: 0.3em 0.78571429em;\\n}\\n\\n.ui.vertical.menu .item > .label {\\n  margin-top: -0.15em;\\n  margin-bottom: -0.15em;\\n  padding: 0.3em 0.78571429em;\\n}\\n\\n.ui.menu .item > .floating.label {\\n  padding: 0.3em 0.78571429em;\\n}\\n\\n.ui.menu .item > .label {\\n  background: #999999;\\n  color: #FFFFFF;\\n}\\n\\n.ui.menu .item > .image.label img {\\n  margin: -0.2833em 0.8em -0.2833em -0.8em;\\n  height: 1.5666em;\\n}\\n\\n/*--------------\\n     Images\\n---------------*/\\n\\n.ui.menu .item > img:not(.ui) {\\n  display: inline-block;\\n  vertical-align: middle;\\n  margin: -0.3em 0;\\n  width: 2.5em;\\n}\\n\\n.ui.vertical.menu .item > img:not(.ui):only-child {\\n  display: block;\\n  max-width: 100%;\\n  width: auto;\\n}\\n\\n/*******************************\\n          Coupling\\n*******************************/\\n\\n/*--------------\\n     List\\n---------------*/\\n\\n/* Menu divider shouldnt apply */\\n\\n.ui.menu .list .item:before {\\n  background: none !important;\\n}\\n\\n/*--------------\\n     Sidebar\\n---------------*/\\n\\n/* Show vertical dividers below last */\\n\\n.ui.vertical.sidebar.menu > .item:first-child:before {\\n  display: block !important;\\n}\\n\\n.ui.vertical.sidebar.menu > .item::before {\\n  top: auto;\\n  bottom: 0;\\n}\\n\\n/*--------------\\n    Container\\n---------------*/\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.menu > .ui.container {\\n    width: 100% !important;\\n    margin-left: 0 !important;\\n    margin-right: 0 !important;\\n  }\\n}\\n\\n@media only screen and (min-width: 768px) {\\n  .ui.menu:not(.secondary):not(.text):not(.tabular):not(.borderless) > .container > .item:not(.right):not(.borderless):first-child {\\n    border-left: 1px solid rgba(34, 36, 38, 0.1);\\n  }\\n\\n  .ui.menu:not(.secondary):not(.text):not(.tabular):not(.borderless) > .container > .right.item:not(.borderless):last-child,\\n  .ui.menu:not(.secondary):not(.text):not(.tabular):not(.borderless) > .container > .right.menu > .item:not(.borderless):last-child {\\n    border-right: 1px solid rgba(34, 36, 38, 0.1);\\n  }\\n}\\n\\n/*******************************\\n             States\\n*******************************/\\n\\n/*--------------\\n      Hover\\n---------------*/\\n\\n.ui.link.menu .item:hover,\\n.ui.menu .dropdown.item:hover,\\n.ui.menu .link.item:hover,\\n.ui.menu a.item:hover {\\n  cursor: pointer;\\n  background: rgba(0, 0, 0, 0.03);\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/*--------------\\n     Pressed\\n---------------*/\\n\\n.ui.link.menu .item:active,\\n.ui.menu .link.item:active,\\n.ui.menu a.item:active {\\n  background: rgba(0, 0, 0, 0.03);\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/*--------------\\n     Active\\n---------------*/\\n\\n.ui.menu .active.item {\\n  background: rgba(0, 0, 0, 0.05);\\n  color: rgba(0, 0, 0, 0.95);\\n  font-weight: normal;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.menu .active.item > i.icon {\\n  opacity: 1;\\n}\\n\\n/*--------------\\n  Active Hover\\n---------------*/\\n\\n.ui.menu .active.item:hover,\\n.ui.vertical.menu .active.item:hover {\\n  background-color: rgba(0, 0, 0, 0.05);\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/*--------------\\n     Disabled\\n---------------*/\\n\\n.ui.ui.menu .item.disabled {\\n  cursor: default;\\n  background-color: transparent;\\n  color: rgba(40, 40, 40, 0.3);\\n  pointer-events: none;\\n}\\n\\n/*******************************\\n             Types\\n*******************************/\\n\\n/*------------------\\nFloated Menu / Item\\n-------------------*/\\n\\n/* Left Floated */\\n\\n.ui.menu:not(.vertical) .left.item,\\n.ui.menu:not(.vertical) .left.menu {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  margin-right: auto !important;\\n}\\n\\n/* Right Floated */\\n\\n.ui.menu:not(.vertical) .right.item,\\n.ui.menu:not(.vertical) .right.menu {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  margin-left: auto !important;\\n}\\n\\n.ui.menu:not(.vertical) :not(.dropdown) > .left.menu,\\n.ui.menu:not(.vertical) :not(.dropdown) > .right.menu {\\n  display: inherit;\\n}\\n\\n/* Center */\\n\\n.ui.menu:not(.vertical) .center.item,\\n.ui.menu:not(.vertical) .center.menu {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  margin-left: auto !important;\\n  margin-right: auto !important;\\n}\\n\\n/* Swapped Borders */\\n\\n.ui.menu .right.item::before,\\n.ui.menu .right.menu > .item::before {\\n  right: auto;\\n  left: 0;\\n}\\n\\n/* Remove Outer Borders */\\n\\n.ui.menu .center.item:last-child::before,\\n.ui.menu .center.menu > .item:last-child::before {\\n  display: none;\\n}\\n\\n/*--------------\\n    Vertical\\n---------------*/\\n\\n.ui.vertical.menu {\\n  display: block;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  background: #FFFFFF;\\n  -webkit-box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n/*--- Item ---*/\\n\\n.ui.vertical.menu .item {\\n  display: block;\\n  background: none;\\n  border-top: none;\\n  border-right: none;\\n}\\n\\n.ui.vertical.menu > .item:first-child {\\n  border-radius: 0.28571429rem 0.28571429rem 0 0;\\n}\\n\\n.ui.vertical.menu > .item:last-child {\\n  border-radius: 0 0 0.28571429rem 0.28571429rem;\\n}\\n\\n/*--- Label ---*/\\n\\n.ui.vertical.menu .item > .label {\\n  float: right;\\n  text-align: center;\\n}\\n\\n/*--- Icon ---*/\\n\\n.ui.vertical.menu .item > i.icon,\\n.ui.vertical.menu .item > i.icons {\\n  width: 1.18em;\\n  float: right;\\n  margin: 0 0 0 0.5em;\\n}\\n\\n.ui.vertical.menu .item > .label + i.icon {\\n  float: none;\\n  margin: 0 0.5em 0 0;\\n}\\n\\n/*--- Border ---*/\\n\\n.ui.vertical.menu .item:before {\\n  position: absolute;\\n  content: '';\\n  top: 0;\\n  left: 0;\\n  width: 100%;\\n  height: 1px;\\n  background: rgba(34, 36, 38, 0.1);\\n}\\n\\n.ui.vertical.menu .item:first-child:before {\\n  display: none !important;\\n}\\n\\n/*--- Sub Menu ---*/\\n\\n.ui.vertical.menu .item > .menu {\\n  margin: 0.5em -1.14285714em 0;\\n}\\n\\n.ui.vertical.menu .menu .item {\\n  background: none;\\n  padding: 0.5em 1.33333333em;\\n  font-size: 0.85714286em;\\n  color: rgba(0, 0, 0, 0.5);\\n}\\n\\n.ui.vertical.menu .item .menu a.item:hover,\\n.ui.vertical.menu .item .menu .link.item:hover {\\n  color: rgba(0, 0, 0, 0.85);\\n}\\n\\n.ui.vertical.menu .menu .item:before {\\n  display: none;\\n}\\n\\n/* Vertical Active */\\n\\n.ui.vertical.menu .active.item {\\n  background: rgba(0, 0, 0, 0.05);\\n  border-radius: 0;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.vertical.menu > .active.item:first-child {\\n  border-radius: 0.28571429rem 0.28571429rem 0 0;\\n}\\n\\n.ui.vertical.menu > .active.item:last-child {\\n  border-radius: 0 0 0.28571429rem 0.28571429rem;\\n}\\n\\n.ui.vertical.menu > .active.item:only-child {\\n  border-radius: 0.28571429rem;\\n}\\n\\n.ui.vertical.menu .active.item .menu .active.item {\\n  border-left: none;\\n}\\n\\n.ui.vertical.menu .item .menu .active.item {\\n  background-color: transparent;\\n  font-weight: bold;\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/*--------------\\n     Tabular\\n---------------*/\\n\\n.ui.tabular.menu {\\n  border-radius: 0;\\n  -webkit-box-shadow: none !important;\\n          box-shadow: none !important;\\n  border: none;\\n  background: none transparent;\\n  border-bottom: 1px solid #D4D4D5;\\n}\\n\\n.ui.tabular.fluid.menu {\\n  width: calc(100% + 2px) !important;\\n}\\n\\n.ui.tabular.menu .item {\\n  background: transparent;\\n  border-bottom: none;\\n  border-left: 1px solid transparent;\\n  border-right: 1px solid transparent;\\n  border-top: 2px solid transparent;\\n  padding: 0.92857143em 1.42857143em;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.tabular.menu .item:before {\\n  display: none;\\n}\\n\\n/* Hover */\\n\\n.ui.tabular.menu .item:hover {\\n  background-color: transparent;\\n  color: rgba(0, 0, 0, 0.8);\\n}\\n\\n/* Active */\\n\\n.ui.tabular.menu .active.item {\\n  background: none #FFFFFF;\\n  color: rgba(0, 0, 0, 0.95);\\n  border-top-width: 1px;\\n  border-color: #D4D4D5;\\n  font-weight: bold;\\n  margin-bottom: -1px;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  border-radius: 0.28571429rem 0.28571429rem 0 0 !important;\\n}\\n\\n/* Coupling with segment for attachment */\\n\\n.ui.tabular.menu + .attached:not(.top).segment,\\n.ui.tabular.menu + .attached:not(.top).segment + .attached:not(.top).segment {\\n  border-top: none;\\n  margin-left: 0;\\n  margin-top: 0;\\n  margin-right: 0;\\n  width: 100%;\\n}\\n\\n.top.attached.segment + .ui.bottom.tabular.menu {\\n  position: relative;\\n  width: calc(100% + 2px);\\n  left: -1px;\\n}\\n\\n/* Bottom Vertical Tabular */\\n\\n.ui.bottom.tabular.menu {\\n  background: none transparent;\\n  border-radius: 0;\\n  -webkit-box-shadow: none !important;\\n          box-shadow: none !important;\\n  border-bottom: none;\\n  border-top: 1px solid #D4D4D5;\\n}\\n\\n.ui.bottom.tabular.menu .item {\\n  background: none;\\n  border-left: 1px solid transparent;\\n  border-right: 1px solid transparent;\\n  border-bottom: 1px solid transparent;\\n  border-top: none;\\n}\\n\\n.ui.bottom.tabular.menu .active.item {\\n  background: none #FFFFFF;\\n  color: rgba(0, 0, 0, 0.95);\\n  border-color: #D4D4D5;\\n  margin: -1px 0 0 0;\\n  border-radius: 0 0 0.28571429rem 0.28571429rem !important;\\n}\\n\\n/* Vertical Tabular (Left) */\\n\\n.ui.vertical.tabular.menu {\\n  background: none transparent;\\n  border-radius: 0;\\n  -webkit-box-shadow: none !important;\\n          box-shadow: none !important;\\n  border-bottom: none;\\n  border-right: 1px solid #D4D4D5;\\n}\\n\\n.ui.vertical.tabular.menu .item {\\n  background: none;\\n  border-left: 1px solid transparent;\\n  border-bottom: 1px solid transparent;\\n  border-top: 1px solid transparent;\\n  border-right: none;\\n}\\n\\n.ui.vertical.tabular.menu .active.item {\\n  background: none #FFFFFF;\\n  color: rgba(0, 0, 0, 0.95);\\n  border-color: #D4D4D5;\\n  margin: 0 -1px 0 0;\\n  border-radius: 0.28571429rem 0 0 0.28571429rem !important;\\n}\\n\\n/* Vertical Right Tabular */\\n\\n.ui.vertical.right.tabular.menu {\\n  background: none transparent;\\n  border-radius: 0;\\n  -webkit-box-shadow: none !important;\\n          box-shadow: none !important;\\n  border-bottom: none;\\n  border-right: none;\\n  border-left: 1px solid #D4D4D5;\\n}\\n\\n.ui.vertical.right.tabular.menu .item {\\n  background: none;\\n  border-right: 1px solid transparent;\\n  border-bottom: 1px solid transparent;\\n  border-top: 1px solid transparent;\\n  border-left: none;\\n}\\n\\n.ui.vertical.right.tabular.menu .active.item {\\n  background: none #FFFFFF;\\n  color: rgba(0, 0, 0, 0.95);\\n  border-color: #D4D4D5;\\n  margin: 0 0 0 -1px;\\n  border-radius: 0 0.28571429rem 0.28571429rem 0 !important;\\n}\\n\\n/* Dropdown */\\n\\n.ui.tabular.menu .active.dropdown.item {\\n  margin-bottom: 0;\\n  border-left: 1px solid transparent;\\n  border-right: 1px solid transparent;\\n  border-top: 2px solid transparent;\\n  border-bottom: none;\\n}\\n\\n/*--------------\\n   Pagination\\n---------------*/\\n\\n.ui.pagination.menu {\\n  margin: 0;\\n  display: -webkit-inline-box;\\n  display: -ms-inline-flexbox;\\n  display: inline-flex;\\n  vertical-align: middle;\\n}\\n\\n.ui.pagination.menu .item:last-child {\\n  border-radius: 0 0.28571429rem 0.28571429rem 0;\\n}\\n\\n.ui.compact.menu .item:last-child {\\n  border-radius: 0 0.28571429rem 0.28571429rem 0;\\n}\\n\\n.ui.pagination.menu .item:last-child:before {\\n  display: none;\\n}\\n\\n.ui.pagination.menu .item {\\n  min-width: 3em;\\n  text-align: center;\\n}\\n\\n.ui.pagination.menu .icon.item i.icon {\\n  vertical-align: top;\\n}\\n\\n/* Active */\\n\\n.ui.pagination.menu .active.item {\\n  border-top: none;\\n  padding-top: 0.92857143em;\\n  background-color: rgba(0, 0, 0, 0.05);\\n  color: rgba(0, 0, 0, 0.95);\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/*--------------\\n   Secondary\\n---------------*/\\n\\n.ui.secondary.menu {\\n  background: none;\\n  margin-left: -0.35714286em;\\n  margin-right: -0.35714286em;\\n  border-radius: 0;\\n  border: none;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/* Item */\\n\\n.ui.secondary.menu .item {\\n  -ms-flex-item-align: center;\\n      align-self: center;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  border: none;\\n  padding: 0.78571429em 0.92857143em;\\n  margin: 0 0.35714286em;\\n  background: none;\\n  -webkit-transition: color 0.1s ease;\\n  transition: color 0.1s ease;\\n  border-radius: 0.28571429rem;\\n}\\n\\n/* No Divider */\\n\\n.ui.secondary.menu .item:before {\\n  display: none !important;\\n}\\n\\n/* Header */\\n\\n.ui.secondary.menu .header.item {\\n  border-radius: 0;\\n  border-right: none;\\n  background: none transparent;\\n}\\n\\n/* Image */\\n\\n.ui.secondary.menu .item > img:not(.ui) {\\n  margin: 0;\\n}\\n\\n/* Hover */\\n\\n.ui.secondary.menu .dropdown.item:hover,\\n.ui.secondary.menu .link.item:hover,\\n.ui.secondary.menu a.item:hover {\\n  background: rgba(0, 0, 0, 0.05);\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/* Active */\\n\\n.ui.secondary.menu .active.item {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  background: rgba(0, 0, 0, 0.05);\\n  color: rgba(0, 0, 0, 0.95);\\n  border-radius: 0.28571429rem;\\n}\\n\\n/* Active Hover */\\n\\n.ui.secondary.menu .active.item:hover {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  background: rgba(0, 0, 0, 0.05);\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/* Inverted */\\n\\n.ui.secondary.inverted.menu .link.item:not(.disabled),\\n.ui.secondary.inverted.menu a.item:not(.disabled) {\\n  color: rgba(255, 255, 255, 0.7);\\n}\\n\\n.ui.secondary.inverted.menu .dropdown.item:hover,\\n.ui.secondary.inverted.menu .link.item:hover,\\n.ui.secondary.inverted.menu a.item:hover {\\n  background: rgba(255, 255, 255, 0.08);\\n  color: #ffffff;\\n}\\n\\n.ui.secondary.inverted.menu .active.item {\\n  background: rgba(255, 255, 255, 0.15);\\n  color: #ffffff;\\n}\\n\\n/* Fix item margins */\\n\\n.ui.secondary.item.menu {\\n  margin-left: 0;\\n  margin-right: 0;\\n}\\n\\n.ui.secondary.item.menu .item:last-child {\\n  margin-right: 0;\\n}\\n\\n.ui.secondary.attached.menu {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/* Sub Menu */\\n\\n.ui.vertical.secondary.menu .item:not(.dropdown) > .menu {\\n  margin: 0 -0.92857143em;\\n}\\n\\n.ui.vertical.secondary.menu .item:not(.dropdown) > .menu > .item {\\n  margin: 0;\\n  padding: 0.5em 1.33333333em;\\n}\\n\\n/*---------------------\\n   Secondary Vertical\\n-----------------------*/\\n\\n.ui.secondary.vertical.menu > .item {\\n  border: none;\\n  margin: 0 0 0.35714286em;\\n  border-radius: 0.28571429rem !important;\\n}\\n\\n.ui.secondary.vertical.menu > .header.item {\\n  border-radius: 0;\\n}\\n\\n/* Sub Menu */\\n\\n.ui.vertical.secondary.menu .item > .menu .item {\\n  background-color: transparent;\\n}\\n\\n/* Inverted */\\n\\n.ui.secondary.inverted.menu {\\n  background-color: transparent;\\n}\\n\\n/*---------------------\\n   Secondary Pointing\\n-----------------------*/\\n\\n.ui.secondary.pointing.menu {\\n  margin-left: 0;\\n  margin-right: 0;\\n  border-bottom: 2px solid rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.secondary.pointing.menu .item {\\n  border-bottom-color: transparent;\\n  border-bottom-style: solid;\\n  border-radius: 0;\\n  -ms-flex-item-align: end;\\n      align-self: flex-end;\\n  margin: 0 0 -2px;\\n  padding: 0.85714286em 1.14285714em;\\n  border-bottom-width: 2px;\\n  -webkit-transition: color 0.1s ease;\\n  transition: color 0.1s ease;\\n}\\n\\n.ui.secondary.pointing.menu .ui.dropdown .menu .item {\\n  border-bottom-width: 0;\\n}\\n\\n.ui.secondary.pointing.menu .item > .label:not(.floating) {\\n  margin-top: -0.3em;\\n  margin-bottom: -0.3em;\\n}\\n\\n.ui.secondary.pointing.menu .item > .circular.label {\\n  margin-top: -0.5em;\\n  margin-bottom: -0.5em;\\n}\\n\\n/* Item Types */\\n\\n.ui.secondary.pointing.menu .header.item {\\n  color: rgba(0, 0, 0, 0.85) !important;\\n}\\n\\n.ui.secondary.pointing.menu .text.item {\\n  -webkit-box-shadow: none !important;\\n          box-shadow: none !important;\\n}\\n\\n.ui.secondary.pointing.menu .item:after {\\n  display: none;\\n}\\n\\n/* Hover */\\n\\n.ui.secondary.pointing.menu .dropdown.item:hover,\\n.ui.secondary.pointing.menu .link.item:hover,\\n.ui.secondary.pointing.menu a.item:hover {\\n  background-color: transparent;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n/* Pressed */\\n\\n.ui.secondary.pointing.menu .dropdown.item:active,\\n.ui.secondary.pointing.menu .link.item:active,\\n.ui.secondary.pointing.menu a.item:active {\\n  background-color: transparent;\\n  border-color: rgba(34, 36, 38, 0.15);\\n}\\n\\n/* Active */\\n\\n.ui.secondary.pointing.menu .active.item {\\n  background-color: transparent;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  border-color: currentColor;\\n  font-weight: bold;\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/* Active Hover */\\n\\n.ui.secondary.pointing.menu .active.item:hover {\\n  border-color: currentColor;\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/* Active Dropdown */\\n\\n.ui.secondary.pointing.menu .active.dropdown.item {\\n  border-color: transparent;\\n}\\n\\n/* Vertical Pointing */\\n\\n.ui.secondary.vertical.pointing.menu {\\n  border-bottom-width: 0;\\n  border-right-width: 2px;\\n  border-right-style: solid;\\n  border-right-color: rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.secondary.vertical.pointing.menu .item {\\n  border-bottom: none;\\n  border-right-style: solid;\\n  border-right-color: transparent;\\n  border-radius: 0 !important;\\n  margin: 0 -2px 0 0;\\n  border-right-width: 2px;\\n}\\n\\n/* Vertical Active */\\n\\n.ui.secondary.vertical.pointing.menu .active.item {\\n  border-color: currentColor;\\n}\\n\\n/* Inverted */\\n\\n.ui.secondary.inverted.pointing.menu {\\n  border-color: rgba(255, 255, 255, 0.1);\\n}\\n\\n.ui.secondary.inverted.pointing.menu .item:not(.disabled) {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.secondary.inverted.pointing.menu .header.item {\\n  color: #FFFFFF !important;\\n}\\n\\n/* Hover */\\n\\n.ui.secondary.inverted.pointing.menu .link.item:hover,\\n.ui.secondary.inverted.pointing.menu a.item:hover {\\n  color: #ffffff;\\n}\\n\\n/* Active */\\n\\n.ui.ui.secondary.inverted.pointing.menu .active.item {\\n  border-color: #FFFFFF;\\n  color: #ffffff;\\n  background-color: transparent;\\n}\\n\\n/*--------------\\n    Text Menu\\n---------------*/\\n\\n.ui.text.menu {\\n  background: none transparent;\\n  border-radius: 0;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  border: none;\\n  margin: 1em -0.5em;\\n}\\n\\n.ui.text.menu .item {\\n  border-radius: 0;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  -ms-flex-item-align: center;\\n      align-self: center;\\n  margin: 0 0;\\n  padding: 0.35714286em 0.5em;\\n  font-weight: normal;\\n  color: rgba(0, 0, 0, 0.6);\\n  -webkit-transition: opacity 0.1s ease;\\n  transition: opacity 0.1s ease;\\n}\\n\\n/* Border */\\n\\n.ui.text.menu .item:before,\\n.ui.text.menu .menu .item:before {\\n  display: none !important;\\n}\\n\\n/* Header */\\n\\n.ui.text.menu .header.item {\\n  background-color: transparent;\\n  opacity: 1;\\n  color: rgba(0, 0, 0, 0.85);\\n  font-size: 0.92857143em;\\n  text-transform: uppercase;\\n  font-weight: bold;\\n}\\n\\n/* Image */\\n\\n.ui.text.menu .item > img:not(.ui) {\\n  margin: 0;\\n}\\n\\n/*--- fluid text ---*/\\n\\n.ui.text.item.menu .item {\\n  margin: 0;\\n}\\n\\n/*--- vertical text ---*/\\n\\n.ui.vertical.text.menu {\\n  margin: 1em 0;\\n}\\n\\n.ui.vertical.text.menu:first-child {\\n  margin-top: 0;\\n}\\n\\n.ui.vertical.text.menu:last-child {\\n  margin-bottom: 0;\\n}\\n\\n.ui.vertical.text.menu .item {\\n  margin: 0.57142857em 0;\\n  padding-left: 0;\\n  padding-right: 0;\\n}\\n\\n.ui.vertical.text.menu .item > i.icon {\\n  float: none;\\n  margin: 0 0.35714286em 0 0;\\n}\\n\\n.ui.vertical.text.menu .header.item {\\n  margin: 0.57142857em 0 0.71428571em;\\n}\\n\\n/* Vertical Sub Menu */\\n\\n.ui.vertical.text.menu .item:not(.dropdown) > .menu {\\n  margin: 0;\\n}\\n\\n.ui.vertical.text.menu .item:not(.dropdown) > .menu > .item {\\n  margin: 0;\\n  padding: 0.5em 0;\\n}\\n\\n/*--- hover ---*/\\n\\n.ui.text.menu .item:hover {\\n  opacity: 1;\\n  background-color: transparent;\\n}\\n\\n/*--- active ---*/\\n\\n.ui.text.menu .active.item {\\n  background-color: transparent;\\n  border: none;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  font-weight: normal;\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/*--- active hover ---*/\\n\\n.ui.text.menu .active.item:hover {\\n  background-color: transparent;\\n}\\n\\n/* Disable Bariations */\\n\\n.ui.text.pointing.menu .active.item:after {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.text.attached.menu {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.text.menu,\\n.ui.inverted.text.menu .item,\\n.ui.inverted.text.menu .item:hover,\\n.ui.inverted.text.menu .active.item {\\n  background-color: transparent;\\n}\\n\\n/* Fluid */\\n\\n.ui.fluid.text.menu {\\n  margin-left: 0;\\n  margin-right: 0;\\n}\\n\\n/*--------------\\n    Icon Only\\n---------------*/\\n\\n/* Vertical Menu */\\n\\n.ui.vertical.icon.menu {\\n  display: inline-block;\\n  width: auto;\\n}\\n\\n/* Item */\\n\\n.ui.icon.menu .item {\\n  height: auto;\\n  text-align: center;\\n  color: #1B1C1D;\\n}\\n\\n/* Icon */\\n\\n.ui.icon.menu .item > .icon:not(.dropdown) {\\n  margin: 0;\\n  opacity: 1;\\n}\\n\\n/* Icon Gylph */\\n\\n.ui.icon.menu .icon:before {\\n  opacity: 1;\\n}\\n\\n/* (x) Item Icon */\\n\\n.ui.menu .icon.item > .icon {\\n  width: auto;\\n  margin: 0 auto;\\n}\\n\\n/* Vertical Icon */\\n\\n.ui.vertical.icon.menu .item > .icon:not(.dropdown) {\\n  display: block;\\n  opacity: 1;\\n  margin: 0 auto;\\n  float: none;\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.icon.menu .item {\\n  color: #FFFFFF;\\n}\\n\\n/*--------------\\n   Labeled Icon\\n---------------*/\\n\\n/* Menu */\\n\\n.ui.labeled.icon.menu {\\n  text-align: center;\\n}\\n\\n/* Item */\\n\\n.ui.labeled.icon.menu .item {\\n  min-width: 6em;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n}\\n\\n/* Icon */\\n\\n.ui.labeled.icon.menu > .item > .icon:not(.dropdown) {\\n  height: 1em;\\n  display: block;\\n  font-size: 1.71428571em !important;\\n  margin: 0 auto 0.5rem !important;\\n}\\n\\n/* Fluid */\\n\\n.ui.fluid.labeled.icon.menu > .item {\\n  min-width: 0;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*--------------\\n    Stackable\\n---------------*/\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.stackable.menu {\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: column;\\n            flex-direction: column;\\n  }\\n\\n  .ui.stackable.menu .item {\\n    width: 100% !important;\\n  }\\n\\n  .ui.stackable.menu .item:before {\\n    position: absolute;\\n    content: '';\\n    top: auto;\\n    bottom: 0;\\n    left: 0;\\n    width: 100%;\\n    height: 1px;\\n    background: rgba(34, 36, 38, 0.1);\\n  }\\n\\n  .ui.stackable.menu .left.menu,\\n  .ui.stackable.menu .left.item {\\n    margin-right: 0 !important;\\n  }\\n\\n  .ui.stackable.menu .right.menu,\\n  .ui.stackable.menu .right.item {\\n    margin-left: 0 !important;\\n  }\\n\\n  .ui.stackable.menu .center.menu,\\n  .ui.stackable.menu .center.item {\\n    margin-left: 0 !important;\\n    margin-right: 0 !important;\\n  }\\n\\n  .ui.stackable.menu .right.menu,\\n  .ui.stackable.menu .center.menu,\\n  .ui.stackable.menu .left.menu {\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: column;\\n            flex-direction: column;\\n  }\\n}\\n\\n/*--------------\\n     Colors\\n---------------*/\\n\\n.ui.ui.menu .primary.active.item,\\n.ui.ui.primary.menu .active.item:hover,\\n.ui.ui.primary.menu .active.item {\\n  color: #2185D0;\\n}\\n\\n.ui.ui.menu .red.active.item,\\n.ui.ui.red.menu .active.item:hover,\\n.ui.ui.red.menu .active.item {\\n  color: #DB2828;\\n}\\n\\n.ui.ui.menu .orange.active.item,\\n.ui.ui.orange.menu .active.item:hover,\\n.ui.ui.orange.menu .active.item {\\n  color: #F2711C;\\n}\\n\\n.ui.ui.menu .yellow.active.item,\\n.ui.ui.yellow.menu .active.item:hover,\\n.ui.ui.yellow.menu .active.item {\\n  color: #FBBD08;\\n}\\n\\n.ui.ui.menu .olive.active.item,\\n.ui.ui.olive.menu .active.item:hover,\\n.ui.ui.olive.menu .active.item {\\n  color: #B5CC18;\\n}\\n\\n.ui.ui.menu .green.active.item,\\n.ui.ui.green.menu .active.item:hover,\\n.ui.ui.green.menu .active.item {\\n  color: #21BA45;\\n}\\n\\n.ui.ui.menu .teal.active.item,\\n.ui.ui.teal.menu .active.item:hover,\\n.ui.ui.teal.menu .active.item {\\n  color: #00B5AD;\\n}\\n\\n.ui.ui.menu .blue.active.item,\\n.ui.ui.blue.menu .active.item:hover,\\n.ui.ui.blue.menu .active.item {\\n  color: #2185D0;\\n}\\n\\n.ui.ui.menu .violet.active.item,\\n.ui.ui.violet.menu .active.item:hover,\\n.ui.ui.violet.menu .active.item {\\n  color: #6435C9;\\n}\\n\\n.ui.ui.menu .purple.active.item,\\n.ui.ui.purple.menu .active.item:hover,\\n.ui.ui.purple.menu .active.item {\\n  color: #A333C8;\\n}\\n\\n.ui.ui.menu .pink.active.item,\\n.ui.ui.pink.menu .active.item:hover,\\n.ui.ui.pink.menu .active.item {\\n  color: #E03997;\\n}\\n\\n.ui.ui.menu .brown.active.item,\\n.ui.ui.brown.menu .active.item:hover,\\n.ui.ui.brown.menu .active.item {\\n  color: #A5673F;\\n}\\n\\n.ui.ui.menu .grey.active.item,\\n.ui.ui.grey.menu .active.item:hover,\\n.ui.ui.grey.menu .active.item {\\n  color: #767676;\\n}\\n\\n.ui.ui.menu .black.active.item,\\n.ui.ui.black.menu .active.item:hover,\\n.ui.ui.black.menu .active.item {\\n  color: #1B1C1D;\\n}\\n\\n/*--------------\\n    Inverted\\n---------------*/\\n\\n.ui.inverted.menu {\\n  border: 0 solid transparent;\\n  background: #1B1C1D;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/* Menu Item */\\n\\n.ui.inverted.menu .item,\\n.ui.inverted.menu .item > a:not(.ui) {\\n  background: transparent;\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.inverted.menu .item.menu {\\n  background: transparent;\\n}\\n\\n/*--- Border ---*/\\n\\n.ui.inverted.menu .item:before {\\n  background: rgba(255, 255, 255, 0.08);\\n}\\n\\n.ui.vertical.inverted.menu .item:before {\\n  background: rgba(255, 255, 255, 0.08);\\n}\\n\\n/* Sub Menu */\\n\\n.ui.vertical.inverted.menu .menu .item,\\n.ui.vertical.inverted.menu .menu .item a:not(.ui) {\\n  color: rgba(255, 255, 255, 0.5);\\n}\\n\\n/* Header */\\n\\n.ui.inverted.menu .header.item {\\n  margin: 0;\\n  background: transparent;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/* Disabled */\\n\\n.ui.ui.inverted.menu .item.disabled {\\n  color: rgba(225, 225, 225, 0.3);\\n}\\n\\n/*--- Hover ---*/\\n\\n.ui.link.inverted.menu .item:hover,\\n.ui.inverted.menu .dropdown.item:hover,\\n.ui.inverted.menu .link.item:hover,\\n.ui.inverted.menu a.item:hover {\\n  background: rgba(255, 255, 255, 0.08);\\n  color: #ffffff;\\n}\\n\\n.ui.vertical.inverted.menu .item .menu a.item:hover,\\n.ui.vertical.inverted.menu .item .menu .link.item:hover {\\n  background: transparent;\\n  color: #ffffff;\\n}\\n\\n/*--- Pressed ---*/\\n\\n.ui.inverted.menu a.item:active,\\n.ui.inverted.menu .link.item:active {\\n  background: rgba(255, 255, 255, 0.08);\\n  color: #ffffff;\\n}\\n\\n/*--- Active ---*/\\n\\n.ui.inverted.menu .active.item {\\n  background: #3D3E3F;\\n  color: #ffffff !important;\\n}\\n\\n.ui.inverted.vertical.menu .item .menu .active.item {\\n  background: transparent;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.pointing.menu .active.item:after {\\n  background: #3D3E3F;\\n  margin: 0 !important;\\n  -webkit-box-shadow: none !important;\\n          box-shadow: none !important;\\n  border: none !important;\\n}\\n\\n/*--- Active Hover ---*/\\n\\n.ui.inverted.menu .active.item:hover {\\n  background: #3D3E3F;\\n  color: #FFFFFF !important;\\n}\\n\\n.ui.inverted.pointing.menu .active.item:hover:after {\\n  background: #3D3E3F;\\n}\\n\\n/*--------------\\n     Floated\\n---------------*/\\n\\n.ui.floated.menu {\\n  float: left;\\n  margin: 0 0.5rem 0 0;\\n}\\n\\n.ui.floated.menu .item:last-child:before {\\n  display: none;\\n}\\n\\n.ui.right.floated.menu {\\n  float: right;\\n  margin: 0 0 0 0.5rem;\\n}\\n\\n/*--------------\\n    Inverted\\n---------------*/\\n\\n.ui.ui.inverted.menu .primary.active.item,\\n.ui.ui.inverted.primary.menu {\\n  background-color: #2185D0;\\n}\\n\\n.ui.inverted.primary.menu .item:before {\\n  background-color: rgba(34, 36, 38, 0.1);\\n}\\n\\n.ui.ui.inverted.primary.menu .active.item {\\n  background-color: rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.inverted.pointing.primary.menu .active.item {\\n  background-color: #1678c2;\\n}\\n\\n.ui.ui.inverted.menu .red.active.item,\\n.ui.ui.inverted.red.menu {\\n  background-color: #DB2828;\\n}\\n\\n.ui.inverted.red.menu .item:before {\\n  background-color: rgba(34, 36, 38, 0.1);\\n}\\n\\n.ui.ui.inverted.red.menu .active.item {\\n  background-color: rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.inverted.pointing.red.menu .active.item {\\n  background-color: #d01919;\\n}\\n\\n.ui.ui.inverted.menu .orange.active.item,\\n.ui.ui.inverted.orange.menu {\\n  background-color: #F2711C;\\n}\\n\\n.ui.inverted.orange.menu .item:before {\\n  background-color: rgba(34, 36, 38, 0.1);\\n}\\n\\n.ui.ui.inverted.orange.menu .active.item {\\n  background-color: rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.inverted.pointing.orange.menu .active.item {\\n  background-color: #f26202;\\n}\\n\\n.ui.ui.inverted.menu .yellow.active.item,\\n.ui.ui.inverted.yellow.menu {\\n  background-color: #FBBD08;\\n}\\n\\n.ui.inverted.yellow.menu .item:before {\\n  background-color: rgba(34, 36, 38, 0.1);\\n}\\n\\n.ui.ui.inverted.yellow.menu .active.item {\\n  background-color: rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.inverted.pointing.yellow.menu .active.item {\\n  background-color: #eaae00;\\n}\\n\\n.ui.ui.inverted.menu .olive.active.item,\\n.ui.ui.inverted.olive.menu {\\n  background-color: #B5CC18;\\n}\\n\\n.ui.inverted.olive.menu .item:before {\\n  background-color: rgba(34, 36, 38, 0.1);\\n}\\n\\n.ui.ui.inverted.olive.menu .active.item {\\n  background-color: rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.inverted.pointing.olive.menu .active.item {\\n  background-color: #a7bd0d;\\n}\\n\\n.ui.ui.inverted.menu .green.active.item,\\n.ui.ui.inverted.green.menu {\\n  background-color: #21BA45;\\n}\\n\\n.ui.inverted.green.menu .item:before {\\n  background-color: rgba(34, 36, 38, 0.1);\\n}\\n\\n.ui.ui.inverted.green.menu .active.item {\\n  background-color: rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.inverted.pointing.green.menu .active.item {\\n  background-color: #16ab39;\\n}\\n\\n.ui.ui.inverted.menu .teal.active.item,\\n.ui.ui.inverted.teal.menu {\\n  background-color: #00B5AD;\\n}\\n\\n.ui.inverted.teal.menu .item:before {\\n  background-color: rgba(34, 36, 38, 0.1);\\n}\\n\\n.ui.ui.inverted.teal.menu .active.item {\\n  background-color: rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.inverted.pointing.teal.menu .active.item {\\n  background-color: #009c95;\\n}\\n\\n.ui.ui.inverted.menu .blue.active.item,\\n.ui.ui.inverted.blue.menu {\\n  background-color: #2185D0;\\n}\\n\\n.ui.inverted.blue.menu .item:before {\\n  background-color: rgba(34, 36, 38, 0.1);\\n}\\n\\n.ui.ui.inverted.blue.menu .active.item {\\n  background-color: rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.inverted.pointing.blue.menu .active.item {\\n  background-color: #1678c2;\\n}\\n\\n.ui.ui.inverted.menu .violet.active.item,\\n.ui.ui.inverted.violet.menu {\\n  background-color: #6435C9;\\n}\\n\\n.ui.inverted.violet.menu .item:before {\\n  background-color: rgba(34, 36, 38, 0.1);\\n}\\n\\n.ui.ui.inverted.violet.menu .active.item {\\n  background-color: rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.inverted.pointing.violet.menu .active.item {\\n  background-color: #5829bb;\\n}\\n\\n.ui.ui.inverted.menu .purple.active.item,\\n.ui.ui.inverted.purple.menu {\\n  background-color: #A333C8;\\n}\\n\\n.ui.inverted.purple.menu .item:before {\\n  background-color: rgba(34, 36, 38, 0.1);\\n}\\n\\n.ui.ui.inverted.purple.menu .active.item {\\n  background-color: rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.inverted.pointing.purple.menu .active.item {\\n  background-color: #9627ba;\\n}\\n\\n.ui.ui.inverted.menu .pink.active.item,\\n.ui.ui.inverted.pink.menu {\\n  background-color: #E03997;\\n}\\n\\n.ui.inverted.pink.menu .item:before {\\n  background-color: rgba(34, 36, 38, 0.1);\\n}\\n\\n.ui.ui.inverted.pink.menu .active.item {\\n  background-color: rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.inverted.pointing.pink.menu .active.item {\\n  background-color: #e61a8d;\\n}\\n\\n.ui.ui.inverted.menu .brown.active.item,\\n.ui.ui.inverted.brown.menu {\\n  background-color: #A5673F;\\n}\\n\\n.ui.inverted.brown.menu .item:before {\\n  background-color: rgba(34, 36, 38, 0.1);\\n}\\n\\n.ui.ui.inverted.brown.menu .active.item {\\n  background-color: rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.inverted.pointing.brown.menu .active.item {\\n  background-color: #975b33;\\n}\\n\\n.ui.ui.inverted.menu .grey.active.item,\\n.ui.ui.inverted.grey.menu {\\n  background-color: #767676;\\n}\\n\\n.ui.inverted.grey.menu .item:before {\\n  background-color: rgba(34, 36, 38, 0.1);\\n}\\n\\n.ui.ui.inverted.grey.menu .active.item {\\n  background-color: rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.inverted.pointing.grey.menu .active.item {\\n  background-color: #838383;\\n}\\n\\n.ui.ui.inverted.menu .black.active.item,\\n.ui.ui.inverted.black.menu {\\n  background-color: #1B1C1D;\\n}\\n\\n.ui.inverted.black.menu .item:before {\\n  background-color: rgba(34, 36, 38, 0.1);\\n}\\n\\n.ui.ui.inverted.black.menu .active.item {\\n  background-color: rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.inverted.pointing.black.menu .active.item {\\n  background-color: #27292a;\\n}\\n\\n.ui.ui.ui.inverted.pointing.menu .active.item:after {\\n  background-color: inherit;\\n}\\n\\n/*--------------\\n     Fitted\\n---------------*/\\n\\n.ui.fitted.menu .item,\\n.ui.fitted.menu .item .menu .item,\\n.ui.menu .fitted.item {\\n  padding: 0;\\n}\\n\\n.ui.horizontally.fitted.menu .item,\\n.ui.horizontally.fitted.menu .item .menu .item,\\n.ui.menu .horizontally.fitted.item {\\n  padding-top: 0.92857143em;\\n  padding-bottom: 0.92857143em;\\n}\\n\\n.ui.vertically.fitted.menu .item,\\n.ui.vertically.fitted.menu .item .menu .item,\\n.ui.menu .vertically.fitted.item {\\n  padding-left: 1.14285714em;\\n  padding-right: 1.14285714em;\\n}\\n\\n/*--------------\\n   Borderless\\n---------------*/\\n\\n.ui.borderless.menu .item:before,\\n.ui.borderless.menu .item .menu .item:before,\\n.ui.menu .borderless.item:before {\\n  background: none !important;\\n}\\n\\n/*-------------------\\n       Compact\\n--------------------*/\\n\\n.ui.compact.menu {\\n  display: -webkit-inline-box;\\n  display: -ms-inline-flexbox;\\n  display: inline-flex;\\n  margin: 0;\\n  vertical-align: middle;\\n}\\n\\n.ui.compact.vertical.menu {\\n  /* IE hack to make dropdown icons appear inline */\\n  display: -ms-inline-flexbox !important;\\n  display: inline-block;\\n}\\n\\n.ui.compact.menu:not(.secondary) .item:last-child {\\n  border-radius: 0 0.28571429rem 0.28571429rem 0;\\n}\\n\\n.ui.compact.menu .item:last-child:before {\\n  display: none;\\n}\\n\\n.ui.compact.vertical.menu {\\n  width: auto !important;\\n}\\n\\n.ui.compact.vertical.menu .item:last-child::before {\\n  display: block;\\n}\\n\\n/*-------------------\\n        Fluid\\n--------------------*/\\n\\n.ui.menu.fluid,\\n.ui.vertical.menu.fluid {\\n  width: 100% !important;\\n}\\n\\n/*-------------------\\n      Evenly Sized\\n--------------------*/\\n\\n.ui.item.menu,\\n.ui.item.menu .item {\\n  width: 100%;\\n  padding-left: 0 !important;\\n  padding-right: 0 !important;\\n  margin-left: 0 !important;\\n  margin-right: 0 !important;\\n  text-align: center;\\n  -webkit-box-pack: center;\\n      -ms-flex-pack: center;\\n          justify-content: center;\\n}\\n\\n.ui.attached.item.menu:not(.tabular) {\\n  margin: 0 -1px !important;\\n}\\n\\n.ui.item.menu .item:last-child:before {\\n  display: none;\\n}\\n\\n.ui.menu.two.item .item {\\n  width: 50%;\\n}\\n\\n.ui.menu.three.item .item {\\n  width: 33.333%;\\n}\\n\\n.ui.menu.four.item .item {\\n  width: 25%;\\n}\\n\\n.ui.menu.five.item .item {\\n  width: 20%;\\n}\\n\\n.ui.menu.six.item .item {\\n  width: 16.666%;\\n}\\n\\n.ui.menu.seven.item .item {\\n  width: 14.285%;\\n}\\n\\n.ui.menu.eight.item .item {\\n  width: 12.5%;\\n}\\n\\n.ui.menu.nine.item .item {\\n  width: 11.11%;\\n}\\n\\n.ui.menu.ten.item .item {\\n  width: 10%;\\n}\\n\\n.ui.menu.eleven.item .item {\\n  width: 9.09%;\\n}\\n\\n.ui.menu.twelve.item .item {\\n  width: 8.333%;\\n}\\n\\n/*--------------\\n     Fixed\\n---------------*/\\n\\n.ui.menu.fixed {\\n  position: fixed;\\n  z-index: 101;\\n  margin: 0;\\n  width: 100%;\\n}\\n\\n.ui.menu.fixed,\\n.ui.menu.fixed .item:first-child,\\n.ui.menu.fixed .item:last-child {\\n  border-radius: 0 !important;\\n}\\n\\n.ui.fixed.menu,\\n.ui[class*=\\\"top fixed\\\"].menu {\\n  top: 0;\\n  left: 0;\\n  right: auto;\\n  bottom: auto;\\n}\\n\\n.ui[class*=\\\"top fixed\\\"].menu {\\n  border-top: none;\\n  border-left: none;\\n  border-right: none;\\n}\\n\\n.ui[class*=\\\"right fixed\\\"].menu {\\n  border-top: none;\\n  border-bottom: none;\\n  border-right: none;\\n  top: 0;\\n  right: 0;\\n  left: auto;\\n  bottom: auto;\\n  width: auto;\\n  height: 100%;\\n}\\n\\n.ui[class*=\\\"bottom fixed\\\"].menu {\\n  border-bottom: none;\\n  border-left: none;\\n  border-right: none;\\n  bottom: 0;\\n  left: 0;\\n  top: auto;\\n  right: auto;\\n}\\n\\n.ui[class*=\\\"left fixed\\\"].menu {\\n  border-top: none;\\n  border-bottom: none;\\n  border-left: none;\\n  top: 0;\\n  left: 0;\\n  right: auto;\\n  bottom: auto;\\n  width: auto;\\n  height: 100%;\\n}\\n\\n/* Coupling with Grid */\\n\\n.ui.fixed.menu + .ui.grid {\\n  padding-top: 2.75rem;\\n}\\n\\n/*-------------------\\n       Pointing\\n--------------------*/\\n\\n.ui.pointing.menu .item:after {\\n  visibility: hidden;\\n  position: absolute;\\n  content: '';\\n  top: 100%;\\n  left: 50%;\\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\\n  transform: translateX(-50%) translateY(-50%) rotate(45deg);\\n  background: none;\\n  margin: 0.5px 0 0;\\n  width: 0.57142857em;\\n  height: 0.57142857em;\\n  border: none;\\n  border-bottom: 1px solid #D4D4D5;\\n  border-right: 1px solid #D4D4D5;\\n  z-index: 2;\\n  -webkit-transition: background 0.1s ease;\\n  transition: background 0.1s ease;\\n}\\n\\n.ui.vertical.pointing.menu .item:after {\\n  position: absolute;\\n  top: 50%;\\n  right: 0;\\n  bottom: auto;\\n  left: auto;\\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\\n  transform: translateX(50%) translateY(-50%) rotate(45deg);\\n  margin: 0 -0.5px 0 0;\\n  border: none;\\n  border-top: 1px solid #D4D4D5;\\n  border-right: 1px solid #D4D4D5;\\n}\\n\\n.ui.pointing.menu .ui.dropdown .menu .item:after,\\n.ui.vertical.pointing.menu .ui.dropdown .menu .item:after {\\n  display: none;\\n}\\n\\n/* Active */\\n\\n.ui.pointing.menu .active.item:after {\\n  visibility: visible;\\n}\\n\\n.ui.pointing.menu .active.dropdown.item:after {\\n  visibility: hidden;\\n}\\n\\n/* Don't double up pointers */\\n\\n.ui.pointing.menu .dropdown.active.item:after,\\n.ui.pointing.menu .active.item .menu .active.item:after {\\n  display: none;\\n}\\n\\n/* Colors */\\n\\n.ui.pointing.menu .active.item:hover:after {\\n  background-color: #F2F2F2;\\n}\\n\\n.ui.pointing.menu .active.item:after {\\n  background-color: #F2F2F2;\\n}\\n\\n.ui.pointing.menu .active.item:hover:after {\\n  background-color: #F2F2F2;\\n}\\n\\n.ui.vertical.pointing.menu .active.item:hover:after {\\n  background-color: #F2F2F2;\\n}\\n\\n.ui.vertical.pointing.menu .active.item:after {\\n  background-color: #F2F2F2;\\n}\\n\\n.ui.vertical.pointing.menu .menu .active.item:after {\\n  background-color: #FFFFFF;\\n}\\n\\n.ui.inverted.pointing.menu .primary.active.item:after {\\n  background-color: #2185D0;\\n}\\n\\n.ui.inverted.pointing.menu .secondary.active.item:after {\\n  background-color: #1B1C1D;\\n}\\n\\n.ui.inverted.pointing.menu .red.active.item:after {\\n  background-color: #DB2828;\\n}\\n\\n.ui.inverted.pointing.menu .orange.active.item:after {\\n  background-color: #F2711C;\\n}\\n\\n.ui.inverted.pointing.menu .yellow.active.item:after {\\n  background-color: #FBBD08;\\n}\\n\\n.ui.inverted.pointing.menu .olive.active.item:after {\\n  background-color: #B5CC18;\\n}\\n\\n.ui.inverted.pointing.menu .green.active.item:after {\\n  background-color: #21BA45;\\n}\\n\\n.ui.inverted.pointing.menu .teal.active.item:after {\\n  background-color: #00B5AD;\\n}\\n\\n.ui.inverted.pointing.menu .blue.active.item:after {\\n  background-color: #2185D0;\\n}\\n\\n.ui.inverted.pointing.menu .violet.active.item:after {\\n  background-color: #6435C9;\\n}\\n\\n.ui.inverted.pointing.menu .purple.active.item:after {\\n  background-color: #A333C8;\\n}\\n\\n.ui.inverted.pointing.menu .pink.active.item:after {\\n  background-color: #E03997;\\n}\\n\\n.ui.inverted.pointing.menu .brown.active.item:after {\\n  background-color: #A5673F;\\n}\\n\\n.ui.inverted.pointing.menu .grey.active.item:after {\\n  background-color: #767676;\\n}\\n\\n.ui.inverted.pointing.menu .black.active.item:after {\\n  background-color: #1B1C1D;\\n}\\n\\n/*--------------\\n    Attached\\n---------------*/\\n\\n/* Middle */\\n\\n.ui.attached.menu {\\n  top: 0;\\n  bottom: 0;\\n  border-radius: 0;\\n  margin: 0 -1px;\\n  width: calc(100% + 2px);\\n  max-width: calc(100% + 2px);\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.attached + .ui.attached.menu:not(.top) {\\n  border-top: none;\\n}\\n\\n/* Top */\\n\\n.ui[class*=\\\"top attached\\\"].menu {\\n  bottom: 0;\\n  margin-bottom: 0;\\n  top: 0;\\n  margin-top: 1rem;\\n  border-radius: 0.28571429rem 0.28571429rem 0 0;\\n}\\n\\n.ui.menu[class*=\\\"top attached\\\"]:first-child {\\n  margin-top: 0;\\n}\\n\\n/* Bottom */\\n\\n.ui[class*=\\\"bottom attached\\\"].menu {\\n  bottom: 0;\\n  margin-top: 0;\\n  top: 0;\\n  margin-bottom: 1rem;\\n  -webkit-box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15), none;\\n          box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15), none;\\n  border-radius: 0 0 0.28571429rem 0.28571429rem;\\n}\\n\\n.ui[class*=\\\"bottom attached\\\"].menu:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/* Attached Menu Item */\\n\\n.ui.top.attached.menu > .item:first-child {\\n  border-radius: 0.28571429rem 0 0 0;\\n}\\n\\n.ui.bottom.attached.menu > .item:first-child {\\n  border-radius: 0 0 0 0.28571429rem;\\n}\\n\\n/* Tabular Attached */\\n\\n.ui.attached.menu:not(.tabular) {\\n  border: 1px solid #D4D4D5;\\n}\\n\\n.ui.attached.inverted.menu {\\n  border: none;\\n}\\n\\n.ui.attached.tabular.menu {\\n  margin-left: 0;\\n  margin-right: 0;\\n  width: 100%;\\n}\\n\\n/*--------------\\n     Sizes\\n---------------*/\\n\\n/* Mini */\\n\\n.ui.mini.menu {\\n  font-size: 0.78571429rem;\\n}\\n\\n.ui.mini.vertical.menu:not(.icon) {\\n  width: 9rem;\\n}\\n\\n.ui.mini.menu .dropdown {\\n  font-size: 0.78571429rem;\\n}\\n\\n.ui.mini.menu .dropdown .menu > .item {\\n  font-size: 0.78571429rem;\\n}\\n\\n/* Tiny */\\n\\n.ui.tiny.menu {\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.tiny.vertical.menu:not(.icon) {\\n  width: 11rem;\\n}\\n\\n.ui.tiny.menu .dropdown {\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.tiny.menu .dropdown .menu > .item {\\n  font-size: 0.85714286rem;\\n}\\n\\n/* Small */\\n\\n.ui.small.menu {\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.small.vertical.menu:not(.icon) {\\n  width: 13rem;\\n}\\n\\n.ui.small.menu .dropdown {\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.small.menu .dropdown .menu > .item {\\n  font-size: 0.92857143rem;\\n}\\n\\n/* Medium */\\n\\n.ui.menu {\\n  font-size: 1rem;\\n}\\n\\n.ui.vertical.menu {\\n  width: 15rem;\\n}\\n\\n/* Large */\\n\\n.ui.large.menu {\\n  font-size: 1.07142857rem;\\n}\\n\\n.ui.large.vertical.menu:not(.icon) {\\n  width: 18rem;\\n}\\n\\n.ui.large.menu .dropdown {\\n  font-size: 1.07142857rem;\\n}\\n\\n.ui.large.menu .dropdown .menu > .item {\\n  font-size: 1.07142857rem;\\n}\\n\\n/* Huge */\\n\\n.ui.huge.menu {\\n  font-size: 1.21428571rem;\\n}\\n\\n.ui.huge.vertical.menu:not(.icon) {\\n  width: 22rem;\\n}\\n\\n.ui.huge.menu .dropdown {\\n  font-size: 1.21428571rem;\\n}\\n\\n.ui.huge.menu .dropdown .menu > .item {\\n  font-size: 1.21428571rem;\\n}\\n\\n/* Big */\\n\\n.ui.big.menu {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.big.vertical.menu:not(.icon) {\\n  width: 20rem;\\n}\\n\\n.ui.big.menu .dropdown {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.big.menu .dropdown .menu > .item {\\n  font-size: 1.14285714rem;\\n}\\n\\n/* Massive */\\n\\n.ui.massive.menu {\\n  font-size: 1.28571429rem;\\n}\\n\\n.ui.massive.vertical.menu:not(.icon) {\\n  width: 25rem;\\n}\\n\\n.ui.massive.menu .dropdown {\\n  font-size: 1.28571429rem;\\n}\\n\\n.ui.massive.menu .dropdown .menu > .item {\\n  font-size: 1.28571429rem;\\n}\\n\\n/*-------------------\\n  Inverted dropdowns\\n--------------------*/\\n\\n.ui.menu .ui.inverted.inverted.dropdown.item .menu {\\n  background: #1B1C1D;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.menu .ui.inverted.dropdown .menu > .item {\\n  color: rgba(255, 255, 255, 0.8) !important;\\n}\\n\\n.ui.menu .ui.inverted.dropdown .menu > .active.item {\\n  background: transparent !important;\\n  color: rgba(255, 255, 255, 0.8) !important;\\n}\\n\\n.ui.menu .ui.inverted.dropdown .menu > .item:hover {\\n  background: rgba(255, 255, 255, 0.08) !important;\\n  color: rgba(255, 255, 255, 0.8) !important;\\n}\\n\\n.ui.menu .ui.inverted.dropdown .menu > .selected.item {\\n  background: rgba(255, 255, 255, 0.15) !important;\\n  color: rgba(255, 255, 255, 0.8) !important;\\n}\\n\\n/* Vertical */\\n\\n.ui.vertical.menu .inverted.dropdown.item .menu {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Message\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Message\\n*******************************/\\n\\n.ui.message {\\n  position: relative;\\n  min-height: 1em;\\n  margin: 1em 0;\\n  background: #F8F8F9;\\n  padding: 1em 1.5em;\\n  line-height: 1.4285em;\\n  color: rgba(0, 0, 0, 0.87);\\n  -webkit-transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, box-shadow 0.1s ease;\\n  transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, box-shadow 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  border-radius: 0.28571429rem;\\n  -webkit-box-shadow: 0 0 0 1px rgba(34, 36, 38, 0.22) inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n          box-shadow: 0 0 0 1px rgba(34, 36, 38, 0.22) inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n}\\n\\n.ui.message:first-child {\\n  margin-top: 0;\\n}\\n\\n.ui.message:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/*--------------\\n     Content\\n---------------*/\\n\\n/* Header */\\n\\n.ui.message .header {\\n  display: block;\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  font-weight: bold;\\n  margin: -0.14285714em 0 0 0;\\n}\\n\\n/* Default font size */\\n\\n.ui.message .header:not(.ui) {\\n  font-size: 1.14285714em;\\n}\\n\\n/* Paragraph */\\n\\n.ui.message p {\\n  opacity: 0.85;\\n  margin: 0.75em 0;\\n}\\n\\n.ui.message p:first-child {\\n  margin-top: 0;\\n}\\n\\n.ui.message p:last-child {\\n  margin-bottom: 0;\\n}\\n\\n.ui.message .header + p {\\n  margin-top: 0.25em;\\n}\\n\\n/* List */\\n\\n.ui.message .list:not(.ui) {\\n  text-align: left;\\n  padding: 0;\\n  opacity: 0.85;\\n  list-style-position: inside;\\n  margin: 0.5em 0 0;\\n}\\n\\n.ui.message .list:not(.ui):first-child {\\n  margin-top: 0;\\n}\\n\\n.ui.message .list:not(.ui):last-child {\\n  margin-bottom: 0;\\n}\\n\\n.ui.message .list:not(.ui) li {\\n  position: relative;\\n  list-style-type: none;\\n  margin: 0 0 0.3em 1em;\\n  padding: 0;\\n}\\n\\n.ui.message .list:not(.ui) li:before {\\n  position: absolute;\\n  content: '•';\\n  left: -1em;\\n  height: 100%;\\n  vertical-align: baseline;\\n}\\n\\n.ui.message .list:not(.ui) li:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/* Icon */\\n\\n.ui.message > .icon {\\n  margin-right: 0.6em;\\n}\\n\\n/* Close Icon */\\n\\n.ui.message > .close.icon {\\n  cursor: pointer;\\n  position: absolute;\\n  margin: 0;\\n  top: 0.78575em;\\n  right: 0.5em;\\n  opacity: 0.7;\\n  -webkit-transition: opacity 0.1s ease;\\n  transition: opacity 0.1s ease;\\n}\\n\\n.ui.message > .close.icon:hover {\\n  opacity: 1;\\n}\\n\\n/* First / Last Element */\\n\\n.ui.message > :first-child {\\n  margin-top: 0;\\n}\\n\\n.ui.message > :last-child {\\n  margin-bottom: 0;\\n}\\n\\n/*******************************\\n            Coupling\\n*******************************/\\n\\n.ui.dropdown .menu > .message {\\n  margin: 0 -1px;\\n}\\n\\n/*******************************\\n            States\\n*******************************/\\n\\n/*--------------\\n    Visible\\n---------------*/\\n\\n.ui.visible.visible.visible.visible.message {\\n  display: block;\\n}\\n\\n.ui.icon.visible.visible.visible.visible.message {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n}\\n\\n/*--------------\\n     Hidden\\n---------------*/\\n\\n.ui.hidden.hidden.hidden.hidden.message {\\n  display: none;\\n}\\n\\n/*******************************\\n            Variations\\n*******************************/\\n\\n/*--------------\\n    Compact\\n---------------*/\\n\\n.ui.compact.message {\\n  display: inline-block;\\n}\\n\\n.ui.compact.icon.message {\\n  display: -webkit-inline-box;\\n  display: -ms-inline-flexbox;\\n  display: inline-flex;\\n  width: auto;\\n}\\n\\n/*--------------\\n    Attached\\n---------------*/\\n\\n.ui.attached.message {\\n  margin-bottom: -1px;\\n  border-radius: 0.28571429rem 0.28571429rem 0 0;\\n  -webkit-box-shadow: 0 0 0 1px rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 1px rgba(34, 36, 38, 0.15) inset;\\n  margin-left: -1px;\\n  margin-right: -1px;\\n}\\n\\n.ui.attached + .ui.attached.message:not(.top):not(.bottom) {\\n  margin-top: -1px;\\n  border-radius: 0;\\n}\\n\\n.ui.bottom.attached.message {\\n  margin-top: -1px;\\n  border-radius: 0 0 0.28571429rem 0.28571429rem;\\n  -webkit-box-shadow: 0 0 0 1px rgba(34, 36, 38, 0.15) inset, 0 1px 2px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px rgba(34, 36, 38, 0.15) inset, 0 1px 2px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.bottom.attached.message:not(:last-child) {\\n  margin-bottom: 1em;\\n}\\n\\n.ui.attached.icon.message {\\n  width: auto;\\n}\\n\\n/*--------------\\n      Icon\\n---------------*/\\n\\n.ui.icon.message {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  width: 100%;\\n  -webkit-box-align: center;\\n      -ms-flex-align: center;\\n          align-items: center;\\n}\\n\\n.ui.icon.message > .icon:not(.close) {\\n  display: block;\\n  -webkit-box-flex: 0;\\n      -ms-flex: 0 0 auto;\\n          flex: 0 0 auto;\\n  width: auto;\\n  line-height: 1;\\n  vertical-align: middle;\\n  font-size: 3em;\\n  opacity: 0.8;\\n}\\n\\n.ui.icon.message > .content {\\n  display: block;\\n  -webkit-box-flex: 1;\\n      -ms-flex: 1 1 auto;\\n          flex: 1 1 auto;\\n  vertical-align: middle;\\n}\\n\\n.ui.icon.message .icon:not(.close) + .content {\\n  padding-left: 0;\\n}\\n\\n.ui.icon.message .circular.icon {\\n  width: 1em;\\n}\\n\\n/*--------------\\n    Floating\\n---------------*/\\n\\n.ui.floating.message {\\n  -webkit-box-shadow: 0 0 0 1px rgba(34, 36, 38, 0.22) inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px rgba(34, 36, 38, 0.22) inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n/*--------------\\n     Colors\\n---------------*/\\n\\n/*--------------\\n     Types\\n---------------*/\\n\\n.ui.positive.message {\\n  background-color: #FCFFF5;\\n  color: #2C662D;\\n}\\n\\n.ui.positive.message,\\n.ui.attached.positive.message {\\n  -webkit-box-shadow: 0 0 0 1px #A3C293 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n          box-shadow: 0 0 0 1px #A3C293 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n}\\n\\n.ui.floating.positive.message {\\n  -webkit-box-shadow: 0 0 0 1px #A3C293 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px #A3C293 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.positive.message .header {\\n  color: #1A531B;\\n}\\n\\n.ui.negative.message {\\n  background-color: #FFF6F6;\\n  color: #9F3A38;\\n}\\n\\n.ui.negative.message,\\n.ui.attached.negative.message {\\n  -webkit-box-shadow: 0 0 0 1px #E0B4B4 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n          box-shadow: 0 0 0 1px #E0B4B4 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n}\\n\\n.ui.floating.negative.message {\\n  -webkit-box-shadow: 0 0 0 1px #E0B4B4 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px #E0B4B4 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.negative.message .header {\\n  color: #912D2B;\\n}\\n\\n.ui.info.message {\\n  background-color: #F8FFFF;\\n  color: #276F86;\\n}\\n\\n.ui.info.message,\\n.ui.attached.info.message {\\n  -webkit-box-shadow: 0 0 0 1px #A9D5DE inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n          box-shadow: 0 0 0 1px #A9D5DE inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n}\\n\\n.ui.floating.info.message {\\n  -webkit-box-shadow: 0 0 0 1px #A9D5DE inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px #A9D5DE inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.info.message .header {\\n  color: #0E566C;\\n}\\n\\n.ui.warning.message {\\n  background-color: #FFFAF3;\\n  color: #573A08;\\n}\\n\\n.ui.warning.message,\\n.ui.attached.warning.message {\\n  -webkit-box-shadow: 0 0 0 1px #C9BA9B inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n          box-shadow: 0 0 0 1px #C9BA9B inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n}\\n\\n.ui.floating.warning.message {\\n  -webkit-box-shadow: 0 0 0 1px #C9BA9B inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px #C9BA9B inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.warning.message .header {\\n  color: #794B02;\\n}\\n\\n.ui.error.message {\\n  background-color: #FFF6F6;\\n  color: #9F3A38;\\n}\\n\\n.ui.error.message,\\n.ui.attached.error.message {\\n  -webkit-box-shadow: 0 0 0 1px #E0B4B4 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n          box-shadow: 0 0 0 1px #E0B4B4 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n}\\n\\n.ui.floating.error.message {\\n  -webkit-box-shadow: 0 0 0 1px #E0B4B4 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px #E0B4B4 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.error.message .header {\\n  color: #912D2B;\\n}\\n\\n.ui.success.message {\\n  background-color: #FCFFF5;\\n  color: #2C662D;\\n}\\n\\n.ui.success.message,\\n.ui.attached.success.message {\\n  -webkit-box-shadow: 0 0 0 1px #A3C293 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n          box-shadow: 0 0 0 1px #A3C293 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n}\\n\\n.ui.floating.success.message {\\n  -webkit-box-shadow: 0 0 0 1px #A3C293 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px #A3C293 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.success.message .header {\\n  color: #1A531B;\\n}\\n\\n.ui.primary.message {\\n  background-color: #DFF0FF;\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.primary.message,\\n.ui.attached.primary.message {\\n  -webkit-box-shadow: 0 0 0 1px #2185D0 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n          box-shadow: 0 0 0 1px #2185D0 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n}\\n\\n.ui.floating.primary.message {\\n  -webkit-box-shadow: 0 0 0 1px #2185D0 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px #2185D0 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.primary.message .header {\\n  color: rgba(242, 242, 242, 0.9);\\n}\\n\\n.ui.secondary.message {\\n  background-color: #F4F4F4;\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.secondary.message,\\n.ui.attached.secondary.message {\\n  -webkit-box-shadow: 0 0 0 1px #1B1C1D inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n          box-shadow: 0 0 0 1px #1B1C1D inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n}\\n\\n.ui.floating.secondary.message {\\n  -webkit-box-shadow: 0 0 0 1px #1B1C1D inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px #1B1C1D inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.secondary.message .header {\\n  color: rgba(242, 242, 242, 0.9);\\n}\\n\\n.ui.red.message {\\n  background-color: #FFE8E6;\\n  color: #DB2828;\\n}\\n\\n.ui.red.message,\\n.ui.attached.red.message {\\n  -webkit-box-shadow: 0 0 0 1px #DB2828 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n          box-shadow: 0 0 0 1px #DB2828 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n}\\n\\n.ui.floating.red.message {\\n  -webkit-box-shadow: 0 0 0 1px #DB2828 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px #DB2828 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.red.message .header {\\n  color: #c82121;\\n}\\n\\n.ui.orange.message {\\n  background-color: #FFEDDE;\\n  color: #F2711C;\\n}\\n\\n.ui.orange.message,\\n.ui.attached.orange.message {\\n  -webkit-box-shadow: 0 0 0 1px #F2711C inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n          box-shadow: 0 0 0 1px #F2711C inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n}\\n\\n.ui.floating.orange.message {\\n  -webkit-box-shadow: 0 0 0 1px #F2711C inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px #F2711C inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.orange.message .header {\\n  color: #e7640d;\\n}\\n\\n.ui.yellow.message {\\n  background-color: #FFF8DB;\\n  color: #B58105;\\n}\\n\\n.ui.yellow.message,\\n.ui.attached.yellow.message {\\n  -webkit-box-shadow: 0 0 0 1px #B58105 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n          box-shadow: 0 0 0 1px #B58105 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n}\\n\\n.ui.floating.yellow.message {\\n  -webkit-box-shadow: 0 0 0 1px #B58105 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px #B58105 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.yellow.message .header {\\n  color: #9c6f04;\\n}\\n\\n.ui.olive.message {\\n  background-color: #FBFDEF;\\n  color: #8ABC1E;\\n}\\n\\n.ui.olive.message,\\n.ui.attached.olive.message {\\n  -webkit-box-shadow: 0 0 0 1px #8ABC1E inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n          box-shadow: 0 0 0 1px #8ABC1E inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n}\\n\\n.ui.floating.olive.message {\\n  -webkit-box-shadow: 0 0 0 1px #8ABC1E inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px #8ABC1E inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.olive.message .header {\\n  color: #7aa61a;\\n}\\n\\n.ui.green.message {\\n  background-color: #E5F9E7;\\n  color: #1EBC30;\\n}\\n\\n.ui.green.message,\\n.ui.attached.green.message {\\n  -webkit-box-shadow: 0 0 0 1px #1EBC30 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n          box-shadow: 0 0 0 1px #1EBC30 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n}\\n\\n.ui.floating.green.message {\\n  -webkit-box-shadow: 0 0 0 1px #1EBC30 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px #1EBC30 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.green.message .header {\\n  color: #1aa62a;\\n}\\n\\n.ui.teal.message {\\n  background-color: #E1F7F7;\\n  color: #10A3A3;\\n}\\n\\n.ui.teal.message,\\n.ui.attached.teal.message {\\n  -webkit-box-shadow: 0 0 0 1px #10A3A3 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n          box-shadow: 0 0 0 1px #10A3A3 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n}\\n\\n.ui.floating.teal.message {\\n  -webkit-box-shadow: 0 0 0 1px #10A3A3 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px #10A3A3 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.teal.message .header {\\n  color: #0e8c8c;\\n}\\n\\n.ui.blue.message {\\n  background-color: #DFF0FF;\\n  color: #2185D0;\\n}\\n\\n.ui.blue.message,\\n.ui.attached.blue.message {\\n  -webkit-box-shadow: 0 0 0 1px #2185D0 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n          box-shadow: 0 0 0 1px #2185D0 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n}\\n\\n.ui.floating.blue.message {\\n  -webkit-box-shadow: 0 0 0 1px #2185D0 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px #2185D0 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.blue.message .header {\\n  color: #1e77ba;\\n}\\n\\n.ui.violet.message {\\n  background-color: #EAE7FF;\\n  color: #6435C9;\\n}\\n\\n.ui.violet.message,\\n.ui.attached.violet.message {\\n  -webkit-box-shadow: 0 0 0 1px #6435C9 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n          box-shadow: 0 0 0 1px #6435C9 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n}\\n\\n.ui.floating.violet.message {\\n  -webkit-box-shadow: 0 0 0 1px #6435C9 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px #6435C9 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.violet.message .header {\\n  color: #5a30b5;\\n}\\n\\n.ui.purple.message {\\n  background-color: #F6E7FF;\\n  color: #A333C8;\\n}\\n\\n.ui.purple.message,\\n.ui.attached.purple.message {\\n  -webkit-box-shadow: 0 0 0 1px #A333C8 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n          box-shadow: 0 0 0 1px #A333C8 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n}\\n\\n.ui.floating.purple.message {\\n  -webkit-box-shadow: 0 0 0 1px #A333C8 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px #A333C8 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.purple.message .header {\\n  color: #922eb4;\\n}\\n\\n.ui.pink.message {\\n  background-color: #FFE3FB;\\n  color: #E03997;\\n}\\n\\n.ui.pink.message,\\n.ui.attached.pink.message {\\n  -webkit-box-shadow: 0 0 0 1px #E03997 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n          box-shadow: 0 0 0 1px #E03997 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n}\\n\\n.ui.floating.pink.message {\\n  -webkit-box-shadow: 0 0 0 1px #E03997 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px #E03997 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.pink.message .header {\\n  color: #dd238b;\\n}\\n\\n.ui.brown.message {\\n  background-color: #F1E2D3;\\n  color: #A5673F;\\n}\\n\\n.ui.brown.message,\\n.ui.attached.brown.message {\\n  -webkit-box-shadow: 0 0 0 1px #A5673F inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n          box-shadow: 0 0 0 1px #A5673F inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n}\\n\\n.ui.floating.brown.message {\\n  -webkit-box-shadow: 0 0 0 1px #A5673F inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px #A5673F inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.brown.message .header {\\n  color: #935b38;\\n}\\n\\n.ui.grey.message {\\n  background-color: #F4F4F4;\\n  color: #767676;\\n}\\n\\n.ui.grey.message,\\n.ui.attached.grey.message {\\n  -webkit-box-shadow: 0 0 0 1px #767676 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n          box-shadow: 0 0 0 1px #767676 inset, 0 0 0 0 rgba(0, 0, 0, 0);\\n}\\n\\n.ui.floating.grey.message {\\n  -webkit-box-shadow: 0 0 0 1px #767676 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px #767676 inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.grey.message .header {\\n  color: #696969;\\n}\\n\\n.ui.black.message {\\n  background-color: #1B1C1D;\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.black.message .header {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.inverted.message {\\n  background-color: #1B1C1D;\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n/*--------------\\n     Sizes\\n---------------*/\\n\\n.ui.mini.message {\\n  font-size: 0.78571429em;\\n}\\n\\n.ui.tiny.message {\\n  font-size: 0.85714286em;\\n}\\n\\n.ui.small.message {\\n  font-size: 0.92857143em;\\n}\\n\\n.ui.message {\\n  font-size: 1em;\\n}\\n\\n.ui.large.message {\\n  font-size: 1.14285714em;\\n}\\n\\n.ui.big.message {\\n  font-size: 1.28571429em;\\n}\\n\\n.ui.huge.message {\\n  font-size: 1.42857143em;\\n}\\n\\n.ui.massive.message {\\n  font-size: 1.71428571em;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n        Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Table\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n             Table\\n*******************************/\\n\\n/* Prototype */\\n\\n.ui.table {\\n  width: 100%;\\n  background: #FFFFFF;\\n  margin: 1em 0;\\n  border: 1px solid rgba(34, 36, 38, 0.15);\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  border-radius: 0.28571429rem;\\n  text-align: left;\\n  vertical-align: middle;\\n  color: rgba(0, 0, 0, 0.87);\\n  border-collapse: separate;\\n  border-spacing: 0;\\n}\\n\\n.ui.table:first-child {\\n  margin-top: 0;\\n}\\n\\n.ui.table:last-child {\\n  margin-bottom: 0;\\n}\\n\\n.ui.table > thead,\\n.ui.table > tbody {\\n  text-align: inherit;\\n  vertical-align: inherit;\\n}\\n\\n/*******************************\\n             Parts\\n*******************************/\\n\\n/* Table Content */\\n\\n.ui.table th,\\n.ui.table td {\\n  -webkit-transition: background 0.1s ease, color 0.1s ease;\\n  transition: background 0.1s ease, color 0.1s ease;\\n}\\n\\n/* Headers */\\n\\n.ui.table > thead {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.table > thead > tr > th {\\n  cursor: auto;\\n  background: #F9FAFB;\\n  text-align: inherit;\\n  color: rgba(0, 0, 0, 0.87);\\n  padding: 0.92857143em 0.78571429em;\\n  vertical-align: inherit;\\n  font-style: none;\\n  font-weight: bold;\\n  text-transform: none;\\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\\n  border-left: none;\\n}\\n\\n.ui.table > thead > tr > th:first-child {\\n  border-left: none;\\n}\\n\\n.ui.table > thead > tr:first-child > th:first-child {\\n  border-radius: 0.28571429rem 0 0 0;\\n}\\n\\n.ui.table > thead > tr:first-child > th:last-child {\\n  border-radius: 0 0.28571429rem 0 0;\\n}\\n\\n.ui.table > thead > tr:first-child > th:only-child {\\n  border-radius: 0.28571429rem 0.28571429rem 0 0;\\n}\\n\\n/* Footer */\\n\\n.ui.table > tfoot {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.table > tfoot > tr > th {\\n  cursor: auto;\\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\\n  background: #F9FAFB;\\n  text-align: inherit;\\n  color: rgba(0, 0, 0, 0.87);\\n  padding: 0.78571429em 0.78571429em;\\n  vertical-align: middle;\\n  font-style: normal;\\n  font-weight: normal;\\n  text-transform: none;\\n}\\n\\n.ui.table > tfoot > tr > th:first-child {\\n  border-left: none;\\n}\\n\\n.ui.table > tfoot > tr:first-child > th:first-child {\\n  border-radius: 0 0 0 0.28571429rem;\\n}\\n\\n.ui.table > tfoot > tr:first-child > th:last-child {\\n  border-radius: 0 0 0.28571429rem 0;\\n}\\n\\n.ui.table > tfoot > tr:first-child > th:only-child {\\n  border-radius: 0 0 0.28571429rem 0.28571429rem;\\n}\\n\\n/* Table Row */\\n\\n.ui.table > tr > td,\\n.ui.table > tbody > tr > td {\\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\\n}\\n\\n.ui.table > tr:first-child > td,\\n.ui.table > tbody > tr:first-child > td {\\n  border-top: none;\\n}\\n\\n/* Repeated tbody */\\n\\n.ui.table > tbody + tbody tr:first-child > td {\\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\\n}\\n\\n/* Table Cells */\\n\\n.ui.table > tbody > tr > td,\\n.ui.table > tr > td {\\n  padding: 0.78571429em 0.78571429em;\\n  text-align: inherit;\\n}\\n\\n/* Icons */\\n\\n.ui.table > .icon {\\n  vertical-align: baseline;\\n}\\n\\n.ui.table > .icon:only-child {\\n  margin: 0;\\n}\\n\\n/* Table Segment */\\n\\n.ui.table.segment {\\n  padding: 0;\\n}\\n\\n.ui.table.segment:after {\\n  display: none;\\n}\\n\\n.ui.table.segment.stacked:after {\\n  display: block;\\n}\\n\\n/* Responsive */\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.table:not(.unstackable) {\\n    width: 100%;\\n    padding: 0;\\n  }\\n\\n  .ui.table:not(.unstackable) > thead,\\n  .ui.table:not(.unstackable) > thead > tr,\\n  .ui.table:not(.unstackable) > tfoot,\\n  .ui.table:not(.unstackable) > tfoot > tr,\\n  .ui.table:not(.unstackable) > tbody,\\n  .ui.table:not(.unstackable) > tr,\\n  .ui.table:not(.unstackable) > tbody > tr,\\n  .ui.table:not(.unstackable) > tr > th,\\n  .ui.table:not(.unstackable) > thead > tr > th,\\n  .ui.table:not(.unstackable) > tbody > tr > th,\\n  .ui.table:not(.unstackable) > tfoot > tr > th,\\n  .ui.table:not(.unstackable) > tr > td,\\n  .ui.table:not(.unstackable) > tbody > tr > td {\\n    display: block !important;\\n    width: auto !important;\\n  }\\n\\n  .ui.table:not(.unstackable) > thead {\\n    display: block;\\n  }\\n\\n  .ui.table:not(.unstackable) > tfoot {\\n    display: block;\\n  }\\n\\n  .ui.table:not(.unstackable) > tr,\\n  .ui.table:not(.unstackable) > thead > tr,\\n  .ui.table:not(.unstackable) > tbody > tr,\\n  .ui.table:not(.unstackable) > tfoot > tr {\\n    padding-top: 1em;\\n    padding-bottom: 1em;\\n    -webkit-box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.1) inset !important;\\n            box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.1) inset !important;\\n  }\\n\\n  .ui.ui.ui.ui.table:not(.unstackable) > tr > th,\\n  .ui.ui.ui.ui.table:not(.unstackable) > thead > tr > th,\\n  .ui.ui.ui.ui.table:not(.unstackable) > tbody > tr > th,\\n  .ui.ui.ui.ui.table:not(.unstackable) > tfoot > tr > th,\\n  .ui.ui.ui.ui.table:not(.unstackable) > tr > td,\\n  .ui.ui.ui.ui.table:not(.unstackable) > tbody > tr > td {\\n    background: none;\\n    border: none;\\n    padding: 0.25em 0.75em;\\n    -webkit-box-shadow: none !important;\\n            box-shadow: none !important;\\n  }\\n\\n  .ui.table:not(.unstackable) > tr > th:first-child,\\n  .ui.table:not(.unstackable) > thead > tr > th:first-child,\\n  .ui.table:not(.unstackable) > tbody > tr > th:first-child,\\n  .ui.table:not(.unstackable) > tfoot > tr > th:first-child,\\n  .ui.table:not(.unstackable) > tr > td:first-child,\\n  .ui.table:not(.unstackable) > tbody > tr > td:first-child {\\n    font-weight: bold;\\n  }\\n\\n  /* Definition Table */\\n\\n  .ui.definition.table:not(.unstackable) > thead > tr > th:first-child {\\n    -webkit-box-shadow: none !important;\\n            box-shadow: none !important;\\n  }\\n}\\n\\n/*******************************\\n            Coupling\\n*******************************/\\n\\n/* UI Image */\\n\\n.ui.table .collapsing .image,\\n.ui.table .collapsing .image img {\\n  max-width: none;\\n}\\n\\n/*******************************\\n             Types\\n*******************************/\\n\\n/*--------------\\n    Complex\\n---------------*/\\n\\n.ui.structured.table {\\n  border-collapse: collapse;\\n}\\n\\n.ui.structured.table > thead > tr > th {\\n  border-left: none;\\n  border-right: none;\\n}\\n\\n.ui.structured.sortable.table > thead > tr > th {\\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.structured.basic.table > tr > th,\\n.ui.structured.basic.table > thead > tr > th,\\n.ui.structured.basic.table > tbody > tr > th,\\n.ui.structured.basic.table > tfoot > tr > th {\\n  border-left: none;\\n  border-right: none;\\n}\\n\\n.ui.structured.celled.table > tr > th,\\n.ui.structured.celled.table > thead > tr > th,\\n.ui.structured.celled.table > tbody > tr > th,\\n.ui.structured.celled.table > tfoot > tr > th,\\n.ui.structured.celled.table > tr > td,\\n.ui.structured.celled.table > tbody > tr > td {\\n  border-left: 1px solid rgba(34, 36, 38, 0.1);\\n  border-right: 1px solid rgba(34, 36, 38, 0.1);\\n}\\n\\n/*--------------\\n   Definition\\n---------------*/\\n\\n.ui.definition.table > thead:not(.full-width) > tr > th:first-child {\\n  pointer-events: none;\\n  background: transparent;\\n  font-weight: normal;\\n  color: rgba(0, 0, 0, 0.4);\\n  -webkit-box-shadow: -1px -1px 0 1px #FFFFFF;\\n          box-shadow: -1px -1px 0 1px #FFFFFF;\\n}\\n\\n.ui.definition.table > tfoot:not(.full-width) > tr > th:first-child {\\n  pointer-events: none;\\n  background: transparent;\\n  font-weight: normal;\\n  color: rgba(0, 0, 0, 0.4);\\n  -webkit-box-shadow: -1px 1px 0 1px #FFFFFF;\\n          box-shadow: -1px 1px 0 1px #FFFFFF;\\n}\\n\\n/* Remove Border */\\n\\n.ui.celled.definition.table > thead:not(.full-width) > tr > th:first-child {\\n  -webkit-box-shadow: 0 -1px 0 1px #FFFFFF;\\n          box-shadow: 0 -1px 0 1px #FFFFFF;\\n}\\n\\n.ui.celled.definition.table > tfoot:not(.full-width) > tr > th:first-child {\\n  -webkit-box-shadow: 0 1px 0 1px #FFFFFF;\\n          box-shadow: 0 1px 0 1px #FFFFFF;\\n}\\n\\n/* Highlight Defining Column */\\n\\n.ui.definition.table > tr > td:first-child:not(.ignored),\\n.ui.definition.table > tbody > tr > td:first-child:not(.ignored),\\n.ui.definition.table tr td.definition {\\n  background: rgba(0, 0, 0, 0.03);\\n  font-weight: bold;\\n  color: rgba(0, 0, 0, 0.95);\\n  text-transform: '';\\n  -webkit-box-shadow: '';\\n          box-shadow: '';\\n  text-align: '';\\n  font-size: 1em;\\n  padding-left: '';\\n  padding-right: '';\\n}\\n\\n/* Fix 2nd Column */\\n\\n.ui.definition.table > thead:not(.full-width) > tr > th:nth-child(2) {\\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.definition.table > tfoot:not(.full-width) > tr > th:nth-child(2) {\\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.definition.table > tr > td:nth-child(2),\\n.ui.definition.table > tbody > tr > td:nth-child(2) {\\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\\n}\\n\\n/*******************************\\n             States\\n*******************************/\\n\\n/*--------------\\n    Positive\\n---------------*/\\n\\n.ui.ui.ui.ui.table tr.positive,\\n.ui.ui.table td.positive {\\n  -webkit-box-shadow: 0 0 0 #A3C293 inset;\\n          box-shadow: 0 0 0 #A3C293 inset;\\n  background: #FCFFF5;\\n  color: #2C662D;\\n}\\n\\n/*--------------\\n     Negative\\n---------------*/\\n\\n.ui.ui.ui.ui.table tr.negative,\\n.ui.ui.table td.negative {\\n  -webkit-box-shadow: 0 0 0 #E0B4B4 inset;\\n          box-shadow: 0 0 0 #E0B4B4 inset;\\n  background: #FFF6F6;\\n  color: #9F3A38;\\n}\\n\\n/*--------------\\n      Error\\n---------------*/\\n\\n.ui.ui.ui.ui.table tr.error,\\n.ui.ui.table td.error {\\n  -webkit-box-shadow: 0 0 0 #E0B4B4 inset;\\n          box-shadow: 0 0 0 #E0B4B4 inset;\\n  background: #FFF6F6;\\n  color: #9F3A38;\\n}\\n\\n/*--------------\\n     Warning\\n---------------*/\\n\\n.ui.ui.ui.ui.table tr.warning,\\n.ui.ui.table td.warning {\\n  -webkit-box-shadow: 0 0 0 #C9BA9B inset;\\n          box-shadow: 0 0 0 #C9BA9B inset;\\n  background: #FFFAF3;\\n  color: #573A08;\\n}\\n\\n/*--------------\\n     Active\\n---------------*/\\n\\n.ui.ui.ui.ui.table tr.active,\\n.ui.ui.table td.active {\\n  -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, 0.87) inset;\\n          box-shadow: 0 0 0 rgba(0, 0, 0, 0.87) inset;\\n  background: #E0E0E0;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n/*--------------\\n     Disabled\\n---------------*/\\n\\n.ui.table tr.disabled td,\\n.ui.table tr td.disabled,\\n.ui.table tr.disabled:hover,\\n.ui.table tr:hover td.disabled {\\n  pointer-events: none;\\n  color: rgba(40, 40, 40, 0.3);\\n}\\n\\n/*******************************\\n          Variations\\n*******************************/\\n\\n/*--------------\\n    Stackable\\n---------------*/\\n\\n@media only screen and (max-width: 991.98px) {\\n  .ui[class*=\\\"tablet stackable\\\"].table,\\n  .ui[class*=\\\"tablet stackable\\\"].table > thead,\\n  .ui[class*=\\\"tablet stackable\\\"].table > thead > tr,\\n  .ui[class*=\\\"tablet stackable\\\"].table > tfoot,\\n  .ui[class*=\\\"tablet stackable\\\"].table > tfoot > tr,\\n  .ui[class*=\\\"tablet stackable\\\"].table > tbody,\\n  .ui[class*=\\\"tablet stackable\\\"].table > tbody > tr,\\n  .ui[class*=\\\"tablet stackable\\\"].table > tr,\\n  .ui[class*=\\\"tablet stackable\\\"].table > thead > tr > th,\\n  .ui[class*=\\\"tablet stackable\\\"].table > tbody > tr > th,\\n  .ui[class*=\\\"tablet stackable\\\"].table > tfoot > tr > th,\\n  .ui[class*=\\\"tablet stackable\\\"].table > tr > th,\\n  .ui[class*=\\\"tablet stackable\\\"].table > tbody > tr > td,\\n  .ui[class*=\\\"tablet stackable\\\"].table > tr > td {\\n    display: block !important;\\n    width: 100% !important;\\n  }\\n\\n  .ui[class*=\\\"tablet stackable\\\"].table {\\n    padding: 0;\\n  }\\n\\n  .ui[class*=\\\"tablet stackable\\\"].table > thead {\\n    display: block;\\n  }\\n\\n  .ui[class*=\\\"tablet stackable\\\"].table > tfoot {\\n    display: block;\\n  }\\n\\n  .ui[class*=\\\"tablet stackable\\\"].table > thead > tr,\\n  .ui[class*=\\\"tablet stackable\\\"].table > tbody > tr,\\n  .ui[class*=\\\"tablet stackable\\\"].table > tfoot > tr,\\n  .ui[class*=\\\"tablet stackable\\\"].table > tr {\\n    padding-top: 1em;\\n    padding-bottom: 1em;\\n    -webkit-box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.1) inset !important;\\n            box-shadow: 0 -1px 0 0 rgba(0, 0, 0, 0.1) inset !important;\\n  }\\n\\n  .ui[class*=\\\"tablet stackable\\\"].table > thead > tr > th,\\n  .ui[class*=\\\"tablet stackable\\\"].table > tbody > tr > th,\\n  .ui[class*=\\\"tablet stackable\\\"].table > tfoot > tr > th,\\n  .ui[class*=\\\"tablet stackable\\\"].table > tr > th,\\n  .ui[class*=\\\"tablet stackable\\\"].table > tbody > tr > td,\\n  .ui[class*=\\\"tablet stackable\\\"].table > tr > td {\\n    background: none;\\n    border: none !important;\\n    padding: 0.25em 0.75em;\\n    -webkit-box-shadow: none !important;\\n            box-shadow: none !important;\\n  }\\n\\n  /* Definition Table */\\n\\n  .ui.definition[class*=\\\"tablet stackable\\\"].table > thead > tr > th:first-child {\\n    -webkit-box-shadow: none !important;\\n            box-shadow: none !important;\\n  }\\n}\\n\\n/*--------------\\n Text Alignment\\n---------------*/\\n\\n.ui.table[class*=\\\"left aligned\\\"],\\n.ui.table [class*=\\\"left aligned\\\"] {\\n  text-align: left;\\n}\\n\\n.ui.table[class*=\\\"center aligned\\\"],\\n.ui.table [class*=\\\"center aligned\\\"] {\\n  text-align: center;\\n}\\n\\n.ui.table[class*=\\\"right aligned\\\"],\\n.ui.table [class*=\\\"right aligned\\\"] {\\n  text-align: right;\\n}\\n\\n/*------------------\\n Vertical Alignment\\n------------------*/\\n\\n.ui.table[class*=\\\"top aligned\\\"],\\n.ui.table [class*=\\\"top aligned\\\"] {\\n  vertical-align: top;\\n}\\n\\n.ui.table[class*=\\\"middle aligned\\\"],\\n.ui.table [class*=\\\"middle aligned\\\"] {\\n  vertical-align: middle;\\n}\\n\\n.ui.table[class*=\\\"bottom aligned\\\"],\\n.ui.table [class*=\\\"bottom aligned\\\"] {\\n  vertical-align: bottom;\\n}\\n\\n/*--------------\\n    Collapsing\\n---------------*/\\n\\n.ui.table th.collapsing,\\n.ui.table td.collapsing {\\n  width: 1px;\\n  white-space: nowrap;\\n}\\n\\n/*--------------\\n     Fixed\\n---------------*/\\n\\n.ui.fixed.table {\\n  table-layout: fixed;\\n}\\n\\n.ui.fixed.table th,\\n.ui.fixed.table td {\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n}\\n\\n/*--------------\\n   Selectable\\n---------------*/\\n\\n.ui.ui.selectable.table > tbody > tr:hover,\\n.ui.table tbody tr td.selectable:hover {\\n  background: rgba(0, 0, 0, 0.05);\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n.ui.ui.selectable.inverted.table > tbody > tr:hover,\\n.ui.inverted.table tbody tr td.selectable:hover {\\n  background: rgba(255, 255, 255, 0.08);\\n  color: #ffffff;\\n}\\n\\n/* Selectable Cell Link */\\n\\n.ui.table tbody tr td.selectable {\\n  padding: 0;\\n}\\n\\n.ui.table tbody tr td.selectable > a:not(.ui) {\\n  display: block;\\n  color: inherit;\\n  padding: 0.78571429em 0.78571429em;\\n}\\n\\n.ui.table > tr > td.selectable,\\n.ui.table > tbody > tr > td.selectable,\\n.ui.selectable.table > tbody > tr,\\n.ui.selectable.table > tr {\\n  cursor: pointer;\\n}\\n\\n/* Other States */\\n\\n.ui.ui.selectable.table tr.error:hover,\\n.ui.table tr td.selectable.error:hover,\\n.ui.selectable.table tr:hover td.error {\\n  background: #ffe7e7;\\n  color: #943634;\\n}\\n\\n.ui.ui.selectable.table tr.warning:hover,\\n.ui.table tr td.selectable.warning:hover,\\n.ui.selectable.table tr:hover td.warning {\\n  background: #fff4e4;\\n  color: #493107;\\n}\\n\\n.ui.ui.selectable.table tr.active:hover,\\n.ui.table tr td.selectable.active:hover,\\n.ui.selectable.table tr:hover td.active {\\n  background: #E0E0E0;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.ui.selectable.table tr.positive:hover,\\n.ui.table tr td.selectable.positive:hover,\\n.ui.selectable.table tr:hover td.positive {\\n  background: #f7ffe6;\\n  color: #275b28;\\n}\\n\\n.ui.ui.selectable.table tr.negative:hover,\\n.ui.table tr td.selectable.negative:hover,\\n.ui.selectable.table tr:hover td.negative {\\n  background: #ffe7e7;\\n  color: #943634;\\n}\\n\\n/*-------------------\\n      Attached\\n--------------------*/\\n\\n/* Middle */\\n\\n.ui.attached.table {\\n  top: 0;\\n  bottom: 0;\\n  border-radius: 0;\\n  margin: 0 -1px;\\n  width: calc(100% + 2px);\\n  max-width: calc(100% + 2px);\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  border: 1px solid #D4D4D5;\\n}\\n\\n.ui.attached + .ui.attached.table:not(.top) {\\n  border-top: none;\\n}\\n\\n/* Top */\\n\\n.ui[class*=\\\"top attached\\\"].table {\\n  bottom: 0;\\n  margin-bottom: 0;\\n  top: 0;\\n  margin-top: 1em;\\n  border-radius: 0.28571429rem 0.28571429rem 0 0;\\n}\\n\\n.ui.table[class*=\\\"top attached\\\"]:first-child {\\n  margin-top: 0;\\n}\\n\\n/* Bottom */\\n\\n.ui[class*=\\\"bottom attached\\\"].table {\\n  bottom: 0;\\n  margin-top: 0;\\n  top: 0;\\n  margin-bottom: 1em;\\n  -webkit-box-shadow: none, none;\\n          box-shadow: none, none;\\n  border-radius: 0 0 0.28571429rem 0.28571429rem;\\n}\\n\\n.ui[class*=\\\"bottom attached\\\"].table:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/*--------------\\n     Striped\\n---------------*/\\n\\n/* Table Striping */\\n\\n.ui.striped.table > tr:nth-child(2n),\\n.ui.striped.table > tbody > tr:nth-child(2n) {\\n  background-color: rgba(0, 0, 50, 0.02);\\n}\\n\\n/* Stripes */\\n\\n.ui.inverted.striped.table > tr:nth-child(2n),\\n.ui.inverted.striped.table > tbody > tr:nth-child(2n) {\\n  background-color: rgba(255, 255, 255, 0.05);\\n}\\n\\n/* Allow striped active hover */\\n\\n.ui.striped.selectable.selectable.selectable.table tbody tr.active:hover {\\n  background: #EFEFEF;\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/*--------------\\n   Single Line\\n---------------*/\\n\\n.ui.table[class*=\\\"single line\\\"],\\n.ui.table [class*=\\\"single line\\\"] {\\n  white-space: nowrap;\\n}\\n\\n/*-------------------\\n       Colors\\n--------------------*/\\n\\n.ui.primary.table {\\n  border-top: 0.2em solid #2185D0;\\n}\\n\\n.ui.inverted.primary.table {\\n  background-color: #2185D0;\\n  color: #FFFFFF;\\n}\\n\\n.ui.ui.ui.ui.table tr.primary,\\n.ui.ui.table td.primary {\\n  -webkit-box-shadow: 0 0 0 #1a69a4 inset;\\n          box-shadow: 0 0 0 #1a69a4 inset;\\n  background: #ddf4ff;\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.ui.selectable.table tr.primary:hover,\\n.ui.table tr td.selectable.primary:hover,\\n.ui.selectable.table tr:hover td.primary {\\n  background: #d3f1ff;\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.secondary.table {\\n  border-top: 0.2em solid #1B1C1D;\\n}\\n\\n.ui.inverted.secondary.table {\\n  background-color: #1B1C1D;\\n  color: #FFFFFF;\\n}\\n\\n.ui.ui.ui.ui.table tr.secondary,\\n.ui.ui.table td.secondary {\\n  -webkit-box-shadow: 0 0 0 #020203 inset;\\n          box-shadow: 0 0 0 #020203 inset;\\n  background: #dddddd;\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.ui.selectable.table tr.secondary:hover,\\n.ui.table tr td.selectable.secondary:hover,\\n.ui.selectable.table tr:hover td.secondary {\\n  background: #e2e2e2;\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.red.table {\\n  border-top: 0.2em solid #DB2828;\\n}\\n\\n.ui.inverted.red.table {\\n  background-color: #DB2828;\\n  color: #FFFFFF;\\n}\\n\\n.ui.ui.ui.ui.table tr.red,\\n.ui.ui.table td.red {\\n  -webkit-box-shadow: 0 0 0 #b21e1e inset;\\n          box-shadow: 0 0 0 #b21e1e inset;\\n  background: #ffe1df;\\n  color: #DB2828;\\n}\\n\\n.ui.ui.selectable.table tr.red:hover,\\n.ui.table tr td.selectable.red:hover,\\n.ui.selectable.table tr:hover td.red {\\n  background: #ffd7d5;\\n  color: #DB2828;\\n}\\n\\n.ui.orange.table {\\n  border-top: 0.2em solid #F2711C;\\n}\\n\\n.ui.inverted.orange.table {\\n  background-color: #F2711C;\\n  color: #FFFFFF;\\n}\\n\\n.ui.ui.ui.ui.table tr.orange,\\n.ui.ui.table td.orange {\\n  -webkit-box-shadow: 0 0 0 #cf590c inset;\\n          box-shadow: 0 0 0 #cf590c inset;\\n  background: #ffe7d1;\\n  color: #F2711C;\\n}\\n\\n.ui.ui.selectable.table tr.orange:hover,\\n.ui.table tr td.selectable.orange:hover,\\n.ui.selectable.table tr:hover td.orange {\\n  background: #fae1cc;\\n  color: #F2711C;\\n}\\n\\n.ui.yellow.table {\\n  border-top: 0.2em solid #FBBD08;\\n}\\n\\n.ui.inverted.yellow.table {\\n  background-color: #FBBD08;\\n  color: #FFFFFF;\\n}\\n\\n.ui.ui.ui.ui.table tr.yellow,\\n.ui.ui.table td.yellow {\\n  -webkit-box-shadow: 0 0 0 #cd9903 inset;\\n          box-shadow: 0 0 0 #cd9903 inset;\\n  background: #fff9d2;\\n  color: #B58105;\\n}\\n\\n.ui.ui.selectable.table tr.yellow:hover,\\n.ui.table tr td.selectable.yellow:hover,\\n.ui.selectable.table tr:hover td.yellow {\\n  background: #fbf5cc;\\n  color: #B58105;\\n}\\n\\n.ui.olive.table {\\n  border-top: 0.2em solid #B5CC18;\\n}\\n\\n.ui.inverted.olive.table {\\n  background-color: #B5CC18;\\n  color: #FFFFFF;\\n}\\n\\n.ui.ui.ui.ui.table tr.olive,\\n.ui.ui.table td.olive {\\n  -webkit-box-shadow: 0 0 0 #8d9e13 inset;\\n          box-shadow: 0 0 0 #8d9e13 inset;\\n  background: #f7fae4;\\n  color: #8ABC1E;\\n}\\n\\n.ui.ui.selectable.table tr.olive:hover,\\n.ui.table tr td.selectable.olive:hover,\\n.ui.selectable.table tr:hover td.olive {\\n  background: #f6fada;\\n  color: #8ABC1E;\\n}\\n\\n.ui.green.table {\\n  border-top: 0.2em solid #21BA45;\\n}\\n\\n.ui.inverted.green.table {\\n  background-color: #21BA45;\\n  color: #FFFFFF;\\n}\\n\\n.ui.ui.ui.ui.table tr.green,\\n.ui.ui.table td.green {\\n  -webkit-box-shadow: 0 0 0 #198f35 inset;\\n          box-shadow: 0 0 0 #198f35 inset;\\n  background: #d5f5d9;\\n  color: #1EBC30;\\n}\\n\\n.ui.ui.selectable.table tr.green:hover,\\n.ui.table tr td.selectable.green:hover,\\n.ui.selectable.table tr:hover td.green {\\n  background: #d2eed5;\\n  color: #1EBC30;\\n}\\n\\n.ui.teal.table {\\n  border-top: 0.2em solid #00B5AD;\\n}\\n\\n.ui.inverted.teal.table {\\n  background-color: #00B5AD;\\n  color: #FFFFFF;\\n}\\n\\n.ui.ui.ui.ui.table tr.teal,\\n.ui.ui.table td.teal {\\n  -webkit-box-shadow: 0 0 0 #00827c inset;\\n          box-shadow: 0 0 0 #00827c inset;\\n  background: #e2ffff;\\n  color: #10A3A3;\\n}\\n\\n.ui.ui.selectable.table tr.teal:hover,\\n.ui.table tr td.selectable.teal:hover,\\n.ui.selectable.table tr:hover td.teal {\\n  background: #d8ffff;\\n  color: #10A3A3;\\n}\\n\\n.ui.blue.table {\\n  border-top: 0.2em solid #2185D0;\\n}\\n\\n.ui.inverted.blue.table {\\n  background-color: #2185D0;\\n  color: #FFFFFF;\\n}\\n\\n.ui.ui.ui.ui.table tr.blue,\\n.ui.ui.table td.blue {\\n  -webkit-box-shadow: 0 0 0 #1a69a4 inset;\\n          box-shadow: 0 0 0 #1a69a4 inset;\\n  background: #ddf4ff;\\n  color: #2185D0;\\n}\\n\\n.ui.ui.selectable.table tr.blue:hover,\\n.ui.table tr td.selectable.blue:hover,\\n.ui.selectable.table tr:hover td.blue {\\n  background: #d3f1ff;\\n  color: #2185D0;\\n}\\n\\n.ui.violet.table {\\n  border-top: 0.2em solid #6435C9;\\n}\\n\\n.ui.inverted.violet.table {\\n  background-color: #6435C9;\\n  color: #FFFFFF;\\n}\\n\\n.ui.ui.ui.ui.table tr.violet,\\n.ui.ui.table td.violet {\\n  -webkit-box-shadow: 0 0 0 #502aa1 inset;\\n          box-shadow: 0 0 0 #502aa1 inset;\\n  background: #ece9fe;\\n  color: #6435C9;\\n}\\n\\n.ui.ui.selectable.table tr.violet:hover,\\n.ui.table tr td.selectable.violet:hover,\\n.ui.selectable.table tr:hover td.violet {\\n  background: #e3deff;\\n  color: #6435C9;\\n}\\n\\n.ui.purple.table {\\n  border-top: 0.2em solid #A333C8;\\n}\\n\\n.ui.inverted.purple.table {\\n  background-color: #A333C8;\\n  color: #FFFFFF;\\n}\\n\\n.ui.ui.ui.ui.table tr.purple,\\n.ui.ui.table td.purple {\\n  -webkit-box-shadow: 0 0 0 #82299f inset;\\n          box-shadow: 0 0 0 #82299f inset;\\n  background: #f8e3ff;\\n  color: #A333C8;\\n}\\n\\n.ui.ui.selectable.table tr.purple:hover,\\n.ui.table tr td.selectable.purple:hover,\\n.ui.selectable.table tr:hover td.purple {\\n  background: #f5d9ff;\\n  color: #A333C8;\\n}\\n\\n.ui.pink.table {\\n  border-top: 0.2em solid #E03997;\\n}\\n\\n.ui.inverted.pink.table {\\n  background-color: #E03997;\\n  color: #FFFFFF;\\n}\\n\\n.ui.ui.ui.ui.table tr.pink,\\n.ui.ui.table td.pink {\\n  -webkit-box-shadow: 0 0 0 #c71f7e inset;\\n          box-shadow: 0 0 0 #c71f7e inset;\\n  background: #ffe8f9;\\n  color: #E03997;\\n}\\n\\n.ui.ui.selectable.table tr.pink:hover,\\n.ui.table tr td.selectable.pink:hover,\\n.ui.selectable.table tr:hover td.pink {\\n  background: #ffdef6;\\n  color: #E03997;\\n}\\n\\n.ui.brown.table {\\n  border-top: 0.2em solid #A5673F;\\n}\\n\\n.ui.inverted.brown.table {\\n  background-color: #A5673F;\\n  color: #FFFFFF;\\n}\\n\\n.ui.ui.ui.ui.table tr.brown,\\n.ui.ui.table td.brown {\\n  -webkit-box-shadow: 0 0 0 #805031 inset;\\n          box-shadow: 0 0 0 #805031 inset;\\n  background: #f7e5d2;\\n  color: #A5673F;\\n}\\n\\n.ui.ui.selectable.table tr.brown:hover,\\n.ui.table tr td.selectable.brown:hover,\\n.ui.selectable.table tr:hover td.brown {\\n  background: #efe0cf;\\n  color: #A5673F;\\n}\\n\\n.ui.grey.table {\\n  border-top: 0.2em solid #767676;\\n}\\n\\n.ui.inverted.grey.table {\\n  background-color: #767676;\\n  color: #FFFFFF;\\n}\\n\\n.ui.ui.ui.ui.table tr.grey,\\n.ui.ui.table td.grey {\\n  -webkit-box-shadow: 0 0 0 #5d5d5d inset;\\n          box-shadow: 0 0 0 #5d5d5d inset;\\n  background: #DCDDDE;\\n  color: #767676;\\n}\\n\\n.ui.ui.selectable.table tr.grey:hover,\\n.ui.table tr td.selectable.grey:hover,\\n.ui.selectable.table tr:hover td.grey {\\n  background: #c2c4c5;\\n  color: #767676;\\n}\\n\\n.ui.black.table {\\n  border-top: 0.2em solid #1B1C1D;\\n}\\n\\n.ui.inverted.black.table {\\n  background-color: #1B1C1D;\\n  color: #FFFFFF;\\n}\\n\\n.ui.ui.ui.ui.table tr.black,\\n.ui.ui.table td.black {\\n  -webkit-box-shadow: 0 0 0 #020203 inset;\\n          box-shadow: 0 0 0 #020203 inset;\\n  background: #545454;\\n  color: #FFFFFF;\\n}\\n\\n.ui.ui.selectable.table tr.black:hover,\\n.ui.table tr td.selectable.black:hover,\\n.ui.selectable.table tr:hover td.black {\\n  background: #000000;\\n  color: #FFFFFF;\\n}\\n\\n/*--------------\\n  Column Count\\n---------------*/\\n\\n/* Grid Based */\\n\\n.ui.one.column.table td {\\n  width: 100%;\\n}\\n\\n.ui.two.column.table td {\\n  width: 50%;\\n}\\n\\n.ui.three.column.table td {\\n  width: 33.33333333%;\\n}\\n\\n.ui.four.column.table td {\\n  width: 25%;\\n}\\n\\n.ui.five.column.table td {\\n  width: 20%;\\n}\\n\\n.ui.six.column.table td {\\n  width: 16.66666667%;\\n}\\n\\n.ui.seven.column.table td {\\n  width: 14.28571429%;\\n}\\n\\n.ui.eight.column.table td {\\n  width: 12.5%;\\n}\\n\\n.ui.nine.column.table td {\\n  width: 11.11111111%;\\n}\\n\\n.ui.ten.column.table td {\\n  width: 10%;\\n}\\n\\n.ui.eleven.column.table td {\\n  width: 9.09090909%;\\n}\\n\\n.ui.twelve.column.table td {\\n  width: 8.33333333%;\\n}\\n\\n.ui.thirteen.column.table td {\\n  width: 7.69230769%;\\n}\\n\\n.ui.fourteen.column.table td {\\n  width: 7.14285714%;\\n}\\n\\n.ui.fifteen.column.table td {\\n  width: 6.66666667%;\\n}\\n\\n.ui.sixteen.column.table td {\\n  width: 6.25%;\\n}\\n\\n/* Column Width */\\n\\n.ui.table th.one.wide,\\n.ui.table td.one.wide {\\n  width: 6.25%;\\n}\\n\\n.ui.table th.two.wide,\\n.ui.table td.two.wide {\\n  width: 12.5%;\\n}\\n\\n.ui.table th.three.wide,\\n.ui.table td.three.wide {\\n  width: 18.75%;\\n}\\n\\n.ui.table th.four.wide,\\n.ui.table td.four.wide {\\n  width: 25%;\\n}\\n\\n.ui.table th.five.wide,\\n.ui.table td.five.wide {\\n  width: 31.25%;\\n}\\n\\n.ui.table th.six.wide,\\n.ui.table td.six.wide {\\n  width: 37.5%;\\n}\\n\\n.ui.table th.seven.wide,\\n.ui.table td.seven.wide {\\n  width: 43.75%;\\n}\\n\\n.ui.table th.eight.wide,\\n.ui.table td.eight.wide {\\n  width: 50%;\\n}\\n\\n.ui.table th.nine.wide,\\n.ui.table td.nine.wide {\\n  width: 56.25%;\\n}\\n\\n.ui.table th.ten.wide,\\n.ui.table td.ten.wide {\\n  width: 62.5%;\\n}\\n\\n.ui.table th.eleven.wide,\\n.ui.table td.eleven.wide {\\n  width: 68.75%;\\n}\\n\\n.ui.table th.twelve.wide,\\n.ui.table td.twelve.wide {\\n  width: 75%;\\n}\\n\\n.ui.table th.thirteen.wide,\\n.ui.table td.thirteen.wide {\\n  width: 81.25%;\\n}\\n\\n.ui.table th.fourteen.wide,\\n.ui.table td.fourteen.wide {\\n  width: 87.5%;\\n}\\n\\n.ui.table th.fifteen.wide,\\n.ui.table td.fifteen.wide {\\n  width: 93.75%;\\n}\\n\\n.ui.table th.sixteen.wide,\\n.ui.table td.sixteen.wide {\\n  width: 100%;\\n}\\n\\n/*--------------\\n    Sortable\\n---------------*/\\n\\n.ui.sortable.table > thead > tr > th {\\n  cursor: pointer;\\n  white-space: nowrap;\\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.sortable.table > thead > tr > th:first-child {\\n  border-left: none;\\n}\\n\\n.ui.sortable.table thead th.sorted,\\n.ui.sortable.table thead th.sorted:hover {\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n}\\n\\n.ui.sortable.table > thead > tr > th:after {\\n  display: none;\\n  font-style: normal;\\n  font-weight: normal;\\n  text-decoration: inherit;\\n  content: '';\\n  height: 1em;\\n  width: auto;\\n  opacity: 0.8;\\n  margin: 0 0 0 0.5em;\\n  font-family: 'Icons';\\n}\\n\\n.ui.sortable.table thead th.ascending:after {\\n  content: '\\\\f0d8';\\n}\\n\\n.ui.sortable.table thead th.descending:after {\\n  content: '\\\\f0d7';\\n}\\n\\n/* Hover */\\n\\n.ui.sortable.table th.disabled:hover {\\n  cursor: auto;\\n  color: rgba(40, 40, 40, 0.3);\\n}\\n\\n.ui.sortable.table > thead > tr > th:hover {\\n  background: rgba(0, 0, 0, 0.05);\\n  color: rgba(0, 0, 0, 0.8);\\n}\\n\\n/* Sorted */\\n\\n.ui.sortable.table thead th.sorted {\\n  background: rgba(0, 0, 0, 0.05);\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n.ui.sortable.table thead th.sorted:after {\\n  display: inline-block;\\n}\\n\\n/* Sorted Hover */\\n\\n.ui.sortable.table thead th.sorted:hover {\\n  background: rgba(0, 0, 0, 0.05);\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/* Inverted */\\n\\n.ui.inverted.sortable.table thead th.sorted {\\n  background: rgba(255, 255, 255, 0.15) -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\\n  background: rgba(255, 255, 255, 0.15) linear-gradient(transparent, rgba(0, 0, 0, 0.05));\\n  color: #ffffff;\\n}\\n\\n.ui.inverted.sortable.table > thead > tr > th:hover {\\n  background: rgba(255, 255, 255, 0.08) -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\\n  background: rgba(255, 255, 255, 0.08) linear-gradient(transparent, rgba(0, 0, 0, 0.05));\\n  color: #ffffff;\\n}\\n\\n.ui.inverted.sortable.table > thead > tr > th {\\n  border-left-color: transparent;\\n  border-right-color: transparent;\\n}\\n\\n/*--------------\\n    Inverted\\n---------------*/\\n\\n/* Text Color */\\n\\n.ui.inverted.table {\\n  background: #333333;\\n  color: rgba(255, 255, 255, 0.9);\\n  border: none;\\n}\\n\\n.ui.ui.inverted.table > thead > tr > th,\\n.ui.ui.inverted.table > tbody > tr > th,\\n.ui.ui.inverted.table > tfoot > tr > th,\\n.ui.ui.inverted.table > tr > th {\\n  background-color: rgba(0, 0, 0, 0.15);\\n  border-color: rgba(255, 255, 255, 0.1);\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.inverted.table > tbody > tr > td,\\n.ui.inverted.table > tr > td {\\n  border-color: rgba(255, 255, 255, 0.1);\\n}\\n\\n.ui.inverted.table tr.disabled td,\\n.ui.inverted.table tr td.disabled,\\n.ui.inverted.table tr.disabled:hover td,\\n.ui.inverted.table tr:hover td.disabled {\\n  pointer-events: none;\\n  color: rgba(225, 225, 225, 0.3);\\n}\\n\\n.ui.inverted.table tr td.disabled:not([class=\\\"disabled\\\"]),\\n.ui.inverted.table tr.disabled:not([class=\\\"disabled\\\"]) td,\\n.ui.inverted.table tr.disabled td[class]:not(.disabled),\\n.ui.inverted.table tr:hover td.disabled:not([class=\\\"disabled\\\"]) {\\n  color: rgba(40, 40, 40, 0.3);\\n}\\n\\n/* Definition */\\n\\n.ui.inverted.definition.table > tfoot:not(.full-width) > tr > th:first-child,\\n.ui.inverted.definition.table > thead:not(.full-width) > tr > th:first-child {\\n  background: #FFFFFF;\\n}\\n\\n.ui.inverted.definition.table > tbody > tr > td:first-child,\\n.ui.inverted.definition.table > tr > td:first-child {\\n  background: rgba(255, 255, 255, 0.02);\\n  color: #ffffff;\\n}\\n\\n/*--------------\\n   Collapsing\\n---------------*/\\n\\n.ui.collapsing.table {\\n  width: auto;\\n}\\n\\n/*--------------\\n      Basic\\n---------------*/\\n\\n.ui.basic.table {\\n  background: transparent;\\n  border: 1px solid rgba(34, 36, 38, 0.15);\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.basic.table > thead,\\n.ui.basic.table > tfoot {\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.basic.table > thead > tr > th,\\n.ui.basic.table > tbody > tr > th,\\n.ui.basic.table > tfoot > tr > th,\\n.ui.basic.table > tr > th {\\n  background: transparent;\\n  border-left: none;\\n}\\n\\n.ui.basic.table > tbody > tr {\\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.basic.table > tbody > tr > td,\\n.ui.basic.table > tr > td {\\n  background: transparent;\\n}\\n\\n.ui.basic.striped.table > tbody > tr:nth-child(2n) {\\n  background-color: rgba(0, 0, 0, 0.05);\\n}\\n\\n/* Very Basic */\\n\\n.ui[class*=\\\"very basic\\\"].table {\\n  border: none;\\n}\\n\\n.ui[class*=\\\"very basic\\\"].table:not(.sortable):not(.striped) > tr > th,\\n.ui[class*=\\\"very basic\\\"].table:not(.sortable):not(.striped) > thead > tr > th,\\n.ui[class*=\\\"very basic\\\"].table:not(.sortable):not(.striped) > tbody > tr > th,\\n.ui[class*=\\\"very basic\\\"].table:not(.sortable):not(.striped) > tfoot > tr > th,\\n.ui[class*=\\\"very basic\\\"].table:not(.sortable):not(.striped) > tr > td,\\n.ui[class*=\\\"very basic\\\"].table:not(.sortable):not(.striped) > tbody > tr > td {\\n  padding: '';\\n}\\n\\n.ui[class*=\\\"very basic\\\"].table:not(.sortable):not(.striped) > tr > th:first-child,\\n.ui[class*=\\\"very basic\\\"].table:not(.sortable):not(.striped) > thead > tr > th:first-child,\\n.ui[class*=\\\"very basic\\\"].table:not(.sortable):not(.striped) > tbody > tr > th:first-child,\\n.ui[class*=\\\"very basic\\\"].table:not(.sortable):not(.striped) > tfoot > tr > th:first-child,\\n.ui[class*=\\\"very basic\\\"].table:not(.sortable):not(.striped) > tr > td:first-child,\\n.ui[class*=\\\"very basic\\\"].table:not(.sortable):not(.striped) > tbody > tr > td:first-child {\\n  padding-left: 0;\\n}\\n\\n.ui[class*=\\\"very basic\\\"].table:not(.sortable):not(.striped) > tr > th:last-child,\\n.ui[class*=\\\"very basic\\\"].table:not(.sortable):not(.striped) > thead > tr > th:last-child,\\n.ui[class*=\\\"very basic\\\"].table:not(.sortable):not(.striped) > tbody > tr > th:last-child,\\n.ui[class*=\\\"very basic\\\"].table:not(.sortable):not(.striped) > tfoot > tr > th:last-child,\\n.ui[class*=\\\"very basic\\\"].table:not(.sortable):not(.striped) > tr > td:last-child,\\n.ui[class*=\\\"very basic\\\"].table:not(.sortable):not(.striped) > tbody > tr > td:last-child {\\n  padding-right: 0;\\n}\\n\\n.ui[class*=\\\"very basic\\\"].table:not(.sortable):not(.striped) > thead > tr:first-child > th {\\n  padding-top: 0;\\n}\\n\\n/*--------------\\n     Celled\\n---------------*/\\n\\n.ui.celled.table > tr > th,\\n.ui.celled.table > thead > tr > th,\\n.ui.celled.table > tbody > tr > th,\\n.ui.celled.table > tfoot > tr > th,\\n.ui.celled.table > tr > td,\\n.ui.celled.table > tbody > tr > td {\\n  border-left: 1px solid rgba(34, 36, 38, 0.1);\\n}\\n\\n.ui.inverted.celled.table > tbody > tr > td,\\n.ui.inverted.celled.table > tr > td {\\n  border-left: 1px solid rgba(255, 255, 255, 0.1);\\n}\\n\\n.ui.celled.table > tr > th:first-child,\\n.ui.celled.table > thead > tr > th:first-child,\\n.ui.celled.table > tbody > tr > th:first-child,\\n.ui.celled.table > tfoot > tr > th:first-child,\\n.ui.celled.table > tr > td:first-child,\\n.ui.celled.table > tbody > tr > td:first-child {\\n  border-left: none;\\n}\\n\\n/*--------------\\n     Padded\\n---------------*/\\n\\n.ui.padded.table > tr > th,\\n.ui.padded.table > thead > tr > th,\\n.ui.padded.table > tbody > tr > th,\\n.ui.padded.table > tfoot > tr > th {\\n  padding-left: 1em;\\n  padding-right: 1em;\\n}\\n\\n.ui.padded.table > tr > th,\\n.ui.padded.table > thead > tr > th,\\n.ui.padded.table > tbody > tr > th,\\n.ui.padded.table > tfoot > tr > th,\\n.ui.padded.table > tr > td,\\n.ui.padded.table > tbody > tr > td {\\n  padding: 1em 1em;\\n}\\n\\n/* Very */\\n\\n.ui[class*=\\\"very padded\\\"].table > tr > th,\\n.ui[class*=\\\"very padded\\\"].table > thead > tr > th,\\n.ui[class*=\\\"very padded\\\"].table > tbody > tr > th,\\n.ui[class*=\\\"very padded\\\"].table > tfoot > tr > th {\\n  padding-left: 1.5em;\\n  padding-right: 1.5em;\\n}\\n\\n.ui[class*=\\\"very padded\\\"].table > tr > td,\\n.ui[class*=\\\"very padded\\\"].table > tbody > tr > td {\\n  padding: 1.5em 1.5em;\\n}\\n\\n/*--------------\\n     Compact\\n---------------*/\\n\\n.ui.compact.table > tr > th,\\n.ui.compact.table > thead > tr > th,\\n.ui.compact.table > tbody > tr > th,\\n.ui.compact.table > tfoot > tr > th {\\n  padding-left: 0.7em;\\n  padding-right: 0.7em;\\n}\\n\\n.ui.compact.table > tr > td,\\n.ui.compact.table > tbody > tr > td {\\n  padding: 0.5em 0.7em;\\n}\\n\\n/* Very */\\n\\n.ui[class*=\\\"very compact\\\"].table > tr > th,\\n.ui[class*=\\\"very compact\\\"].table > thead > tr > th,\\n.ui[class*=\\\"very compact\\\"].table > tbody > tr > th,\\n.ui[class*=\\\"very compact\\\"].table > tfoot > tr > th {\\n  padding-left: 0.6em;\\n  padding-right: 0.6em;\\n}\\n\\n.ui[class*=\\\"very compact\\\"].table > tr > td,\\n.ui[class*=\\\"very compact\\\"].table > tbody > tr > td {\\n  padding: 0.4em 0.6em;\\n}\\n\\n/*--------------\\n      Sizes\\n---------------*/\\n\\n/* Small */\\n\\n.ui.small.table {\\n  font-size: 0.9em;\\n}\\n\\n/* Standard */\\n\\n.ui.table {\\n  font-size: 1em;\\n}\\n\\n/* Large */\\n\\n.ui.large.table {\\n  font-size: 1.1em;\\n}\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Ad\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Copyright 2013 Contributors\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n         Advertisement\\n*******************************/\\n\\n.ui.ad {\\n  display: block;\\n  overflow: hidden;\\n  margin: 1em 0;\\n}\\n\\n.ui.ad:first-child {\\n  margin: 0;\\n}\\n\\n.ui.ad:last-child {\\n  margin: 0;\\n}\\n\\n.ui.ad iframe {\\n  margin: 0;\\n  padding: 0;\\n  border: none;\\n  overflow: hidden;\\n}\\n\\n/*--------------\\n     Common\\n---------------*/\\n\\n/* Leaderboard */\\n\\n.ui.leaderboard.ad {\\n  width: 728px;\\n  height: 90px;\\n}\\n\\n/* Medium Rectangle */\\n\\n.ui[class*=\\\"medium rectangle\\\"].ad {\\n  width: 300px;\\n  height: 250px;\\n}\\n\\n/* Large Rectangle */\\n\\n.ui[class*=\\\"large rectangle\\\"].ad {\\n  width: 336px;\\n  height: 280px;\\n}\\n\\n/* Half Page */\\n\\n.ui[class*=\\\"half page\\\"].ad {\\n  width: 300px;\\n  height: 600px;\\n}\\n\\n/*--------------\\n     Square\\n---------------*/\\n\\n/* Square */\\n\\n.ui.square.ad {\\n  width: 250px;\\n  height: 250px;\\n}\\n\\n/* Small Square */\\n\\n.ui[class*=\\\"small square\\\"].ad {\\n  width: 200px;\\n  height: 200px;\\n}\\n\\n/*--------------\\n    Rectangle\\n---------------*/\\n\\n/* Small Rectangle */\\n\\n.ui[class*=\\\"small rectangle\\\"].ad {\\n  width: 180px;\\n  height: 150px;\\n}\\n\\n/* Vertical Rectangle */\\n\\n.ui[class*=\\\"vertical rectangle\\\"].ad {\\n  width: 240px;\\n  height: 400px;\\n}\\n\\n/*--------------\\n     Button\\n---------------*/\\n\\n.ui.button.ad {\\n  width: 120px;\\n  height: 90px;\\n}\\n\\n.ui[class*=\\\"square button\\\"].ad {\\n  width: 125px;\\n  height: 125px;\\n}\\n\\n.ui[class*=\\\"small button\\\"].ad {\\n  width: 120px;\\n  height: 60px;\\n}\\n\\n/*--------------\\n   Skyscrapers\\n---------------*/\\n\\n/* Skyscraper */\\n\\n.ui.skyscraper.ad {\\n  width: 120px;\\n  height: 600px;\\n}\\n\\n/* Wide Skyscraper */\\n\\n.ui[class*=\\\"wide skyscraper\\\"].ad {\\n  width: 160px;\\n}\\n\\n/*--------------\\n     Banners\\n---------------*/\\n\\n/* Banner */\\n\\n.ui.banner.ad {\\n  width: 468px;\\n  height: 60px;\\n}\\n\\n/* Vertical Banner */\\n\\n.ui[class*=\\\"vertical banner\\\"].ad {\\n  width: 120px;\\n  height: 240px;\\n}\\n\\n/* Top Banner */\\n\\n.ui[class*=\\\"top banner\\\"].ad {\\n  width: 930px;\\n  height: 180px;\\n}\\n\\n/* Half Banner */\\n\\n.ui[class*=\\\"half banner\\\"].ad {\\n  width: 234px;\\n  height: 60px;\\n}\\n\\n/*--------------\\n    Boards\\n---------------*/\\n\\n/* Leaderboard */\\n\\n.ui[class*=\\\"large leaderboard\\\"].ad {\\n  width: 970px;\\n  height: 90px;\\n}\\n\\n/* Billboard */\\n\\n.ui.billboard.ad {\\n  width: 970px;\\n  height: 250px;\\n}\\n\\n/*--------------\\n    Panorama\\n---------------*/\\n\\n/* Panorama */\\n\\n.ui.panorama.ad {\\n  width: 980px;\\n  height: 120px;\\n}\\n\\n/*--------------\\n     Netboard\\n---------------*/\\n\\n/* Netboard */\\n\\n.ui.netboard.ad {\\n  width: 580px;\\n  height: 400px;\\n}\\n\\n/*--------------\\n     Mobile\\n---------------*/\\n\\n/* Large Mobile Banner */\\n\\n.ui[class*=\\\"large mobile banner\\\"].ad {\\n  width: 320px;\\n  height: 100px;\\n}\\n\\n/* Mobile Leaderboard */\\n\\n.ui[class*=\\\"mobile leaderboard\\\"].ad {\\n  width: 320px;\\n  height: 50px;\\n}\\n\\n/*******************************\\n             Types\\n*******************************/\\n\\n/* Mobile Sizes */\\n\\n.ui.mobile.ad {\\n  display: none;\\n}\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.mobile.ad {\\n    display: block;\\n  }\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n.ui.centered.ad {\\n  margin-left: auto;\\n  margin-right: auto;\\n}\\n\\n.ui.test.ad {\\n  position: relative;\\n  background: #545454;\\n}\\n\\n.ui.test.ad:after {\\n  position: absolute;\\n  top: 50%;\\n  left: 50%;\\n  width: 100%;\\n  text-align: center;\\n  -webkit-transform: translateX(-50%) translateY(-50%);\\n  transform: translateX(-50%) translateY(-50%);\\n  content: 'Ad';\\n  color: #FFFFFF;\\n  font-size: 1em;\\n  font-weight: bold;\\n}\\n\\n.ui.mobile.test.ad:after {\\n  font-size: 0.85714286em;\\n}\\n\\n.ui.test.ad[data-text]:after {\\n  content: attr(data-text);\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n    User Variable Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Card\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Standard\\n*******************************/\\n\\n/*--------------\\n      Card\\n---------------*/\\n\\n.ui.cards > .card,\\n.ui.card {\\n  max-width: 100%;\\n  position: relative;\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  width: 290px;\\n  min-height: 0;\\n  background: #FFFFFF;\\n  padding: 0;\\n  border: none;\\n  border-radius: 0.28571429rem;\\n  -webkit-box-shadow: 0 1px 3px 0 #D4D4D5, 0 0 0 1px #D4D4D5;\\n          box-shadow: 0 1px 3px 0 #D4D4D5, 0 0 0 1px #D4D4D5;\\n  transition: box-shadow 0.1s ease, -webkit-transform 0.1s ease;\\n  -webkit-transition: -webkit-box-shadow 0.1s ease, -webkit-transform 0.1s ease;\\n  transition: -webkit-box-shadow 0.1s ease, -webkit-transform 0.1s ease;\\n  transition: box-shadow 0.1s ease, transform 0.1s ease;\\n  transition: box-shadow 0.1s ease, transform 0.1s ease, -webkit-box-shadow 0.1s ease, -webkit-transform 0.1s ease;\\n  transition: box-shadow 0.1s ease, transform 0.1s ease, -webkit-transform 0.1s ease;\\n  z-index: '';\\n  word-wrap: break-word;\\n}\\n\\n.ui.card {\\n  margin: 1em 0;\\n}\\n\\n.ui.cards > .card a,\\n.ui.card a {\\n  cursor: pointer;\\n}\\n\\n.ui.card:first-child {\\n  margin-top: 0;\\n}\\n\\n.ui.card:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/*--------------\\n      Cards\\n---------------*/\\n\\n.ui.cards {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  margin: -0.875em -0.5em;\\n  -ms-flex-wrap: wrap;\\n      flex-wrap: wrap;\\n}\\n\\n.ui.cards > .card {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  margin: 0.875em 0.5em;\\n  float: none;\\n}\\n\\n/* Clearing */\\n\\n.ui.cards:after,\\n.ui.card:after {\\n  display: block;\\n  content: ' ';\\n  height: 0;\\n  clear: both;\\n  overflow: hidden;\\n  visibility: hidden;\\n}\\n\\n/* Consecutive Card Groups Preserve Row Spacing */\\n\\n.ui.cards ~ .ui.cards {\\n  margin-top: 0.875em;\\n}\\n\\n/*--------------\\n  Rounded Edges\\n---------------*/\\n\\n.ui.cards > .card > :first-child,\\n.ui.card > :first-child {\\n  border-radius: 0.28571429rem 0.28571429rem 0 0 !important;\\n  border-top: none !important;\\n}\\n\\n.ui.cards > .card > :last-child,\\n.ui.card > :last-child {\\n  border-radius: 0 0 0.28571429rem 0.28571429rem !important;\\n}\\n\\n.ui.cards > .card > :only-child,\\n.ui.card > :only-child {\\n  border-radius: 0.28571429rem !important;\\n}\\n\\n/*--------------\\n     Images\\n---------------*/\\n\\n.ui.cards > .card > .image,\\n.ui.card > .image {\\n  position: relative;\\n  display: block;\\n  -webkit-box-flex: 0;\\n      -ms-flex: 0 0 auto;\\n          flex: 0 0 auto;\\n  padding: 0;\\n  background: rgba(0, 0, 0, 0.05);\\n}\\n\\n.ui.cards > .card > .image > img,\\n.ui.card > .image > img {\\n  display: block;\\n  width: 100%;\\n  height: auto;\\n  border-radius: inherit;\\n}\\n\\n.ui.cards > .card > .image:not(.ui) > img,\\n.ui.card > .image:not(.ui) > img {\\n  border: none;\\n}\\n\\n/*--------------\\n     Content\\n---------------*/\\n\\n.ui.cards > .card > .content,\\n.ui.card > .content {\\n  -webkit-box-flex: 1;\\n      -ms-flex-positive: 1;\\n          flex-grow: 1;\\n  border: none;\\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\\n  background: none;\\n  margin: 0;\\n  padding: 1em 1em;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  font-size: 1em;\\n  border-radius: 0;\\n}\\n\\n.ui.cards > .card > .content:after,\\n.ui.card > .content:after {\\n  display: block;\\n  content: ' ';\\n  height: 0;\\n  clear: both;\\n  overflow: hidden;\\n  visibility: hidden;\\n}\\n\\n.ui.cards > .card > .content > .header,\\n.ui.card > .content > .header {\\n  display: block;\\n  margin: '';\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  color: rgba(0, 0, 0, 0.85);\\n}\\n\\n/* Default Header Size */\\n\\n.ui.cards > .card > .content > .header:not(.ui),\\n.ui.card > .content > .header:not(.ui) {\\n  font-weight: bold;\\n  font-size: 1.28571429em;\\n  margin-top: -0.21425em;\\n  line-height: 1.28571429em;\\n}\\n\\n.ui.cards > .card > .content > .meta + .description,\\n.ui.cards > .card > .content > .header + .description,\\n.ui.card > .content > .meta + .description,\\n.ui.card > .content > .header + .description {\\n  margin-top: 0.5em;\\n}\\n\\n/*----------------\\n Floated Content\\n-----------------*/\\n\\n.ui.cards > .card [class*=\\\"left floated\\\"],\\n.ui.card [class*=\\\"left floated\\\"] {\\n  float: left;\\n}\\n\\n.ui.cards > .card [class*=\\\"right floated\\\"],\\n.ui.card [class*=\\\"right floated\\\"] {\\n  float: right;\\n}\\n\\n/*--------------\\n     Aligned\\n---------------*/\\n\\n.ui.cards > .card [class*=\\\"left aligned\\\"],\\n.ui.card [class*=\\\"left aligned\\\"] {\\n  text-align: left;\\n}\\n\\n.ui.cards > .card [class*=\\\"center aligned\\\"],\\n.ui.card [class*=\\\"center aligned\\\"] {\\n  text-align: center;\\n}\\n\\n.ui.cards > .card [class*=\\\"right aligned\\\"],\\n.ui.card [class*=\\\"right aligned\\\"] {\\n  text-align: right;\\n}\\n\\n/*--------------\\n  Content Image\\n---------------*/\\n\\n.ui.cards > .card .content img,\\n.ui.card .content img {\\n  display: inline-block;\\n  vertical-align: middle;\\n  width: '';\\n}\\n\\n.ui.cards > .card img.avatar,\\n.ui.cards > .card .avatar img,\\n.ui.card img.avatar,\\n.ui.card .avatar img {\\n  width: 2em;\\n  height: 2em;\\n  border-radius: 500rem;\\n}\\n\\n/*--------------\\n   Description\\n---------------*/\\n\\n.ui.cards > .card > .content > .description,\\n.ui.card > .content > .description {\\n  clear: both;\\n  color: rgba(0, 0, 0, 0.68);\\n}\\n\\n/*--------------\\n    Paragraph\\n---------------*/\\n\\n.ui.cards > .card > .content p,\\n.ui.card > .content p {\\n  margin: 0 0 0.5em;\\n}\\n\\n.ui.cards > .card > .content p:last-child,\\n.ui.card > .content p:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/*--------------\\n      Meta\\n---------------*/\\n\\n.ui.cards > .card .meta,\\n.ui.card .meta {\\n  font-size: 1em;\\n  color: rgba(0, 0, 0, 0.4);\\n}\\n\\n.ui.cards > .card .meta *,\\n.ui.card .meta * {\\n  margin-right: 0.3em;\\n}\\n\\n.ui.cards > .card .meta :last-child,\\n.ui.card .meta :last-child {\\n  margin-right: 0;\\n}\\n\\n.ui.cards > .card .meta [class*=\\\"right floated\\\"],\\n.ui.card .meta [class*=\\\"right floated\\\"] {\\n  margin-right: 0;\\n  margin-left: 0.3em;\\n}\\n\\n/*--------------\\n      Links\\n---------------*/\\n\\n/* Generic */\\n\\n.ui.cards > .card > .content a:not(.ui),\\n.ui.card > .content a:not(.ui) {\\n  color: '';\\n  -webkit-transition: color 0.1s ease;\\n  transition: color 0.1s ease;\\n}\\n\\n.ui.cards > .card > .content a:not(.ui):hover,\\n.ui.card > .content a:not(.ui):hover {\\n  color: '';\\n}\\n\\n/* Header */\\n\\n.ui.cards > .card > .content > a.header,\\n.ui.card > .content > a.header {\\n  color: rgba(0, 0, 0, 0.85);\\n}\\n\\n.ui.cards > .card > .content > a.header:hover,\\n.ui.card > .content > a.header:hover {\\n  color: #1e70bf;\\n}\\n\\n/* Meta */\\n\\n.ui.cards > .card .meta > a:not(.ui),\\n.ui.card .meta > a:not(.ui) {\\n  color: rgba(0, 0, 0, 0.4);\\n}\\n\\n.ui.cards > .card .meta > a:not(.ui):hover,\\n.ui.card .meta > a:not(.ui):hover {\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n/*--------------\\n     Buttons\\n---------------*/\\n\\n.ui.cards > .card > .buttons,\\n.ui.card > .buttons,\\n.ui.cards > .card > .button,\\n.ui.card > .button {\\n  margin: 0 -1px;\\n  width: calc(100% + 2px);\\n}\\n\\n.ui.cards > .card > .buttons:last-child,\\n.ui.card > .buttons:last-child,\\n.ui.cards > .card > .button:last-child,\\n.ui.card > .button:last-child {\\n  margin-bottom: -1px;\\n}\\n\\n/*--------------\\n      Dimmer\\n---------------*/\\n\\n.ui.cards > .card .dimmer,\\n.ui.card .dimmer {\\n  background-color: '';\\n  z-index: 10;\\n}\\n\\n/*--------------\\n     Labels\\n---------------*/\\n\\n/*-----Star----- */\\n\\n/* Icon */\\n\\n.ui.cards > .card > .content .star.icon,\\n.ui.card > .content .star.icon {\\n  cursor: pointer;\\n  opacity: 0.75;\\n  -webkit-transition: color 0.1s ease;\\n  transition: color 0.1s ease;\\n}\\n\\n.ui.cards > .card > .content .star.icon:hover,\\n.ui.card > .content .star.icon:hover {\\n  opacity: 1;\\n  color: #FFB70A;\\n}\\n\\n.ui.cards > .card > .content .active.star.icon,\\n.ui.card > .content .active.star.icon {\\n  color: #FFE623;\\n}\\n\\n/*-----Like----- */\\n\\n/* Icon */\\n\\n.ui.cards > .card > .content .like.icon,\\n.ui.card > .content .like.icon {\\n  cursor: pointer;\\n  opacity: 0.75;\\n  -webkit-transition: color 0.1s ease;\\n  transition: color 0.1s ease;\\n}\\n\\n.ui.cards > .card > .content .like.icon:hover,\\n.ui.card > .content .like.icon:hover {\\n  opacity: 1;\\n  color: #FF2733;\\n}\\n\\n.ui.cards > .card > .content .active.like.icon,\\n.ui.card > .content .active.like.icon {\\n  color: #FF2733;\\n}\\n\\n/*----------------\\n  Extra Content\\n-----------------*/\\n\\n.ui.cards > .card > .extra,\\n.ui.card > .extra {\\n  max-width: 100%;\\n  min-height: 0 !important;\\n  -webkit-box-flex: 0;\\n      -ms-flex-positive: 0;\\n          flex-grow: 0;\\n  border-top: 1px solid rgba(0, 0, 0, 0.05) !important;\\n  position: static;\\n  background: none;\\n  width: auto;\\n  margin: 0 0;\\n  padding: 0.75em 1em;\\n  top: 0;\\n  left: 0;\\n  color: rgba(0, 0, 0, 0.4);\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  -webkit-transition: color 0.1s ease;\\n  transition: color 0.1s ease;\\n}\\n\\n.ui.cards > .card > .extra a:not(.ui),\\n.ui.card > .extra a:not(.ui) {\\n  color: rgba(0, 0, 0, 0.4);\\n}\\n\\n.ui.cards > .card > .extra a:not(.ui):hover,\\n.ui.card > .extra a:not(.ui):hover {\\n  color: #1e70bf;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*-------------------\\n      Horizontal\\n--------------------*/\\n\\n.ui.horizontal.cards > .card,\\n.ui.card.horizontal {\\n  -webkit-box-orient: horizontal;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: row;\\n          flex-direction: row;\\n  -ms-flex-wrap: wrap;\\n      flex-wrap: wrap;\\n  min-width: 400px;\\n  width: 400px;\\n  max-width: 100%;\\n}\\n\\n.ui.horizontal.cards > .card > .image,\\n.ui.card.horizontal > .image {\\n  border-radius: 0.28571429rem 0 0 0.28571429rem;\\n  width: 150px;\\n}\\n\\n.ui.horizontal.cards > .card > .image > img,\\n.ui.card.horizontal > .image > img {\\n  background-size: cover;\\n  background-repeat: no-repeat;\\n  background-position: center;\\n  -webkit-box-pack: center;\\n      -ms-flex-pack: center;\\n          justify-content: center;\\n  -webkit-box-align: center;\\n      -ms-flex-align: center;\\n          align-items: center;\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  width: 100%;\\n  height: 100%;\\n  border-radius: 0.28571429rem 0 0 0.28571429rem;\\n}\\n\\n.ui.horizontal.cards > .card > .content,\\n.ui.horizontal.card > .content {\\n  -ms-flex-preferred-size: 1px;\\n      flex-basis: 1px;\\n}\\n\\n.ui.horizontal.cards > .card > .extra,\\n.ui.horizontal.card > .extra {\\n  -ms-flex-preferred-size: 100%;\\n      flex-basis: 100%;\\n}\\n\\n/*-------------------\\n       Raised\\n--------------------*/\\n\\n.ui.raised.cards > .card,\\n.ui.raised.card {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.raised.cards a.card:hover,\\n.ui.link.cards .raised.card:hover,\\na.ui.raised.card:hover,\\n.ui.link.raised.card:hover {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 4px 0 rgba(34, 36, 38, 0.15), 0 2px 10px 0 rgba(34, 36, 38, 0.25);\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 4px 0 rgba(34, 36, 38, 0.15), 0 2px 10px 0 rgba(34, 36, 38, 0.25);\\n}\\n\\n/*-------------------\\n       Centered\\n--------------------*/\\n\\n.ui.centered.cards {\\n  -webkit-box-pack: center;\\n      -ms-flex-pack: center;\\n          justify-content: center;\\n}\\n\\n.ui.centered.card {\\n  margin-left: auto;\\n  margin-right: auto;\\n}\\n\\n/*-------------------\\n        Fluid\\n--------------------*/\\n\\n.ui.fluid.card {\\n  width: 100%;\\n  max-width: 9999px;\\n}\\n\\n/*-------------------\\n        Link\\n--------------------*/\\n\\n.ui.cards a.card,\\n.ui.link.cards .card,\\na.ui.card,\\n.ui.link.card {\\n  -webkit-transform: none;\\n  transform: none;\\n}\\n\\n.ui.cards a.card:hover,\\n.ui.link.cards .card:not(.icon):hover,\\na.ui.card:hover,\\n.ui.link.card:hover {\\n  cursor: pointer;\\n  z-index: 5;\\n  background: #FFFFFF;\\n  border: none;\\n  -webkit-box-shadow: 0 1px 3px 0 #BCBDBD, 0 0 0 1px #D4D4D5;\\n          box-shadow: 0 1px 3px 0 #BCBDBD, 0 0 0 1px #D4D4D5;\\n  -webkit-transform: translateY(-3px);\\n  transform: translateY(-3px);\\n}\\n\\n/*-------------------\\n       Colors\\n--------------------*/\\n\\n.ui.primary.cards > .card,\\n.ui.cards > .primary.card,\\n.ui.primary.card {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #2185D0, 0 1px 3px 0 #D4D4D5;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #2185D0, 0 1px 3px 0 #D4D4D5;\\n}\\n\\n.ui.primary.cards > .card:hover,\\n.ui.cards > .primary.card:hover,\\n.ui.primary.card:hover {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #1678c2, 0 1px 3px 0 #BCBDBD;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #1678c2, 0 1px 3px 0 #BCBDBD;\\n}\\n\\n.ui.inverted.primary.cards > .card,\\n.ui.inverted.cards > .primary.card,\\n.ui.inverted.primary.card {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #54C8FF, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #54C8FF, 0 0 0 1px #555555;\\n}\\n\\n.ui.inverted.primary.cards > .card:hover,\\n.ui.inverted.cards > .primary.card:hover,\\n.ui.inverted.primary.card:hover {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #21b8ff, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #21b8ff, 0 0 0 1px #555555;\\n}\\n\\n.ui.secondary.cards > .card,\\n.ui.cards > .secondary.card,\\n.ui.secondary.card {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #1B1C1D, 0 1px 3px 0 #D4D4D5;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #1B1C1D, 0 1px 3px 0 #D4D4D5;\\n}\\n\\n.ui.secondary.cards > .card:hover,\\n.ui.cards > .secondary.card:hover,\\n.ui.secondary.card:hover {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #27292a, 0 1px 3px 0 #BCBDBD;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #27292a, 0 1px 3px 0 #BCBDBD;\\n}\\n\\n.ui.inverted.secondary.cards > .card,\\n.ui.inverted.cards > .secondary.card,\\n.ui.inverted.secondary.card {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #545454, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #545454, 0 0 0 1px #555555;\\n}\\n\\n.ui.inverted.secondary.cards > .card:hover,\\n.ui.inverted.cards > .secondary.card:hover,\\n.ui.inverted.secondary.card:hover {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #6e6e6e, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #6e6e6e, 0 0 0 1px #555555;\\n}\\n\\n.ui.red.cards > .card,\\n.ui.cards > .red.card,\\n.ui.red.card {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #DB2828, 0 1px 3px 0 #D4D4D5;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #DB2828, 0 1px 3px 0 #D4D4D5;\\n}\\n\\n.ui.red.cards > .card:hover,\\n.ui.cards > .red.card:hover,\\n.ui.red.card:hover {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #d01919, 0 1px 3px 0 #BCBDBD;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #d01919, 0 1px 3px 0 #BCBDBD;\\n}\\n\\n.ui.inverted.red.cards > .card,\\n.ui.inverted.cards > .red.card,\\n.ui.inverted.red.card {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #FF695E, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #FF695E, 0 0 0 1px #555555;\\n}\\n\\n.ui.inverted.red.cards > .card:hover,\\n.ui.inverted.cards > .red.card:hover,\\n.ui.inverted.red.card:hover {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #ff392b, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #ff392b, 0 0 0 1px #555555;\\n}\\n\\n.ui.orange.cards > .card,\\n.ui.cards > .orange.card,\\n.ui.orange.card {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #F2711C, 0 1px 3px 0 #D4D4D5;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #F2711C, 0 1px 3px 0 #D4D4D5;\\n}\\n\\n.ui.orange.cards > .card:hover,\\n.ui.cards > .orange.card:hover,\\n.ui.orange.card:hover {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #f26202, 0 1px 3px 0 #BCBDBD;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #f26202, 0 1px 3px 0 #BCBDBD;\\n}\\n\\n.ui.inverted.orange.cards > .card,\\n.ui.inverted.cards > .orange.card,\\n.ui.inverted.orange.card {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #FF851B, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #FF851B, 0 0 0 1px #555555;\\n}\\n\\n.ui.inverted.orange.cards > .card:hover,\\n.ui.inverted.cards > .orange.card:hover,\\n.ui.inverted.orange.card:hover {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #e76b00, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #e76b00, 0 0 0 1px #555555;\\n}\\n\\n.ui.yellow.cards > .card,\\n.ui.cards > .yellow.card,\\n.ui.yellow.card {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #FBBD08, 0 1px 3px 0 #D4D4D5;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #FBBD08, 0 1px 3px 0 #D4D4D5;\\n}\\n\\n.ui.yellow.cards > .card:hover,\\n.ui.cards > .yellow.card:hover,\\n.ui.yellow.card:hover {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #eaae00, 0 1px 3px 0 #BCBDBD;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #eaae00, 0 1px 3px 0 #BCBDBD;\\n}\\n\\n.ui.inverted.yellow.cards > .card,\\n.ui.inverted.cards > .yellow.card,\\n.ui.inverted.yellow.card {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #FFE21F, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #FFE21F, 0 0 0 1px #555555;\\n}\\n\\n.ui.inverted.yellow.cards > .card:hover,\\n.ui.inverted.cards > .yellow.card:hover,\\n.ui.inverted.yellow.card:hover {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #ebcd00, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #ebcd00, 0 0 0 1px #555555;\\n}\\n\\n.ui.olive.cards > .card,\\n.ui.cards > .olive.card,\\n.ui.olive.card {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #B5CC18, 0 1px 3px 0 #D4D4D5;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #B5CC18, 0 1px 3px 0 #D4D4D5;\\n}\\n\\n.ui.olive.cards > .card:hover,\\n.ui.cards > .olive.card:hover,\\n.ui.olive.card:hover {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #a7bd0d, 0 1px 3px 0 #BCBDBD;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #a7bd0d, 0 1px 3px 0 #BCBDBD;\\n}\\n\\n.ui.inverted.olive.cards > .card,\\n.ui.inverted.cards > .olive.card,\\n.ui.inverted.olive.card {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #D9E778, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #D9E778, 0 0 0 1px #555555;\\n}\\n\\n.ui.inverted.olive.cards > .card:hover,\\n.ui.inverted.cards > .olive.card:hover,\\n.ui.inverted.olive.card:hover {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #d2e745, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #d2e745, 0 0 0 1px #555555;\\n}\\n\\n.ui.green.cards > .card,\\n.ui.cards > .green.card,\\n.ui.green.card {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #21BA45, 0 1px 3px 0 #D4D4D5;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #21BA45, 0 1px 3px 0 #D4D4D5;\\n}\\n\\n.ui.green.cards > .card:hover,\\n.ui.cards > .green.card:hover,\\n.ui.green.card:hover {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #16ab39, 0 1px 3px 0 #BCBDBD;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #16ab39, 0 1px 3px 0 #BCBDBD;\\n}\\n\\n.ui.inverted.green.cards > .card,\\n.ui.inverted.cards > .green.card,\\n.ui.inverted.green.card {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #2ECC40, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #2ECC40, 0 0 0 1px #555555;\\n}\\n\\n.ui.inverted.green.cards > .card:hover,\\n.ui.inverted.cards > .green.card:hover,\\n.ui.inverted.green.card:hover {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #1ea92e, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #1ea92e, 0 0 0 1px #555555;\\n}\\n\\n.ui.teal.cards > .card,\\n.ui.cards > .teal.card,\\n.ui.teal.card {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #00B5AD, 0 1px 3px 0 #D4D4D5;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #00B5AD, 0 1px 3px 0 #D4D4D5;\\n}\\n\\n.ui.teal.cards > .card:hover,\\n.ui.cards > .teal.card:hover,\\n.ui.teal.card:hover {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #009c95, 0 1px 3px 0 #BCBDBD;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #009c95, 0 1px 3px 0 #BCBDBD;\\n}\\n\\n.ui.inverted.teal.cards > .card,\\n.ui.inverted.cards > .teal.card,\\n.ui.inverted.teal.card {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #6DFFFF, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #6DFFFF, 0 0 0 1px #555555;\\n}\\n\\n.ui.inverted.teal.cards > .card:hover,\\n.ui.inverted.cards > .teal.card:hover,\\n.ui.inverted.teal.card:hover {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #3affff, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #3affff, 0 0 0 1px #555555;\\n}\\n\\n.ui.blue.cards > .card,\\n.ui.cards > .blue.card,\\n.ui.blue.card {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #2185D0, 0 1px 3px 0 #D4D4D5;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #2185D0, 0 1px 3px 0 #D4D4D5;\\n}\\n\\n.ui.blue.cards > .card:hover,\\n.ui.cards > .blue.card:hover,\\n.ui.blue.card:hover {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #1678c2, 0 1px 3px 0 #BCBDBD;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #1678c2, 0 1px 3px 0 #BCBDBD;\\n}\\n\\n.ui.inverted.blue.cards > .card,\\n.ui.inverted.cards > .blue.card,\\n.ui.inverted.blue.card {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #54C8FF, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #54C8FF, 0 0 0 1px #555555;\\n}\\n\\n.ui.inverted.blue.cards > .card:hover,\\n.ui.inverted.cards > .blue.card:hover,\\n.ui.inverted.blue.card:hover {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #21b8ff, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #21b8ff, 0 0 0 1px #555555;\\n}\\n\\n.ui.violet.cards > .card,\\n.ui.cards > .violet.card,\\n.ui.violet.card {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #6435C9, 0 1px 3px 0 #D4D4D5;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #6435C9, 0 1px 3px 0 #D4D4D5;\\n}\\n\\n.ui.violet.cards > .card:hover,\\n.ui.cards > .violet.card:hover,\\n.ui.violet.card:hover {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #5829bb, 0 1px 3px 0 #BCBDBD;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #5829bb, 0 1px 3px 0 #BCBDBD;\\n}\\n\\n.ui.inverted.violet.cards > .card,\\n.ui.inverted.cards > .violet.card,\\n.ui.inverted.violet.card {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #A291FB, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #A291FB, 0 0 0 1px #555555;\\n}\\n\\n.ui.inverted.violet.cards > .card:hover,\\n.ui.inverted.cards > .violet.card:hover,\\n.ui.inverted.violet.card:hover {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #745aff, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #745aff, 0 0 0 1px #555555;\\n}\\n\\n.ui.purple.cards > .card,\\n.ui.cards > .purple.card,\\n.ui.purple.card {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #A333C8, 0 1px 3px 0 #D4D4D5;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #A333C8, 0 1px 3px 0 #D4D4D5;\\n}\\n\\n.ui.purple.cards > .card:hover,\\n.ui.cards > .purple.card:hover,\\n.ui.purple.card:hover {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #9627ba, 0 1px 3px 0 #BCBDBD;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #9627ba, 0 1px 3px 0 #BCBDBD;\\n}\\n\\n.ui.inverted.purple.cards > .card,\\n.ui.inverted.cards > .purple.card,\\n.ui.inverted.purple.card {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #DC73FF, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #DC73FF, 0 0 0 1px #555555;\\n}\\n\\n.ui.inverted.purple.cards > .card:hover,\\n.ui.inverted.cards > .purple.card:hover,\\n.ui.inverted.purple.card:hover {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #cf40ff, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #cf40ff, 0 0 0 1px #555555;\\n}\\n\\n.ui.pink.cards > .card,\\n.ui.cards > .pink.card,\\n.ui.pink.card {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #E03997, 0 1px 3px 0 #D4D4D5;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #E03997, 0 1px 3px 0 #D4D4D5;\\n}\\n\\n.ui.pink.cards > .card:hover,\\n.ui.cards > .pink.card:hover,\\n.ui.pink.card:hover {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #e61a8d, 0 1px 3px 0 #BCBDBD;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #e61a8d, 0 1px 3px 0 #BCBDBD;\\n}\\n\\n.ui.inverted.pink.cards > .card,\\n.ui.inverted.cards > .pink.card,\\n.ui.inverted.pink.card {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #FF8EDF, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #FF8EDF, 0 0 0 1px #555555;\\n}\\n\\n.ui.inverted.pink.cards > .card:hover,\\n.ui.inverted.cards > .pink.card:hover,\\n.ui.inverted.pink.card:hover {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #ff5bd1, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #ff5bd1, 0 0 0 1px #555555;\\n}\\n\\n.ui.brown.cards > .card,\\n.ui.cards > .brown.card,\\n.ui.brown.card {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #A5673F, 0 1px 3px 0 #D4D4D5;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #A5673F, 0 1px 3px 0 #D4D4D5;\\n}\\n\\n.ui.brown.cards > .card:hover,\\n.ui.cards > .brown.card:hover,\\n.ui.brown.card:hover {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #975b33, 0 1px 3px 0 #BCBDBD;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #975b33, 0 1px 3px 0 #BCBDBD;\\n}\\n\\n.ui.inverted.brown.cards > .card,\\n.ui.inverted.cards > .brown.card,\\n.ui.inverted.brown.card {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #D67C1C, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #D67C1C, 0 0 0 1px #555555;\\n}\\n\\n.ui.inverted.brown.cards > .card:hover,\\n.ui.inverted.cards > .brown.card:hover,\\n.ui.inverted.brown.card:hover {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #b0620f, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #b0620f, 0 0 0 1px #555555;\\n}\\n\\n.ui.grey.cards > .card,\\n.ui.cards > .grey.card,\\n.ui.grey.card {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #767676, 0 1px 3px 0 #D4D4D5;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #767676, 0 1px 3px 0 #D4D4D5;\\n}\\n\\n.ui.grey.cards > .card:hover,\\n.ui.cards > .grey.card:hover,\\n.ui.grey.card:hover {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #838383, 0 1px 3px 0 #BCBDBD;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #838383, 0 1px 3px 0 #BCBDBD;\\n}\\n\\n.ui.inverted.grey.cards > .card,\\n.ui.inverted.cards > .grey.card,\\n.ui.inverted.grey.card {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #DCDDDE, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #DCDDDE, 0 0 0 1px #555555;\\n}\\n\\n.ui.inverted.grey.cards > .card:hover,\\n.ui.inverted.cards > .grey.card:hover,\\n.ui.inverted.grey.card:hover {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #c2c4c5, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #c2c4c5, 0 0 0 1px #555555;\\n}\\n\\n.ui.black.cards > .card,\\n.ui.cards > .black.card,\\n.ui.black.card {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #1B1C1D, 0 1px 3px 0 #D4D4D5;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #1B1C1D, 0 1px 3px 0 #D4D4D5;\\n}\\n\\n.ui.black.cards > .card:hover,\\n.ui.cards > .black.card:hover,\\n.ui.black.card:hover {\\n  -webkit-box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #27292a, 0 1px 3px 0 #BCBDBD;\\n          box-shadow: 0 0 0 1px #D4D4D5, 0 2px 0 0 #27292a, 0 1px 3px 0 #BCBDBD;\\n}\\n\\n.ui.inverted.black.cards > .card,\\n.ui.inverted.cards > .black.card,\\n.ui.inverted.black.card {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #545454, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #545454, 0 0 0 1px #555555;\\n}\\n\\n.ui.inverted.black.cards > .card:hover,\\n.ui.inverted.cards > .black.card:hover,\\n.ui.inverted.black.card:hover {\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #000000, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 2px 0 0 #000000, 0 0 0 1px #555555;\\n}\\n\\n/*--------------\\n   Card Count\\n---------------*/\\n\\n.ui.one.cards {\\n  margin-left: 0;\\n  margin-right: 0;\\n}\\n\\n.ui.one.cards > .card {\\n  width: 100%;\\n}\\n\\n.ui.two.cards {\\n  margin-left: -1em;\\n  margin-right: -1em;\\n}\\n\\n.ui.two.cards > .card {\\n  width: calc(50% - 2em);\\n  margin-left: 1em;\\n  margin-right: 1em;\\n}\\n\\n.ui.three.cards {\\n  margin-left: -1em;\\n  margin-right: -1em;\\n}\\n\\n.ui.three.cards > .card {\\n  width: calc(33.33333333333333% - 2em);\\n  margin-left: 1em;\\n  margin-right: 1em;\\n}\\n\\n.ui.four.cards {\\n  margin-left: -0.75em;\\n  margin-right: -0.75em;\\n}\\n\\n.ui.four.cards > .card {\\n  width: calc(25% - 1.5em);\\n  margin-left: 0.75em;\\n  margin-right: 0.75em;\\n}\\n\\n.ui.five.cards {\\n  margin-left: -0.75em;\\n  margin-right: -0.75em;\\n}\\n\\n.ui.five.cards > .card {\\n  width: calc(20% - 1.5em);\\n  margin-left: 0.75em;\\n  margin-right: 0.75em;\\n}\\n\\n.ui.six.cards {\\n  margin-left: -0.75em;\\n  margin-right: -0.75em;\\n}\\n\\n.ui.six.cards > .card {\\n  width: calc(16.666666666666664% - 1.5em);\\n  margin-left: 0.75em;\\n  margin-right: 0.75em;\\n}\\n\\n.ui.seven.cards {\\n  margin-left: -0.5em;\\n  margin-right: -0.5em;\\n}\\n\\n.ui.seven.cards > .card {\\n  width: calc(14.285714285714285% - 1em);\\n  margin-left: 0.5em;\\n  margin-right: 0.5em;\\n}\\n\\n.ui.eight.cards {\\n  margin-left: -0.5em;\\n  margin-right: -0.5em;\\n}\\n\\n.ui.eight.cards > .card {\\n  width: calc(12.5% - 1em);\\n  margin-left: 0.5em;\\n  margin-right: 0.5em;\\n  font-size: 11px;\\n}\\n\\n.ui.nine.cards {\\n  margin-left: -0.5em;\\n  margin-right: -0.5em;\\n}\\n\\n.ui.nine.cards > .card {\\n  width: calc(11.11111111111111% - 1em);\\n  margin-left: 0.5em;\\n  margin-right: 0.5em;\\n  font-size: 10px;\\n}\\n\\n.ui.ten.cards {\\n  margin-left: -0.5em;\\n  margin-right: -0.5em;\\n}\\n\\n.ui.ten.cards > .card {\\n  width: calc(10% - 1em);\\n  margin-left: 0.5em;\\n  margin-right: 0.5em;\\n}\\n\\n/*-------------------\\n      Doubling\\n--------------------*/\\n\\n/* Mobile Only */\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.two.doubling.cards {\\n    margin-left: 0;\\n    margin-right: 0;\\n  }\\n\\n  .ui.two.doubling.cards > .card {\\n    width: 100%;\\n    margin-left: 0;\\n    margin-right: 0;\\n  }\\n\\n  .ui.three.doubling.cards {\\n    margin-left: -1em;\\n    margin-right: -1em;\\n  }\\n\\n  .ui.three.doubling.cards > .card {\\n    width: calc(50% - 2em);\\n    margin-left: 1em;\\n    margin-right: 1em;\\n  }\\n\\n  .ui.four.doubling.cards {\\n    margin-left: -1em;\\n    margin-right: -1em;\\n  }\\n\\n  .ui.four.doubling.cards > .card {\\n    width: calc(50% - 2em);\\n    margin-left: 1em;\\n    margin-right: 1em;\\n  }\\n\\n  .ui.five.doubling.cards {\\n    margin-left: -1em;\\n    margin-right: -1em;\\n  }\\n\\n  .ui.five.doubling.cards > .card {\\n    width: calc(50% - 2em);\\n    margin-left: 1em;\\n    margin-right: 1em;\\n  }\\n\\n  .ui.six.doubling.cards {\\n    margin-left: -1em;\\n    margin-right: -1em;\\n  }\\n\\n  .ui.six.doubling.cards > .card {\\n    width: calc(50% - 2em);\\n    margin-left: 1em;\\n    margin-right: 1em;\\n  }\\n\\n  .ui.seven.doubling.cards {\\n    margin-left: -1em;\\n    margin-right: -1em;\\n  }\\n\\n  .ui.seven.doubling.cards > .card {\\n    width: calc(33.33333333333333% - 2em);\\n    margin-left: 1em;\\n    margin-right: 1em;\\n  }\\n\\n  .ui.eight.doubling.cards {\\n    margin-left: -1em;\\n    margin-right: -1em;\\n  }\\n\\n  .ui.eight.doubling.cards > .card {\\n    width: calc(33.33333333333333% - 2em);\\n    margin-left: 1em;\\n    margin-right: 1em;\\n  }\\n\\n  .ui.nine.doubling.cards {\\n    margin-left: -1em;\\n    margin-right: -1em;\\n  }\\n\\n  .ui.nine.doubling.cards > .card {\\n    width: calc(33.33333333333333% - 2em);\\n    margin-left: 1em;\\n    margin-right: 1em;\\n  }\\n\\n  .ui.ten.doubling.cards {\\n    margin-left: -1em;\\n    margin-right: -1em;\\n  }\\n\\n  .ui.ten.doubling.cards > .card {\\n    width: calc(33.33333333333333% - 2em);\\n    margin-left: 1em;\\n    margin-right: 1em;\\n  }\\n}\\n\\n/* Tablet Only */\\n\\n@media only screen and (min-width: 768px) and (max-width: 991.98px) {\\n  .ui.two.doubling.cards {\\n    margin-left: 0;\\n    margin-right: 0;\\n  }\\n\\n  .ui.two.doubling.cards > .card {\\n    width: 100%;\\n    margin-left: 0;\\n    margin-right: 0;\\n  }\\n\\n  .ui.three.doubling.cards {\\n    margin-left: -1em;\\n    margin-right: -1em;\\n  }\\n\\n  .ui.three.doubling.cards > .card {\\n    width: calc(50% - 2em);\\n    margin-left: 1em;\\n    margin-right: 1em;\\n  }\\n\\n  .ui.four.doubling.cards {\\n    margin-left: -1em;\\n    margin-right: -1em;\\n  }\\n\\n  .ui.four.doubling.cards > .card {\\n    width: calc(50% - 2em);\\n    margin-left: 1em;\\n    margin-right: 1em;\\n  }\\n\\n  .ui.five.doubling.cards {\\n    margin-left: -1em;\\n    margin-right: -1em;\\n  }\\n\\n  .ui.five.doubling.cards > .card {\\n    width: calc(33.33333333333333% - 2em);\\n    margin-left: 1em;\\n    margin-right: 1em;\\n  }\\n\\n  .ui.six.doubling.cards {\\n    margin-left: -1em;\\n    margin-right: -1em;\\n  }\\n\\n  .ui.six.doubling.cards > .card {\\n    width: calc(33.33333333333333% - 2em);\\n    margin-left: 1em;\\n    margin-right: 1em;\\n  }\\n\\n  .ui.eight.doubling.cards {\\n    margin-left: -1em;\\n    margin-right: -1em;\\n  }\\n\\n  .ui.eight.doubling.cards > .card {\\n    width: calc(33.33333333333333% - 2em);\\n    margin-left: 1em;\\n    margin-right: 1em;\\n  }\\n\\n  .ui.eight.doubling.cards {\\n    margin-left: -0.75em;\\n    margin-right: -0.75em;\\n  }\\n\\n  .ui.eight.doubling.cards > .card {\\n    width: calc(25% - 1.5em);\\n    margin-left: 0.75em;\\n    margin-right: 0.75em;\\n  }\\n\\n  .ui.nine.doubling.cards {\\n    margin-left: -0.75em;\\n    margin-right: -0.75em;\\n  }\\n\\n  .ui.nine.doubling.cards > .card {\\n    width: calc(25% - 1.5em);\\n    margin-left: 0.75em;\\n    margin-right: 0.75em;\\n  }\\n\\n  .ui.ten.doubling.cards {\\n    margin-left: -0.75em;\\n    margin-right: -0.75em;\\n  }\\n\\n  .ui.ten.doubling.cards > .card {\\n    width: calc(20% - 1.5em);\\n    margin-left: 0.75em;\\n    margin-right: 0.75em;\\n  }\\n}\\n\\n/*-------------------\\n      Stackable\\n--------------------*/\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.stackable.cards {\\n    display: block !important;\\n  }\\n\\n  .ui.stackable.cards .card:first-child {\\n    margin-top: 0 !important;\\n  }\\n\\n  .ui.stackable.cards > .card {\\n    display: block !important;\\n    height: auto !important;\\n    margin: 1em 1em;\\n    padding: 0 !important;\\n    width: calc(100% - 2em) !important;\\n  }\\n}\\n\\n/*--------------\\n      Size\\n---------------*/\\n\\n.ui.cards > .card {\\n  font-size: 1em;\\n}\\n\\n/*-----------------\\n      Inverted\\n------------------*/\\n\\n.ui.inverted.cards > .card,\\n.ui.inverted.card {\\n  background: #1B1C1D;\\n  -webkit-box-shadow: 0 1px 3px 0 #555555, 0 0 0 1px #555555;\\n          box-shadow: 0 1px 3px 0 #555555, 0 0 0 1px #555555;\\n}\\n\\n/* Content */\\n\\n.ui.inverted.cards > .card > .content,\\n.ui.inverted.card > .content {\\n  border-top: 1px solid rgba(255, 255, 255, 0.15);\\n}\\n\\n/* Header */\\n\\n.ui.inverted.cards > .card > .content > .header,\\n.ui.inverted.card > .content > .header {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n/* Description */\\n\\n.ui.inverted.cards > .card > .content > .description,\\n.ui.inverted.card > .content > .description {\\n  color: rgba(255, 255, 255, 0.8);\\n}\\n\\n/* Meta */\\n\\n.ui.inverted.cards > .card .meta,\\n.ui.inverted.card .meta {\\n  color: rgba(255, 255, 255, 0.7);\\n}\\n\\n.ui.inverted.cards > .card .meta > a:not(.ui),\\n.ui.inverted.card .meta > a:not(.ui) {\\n  color: rgba(255, 255, 255, 0.7);\\n}\\n\\n.ui.inverted.cards > .card .meta > a:not(.ui):hover,\\n.ui.inverted.card .meta > a:not(.ui):hover {\\n  color: #ffffff;\\n}\\n\\n/* Extra */\\n\\n.ui.inverted.cards > .card > .extra,\\n.ui.inverted.card > .extra {\\n  border-top: 1px solid rgba(255, 255, 255, 0.15) !important;\\n  color: rgba(255, 255, 255, 0.7);\\n}\\n\\n.ui.inverted.cards > .card > .extra a:not(.ui),\\n.ui.inverted.card > .extra a:not(.ui) {\\n  color: rgba(255, 255, 255, 0.5);\\n}\\n\\n.ui.inverted.cards > .card > .extra a:not(.ui):hover,\\n.ui.inverted.card > .extra a:not(.ui):hover {\\n  color: #1e70bf;\\n}\\n\\n/* Link card(s) */\\n\\n.ui.inverted.cards a.card:hover,\\n.ui.inverted.link.cards .card:not(.icon):hover,\\na.inverted.ui.card:hover,\\n.ui.inverted.link.card:hover {\\n  background: #1B1C1D;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n    User Variable Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Comment\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Standard\\n*******************************/\\n\\n/*--------------\\n    Comments\\n---------------*/\\n\\n.ui.comments {\\n  margin: 1.5em 0;\\n  max-width: 650px;\\n}\\n\\n.ui.comments:first-child {\\n  margin-top: 0;\\n}\\n\\n.ui.comments:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/*--------------\\n     Comment\\n---------------*/\\n\\n.ui.comments .comment {\\n  position: relative;\\n  background: none;\\n  margin: 0.5em 0 0;\\n  padding: 0.5em 0 0;\\n  border: none;\\n  border-top: none;\\n  line-height: 1.2;\\n}\\n\\n.ui.comments .comment:first-child {\\n  margin-top: 0;\\n  padding-top: 0;\\n}\\n\\n/*--------------------\\n    Nested Comments\\n---------------------*/\\n\\n.ui.comments .comment > .comments {\\n  margin: 0 0 0.5em 0.5em;\\n  padding: 1em 0 1em 1em;\\n}\\n\\n.ui.comments .comment > .comments:before {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n}\\n\\n.ui.comments .comment > .comments .comment {\\n  border: none;\\n  border-top: none;\\n  background: none;\\n}\\n\\n/*--------------\\n     Avatar\\n---------------*/\\n\\n.ui.comments .comment .avatar {\\n  display: block;\\n  width: 2.5em;\\n  height: auto;\\n  float: left;\\n  margin: 0.2em 0 0;\\n}\\n\\n.ui.comments .comment img.avatar,\\n.ui.comments .comment .avatar img {\\n  display: block;\\n  margin: 0 auto;\\n  width: 100%;\\n  height: 100%;\\n  border-radius: 0.25rem;\\n}\\n\\n/*--------------\\n     Content\\n---------------*/\\n\\n.ui.comments .comment > .content {\\n  display: block;\\n}\\n\\n/* If there is an avatar move content over */\\n\\n.ui.comments .comment > .avatar ~ .content {\\n  margin-left: 3.5em;\\n}\\n\\n/*--------------\\n     Author\\n---------------*/\\n\\n.ui.comments .comment .author {\\n  font-size: 1em;\\n  color: rgba(0, 0, 0, 0.87);\\n  font-weight: bold;\\n}\\n\\n.ui.comments .comment a.author {\\n  cursor: pointer;\\n}\\n\\n.ui.comments .comment a.author:hover {\\n  color: #1e70bf;\\n}\\n\\n/*--------------\\n     Metadata\\n---------------*/\\n\\n.ui.comments .comment .metadata {\\n  display: inline-block;\\n  margin-left: 0.5em;\\n  color: rgba(0, 0, 0, 0.4);\\n  font-size: 0.875em;\\n}\\n\\n.ui.comments .comment .metadata > * {\\n  display: inline-block;\\n  margin: 0 0.5em 0 0;\\n}\\n\\n.ui.comments .comment .metadata > :last-child {\\n  margin-right: 0;\\n}\\n\\n/*--------------------\\n     Comment Text\\n---------------------*/\\n\\n.ui.comments .comment .text {\\n  margin: 0.25em 0 0.5em;\\n  font-size: 1em;\\n  word-wrap: break-word;\\n  color: rgba(0, 0, 0, 0.87);\\n  line-height: 1.3;\\n}\\n\\n/*--------------------\\n     User Actions\\n---------------------*/\\n\\n.ui.comments .comment .actions {\\n  font-size: 0.875em;\\n}\\n\\n.ui.comments .comment .actions a {\\n  cursor: pointer;\\n  display: inline-block;\\n  margin: 0 0.75em 0 0;\\n  color: rgba(0, 0, 0, 0.4);\\n}\\n\\n.ui.comments .comment .actions a:last-child {\\n  margin-right: 0;\\n}\\n\\n.ui.comments .comment .actions a.active,\\n.ui.comments .comment .actions a:hover {\\n  color: rgba(0, 0, 0, 0.8);\\n}\\n\\n/*--------------------\\n      Reply Form\\n---------------------*/\\n\\n.ui.comments > .reply.form {\\n  margin-top: 1em;\\n}\\n\\n.ui.comments .comment .reply.form {\\n  width: 100%;\\n  margin-top: 1em;\\n}\\n\\n.ui.comments .reply.form textarea {\\n  font-size: 1em;\\n  height: 12em;\\n}\\n\\n/*******************************\\n            State\\n*******************************/\\n\\n.ui.collapsed.comments,\\n.ui.comments .collapsed.comments,\\n.ui.comments .collapsed.comment {\\n  display: none;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*--------------------\\n        Threaded\\n---------------------*/\\n\\n.ui.threaded.comments .comment > .comments {\\n  margin: -1.5em 0 -1em 1.25em;\\n  padding: 3em 0 2em 2.25em;\\n  -webkit-box-shadow: -1px 0 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: -1px 0 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n/*--------------------\\n        Minimal\\n---------------------*/\\n\\n.ui.minimal.comments .comment .actions {\\n  opacity: 0;\\n  position: absolute;\\n  top: 0;\\n  right: 0;\\n  left: auto;\\n  -webkit-transition: opacity 0.2s ease;\\n  transition: opacity 0.2s ease;\\n  -webkit-transition-delay: 0.1s;\\n          transition-delay: 0.1s;\\n}\\n\\n.ui.minimal.comments .comment > .content:hover > .actions {\\n  opacity: 1;\\n}\\n\\n/*-------------------\\n        Sizes\\n--------------------*/\\n\\n.ui.mini.comments {\\n  font-size: 0.78571429rem;\\n}\\n\\n.ui.tiny.comments {\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.small.comments {\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.comments {\\n  font-size: 1rem;\\n}\\n\\n.ui.large.comments {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.big.comments {\\n  font-size: 1.28571429rem;\\n}\\n\\n.ui.huge.comments {\\n  font-size: 1.42857143rem;\\n}\\n\\n.ui.massive.comments {\\n  font-size: 1.71428571rem;\\n}\\n\\n/*-------------------\\n        Inverted\\n--------------------*/\\n\\n.ui.inverted.comments .comment {\\n  background-color: #1B1C1D;\\n}\\n\\n.ui.inverted.comments .comment .author,\\n.ui.inverted.comments .comment .text {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.inverted.comments .comment .metadata,\\n.ui.inverted.comments .comment .actions a {\\n  color: rgba(255, 255, 255, 0.7);\\n}\\n\\n.ui.inverted.comments .comment a.author:hover,\\n.ui.inverted.comments .comment .actions a.active,\\n.ui.inverted.comments .comment .actions a:hover {\\n  color: #ffffff;\\n}\\n\\n.ui.inverted.threaded.comments .comment > .comments {\\n  -webkit-box-shadow: -1px 0 0 #555555;\\n          box-shadow: -1px 0 0 #555555;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n    User Variable Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Feed\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n         Activity Feed\\n*******************************/\\n\\n.ui.feed {\\n  margin: 1em 0;\\n}\\n\\n.ui.feed:first-child {\\n  margin-top: 0;\\n}\\n\\n.ui.feed:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/*******************************\\n            Content\\n*******************************/\\n\\n/* Event */\\n\\n.ui.feed > .event {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: horizontal;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: row;\\n          flex-direction: row;\\n  width: 100%;\\n  padding: 0.21428571rem 0;\\n  margin: 0;\\n  background: none;\\n  border-top: none;\\n}\\n\\n.ui.feed > .event:first-child {\\n  border-top: 0;\\n  padding-top: 0;\\n}\\n\\n.ui.feed > .event:last-child {\\n  padding-bottom: 0;\\n}\\n\\n/* Event Label */\\n\\n.ui.feed > .event > .label {\\n  display: block;\\n  -webkit-box-flex: 0;\\n      -ms-flex: 0 0 auto;\\n          flex: 0 0 auto;\\n  width: 2.5em;\\n  height: auto;\\n  -ms-flex-item-align: stretch;\\n      align-self: stretch;\\n  text-align: left;\\n}\\n\\n.ui.feed > .event > .label .icon {\\n  opacity: 1;\\n  font-size: 1.5em;\\n  width: 100%;\\n  padding: 0.25em;\\n  background: none;\\n  border: none;\\n  border-radius: none;\\n  color: rgba(0, 0, 0, 0.6);\\n}\\n\\n.ui.feed > .event > .label img {\\n  width: 100%;\\n  height: auto;\\n  border-radius: 500rem;\\n}\\n\\n.ui.feed > .event > .label + .content {\\n  margin: 0.5em 0 0.35714286em 1.14285714em;\\n}\\n\\n/*--------------\\n     Content\\n---------------*/\\n\\n/* Content */\\n\\n.ui.feed > .event > .content {\\n  display: block;\\n  -webkit-box-flex: 1;\\n      -ms-flex: 1 1 auto;\\n          flex: 1 1 auto;\\n  -ms-flex-item-align: stretch;\\n      align-self: stretch;\\n  text-align: left;\\n  word-wrap: break-word;\\n}\\n\\n.ui.feed > .event:last-child > .content {\\n  padding-bottom: 0;\\n}\\n\\n/* Link */\\n\\n.ui.feed > .event > .content a {\\n  cursor: pointer;\\n}\\n\\n/*--------------\\n      Date\\n---------------*/\\n\\n.ui.feed > .event > .content .date {\\n  margin: -0.5rem 0 0;\\n  padding: 0;\\n  color: rgba(0, 0, 0, 0.4);\\n  font-weight: normal;\\n  font-size: 1em;\\n  font-style: normal;\\n}\\n\\n/*--------------\\n     Summary\\n---------------*/\\n\\n.ui.feed > .event > .content .summary {\\n  margin: 0;\\n  font-size: 1em;\\n  font-weight: bold;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n/* Summary Image */\\n\\n.ui.feed > .event > .content .summary img {\\n  display: inline-block;\\n  width: auto;\\n  height: 10em;\\n  margin: -0.25em 0.25em 0 0;\\n  border-radius: 0.25em;\\n  vertical-align: middle;\\n}\\n\\n/*--------------\\n      User\\n---------------*/\\n\\n.ui.feed > .event > .content .user {\\n  display: inline-block;\\n  font-weight: bold;\\n  margin-right: 0;\\n  vertical-align: baseline;\\n}\\n\\n.ui.feed > .event > .content .user img {\\n  margin: -0.25em 0.25em 0 0;\\n  width: auto;\\n  height: 10em;\\n  vertical-align: middle;\\n}\\n\\n/*--------------\\n   Inline Date\\n---------------*/\\n\\n/* Date inside Summary */\\n\\n.ui.feed > .event > .content .summary > .date {\\n  display: inline-block;\\n  float: none;\\n  font-weight: normal;\\n  font-size: 0.85714286em;\\n  font-style: normal;\\n  margin: 0 0 0 0.5em;\\n  padding: 0;\\n  color: rgba(0, 0, 0, 0.4);\\n}\\n\\n/*--------------\\n  Extra Summary\\n---------------*/\\n\\n.ui.feed > .event > .content .extra {\\n  margin: 0.5em 0 0;\\n  background: none;\\n  padding: 0;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n/* Images */\\n\\n.ui.feed > .event > .content .extra.images img {\\n  display: inline-block;\\n  margin: 0 0.25em 0 0;\\n  width: 6em;\\n}\\n\\n/* Text */\\n\\n.ui.feed > .event > .content .extra.text {\\n  padding: 0;\\n  border-left: none;\\n  font-size: 1em;\\n  max-width: 500px;\\n  line-height: 1.4285em;\\n}\\n\\n/*--------------\\n      Meta\\n---------------*/\\n\\n.ui.feed > .event > .content .meta {\\n  display: inline-block;\\n  font-size: 0.85714286em;\\n  margin: 0.5em 0 0;\\n  background: none;\\n  border: none;\\n  border-radius: 0;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  padding: 0;\\n  color: rgba(0, 0, 0, 0.6);\\n}\\n\\n.ui.feed > .event > .content .meta > * {\\n  position: relative;\\n  margin-left: 0.75em;\\n}\\n\\n.ui.feed > .event > .content .meta > *:after {\\n  content: '';\\n  color: rgba(0, 0, 0, 0.2);\\n  top: 0;\\n  left: -1em;\\n  opacity: 1;\\n  position: absolute;\\n  vertical-align: top;\\n}\\n\\n.ui.feed > .event > .content .meta .like {\\n  color: '';\\n  -webkit-transition: 0.2s color ease;\\n  transition: 0.2s color ease;\\n}\\n\\n.ui.feed > .event > .content .meta .like:hover .icon {\\n  color: #FF2733;\\n}\\n\\n.ui.feed > .event > .content .meta .active.like .icon {\\n  color: #EF404A;\\n}\\n\\n/* First element */\\n\\n.ui.feed > .event > .content .meta > :first-child {\\n  margin-left: 0;\\n}\\n\\n.ui.feed > .event > .content .meta > :first-child::after {\\n  display: none;\\n}\\n\\n/* Action */\\n\\n.ui.feed > .event > .content .meta a,\\n.ui.feed > .event > .content .meta > .icon {\\n  cursor: pointer;\\n  opacity: 1;\\n  color: rgba(0, 0, 0, 0.5);\\n  -webkit-transition: color 0.1s ease;\\n  transition: color 0.1s ease;\\n}\\n\\n.ui.feed > .event > .content .meta a:hover,\\n.ui.feed > .event > .content .meta a:hover .icon,\\n.ui.feed > .event > .content .meta > .icon:hover {\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/*******************************\\n            Variations\\n*******************************/\\n\\n.ui.small.feed {\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.feed {\\n  font-size: 1rem;\\n}\\n\\n.ui.large.feed {\\n  font-size: 1.14285714rem;\\n}\\n\\n/*------------------\\n      Inverted\\n-------------------*/\\n\\n.ui.inverted.feed > .event {\\n  background: #1B1C1D;\\n}\\n\\n.ui.inverted.feed > .event > .content .date,\\n.ui.inverted.feed > .event > .content .meta .like {\\n  color: rgba(255, 255, 255, 0.7);\\n}\\n\\n.ui.inverted.feed > .event > .content .summary,\\n.ui.inverted.feed > .event > .content .extra.text {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.inverted.feed > .event > .content .meta .like:hover {\\n  color: #ffffff;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n    User Variable Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Item\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Standard\\n*******************************/\\n\\n/*--------------\\n      Item\\n---------------*/\\n\\n.ui.items > .item {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  margin: 1em 0;\\n  width: 100%;\\n  min-height: 0;\\n  background: transparent;\\n  padding: 0;\\n  border: none;\\n  border-radius: 0;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  -webkit-transition: -webkit-box-shadow 0.1s ease;\\n  transition: -webkit-box-shadow 0.1s ease;\\n  transition: box-shadow 0.1s ease;\\n  transition: box-shadow 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  z-index: '';\\n}\\n\\n.ui.items > .item a {\\n  cursor: pointer;\\n}\\n\\n/*--------------\\n      Items\\n---------------*/\\n\\n.ui.items {\\n  margin: 1.5em 0;\\n}\\n\\n.ui.items:first-child {\\n  margin-top: 0 !important;\\n}\\n\\n.ui.items:last-child {\\n  margin-bottom: 0 !important;\\n}\\n\\n/*--------------\\n      Item\\n---------------*/\\n\\n.ui.items > .item:after {\\n  display: block;\\n  content: ' ';\\n  height: 0;\\n  clear: both;\\n  overflow: hidden;\\n  visibility: hidden;\\n}\\n\\n.ui.items > .item:first-child {\\n  margin-top: 0;\\n}\\n\\n.ui.items > .item:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/*--------------\\n     Images\\n---------------*/\\n\\n.ui.items > .item > .image {\\n  position: relative;\\n  -webkit-box-flex: 0;\\n      -ms-flex: 0 0 auto;\\n          flex: 0 0 auto;\\n  display: block;\\n  float: none;\\n  margin: 0;\\n  padding: 0;\\n  max-height: '';\\n  -ms-flex-item-align: start;\\n      align-self: start;\\n}\\n\\n.ui.items > .item > .image > img {\\n  display: block;\\n  width: 100%;\\n  height: auto;\\n  border-radius: 0.125rem;\\n  border: none;\\n}\\n\\n.ui.items > .item > .image:only-child > img {\\n  border-radius: 0;\\n}\\n\\n/*--------------\\n     Content\\n---------------*/\\n\\n.ui.items > .item > .content {\\n  display: block;\\n  -webkit-box-flex: 1;\\n      -ms-flex: 1 1 auto;\\n          flex: 1 1 auto;\\n  background: none;\\n  color: rgba(0, 0, 0, 0.87);\\n  margin: 0;\\n  padding: 0;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  font-size: 1em;\\n  border: none;\\n  border-radius: 0;\\n}\\n\\n.ui.items > .item > .content:after {\\n  display: block;\\n  content: ' ';\\n  height: 0;\\n  clear: both;\\n  overflow: hidden;\\n  visibility: hidden;\\n}\\n\\n.ui.items > .item > .image + .content {\\n  min-width: 0;\\n  width: auto;\\n  display: block;\\n  margin-left: 0;\\n  -ms-flex-item-align: start;\\n      align-self: start;\\n  padding-left: 1.5em;\\n}\\n\\n.ui.items > .item > .content > .header {\\n  display: inline-block;\\n  margin: -0.21425em 0 0;\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  font-weight: bold;\\n  color: rgba(0, 0, 0, 0.85);\\n}\\n\\n/* Default Header Size */\\n\\n.ui.items > .item > .content > .header:not(.ui) {\\n  font-size: 1.28571429em;\\n}\\n\\n/*--------------\\n     Floated\\n---------------*/\\n\\n.ui.items > .item [class*=\\\"left floated\\\"] {\\n  float: left;\\n}\\n\\n.ui.items > .item [class*=\\\"right floated\\\"] {\\n  float: right;\\n}\\n\\n/*--------------\\n  Content Image\\n---------------*/\\n\\n.ui.items > .item .content img {\\n  -ms-flex-item-align: center;\\n      align-self: center;\\n  width: '';\\n}\\n\\n.ui.items > .item img.avatar,\\n.ui.items > .item .avatar img {\\n  width: '';\\n  height: '';\\n  border-radius: 500rem;\\n}\\n\\n/*--------------\\n   Description\\n---------------*/\\n\\n.ui.items > .item > .content > .description {\\n  margin-top: 0.6em;\\n  max-width: auto;\\n  font-size: 1em;\\n  line-height: 1.4285em;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n/*--------------\\n    Paragraph\\n---------------*/\\n\\n.ui.items > .item > .content p {\\n  margin: 0 0 0.5em;\\n}\\n\\n.ui.items > .item > .content p:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/*--------------\\n      Meta\\n---------------*/\\n\\n.ui.items > .item .meta {\\n  margin: 0.5em 0 0.5em;\\n  font-size: 1em;\\n  line-height: 1em;\\n  color: rgba(0, 0, 0, 0.6);\\n}\\n\\n.ui.items > .item .meta * {\\n  margin-right: 0.3em;\\n}\\n\\n.ui.items > .item .meta :last-child {\\n  margin-right: 0;\\n}\\n\\n.ui.items > .item .meta [class*=\\\"right floated\\\"] {\\n  margin-right: 0;\\n  margin-left: 0.3em;\\n}\\n\\n/*--------------\\n      Links\\n---------------*/\\n\\n/* Generic */\\n\\n.ui.items > .item > .content a:not(.ui) {\\n  color: '';\\n  -webkit-transition: color 0.1s ease;\\n  transition: color 0.1s ease;\\n}\\n\\n.ui.items > .item > .content a:not(.ui):hover {\\n  color: '';\\n}\\n\\n/* Header */\\n\\n.ui.items > .item > .content > a.header {\\n  color: rgba(0, 0, 0, 0.85);\\n}\\n\\n.ui.items > .item > .content > a.header:hover {\\n  color: #1e70bf;\\n}\\n\\n/* Meta */\\n\\n.ui.items > .item .meta > a:not(.ui) {\\n  color: rgba(0, 0, 0, 0.4);\\n}\\n\\n.ui.items > .item .meta > a:not(.ui):hover {\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n/*--------------\\n     Labels\\n---------------*/\\n\\n/*-----Star----- */\\n\\n/* Icon */\\n\\n.ui.items > .item > .content .favorite.icon {\\n  cursor: pointer;\\n  opacity: 0.75;\\n  -webkit-transition: color 0.1s ease;\\n  transition: color 0.1s ease;\\n}\\n\\n.ui.items > .item > .content .favorite.icon:hover {\\n  opacity: 1;\\n  color: #FFB70A;\\n}\\n\\n.ui.items > .item > .content .active.favorite.icon {\\n  color: #FFE623;\\n}\\n\\n/*-----Like----- */\\n\\n/* Icon */\\n\\n.ui.items > .item > .content .like.icon {\\n  cursor: pointer;\\n  opacity: 0.75;\\n  -webkit-transition: color 0.1s ease;\\n  transition: color 0.1s ease;\\n}\\n\\n.ui.items > .item > .content .like.icon:hover {\\n  opacity: 1;\\n  color: #FF2733;\\n}\\n\\n.ui.items > .item > .content .active.like.icon {\\n  color: #FF2733;\\n}\\n\\n/*----------------\\n  Extra Content\\n-----------------*/\\n\\n.ui.items > .item .extra {\\n  display: block;\\n  position: relative;\\n  background: none;\\n  margin: 0.5rem 0 0;\\n  width: 100%;\\n  padding: 0 0 0;\\n  top: 0;\\n  left: 0;\\n  color: rgba(0, 0, 0, 0.4);\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  -webkit-transition: color 0.1s ease;\\n  transition: color 0.1s ease;\\n  border-top: none;\\n}\\n\\n.ui.items > .item .extra > * {\\n  margin: 0.25rem 0.5rem 0.25rem 0;\\n}\\n\\n.ui.items > .item .extra > [class*=\\\"right floated\\\"] {\\n  margin: 0.25rem 0 0.25rem 0.5rem;\\n}\\n\\n.ui.items > .item .extra:after {\\n  display: block;\\n  content: ' ';\\n  height: 0;\\n  clear: both;\\n  overflow: hidden;\\n  visibility: hidden;\\n}\\n\\n/*******************************\\n          Responsive\\n*******************************/\\n\\n/* Default Image Width */\\n\\n.ui.items > .item > .image:not(.ui) {\\n  width: 175px;\\n}\\n\\n/* Tablet Only */\\n\\n@media only screen and (min-width: 768px) and (max-width: 991.98px) {\\n  .ui.items > .item {\\n    margin: 1em 0;\\n  }\\n\\n  .ui.items > .item > .image:not(.ui) {\\n    width: 150px;\\n  }\\n\\n  .ui.items > .item > .image + .content {\\n    display: block;\\n    padding: 0 0 0 1em;\\n  }\\n}\\n\\n/* Mobile Only */\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.items:not(.unstackable) > .item {\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: column;\\n            flex-direction: column;\\n    margin: 2em 0;\\n  }\\n\\n  .ui.items:not(.unstackable) > .item > .image {\\n    display: block;\\n    margin-left: auto;\\n    margin-right: auto;\\n  }\\n\\n  .ui.items:not(.unstackable) > .item > .image,\\n  .ui.items:not(.unstackable) > .item > .image > img {\\n    max-width: 100% !important;\\n    width: auto !important;\\n    max-height: 250px !important;\\n  }\\n\\n  .ui.items:not(.unstackable) > .item > .image + .content {\\n    display: block;\\n    padding: 1.5em 0 0;\\n  }\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*-------------------\\n       Aligned\\n--------------------*/\\n\\n.ui.items > .item > .image + [class*=\\\"top aligned\\\"].content {\\n  -ms-flex-item-align: start;\\n      align-self: flex-start;\\n}\\n\\n.ui.items > .item > .image + [class*=\\\"middle aligned\\\"].content {\\n  -ms-flex-item-align: center;\\n      align-self: center;\\n}\\n\\n.ui.items > .item > .image + [class*=\\\"bottom aligned\\\"].content {\\n  -ms-flex-item-align: end;\\n      align-self: flex-end;\\n}\\n\\n/*--------------\\n     Relaxed\\n---------------*/\\n\\n.ui.relaxed.items > .item {\\n  margin: 1.5em 0;\\n}\\n\\n.ui[class*=\\\"very relaxed\\\"].items > .item {\\n  margin: 2em 0;\\n}\\n\\n/*-------------------\\n      Divided\\n--------------------*/\\n\\n.ui.divided.items > .item {\\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\\n  margin: 0;\\n  padding: 1em 0;\\n}\\n\\n.ui.divided.items > .item:first-child {\\n  border-top: none;\\n  margin-top: 0 !important;\\n  padding-top: 0 !important;\\n}\\n\\n.ui.divided.items > .item:last-child {\\n  margin-bottom: 0 !important;\\n  padding-bottom: 0 !important;\\n}\\n\\n/* Relaxed Divided */\\n\\n.ui.relaxed.divided.items > .item {\\n  margin: 0;\\n  padding: 1.5em 0;\\n}\\n\\n.ui[class*=\\\"very relaxed\\\"].divided.items > .item {\\n  margin: 0;\\n  padding: 2em 0;\\n}\\n\\n/*-------------------\\n        Link\\n--------------------*/\\n\\n.ui.items a.item:hover,\\n.ui.link.items > .item:hover {\\n  cursor: pointer;\\n}\\n\\n.ui.items a.item:hover .content .header,\\n.ui.link.items > .item:hover .content .header {\\n  color: #1e70bf;\\n}\\n\\n/*--------------\\n      Size\\n---------------*/\\n\\n.ui.items > .item {\\n  font-size: 1em;\\n}\\n\\n/*---------------\\n   Unstackable\\n----------------*/\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.unstackable.items > .item > .image,\\n  .ui.unstackable.items > .item > .image > img {\\n    width: 125px !important;\\n  }\\n}\\n\\n/*--------------\\n     Inverted\\n---------------*/\\n\\n.ui.inverted.items > .item {\\n  background: transparent;\\n}\\n\\n.ui.inverted.items > .item > .content {\\n  background: none;\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.inverted.items > .item .extra {\\n  background: none;\\n}\\n\\n.ui.inverted.items > .item > .content > .header {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.inverted.items > .item > .content > .description {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.inverted.items > .item .meta {\\n  color: rgba(255, 255, 255, 0.8);\\n}\\n\\n.ui.inverted.items > .item > .content a:not(.ui) {\\n  color: #57a4ef;\\n}\\n\\n.ui.inverted.items > .item > .content a:not(.ui):hover {\\n  color: #4183C4;\\n}\\n\\n.ui.inverted.items > .item > .content > a.header {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.inverted.items > .item > .content > a.header:hover {\\n  color: #ffffff;\\n}\\n\\n.ui.inverted.items > .item .meta > a:not(.ui) {\\n  color: rgba(255, 255, 255, 0.7);\\n}\\n\\n.ui.inverted.items > .item .meta > a:not(.ui):hover {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.inverted.items > .item > .content .favorite.icon:hover {\\n  color: #ffc63d;\\n}\\n\\n.ui.inverted.items > .item > .content .active.favorite.icon {\\n  color: #ffec56;\\n}\\n\\n.ui.inverted.items > .item > .content .like.icon:hover {\\n  color: #ff5a63;\\n}\\n\\n.ui.inverted.items > .item > .content .active.like.icon {\\n  color: #ff5a63;\\n}\\n\\n.ui.inverted.items > .item .extra {\\n  color: rgba(255, 255, 255, 0.7);\\n}\\n\\n.ui.inverted.items a.item:hover .content .header,\\n.ui.inverted.link.items > .item:hover .content .header {\\n  color: #ffffff;\\n}\\n\\n.ui.inverted.divided.items > .item {\\n  border-top: 1px solid rgba(255, 255, 255, 0.1);\\n}\\n\\n.ui.inverted.divided.items > .item:first-child {\\n  border-top: none;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n    User Variable Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Statistic\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n           Statistic\\n*******************************/\\n\\n/* Standalone */\\n\\n.ui.statistic {\\n  display: -webkit-inline-box;\\n  display: -ms-inline-flexbox;\\n  display: inline-flex;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  margin: 1em 0;\\n  max-width: none;\\n}\\n\\n.ui.statistic + .ui.statistic {\\n  margin: 0 0 0 1.5em;\\n}\\n\\n.ui.statistic:first-child {\\n  margin-top: 0;\\n}\\n\\n.ui.statistic:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/*******************************\\n            Group\\n*******************************/\\n\\n/* Grouped */\\n\\n.ui.statistics {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-align: start;\\n      -ms-flex-align: start;\\n          align-items: flex-start;\\n  -ms-flex-wrap: wrap;\\n      flex-wrap: wrap;\\n}\\n\\n.ui.statistics > .statistic {\\n  display: -webkit-inline-box;\\n  display: -ms-inline-flexbox;\\n  display: inline-flex;\\n  -webkit-box-flex: 0;\\n      -ms-flex: 0 1 auto;\\n          flex: 0 1 auto;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  margin: 0 1.5em 1em;\\n  max-width: none;\\n}\\n\\n.ui.statistics {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  margin: 1em -1.5em -1em;\\n}\\n\\n/* Clearing */\\n\\n.ui.statistics:after {\\n  display: block;\\n  content: ' ';\\n  height: 0;\\n  clear: both;\\n  overflow: hidden;\\n  visibility: hidden;\\n}\\n\\n.ui.statistics:first-child {\\n  margin-top: 0;\\n}\\n\\n/*******************************\\n            Content\\n*******************************/\\n\\n/*--------------\\n      Value\\n---------------*/\\n\\n.ui.statistics .statistic > .value,\\n.ui.statistic > .value {\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  font-size: 4rem;\\n  font-weight: normal;\\n  line-height: 1em;\\n  color: #1B1C1D;\\n  text-transform: uppercase;\\n  text-align: center;\\n}\\n\\n/*--------------\\n     Label\\n---------------*/\\n\\n.ui.statistics .statistic > .label,\\n.ui.statistic > .label {\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  font-size: 1em;\\n  font-weight: bold;\\n  color: rgba(0, 0, 0, 0.87);\\n  text-transform: uppercase;\\n  text-align: center;\\n}\\n\\n/* Top Label */\\n\\n.ui.statistics .statistic > .label ~ .value,\\n.ui.statistic > .label ~ .value {\\n  margin-top: 0;\\n}\\n\\n/* Bottom Label */\\n\\n.ui.statistics .statistic > .value ~ .label,\\n.ui.statistic > .value ~ .label {\\n  margin-top: 0;\\n}\\n\\n/*******************************\\n             Types\\n*******************************/\\n\\n/*--------------\\n   Icon Value\\n---------------*/\\n\\n.ui.statistics .statistic > .value .icon,\\n.ui.statistic > .value .icon {\\n  opacity: 1;\\n  width: auto;\\n  margin: 0;\\n}\\n\\n/*--------------\\n   Text Value\\n---------------*/\\n\\n.ui.statistics .statistic > .text.value,\\n.ui.statistic > .text.value {\\n  line-height: 1em;\\n  min-height: 2em;\\n  font-weight: bold;\\n  text-align: center;\\n}\\n\\n.ui.statistics .statistic > .text.value + .label,\\n.ui.statistic > .text.value + .label {\\n  text-align: center;\\n}\\n\\n/*--------------\\n   Image Value\\n---------------*/\\n\\n.ui.statistics .statistic > .value img,\\n.ui.statistic > .value img {\\n  max-height: 3rem;\\n  vertical-align: baseline;\\n}\\n\\n/*******************************\\n            Variations\\n*******************************/\\n\\n/*--------------\\n      Count\\n---------------*/\\n\\n.ui.ten.statistics {\\n  margin: 0 0 -1em;\\n}\\n\\n.ui.ten.statistics .statistic {\\n  min-width: 10%;\\n  margin: 0 0 1em;\\n}\\n\\n.ui.nine.statistics {\\n  margin: 0 0 -1em;\\n}\\n\\n.ui.nine.statistics .statistic {\\n  min-width: 11.11111111%;\\n  margin: 0 0 1em;\\n}\\n\\n.ui.eight.statistics {\\n  margin: 0 0 -1em;\\n}\\n\\n.ui.eight.statistics .statistic {\\n  min-width: 12.5%;\\n  margin: 0 0 1em;\\n}\\n\\n.ui.seven.statistics {\\n  margin: 0 0 -1em;\\n}\\n\\n.ui.seven.statistics .statistic {\\n  min-width: 14.28571429%;\\n  margin: 0 0 1em;\\n}\\n\\n.ui.six.statistics {\\n  margin: 0 0 -1em;\\n}\\n\\n.ui.six.statistics .statistic {\\n  min-width: 16.66666667%;\\n  margin: 0 0 1em;\\n}\\n\\n.ui.five.statistics {\\n  margin: 0 0 -1em;\\n}\\n\\n.ui.five.statistics .statistic {\\n  min-width: 20%;\\n  margin: 0 0 1em;\\n}\\n\\n.ui.four.statistics {\\n  margin: 0 0 -1em;\\n}\\n\\n.ui.four.statistics .statistic {\\n  min-width: 25%;\\n  margin: 0 0 1em;\\n}\\n\\n.ui.three.statistics {\\n  margin: 0 0 -1em;\\n}\\n\\n.ui.three.statistics .statistic {\\n  min-width: 33.33333333%;\\n  margin: 0 0 1em;\\n}\\n\\n.ui.two.statistics {\\n  margin: 0 0 -1em;\\n}\\n\\n.ui.two.statistics .statistic {\\n  min-width: 50%;\\n  margin: 0 0 1em;\\n}\\n\\n.ui.one.statistics {\\n  margin: 0 0 -1em;\\n}\\n\\n.ui.one.statistics .statistic {\\n  min-width: 100%;\\n  margin: 0 0 1em;\\n}\\n\\n/*--------------\\n   Horizontal\\n---------------*/\\n\\n.ui.horizontal.statistic {\\n  -webkit-box-orient: horizontal;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: row;\\n          flex-direction: row;\\n  -webkit-box-align: center;\\n      -ms-flex-align: center;\\n          align-items: center;\\n}\\n\\n.ui.horizontal.statistics {\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  margin: 0;\\n  max-width: none;\\n}\\n\\n.ui.horizontal.statistics .statistic {\\n  -webkit-box-orient: horizontal;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: row;\\n          flex-direction: row;\\n  -webkit-box-align: center;\\n      -ms-flex-align: center;\\n          align-items: center;\\n  max-width: none;\\n  margin: 1em 0;\\n}\\n\\n.ui.horizontal.statistic > .text.value,\\n.ui.horizontal.statistics > .statistic > .text.value {\\n  min-height: 0 !important;\\n}\\n\\n.ui.horizontal.statistics .statistic > .value .icon,\\n.ui.horizontal.statistic > .value .icon {\\n  width: 1.18em;\\n}\\n\\n.ui.horizontal.statistics .statistic > .value,\\n.ui.horizontal.statistic > .value {\\n  display: inline-block;\\n  vertical-align: middle;\\n}\\n\\n.ui.horizontal.statistics .statistic > .label,\\n.ui.horizontal.statistic > .label {\\n  display: inline-block;\\n  vertical-align: middle;\\n  margin: 0 0 0 0.75em;\\n}\\n\\n/*--------------\\n    Inverted\\n---------------*/\\n\\n.ui.inverted.statistics .statistic > .value,\\n.ui.inverted.statistic .value {\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.statistics .statistic > .label,\\n.ui.inverted.statistic .label {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n/*--------------\\n     Colors\\n---------------*/\\n\\n.ui.primary.statistics .statistic > .value,\\n.ui.statistics .primary.statistic > .value,\\n.ui.primary.statistic > .value {\\n  color: #2185D0;\\n}\\n\\n.ui.inverted.primary.statistics .statistic > .value,\\n.ui.statistics .inverted.primary.statistic > .value,\\n.ui.inverted.primary.statistic > .value {\\n  color: #54C8FF;\\n}\\n\\n.ui.secondary.statistics .statistic > .value,\\n.ui.statistics .secondary.statistic > .value,\\n.ui.secondary.statistic > .value {\\n  color: #1B1C1D;\\n}\\n\\n.ui.inverted.secondary.statistics .statistic > .value,\\n.ui.statistics .inverted.secondary.statistic > .value,\\n.ui.inverted.secondary.statistic > .value {\\n  color: #545454;\\n}\\n\\n.ui.red.statistics .statistic > .value,\\n.ui.statistics .red.statistic > .value,\\n.ui.red.statistic > .value {\\n  color: #DB2828;\\n}\\n\\n.ui.inverted.red.statistics .statistic > .value,\\n.ui.statistics .inverted.red.statistic > .value,\\n.ui.inverted.red.statistic > .value {\\n  color: #FF695E;\\n}\\n\\n.ui.orange.statistics .statistic > .value,\\n.ui.statistics .orange.statistic > .value,\\n.ui.orange.statistic > .value {\\n  color: #F2711C;\\n}\\n\\n.ui.inverted.orange.statistics .statistic > .value,\\n.ui.statistics .inverted.orange.statistic > .value,\\n.ui.inverted.orange.statistic > .value {\\n  color: #FF851B;\\n}\\n\\n.ui.yellow.statistics .statistic > .value,\\n.ui.statistics .yellow.statistic > .value,\\n.ui.yellow.statistic > .value {\\n  color: #FBBD08;\\n}\\n\\n.ui.inverted.yellow.statistics .statistic > .value,\\n.ui.statistics .inverted.yellow.statistic > .value,\\n.ui.inverted.yellow.statistic > .value {\\n  color: #FFE21F;\\n}\\n\\n.ui.olive.statistics .statistic > .value,\\n.ui.statistics .olive.statistic > .value,\\n.ui.olive.statistic > .value {\\n  color: #B5CC18;\\n}\\n\\n.ui.inverted.olive.statistics .statistic > .value,\\n.ui.statistics .inverted.olive.statistic > .value,\\n.ui.inverted.olive.statistic > .value {\\n  color: #D9E778;\\n}\\n\\n.ui.green.statistics .statistic > .value,\\n.ui.statistics .green.statistic > .value,\\n.ui.green.statistic > .value {\\n  color: #21BA45;\\n}\\n\\n.ui.inverted.green.statistics .statistic > .value,\\n.ui.statistics .inverted.green.statistic > .value,\\n.ui.inverted.green.statistic > .value {\\n  color: #2ECC40;\\n}\\n\\n.ui.teal.statistics .statistic > .value,\\n.ui.statistics .teal.statistic > .value,\\n.ui.teal.statistic > .value {\\n  color: #00B5AD;\\n}\\n\\n.ui.inverted.teal.statistics .statistic > .value,\\n.ui.statistics .inverted.teal.statistic > .value,\\n.ui.inverted.teal.statistic > .value {\\n  color: #6DFFFF;\\n}\\n\\n.ui.blue.statistics .statistic > .value,\\n.ui.statistics .blue.statistic > .value,\\n.ui.blue.statistic > .value {\\n  color: #2185D0;\\n}\\n\\n.ui.inverted.blue.statistics .statistic > .value,\\n.ui.statistics .inverted.blue.statistic > .value,\\n.ui.inverted.blue.statistic > .value {\\n  color: #54C8FF;\\n}\\n\\n.ui.violet.statistics .statistic > .value,\\n.ui.statistics .violet.statistic > .value,\\n.ui.violet.statistic > .value {\\n  color: #6435C9;\\n}\\n\\n.ui.inverted.violet.statistics .statistic > .value,\\n.ui.statistics .inverted.violet.statistic > .value,\\n.ui.inverted.violet.statistic > .value {\\n  color: #A291FB;\\n}\\n\\n.ui.purple.statistics .statistic > .value,\\n.ui.statistics .purple.statistic > .value,\\n.ui.purple.statistic > .value {\\n  color: #A333C8;\\n}\\n\\n.ui.inverted.purple.statistics .statistic > .value,\\n.ui.statistics .inverted.purple.statistic > .value,\\n.ui.inverted.purple.statistic > .value {\\n  color: #DC73FF;\\n}\\n\\n.ui.pink.statistics .statistic > .value,\\n.ui.statistics .pink.statistic > .value,\\n.ui.pink.statistic > .value {\\n  color: #E03997;\\n}\\n\\n.ui.inverted.pink.statistics .statistic > .value,\\n.ui.statistics .inverted.pink.statistic > .value,\\n.ui.inverted.pink.statistic > .value {\\n  color: #FF8EDF;\\n}\\n\\n.ui.brown.statistics .statistic > .value,\\n.ui.statistics .brown.statistic > .value,\\n.ui.brown.statistic > .value {\\n  color: #A5673F;\\n}\\n\\n.ui.inverted.brown.statistics .statistic > .value,\\n.ui.statistics .inverted.brown.statistic > .value,\\n.ui.inverted.brown.statistic > .value {\\n  color: #D67C1C;\\n}\\n\\n.ui.grey.statistics .statistic > .value,\\n.ui.statistics .grey.statistic > .value,\\n.ui.grey.statistic > .value {\\n  color: #767676;\\n}\\n\\n.ui.inverted.grey.statistics .statistic > .value,\\n.ui.statistics .inverted.grey.statistic > .value,\\n.ui.inverted.grey.statistic > .value {\\n  color: #DCDDDE;\\n}\\n\\n.ui.black.statistics .statistic > .value,\\n.ui.statistics .black.statistic > .value,\\n.ui.black.statistic > .value {\\n  color: #1B1C1D;\\n}\\n\\n.ui.inverted.black.statistics .statistic > .value,\\n.ui.statistics .inverted.black.statistic > .value,\\n.ui.inverted.black.statistic > .value {\\n  color: #545454;\\n}\\n\\n/*--------------\\n    Floated\\n---------------*/\\n\\n.ui[class*=\\\"left floated\\\"].statistic {\\n  float: left;\\n  margin: 0 2em 1em 0;\\n}\\n\\n.ui[class*=\\\"right floated\\\"].statistic {\\n  float: right;\\n  margin: 0 0 1em 2em;\\n}\\n\\n.ui.floated.statistic:last-child {\\n  margin-bottom: 0;\\n}\\n\\n/*--------------\\n    Stackable\\n---------------*/\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.stackable.statistics {\\n    width: auto;\\n    margin-left: 0 !important;\\n    margin-right: 0 !important;\\n  }\\n\\n  .ui.stackable.statistics > .statistic {\\n    width: 100% !important;\\n    margin: 0 0 !important;\\n    padding: 1rem 1rem !important;\\n  }\\n}\\n\\n/*--------------\\n     Sizes\\n---------------*/\\n\\n/* Mini */\\n\\n.ui.mini.statistics .statistic > .value,\\n.ui.mini.statistic > .value {\\n  font-size: 1.5rem !important;\\n}\\n\\n.ui.mini.horizontal.statistics .statistic > .value,\\n.ui.mini.horizontal.statistic > .value {\\n  font-size: 1.5rem !important;\\n}\\n\\n.ui.mini.statistics .statistic > .text.value,\\n.ui.mini.statistic > .text.value {\\n  font-size: 1rem !important;\\n}\\n\\n/* Tiny */\\n\\n.ui.tiny.statistics .statistic > .value,\\n.ui.tiny.statistic > .value {\\n  font-size: 2rem !important;\\n}\\n\\n.ui.tiny.horizontal.statistics .statistic > .value,\\n.ui.tiny.horizontal.statistic > .value {\\n  font-size: 2rem !important;\\n}\\n\\n.ui.tiny.statistics .statistic > .text.value,\\n.ui.tiny.statistic > .text.value {\\n  font-size: 1rem !important;\\n}\\n\\n/* Small */\\n\\n.ui.small.statistics .statistic > .value,\\n.ui.small.statistic > .value {\\n  font-size: 3rem !important;\\n}\\n\\n.ui.small.horizontal.statistics .statistic > .value,\\n.ui.small.horizontal.statistic > .value {\\n  font-size: 2rem !important;\\n}\\n\\n.ui.small.statistics .statistic > .text.value,\\n.ui.small.statistic > .text.value {\\n  font-size: 1rem !important;\\n}\\n\\n/* Medium */\\n\\n.ui.statistics .statistic > .value,\\n.ui.statistic > .value {\\n  font-size: 4rem !important;\\n}\\n\\n.ui.horizontal.statistics .statistic > .value,\\n.ui.horizontal.statistic > .value {\\n  font-size: 3rem !important;\\n}\\n\\n.ui.statistics .statistic > .text.value,\\n.ui.statistic > .text.value {\\n  font-size: 2rem !important;\\n}\\n\\n/* Large */\\n\\n.ui.large.statistics .statistic > .value,\\n.ui.large.statistic > .value {\\n  font-size: 5rem !important;\\n}\\n\\n.ui.large.horizontal.statistics .statistic > .value,\\n.ui.large.horizontal.statistic > .value {\\n  font-size: 4rem !important;\\n}\\n\\n.ui.large.statistics .statistic > .text.value,\\n.ui.large.statistic > .text.value {\\n  font-size: 2.5rem !important;\\n}\\n\\n/* Huge */\\n\\n.ui.huge.statistics .statistic > .value,\\n.ui.huge.statistic > .value {\\n  font-size: 6rem !important;\\n}\\n\\n.ui.huge.horizontal.statistics .statistic > .value,\\n.ui.huge.horizontal.statistic > .value {\\n  font-size: 5rem !important;\\n}\\n\\n.ui.huge.statistics .statistic > .text.value,\\n.ui.huge.statistic > .text.value {\\n  font-size: 2.5rem !important;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n    User Variable Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Accordion\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Accordion\\n*******************************/\\n\\n.ui.accordion,\\n.ui.accordion .accordion {\\n  max-width: 100%;\\n}\\n\\n.ui.accordion .accordion {\\n  margin: 1em 0 0;\\n  padding: 0;\\n}\\n\\n/* Title */\\n\\n.ui.accordion .title,\\n.ui.accordion .accordion .title {\\n  cursor: pointer;\\n}\\n\\n/* Default Styling */\\n\\n.ui.accordion .title:not(.ui) {\\n  padding: 0.5em 0;\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  font-size: 1em;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n/* Default Styling */\\n\\n.ui.accordion:not(.styled) .title ~ .content:not(.ui),\\n.ui.accordion:not(.styled) .accordion .title ~ .content:not(.ui) {\\n  margin: '';\\n  padding: 0.5em 0 1em;\\n}\\n\\n.ui.accordion:not(.styled) .title ~ .content:not(.ui):last-child {\\n  padding-bottom: 0;\\n}\\n\\n/* Arrow */\\n\\n.ui.accordion .title .dropdown.icon,\\n.ui.accordion .accordion .title .dropdown.icon {\\n  display: inline-block;\\n  float: none;\\n  opacity: 1;\\n  width: 1.25em;\\n  height: 1em;\\n  margin: 0 0.25rem 0 0;\\n  padding: 0;\\n  font-size: 1em;\\n  transition: opacity 0.1s ease, -webkit-transform 0.1s ease;\\n  -webkit-transition: opacity 0.1s ease, -webkit-transform 0.1s ease;\\n  transition: transform 0.1s ease, opacity 0.1s ease;\\n  transition: transform 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease;\\n  vertical-align: baseline;\\n  -webkit-transform: none;\\n  transform: none;\\n}\\n\\n/*--------------\\n    Coupling\\n---------------*/\\n\\n/* Menu */\\n\\n.ui.accordion.menu .item .title {\\n  display: block;\\n  padding: 0;\\n}\\n\\n.ui.accordion.menu .item .title > .dropdown.icon {\\n  float: right;\\n  margin: 0.21425em 0 0 1em;\\n  -webkit-transform: rotate(180deg);\\n  transform: rotate(180deg);\\n}\\n\\n/* Header */\\n\\n.ui.accordion .ui.header .dropdown.icon {\\n  font-size: 1em;\\n  margin: 0 0.25rem 0 0;\\n}\\n\\n/*******************************\\n            States\\n*******************************/\\n\\n.ui.accordion .active.title .dropdown.icon,\\n.ui.accordion .accordion .active.title .dropdown.icon {\\n  -webkit-transform: rotate(90deg);\\n  transform: rotate(90deg);\\n}\\n\\n.ui.accordion.menu .item .active.title > .dropdown.icon {\\n  -webkit-transform: rotate(90deg);\\n  transform: rotate(90deg);\\n}\\n\\n/*******************************\\n            Types\\n*******************************/\\n\\n/*--------------\\n     Styled\\n---------------*/\\n\\n.ui.styled.accordion {\\n  width: 600px;\\n}\\n\\n.ui.styled.accordion,\\n.ui.styled.accordion .accordion {\\n  border-radius: 0.28571429rem;\\n  background: #FFFFFF;\\n  -webkit-box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15), 0 0 0 1px rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15), 0 0 0 1px rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.styled.accordion .title,\\n.ui.styled.accordion .accordion .title {\\n  margin: 0;\\n  padding: 0.75em 1em;\\n  color: rgba(0, 0, 0, 0.4);\\n  font-weight: bold;\\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\\n  -webkit-transition: background 0.1s ease, color 0.1s ease;\\n  transition: background 0.1s ease, color 0.1s ease;\\n}\\n\\n.ui.styled.accordion > .title:first-child,\\n.ui.styled.accordion .accordion .title:first-child {\\n  border-top: none;\\n}\\n\\n/* Content */\\n\\n.ui.styled.accordion .content,\\n.ui.styled.accordion .accordion .content {\\n  margin: 0;\\n  padding: 0.5em 1em 1.5em;\\n}\\n\\n.ui.styled.accordion .accordion .content {\\n  margin: 0;\\n  padding: 0.5em 1em 1.5em;\\n}\\n\\n/* Hover */\\n\\n.ui.styled.accordion .title:hover,\\n.ui.styled.accordion .active.title,\\n.ui.styled.accordion .accordion .title:hover,\\n.ui.styled.accordion .accordion .active.title {\\n  background: transparent;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.styled.accordion .accordion .title:hover,\\n.ui.styled.accordion .accordion .active.title {\\n  background: transparent;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n/* Active */\\n\\n.ui.styled.accordion .active.title {\\n  background: transparent;\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n.ui.styled.accordion .accordion .active.title {\\n  background: transparent;\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/*******************************\\n            States\\n*******************************/\\n\\n/*--------------\\n   Not Active\\n---------------*/\\n\\n.ui.accordion .title ~ .content:not(.active),\\n.ui.accordion .accordion .title ~ .content:not(.active) {\\n  display: none;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*--------------\\n     Fluid\\n---------------*/\\n\\n.ui.fluid.accordion,\\n.ui.fluid.accordion .accordion {\\n  width: 100%;\\n}\\n\\n/*--------------\\n     Inverted\\n---------------*/\\n\\n.ui.inverted.accordion .title:not(.ui) {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n@font-face {\\n  font-family: 'Accordion';\\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfOIKAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zryj6HgAAAFwAAAAyGhlYWT/0IhHAAACOAAAADZoaGVhApkB5wAAAnAAAAAkaG10eAJuABIAAAKUAAAAGGxvY2EAjABWAAACrAAAAA5tYXhwAAgAFgAAArwAAAAgbmFtZfC1n04AAALcAAABPHBvc3QAAwAAAAAEGAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQASAEkAtwFuABMAADc0PwE2FzYXFh0BFAcGJwYvASY1EgaABQgHBQYGBQcIBYAG2wcGfwcBAQcECf8IBAcBAQd/BgYAAAAAAQAAAEkApQFuABMAADcRNDc2MzIfARYVFA8BBiMiJyY1AAUGBwgFgAYGgAUIBwYFWwEACAUGBoAFCAcFgAYGBQcAAAABAAAAAQAAqWYls18PPPUACwIAAAAAAM/9o+4AAAAAz/2j7gAAAAAAtwFuAAAACAACAAAAAAAAAAEAAAHg/+AAAAIAAAAAAAC3AAEAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAQAAAAC3ABIAtwAAAAAAAAAKABQAHgBCAGQAAAABAAAABgAUAAEAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAASwAAoAAAAABGgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAS0AAAEtFpovuE9TLzIAAAIkAAAAYAAAAGAIIweQY21hcAAAAoQAAABMAAAATA984gpnYXNwAAAC0AAAAAgAAAAIAAAAEGhlYWQAAALYAAAANgAAADb/0IhHaGhlYQAAAxAAAAAkAAAAJAKZAedobXR4AAADNAAAABgAAAAYAm4AEm1heHAAAANMAAAABgAAAAYABlAAbmFtZQAAA1QAAAE8AAABPPC1n05wb3N0AAAEkAAAACAAAAAgAAMAAAEABAQAAQEBB3JhdGluZwABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeLa/iU+HQFHQAAAHkPHQAAAH4RHQAAAAkdAAABJBIABwEBBw0PERQZHnJhdGluZ3JhdGluZ3UwdTF1MjB1RjBEOXVGMERBAAACAYkABAAGAQEEBwoNVp38lA78lA78lA77lA773Z33bxWLkI2Qj44I9xT3FAWOj5CNkIuQi4+JjoePiI2Gi4YIi/uUBYuGiYeHiIiHh4mGi4aLho2Ijwj7FPcUBYeOiY+LkAgO+92L5hWL95QFi5CNkI6Oj4+PjZCLkIuQiY6HCPcU+xQFj4iNhouGi4aJh4eICPsU+xQFiIeGiYaLhouHjYePiI6Jj4uQCA74lBT4lBWLDAoAAAAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAEAADfYOJZfDzz1AAsCAAAAAADP/aPuAAAAAM/9o+4AAAAAALcBbgAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAAAtwABAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAEAAAAAtwASALcAAAAAUAAABgAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff');\\n  font-weight: normal;\\n  font-style: normal;\\n}\\n\\n/* Dropdown Icon */\\n\\n.ui.accordion .title .dropdown.icon,\\n.ui.accordion .accordion .title .dropdown.icon {\\n  font-family: Accordion;\\n  line-height: 1;\\n  -webkit-backface-visibility: hidden;\\n  backface-visibility: hidden;\\n  font-weight: normal;\\n  font-style: normal;\\n  text-align: center;\\n}\\n\\n.ui.accordion .title .dropdown.icon:before,\\n.ui.accordion .accordion .title .dropdown.icon:before {\\n  content: '\\\\f0da' ;\\n}\\n\\n/*******************************\\n        User Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Calendar\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Popup\\n*******************************/\\n\\n.ui.calendar .ui.popup {\\n  max-width: none;\\n  padding: 0;\\n  border: none;\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n}\\n\\n/*******************************\\n            Calendar\\n*******************************/\\n\\n.ui.calendar .calendar:focus {\\n  outline: 0;\\n}\\n\\n/*******************************\\n            Grid\\n*******************************/\\n\\n.ui.calendar .ui.popup .ui.grid {\\n  display: block;\\n  white-space: nowrap;\\n}\\n\\n.ui.calendar .ui.popup .ui.grid > .column {\\n  width: auto;\\n}\\n\\n/*******************************\\n            Table\\n*******************************/\\n\\n.ui.calendar .ui.table.year,\\n.ui.calendar .ui.table.month,\\n.ui.calendar .ui.table.minute {\\n  min-width: 15em;\\n}\\n\\n.ui.calendar .ui.table.day {\\n  min-width: 18em;\\n}\\n\\n.ui.calendar .ui.table.day.andweek {\\n  min-width: 22em;\\n}\\n\\n.ui.calendar .ui.table.hour {\\n  min-width: 20em;\\n}\\n\\n.ui.calendar .ui.table tr th,\\n.ui.calendar .ui.table tr td {\\n  padding: 0.5em;\\n  white-space: nowrap;\\n}\\n\\n.ui.calendar .ui.table tr th {\\n  border-left: none;\\n}\\n\\n.ui.calendar .ui.table tr th .icon {\\n  margin: 0;\\n}\\n\\n.ui.calendar .ui.table tr:first-child th {\\n  position: relative;\\n  padding-left: 0;\\n  padding-right: 0;\\n}\\n\\n.ui.calendar .ui.table.day tr:first-child th {\\n  border: none;\\n}\\n\\n.ui.calendar .ui.table.day tr:nth-child(2) th {\\n  padding-top: 0.2em;\\n  padding-bottom: 0.3em;\\n}\\n\\n.ui.calendar .ui.table tr td {\\n  padding-left: 0.1em;\\n  padding-right: 0.1em;\\n}\\n\\n.ui.calendar .ui.table tr .link {\\n  cursor: pointer;\\n}\\n\\n.ui.calendar .ui.table tr .prev.link {\\n  width: 14.28571429%;\\n  position: absolute;\\n  left: 0;\\n}\\n\\n.ui.calendar .ui.table tr .next.link {\\n  width: 14.28571429%;\\n  position: absolute;\\n  right: 0;\\n}\\n\\n.ui.calendar .ui.table tr .disabled {\\n  pointer-events: auto;\\n  cursor: default;\\n  color: rgba(40, 40, 40, 0.3);\\n}\\n\\n.ui.calendar .ui.table tr .adjacent:not(.disabled) {\\n  color: rgba(0, 0, 0, 0.6);\\n  background: rgba(0, 0, 0, 0.03);\\n}\\n\\n/*--------------\\n     States\\n---------------*/\\n\\n.ui.calendar .ui.table tr td.today {\\n  font-weight: bold;\\n}\\n\\n.ui.calendar .ui.table tr td.range {\\n  background: rgba(0, 0, 0, 0.05);\\n  color: rgba(0, 0, 0, 0.95);\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.calendar .ui.table.inverted tr td.range {\\n  background: rgba(255, 255, 255, 0.08);\\n  color: #ffffff;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.calendar:not(.disabled) .calendar:focus .ui.table tbody tr td.focus,\\n.ui.calendar:not(.disabled) .calendar.active .ui.table tbody tr td.focus {\\n  -webkit-box-shadow: inset 0 0 0 1px #85B7D9;\\n          box-shadow: inset 0 0 0 1px #85B7D9;\\n}\\n\\n.ui.calendar:not(.disabled) .calendar:focus .ui.table.inverted tbody tr td.focus,\\n.ui.calendar:not(.disabled) .calendar.active .ui.table.inverted tbody tr td.focus {\\n  -webkit-box-shadow: inset 0 0 0 1px #85B7D9;\\n          box-shadow: inset 0 0 0 1px #85B7D9;\\n}\\n\\n/*******************************\\n            States\\n*******************************/\\n\\n/*--------------------\\n        Disabled\\n---------------------*/\\n\\n.ui.disabled.calendar {\\n  opacity: 0.45;\\n}\\n\\n.ui.disabled.calendar > .input,\\n.ui.disabled.calendar .ui.table tr .link {\\n  pointer-events: none;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Checkbox\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n           Checkbox\\n*******************************/\\n\\n/*--------------\\n    Content\\n---------------*/\\n\\n.ui.checkbox {\\n  position: relative;\\n  display: inline-block;\\n  -webkit-backface-visibility: hidden;\\n  backface-visibility: hidden;\\n  outline: none;\\n  vertical-align: baseline;\\n  font-style: normal;\\n  min-height: 17px;\\n  font-size: 1rem;\\n  line-height: 17px;\\n  min-width: 17px;\\n}\\n\\n/* HTML Checkbox */\\n\\n.ui.checkbox input[type=\\\"checkbox\\\"],\\n.ui.checkbox input[type=\\\"radio\\\"] {\\n  cursor: pointer;\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  opacity: 0 !important;\\n  outline: none;\\n  z-index: 3;\\n  width: 17px;\\n  height: 17px;\\n}\\n\\n/*--------------\\n      Box\\n---------------*/\\n\\n.ui.checkbox .box,\\n.ui.checkbox label {\\n  cursor: auto;\\n  position: relative;\\n  display: block;\\n  padding-left: 1.85714em;\\n  outline: none;\\n  font-size: 1em;\\n}\\n\\n.ui.checkbox .box:before,\\n.ui.checkbox label:before {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  width: 17px;\\n  height: 17px;\\n  content: '';\\n  background: #FFFFFF;\\n  border-radius: 0.21428571rem;\\n  transition: border 0.1s ease, opacity 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease;\\n  -webkit-transition: border 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: border 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease;\\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease;\\n  border: 1px solid #D4D4D5;\\n}\\n\\n/*--------------\\n    Checkmark\\n---------------*/\\n\\n.ui.checkbox .box:after,\\n.ui.checkbox label:after {\\n  position: absolute;\\n  font-size: 14px;\\n  top: 0;\\n  left: 0;\\n  width: 17px;\\n  height: 17px;\\n  text-align: center;\\n  opacity: 0;\\n  color: rgba(0, 0, 0, 0.87);\\n  transition: border 0.1s ease, opacity 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease;\\n  -webkit-transition: border 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: border 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease;\\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease;\\n}\\n\\n/*--------------\\n      Label\\n---------------*/\\n\\n/* Inside */\\n\\n.ui.checkbox label,\\n.ui.checkbox + label {\\n  color: rgba(0, 0, 0, 0.87);\\n  -webkit-transition: color 0.1s ease;\\n  transition: color 0.1s ease;\\n}\\n\\n/* Outside */\\n\\n.ui.checkbox + label {\\n  vertical-align: middle;\\n}\\n\\n/*******************************\\n           States\\n*******************************/\\n\\n/*--------------\\n      Hover\\n---------------*/\\n\\n.ui.checkbox .box:hover::before,\\n.ui.checkbox label:hover::before {\\n  background: #FFFFFF;\\n  border-color: rgba(34, 36, 38, 0.35);\\n}\\n\\n.ui.checkbox label:hover,\\n.ui.checkbox + label:hover {\\n  color: rgba(0, 0, 0, 0.8);\\n}\\n\\n/*--------------\\n      Down\\n---------------*/\\n\\n.ui.checkbox .box:active::before,\\n.ui.checkbox label:active::before {\\n  background: #F9FAFB;\\n  border-color: rgba(34, 36, 38, 0.35);\\n}\\n\\n.ui.checkbox .box:active::after,\\n.ui.checkbox label:active::after {\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n.ui.checkbox input:active ~ label {\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/*--------------\\n     Focus\\n---------------*/\\n\\n.ui.checkbox input:focus ~ .box:before,\\n.ui.checkbox input:focus ~ label:before {\\n  background: #FFFFFF;\\n  border-color: #96C8DA;\\n}\\n\\n.ui.checkbox input:focus ~ .box:after,\\n.ui.checkbox input:focus ~ label:after {\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n.ui.checkbox input:focus ~ label {\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/*--------------\\n     Active\\n---------------*/\\n\\n.ui.checkbox input:checked ~ .box:before,\\n.ui.checkbox input:checked ~ label:before {\\n  background: #FFFFFF;\\n  border-color: rgba(34, 36, 38, 0.35);\\n}\\n\\n.ui.checkbox input:checked ~ .box:after,\\n.ui.checkbox input:checked ~ label:after {\\n  opacity: 1;\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/*--------------\\n  Indeterminate\\n---------------*/\\n\\n.ui.checkbox input:not([type=radio]):indeterminate ~ .box:before,\\n.ui.checkbox input:not([type=radio]):indeterminate ~ label:before {\\n  background: #FFFFFF;\\n  border-color: rgba(34, 36, 38, 0.35);\\n}\\n\\n.ui.checkbox input:not([type=radio]):indeterminate ~ .box:after,\\n.ui.checkbox input:not([type=radio]):indeterminate ~ label:after {\\n  opacity: 1;\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n.ui.indeterminate.toggle.checkbox input:not([type=radio]):indeterminate ~ label:before {\\n  background: rgba(0, 0, 0, 0.15);\\n}\\n\\n.ui.indeterminate.toggle.checkbox input:not([type=radio]) ~ label:after {\\n  left: 1.075rem;\\n}\\n\\n/*--------------\\n  Active Focus\\n---------------*/\\n\\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ .box:before,\\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ label:before,\\n.ui.checkbox input:checked:focus ~ .box:before,\\n.ui.checkbox input:checked:focus ~ label:before {\\n  background: #FFFFFF;\\n  border-color: #96C8DA;\\n}\\n\\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ .box:after,\\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ label:after,\\n.ui.checkbox input:checked:focus ~ .box:after,\\n.ui.checkbox input:checked:focus ~ label:after {\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/*--------------\\n    Read-Only\\n---------------*/\\n\\n.ui.read-only.checkbox,\\n.ui.read-only.checkbox label {\\n  cursor: default;\\n}\\n\\n/*--------------\\n     Disabled\\n---------------*/\\n\\n.ui.disabled.checkbox .box:after,\\n.ui.disabled.checkbox label,\\n.ui.checkbox input[disabled] ~ .box:after,\\n.ui.checkbox input[disabled] ~ label {\\n  cursor: default !important;\\n  opacity: 0.5;\\n  color: #000000;\\n}\\n\\n/*--------------\\n     Hidden\\n---------------*/\\n\\n/* Initialized checkbox moves input below element\\n to prevent manually triggering */\\n\\n.ui.checkbox input.hidden {\\n  z-index: -1;\\n}\\n\\n/* Selectable Label */\\n\\n.ui.checkbox input.hidden + label {\\n  cursor: pointer;\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n}\\n\\n/*******************************\\n             Types\\n*******************************/\\n\\n/*--------------\\n     Radio\\n---------------*/\\n\\n.ui.radio.checkbox {\\n  min-height: 15px;\\n}\\n\\n.ui.radio.checkbox .box,\\n.ui.radio.checkbox label {\\n  padding-left: 1.85714em;\\n}\\n\\n/* Box */\\n\\n.ui.radio.checkbox .box:before,\\n.ui.radio.checkbox label:before {\\n  content: '';\\n  -webkit-transform: none;\\n  transform: none;\\n  width: 15px;\\n  height: 15px;\\n  border-radius: 500rem;\\n  top: 1px;\\n  left: 0;\\n}\\n\\n/* Bullet */\\n\\n.ui.radio.checkbox .box:after,\\n.ui.radio.checkbox label:after {\\n  border: none;\\n  content: '' !important;\\n  width: 15px;\\n  height: 15px;\\n  line-height: 15px;\\n}\\n\\n/* Radio Checkbox */\\n\\n.ui.radio.checkbox .box:after,\\n.ui.radio.checkbox label:after {\\n  top: 1px;\\n  left: 0;\\n  width: 15px;\\n  height: 15px;\\n  border-radius: 500rem;\\n  -webkit-transform: scale(0.46666667);\\n  transform: scale(0.46666667);\\n  background-color: rgba(0, 0, 0, 0.87);\\n}\\n\\n/* Focus */\\n\\n.ui.radio.checkbox input:focus ~ .box:before,\\n.ui.radio.checkbox input:focus ~ label:before {\\n  background-color: #FFFFFF;\\n}\\n\\n.ui.radio.checkbox input:focus ~ .box:after,\\n.ui.radio.checkbox input:focus ~ label:after {\\n  background-color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/* Indeterminate */\\n\\n.ui.radio.checkbox input:indeterminate ~ .box:after,\\n.ui.radio.checkbox input:indeterminate ~ label:after {\\n  opacity: 0;\\n}\\n\\n/* Active */\\n\\n.ui.radio.checkbox input:checked ~ .box:before,\\n.ui.radio.checkbox input:checked ~ label:before {\\n  background-color: #FFFFFF;\\n}\\n\\n.ui.radio.checkbox input:checked ~ .box:after,\\n.ui.radio.checkbox input:checked ~ label:after {\\n  background-color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/* Active Focus */\\n\\n.ui.radio.checkbox input:focus:checked ~ .box:before,\\n.ui.radio.checkbox input:focus:checked ~ label:before {\\n  background-color: #FFFFFF;\\n}\\n\\n.ui.radio.checkbox input:focus:checked ~ .box:after,\\n.ui.radio.checkbox input:focus:checked ~ label:after {\\n  background-color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/*--------------\\n     Slider\\n---------------*/\\n\\n.ui.slider.checkbox {\\n  min-height: 1.25rem;\\n}\\n\\n/* Input */\\n\\n.ui.slider.checkbox input {\\n  width: 3.5rem;\\n  height: 1.25rem;\\n}\\n\\n/* Label */\\n\\n.ui.slider.checkbox .box,\\n.ui.slider.checkbox label {\\n  padding-left: 4.5rem;\\n  line-height: 1rem;\\n  color: rgba(0, 0, 0, 0.4);\\n}\\n\\n/* Line */\\n\\n.ui.slider.checkbox .box:before,\\n.ui.slider.checkbox label:before {\\n  display: block;\\n  position: absolute;\\n  content: '';\\n  -webkit-transform: none;\\n  transform: none;\\n  border: none !important;\\n  left: 0;\\n  z-index: 1;\\n  top: 0.4rem;\\n  background-color: rgba(0, 0, 0, 0.05);\\n  width: 3.5rem;\\n  height: 0.21428571rem;\\n  border-radius: 500rem;\\n  -webkit-transition: background 0.3s ease;\\n  transition: background 0.3s ease;\\n}\\n\\n/* Handle */\\n\\n.ui.slider.checkbox .box:after,\\n.ui.slider.checkbox label:after {\\n  background: #FFFFFF -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\\n  background: #FFFFFF linear-gradient(transparent, rgba(0, 0, 0, 0.05));\\n  position: absolute;\\n  content: '' !important;\\n  opacity: 1;\\n  z-index: 2;\\n  border: none;\\n  -webkit-box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15), 0 0 0 1px rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15), 0 0 0 1px rgba(34, 36, 38, 0.15) inset;\\n  width: 1.5rem;\\n  height: 1.5rem;\\n  top: -0.25rem;\\n  left: 0;\\n  -webkit-transform: none;\\n  transform: none;\\n  border-radius: 500rem;\\n  -webkit-transition: left 0.3s ease;\\n  transition: left 0.3s ease;\\n}\\n\\n/* Focus */\\n\\n.ui.slider.checkbox input:focus ~ .box:before,\\n.ui.slider.checkbox input:focus ~ label:before {\\n  background-color: rgba(0, 0, 0, 0.15);\\n  border: none;\\n}\\n\\n/* Hover */\\n\\n.ui.slider.checkbox .box:hover,\\n.ui.slider.checkbox label:hover {\\n  color: rgba(0, 0, 0, 0.8);\\n}\\n\\n.ui.slider.checkbox .box:hover::before,\\n.ui.slider.checkbox label:hover::before {\\n  background: rgba(0, 0, 0, 0.15);\\n}\\n\\n/* Active */\\n\\n.ui.slider.checkbox input:checked ~ .box,\\n.ui.slider.checkbox input:checked ~ label {\\n  color: rgba(0, 0, 0, 0.95) !important;\\n}\\n\\n.ui.slider.checkbox input:checked ~ .box:before,\\n.ui.slider.checkbox input:checked ~ label:before {\\n  background-color: #545454 !important;\\n}\\n\\n.ui.slider.checkbox input:checked ~ .box:after,\\n.ui.slider.checkbox input:checked ~ label:after {\\n  left: 2rem;\\n}\\n\\n/* Active Focus */\\n\\n.ui.slider.checkbox input:focus:checked ~ .box,\\n.ui.slider.checkbox input:focus:checked ~ label {\\n  color: rgba(0, 0, 0, 0.95) !important;\\n}\\n\\n.ui.slider.checkbox input:focus:checked ~ .box:before,\\n.ui.slider.checkbox input:focus:checked ~ label:before {\\n  background-color: #000000 !important;\\n}\\n\\n/*--------------\\n     Toggle\\n---------------*/\\n\\n.ui.toggle.checkbox {\\n  min-height: 1.5rem;\\n}\\n\\n/* Input */\\n\\n.ui.toggle.checkbox input {\\n  width: 3.5rem;\\n  height: 1.5rem;\\n}\\n\\n/* Label */\\n\\n.ui.toggle.checkbox .box,\\n.ui.toggle.checkbox label {\\n  min-height: 1.5rem;\\n  padding-left: 4.5rem;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.toggle.checkbox label {\\n  padding-top: 0.15em;\\n}\\n\\n/* Switch */\\n\\n.ui.toggle.checkbox .box:before,\\n.ui.toggle.checkbox label:before {\\n  display: block;\\n  position: absolute;\\n  content: '';\\n  z-index: 1;\\n  -webkit-transform: none;\\n  transform: none;\\n  border: none;\\n  top: 0;\\n  background: rgba(0, 0, 0, 0.05);\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  width: 3.5rem;\\n  height: 1.5rem;\\n  border-radius: 500rem;\\n}\\n\\n/* Handle */\\n\\n.ui.toggle.checkbox .box:after,\\n.ui.toggle.checkbox label:after {\\n  background: #FFFFFF -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\\n  background: #FFFFFF linear-gradient(transparent, rgba(0, 0, 0, 0.05));\\n  position: absolute;\\n  content: '' !important;\\n  opacity: 1;\\n  z-index: 2;\\n  border: none;\\n  -webkit-box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15), 0 0 0 1px rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15), 0 0 0 1px rgba(34, 36, 38, 0.15) inset;\\n  width: 1.5rem;\\n  height: 1.5rem;\\n  top: 0;\\n  left: 0;\\n  border-radius: 500rem;\\n  -webkit-transition: background 0.3s ease, left 0.3s ease;\\n  transition: background 0.3s ease, left 0.3s ease;\\n}\\n\\n.ui.toggle.checkbox input ~ .box:after,\\n.ui.toggle.checkbox input ~ label:after {\\n  left: -0.05rem;\\n  -webkit-box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15), 0 0 0 1px rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15), 0 0 0 1px rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n/* Focus */\\n\\n.ui.toggle.checkbox input:focus ~ .box:before,\\n.ui.toggle.checkbox input:focus ~ label:before {\\n  background-color: rgba(0, 0, 0, 0.15);\\n  border: none;\\n}\\n\\n/* Hover */\\n\\n.ui.toggle.checkbox .box:hover::before,\\n.ui.toggle.checkbox label:hover::before {\\n  background-color: rgba(0, 0, 0, 0.15);\\n  border: none;\\n}\\n\\n/* Active */\\n\\n.ui.toggle.checkbox input:checked ~ .box,\\n.ui.toggle.checkbox input:checked ~ label {\\n  color: rgba(0, 0, 0, 0.95) !important;\\n}\\n\\n.ui.toggle.checkbox input:checked ~ .box:before,\\n.ui.toggle.checkbox input:checked ~ label:before {\\n  background-color: #2185D0 !important;\\n}\\n\\n.ui.toggle.checkbox input:checked ~ .box:after,\\n.ui.toggle.checkbox input:checked ~ label:after {\\n  left: 2.15rem;\\n  -webkit-box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15), 0 0 0 1px rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15), 0 0 0 1px rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n/* Active Focus */\\n\\n.ui.toggle.checkbox input:focus:checked ~ .box,\\n.ui.toggle.checkbox input:focus:checked ~ label {\\n  color: rgba(0, 0, 0, 0.95) !important;\\n}\\n\\n.ui.toggle.checkbox input:focus:checked ~ .box:before,\\n.ui.toggle.checkbox input:focus:checked ~ label:before {\\n  background-color: #0d71bb !important;\\n}\\n\\n/*******************************\\n            Variations\\n*******************************/\\n\\n/*--------------\\n     Fitted\\n---------------*/\\n\\n.ui.fitted.checkbox .box,\\n.ui.fitted.checkbox label {\\n  padding-left: 0 !important;\\n}\\n\\n.ui.fitted.toggle.checkbox {\\n  width: 3.5rem;\\n}\\n\\n.ui.fitted.slider.checkbox {\\n  width: 3.5rem;\\n}\\n\\n/*--------------\\n     Inverted\\n---------------*/\\n\\n.ui.inverted.checkbox label,\\n.ui.inverted.checkbox + label {\\n  color: rgba(255, 255, 255, 0.9) !important;\\n}\\n\\n/* Hover */\\n\\n.ui.inverted.checkbox .box:hover,\\n.ui.inverted.checkbox label:hover {\\n  color: #ffffff !important;\\n}\\n\\n.ui.inverted.checkbox .box:hover::before,\\n.ui.inverted.checkbox label:hover::before {\\n  border-color: rgba(34, 36, 38, 0.5);\\n}\\n\\n/*Slider Label */\\n\\n.ui.inverted.slider.checkbox .box,\\n.ui.inverted.slider.checkbox label {\\n  color: rgba(255, 255, 255, 0.5);\\n}\\n\\n/* Slider Line */\\n\\n.ui.inverted.slider.checkbox .box:before,\\n.ui.inverted.slider.checkbox label:before {\\n  background-color: rgba(255, 255, 255, 0.5) !important;\\n}\\n\\n/* Slider Hover */\\n\\n.ui.inverted.slider.checkbox .box:hover::before,\\n.ui.inverted.slider.checkbox label:hover::before {\\n  background: rgba(255, 255, 255, 0.7) !important;\\n}\\n\\n/* Slider Active */\\n\\n.ui.inverted.slider.checkbox input:checked ~ .box,\\n.ui.inverted.slider.checkbox input:checked ~ label {\\n  color: #ffffff !important;\\n}\\n\\n.ui.inverted.slider.checkbox input:checked ~ .box:before,\\n.ui.inverted.slider.checkbox input:checked ~ label:before {\\n  background-color: rgba(255, 255, 255, 0.8) !important;\\n}\\n\\n/* Slider Active Focus */\\n\\n.ui.inverted.slider.checkbox input:focus:checked ~ .box,\\n.ui.inverted.slider.checkbox input:focus:checked ~ label {\\n  color: #ffffff !important;\\n}\\n\\n.ui.inverted.slider.checkbox input:focus:checked ~ .box:before,\\n.ui.inverted.slider.checkbox input:focus:checked ~ label:before {\\n  background-color: rgba(255, 255, 255, 0.8) !important;\\n}\\n\\n/* Toggle Switch */\\n\\n.ui.inverted.toggle.checkbox .box:before,\\n.ui.inverted.toggle.checkbox label:before {\\n  background-color: rgba(255, 255, 255, 0.9) !important;\\n}\\n\\n/* Toggle Hover */\\n\\n.ui.inverted.toggle.checkbox .box:hover::before,\\n.ui.inverted.toggle.checkbox label:hover::before {\\n  background: #ffffff !important;\\n}\\n\\n/* Toggle Active */\\n\\n.ui.inverted.toggle.checkbox input:checked ~ .box,\\n.ui.inverted.toggle.checkbox input:checked ~ label {\\n  color: #ffffff !important;\\n}\\n\\n.ui.inverted.toggle.checkbox input:checked ~ .box:before,\\n.ui.inverted.toggle.checkbox input:checked ~ label:before {\\n  background-color: #2185D0 !important;\\n}\\n\\n/* Toggle Active Focus */\\n\\n.ui.inverted.toggle.checkbox input:focus:checked ~ .box,\\n.ui.inverted.toggle.checkbox input:focus:checked ~ label {\\n  color: #ffffff !important;\\n}\\n\\n.ui.inverted.toggle.checkbox input:focus:checked ~ .box:before,\\n.ui.inverted.toggle.checkbox input:focus:checked ~ label:before {\\n  background-color: #0d71bb !important;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n@font-face {\\n  font-family: 'Checkbox';\\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBD8AAAC8AAAAYGNtYXAYVtCJAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zn4huwUAAAF4AAABYGhlYWQGPe1ZAAAC2AAAADZoaGVhB30DyAAAAxAAAAAkaG10eBBKAEUAAAM0AAAAHGxvY2EAmgESAAADUAAAABBtYXhwAAkALwAAA2AAAAAgbmFtZSC8IugAAAOAAAABknBvc3QAAwAAAAAFFAAAACAAAwMTAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADoAgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6AL//f//AAAAAAAg6AD//f//AAH/4xgEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAEUAUQO7AvgAGgAAARQHAQYjIicBJjU0PwE2MzIfAQE2MzIfARYVA7sQ/hQQFhcQ/uMQEE4QFxcQqAF2EBcXEE4QAnMWEP4UEBABHRAXFhBOEBCoAXcQEE4QFwAAAAABAAABbgMlAkkAFAAAARUUBwYjISInJj0BNDc2MyEyFxYVAyUQEBf9SRcQEBAQFwK3FxAQAhJtFxAQEBAXbRcQEBAQFwAAAAABAAAASQMlA24ALAAAARUUBwYrARUUBwYrASInJj0BIyInJj0BNDc2OwE1NDc2OwEyFxYdATMyFxYVAyUQEBfuEBAXbhYQEO4XEBAQEBfuEBAWbhcQEO4XEBACEm0XEBDuFxAQEBAX7hAQF20XEBDuFxAQEBAX7hAQFwAAAQAAAAIAAHRSzT9fDzz1AAsEAAAAAADRsdR3AAAAANGx1HcAAAAAA7sDbgAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAADuwABAAAAAAAAAAAAAAAAAAAABwQAAAAAAAAAAAAAAAIAAAAEAABFAyUAAAMlAAAAAAAAAAoAFAAeAE4AcgCwAAEAAAAHAC0AAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAIAAAAAQAAAAAAAgAHAGkAAQAAAAAAAwAIADkAAQAAAAAABAAIAH4AAQAAAAAABQALABgAAQAAAAAABgAIAFEAAQAAAAAACgAaAJYAAwABBAkAAQAQAAgAAwABBAkAAgAOAHAAAwABBAkAAwAQAEEAAwABBAkABAAQAIYAAwABBAkABQAWACMAAwABBAkABgAQAFkAAwABBAkACgA0ALBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhWZXJzaW9uIDIuMABWAGUAcgBzAGkAbwBuACAAMgAuADBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhDaGVja2JveABDAGgAZQBjAGsAYgBvAHhSZWd1bGFyAFIAZQBnAHUAbABhAHJDaGVja2JveABDAGgAZQBjAGsAYgBvAHhGb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype');\\n}\\n\\n/* Checkmark */\\n\\n.ui.checkbox label:after,\\n.ui.checkbox .box:after {\\n  font-family: 'Checkbox';\\n}\\n\\n/* Checked */\\n\\n.ui.checkbox input:checked ~ .box:after,\\n.ui.checkbox input:checked ~ label:after {\\n  content: '\\\\e800';\\n}\\n\\n/* Indeterminate */\\n\\n.ui.checkbox input:indeterminate ~ .box:after,\\n.ui.checkbox input:indeterminate ~ label:after {\\n  font-size: 12px;\\n  content: '\\\\e801';\\n}\\n\\n/*  UTF Reference\\n.check:before { content: '\\\\e800'; }\\n.dash:before  { content: '\\\\e801'; }\\n.plus:before { content: '\\\\e802'; }\\n*/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Dimmer\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Dimmer\\n*******************************/\\n\\n.dimmable:not(body) {\\n  position: relative;\\n}\\n\\n.ui.dimmer {\\n  display: none;\\n  position: absolute;\\n  top: 0 !important;\\n  left: 0 !important;\\n  width: 100%;\\n  height: 100%;\\n  text-align: center;\\n  vertical-align: middle;\\n  padding: 1em;\\n  background-color: rgba(0, 0, 0, 0.85);\\n  opacity: 0;\\n  line-height: 1;\\n  -webkit-animation-fill-mode: both;\\n  animation-fill-mode: both;\\n  -webkit-animation-duration: 0.5s;\\n  animation-duration: 0.5s;\\n  -webkit-transition: background-color 0.5s linear;\\n  transition: background-color 0.5s linear;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  -webkit-box-align: center;\\n      -ms-flex-align: center;\\n          align-items: center;\\n  -webkit-box-pack: center;\\n      -ms-flex-pack: center;\\n          justify-content: center;\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n  will-change: opacity;\\n  z-index: 1000;\\n}\\n\\n/* Dimmer Content */\\n\\n.ui.dimmer > .content {\\n  -webkit-user-select: text;\\n  -moz-user-select: text;\\n  -ms-user-select: text;\\n  user-select: text;\\n  color: #FFFFFF;\\n}\\n\\n/* Loose Coupling */\\n\\n.ui.segment > .ui.dimmer {\\n  border-radius: inherit !important;\\n}\\n\\n/* Scrollbars */\\n\\n.ui.dimmer:not(.inverted)::-webkit-scrollbar-track {\\n  background: rgba(255, 255, 255, 0.1);\\n}\\n\\n.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb {\\n  background: rgba(255, 255, 255, 0.25);\\n}\\n\\n.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:window-inactive {\\n  background: rgba(255, 255, 255, 0.15);\\n}\\n\\n.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:hover {\\n  background: rgba(255, 255, 255, 0.35);\\n}\\n\\n/*******************************\\n            States\\n*******************************/\\n\\n/* Animating */\\n\\n.animating.dimmable:not(body),\\n.dimmed.dimmable:not(body) {\\n  overflow: hidden;\\n}\\n\\n/* Animating / Active / Visible */\\n\\n.dimmed.dimmable > .ui.animating.dimmer,\\n.dimmed.dimmable > .ui.visible.dimmer,\\n.ui.active.dimmer {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  opacity: 1;\\n}\\n\\n/* Disabled */\\n\\n.ui.disabled.dimmer {\\n  width: 0 !important;\\n  height: 0 !important;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*--------------\\n    Legacy\\n---------------*/\\n\\n/* Animating / Active / Visible */\\n\\n.dimmed.dimmable > .ui.animating.legacy.dimmer,\\n.dimmed.dimmable > .ui.visible.legacy.dimmer,\\n.ui.active.legacy.dimmer {\\n  display: block;\\n}\\n\\n/*--------------\\n    Alignment\\n---------------*/\\n\\n.ui[class*=\\\"top aligned\\\"].dimmer {\\n  -webkit-box-pack: start;\\n      -ms-flex-pack: start;\\n          justify-content: flex-start;\\n}\\n\\n.ui[class*=\\\"bottom aligned\\\"].dimmer {\\n  -webkit-box-pack: end;\\n      -ms-flex-pack: end;\\n          justify-content: flex-end;\\n}\\n\\n/*--------------\\n      Page\\n---------------*/\\n\\n.ui.page.dimmer {\\n  position: fixed;\\n  -webkit-transform-style: '';\\n  transform-style: '';\\n  -webkit-perspective: 2000px;\\n  perspective: 2000px;\\n  -webkit-transform-origin: center center;\\n  transform-origin: center center;\\n}\\n\\nbody.animating.in.dimmable,\\nbody.dimmed.dimmable {\\n  overflow: hidden;\\n}\\n\\nbody.dimmable > .dimmer {\\n  position: fixed;\\n}\\n\\n/*--------------\\n    Blurring\\n---------------*/\\n\\n.blurring.dimmable > :not(.dimmer) {\\n  -webkit-filter: initial;\\n  filter: initial;\\n  transition: 800ms -webkit-filter ease;\\n  -webkit-transition: 800ms -webkit-filter ease;\\n  transition: 800ms filter ease;\\n  transition: 800ms filter ease, 800ms -webkit-filter ease;\\n}\\n\\n.blurring.dimmed.dimmable > :not(.dimmer):not(.popup) {\\n  -webkit-filter: blur(5px) grayscale(0.7);\\n  filter: blur(5px) grayscale(0.7);\\n}\\n\\n/* Dimmer Color */\\n\\n.blurring.dimmable > .dimmer {\\n  background-color: rgba(0, 0, 0, 0.6);\\n}\\n\\n.blurring.dimmable > .inverted.dimmer {\\n  background-color: rgba(255, 255, 255, 0.6);\\n}\\n\\n/*--------------\\n    Aligned\\n---------------*/\\n\\n.ui.dimmer > .top.aligned.content > * {\\n  vertical-align: top;\\n}\\n\\n.ui.dimmer > .bottom.aligned.content > * {\\n  vertical-align: bottom;\\n}\\n\\n/*--------------\\n    Shades\\n---------------*/\\n\\n.medium.medium.medium.medium.medium.dimmer {\\n  background-color: rgba(0, 0, 0, 0.65);\\n}\\n\\n.light.light.light.light.light.dimmer {\\n  background-color: rgba(0, 0, 0, 0.45);\\n}\\n\\n.very.light.light.light.light.dimmer {\\n  background-color: rgba(0, 0, 0, 0.25);\\n}\\n\\n/*--------------\\n    Inverted\\n---------------*/\\n\\n.ui.inverted.dimmer {\\n  background-color: rgba(255, 255, 255, 0.85);\\n}\\n\\n.ui.inverted.dimmer > .content,\\n.ui.inverted.dimmer > .content > * {\\n  color: #000000;\\n}\\n\\n/*--------------\\n Inverted Shades\\n---------------*/\\n\\n.medium.medium.medium.medium.medium.inverted.dimmer {\\n  background-color: rgba(255, 255, 255, 0.65);\\n}\\n\\n.light.light.light.light.light.inverted.dimmer {\\n  background-color: rgba(255, 255, 255, 0.45);\\n}\\n\\n.very.light.light.light.light.inverted.dimmer {\\n  background-color: rgba(255, 255, 255, 0.25);\\n}\\n\\n/*--------------\\n     Simple\\n---------------*/\\n\\n/* Displays without javascript */\\n\\n.ui.simple.dimmer {\\n  display: block;\\n  overflow: hidden;\\n  opacity: 0;\\n  width: 0;\\n  height: 0;\\n  z-index: -100;\\n  background-color: rgba(0, 0, 0, 0);\\n}\\n\\n.dimmed.dimmable > .ui.simple.dimmer {\\n  overflow: visible;\\n  opacity: 1;\\n  width: 100%;\\n  height: 100%;\\n  background-color: rgba(0, 0, 0, 0.85);\\n  z-index: 1;\\n}\\n\\n.ui.simple.inverted.dimmer {\\n  background-color: rgba(255, 255, 255, 0);\\n}\\n\\n.dimmed.dimmable > .ui.simple.inverted.dimmer {\\n  background-color: rgba(255, 255, 255, 0.85);\\n}\\n\\n/*--------------\\n     Partially\\n----------------*/\\n\\n.ui[class*=\\\"top dimmer\\\"],\\n.ui[class*=\\\"center dimmer\\\"],\\n.ui[class*=\\\"bottom dimmer\\\"] {\\n  height: auto;\\n}\\n\\n.ui[class*=\\\"bottom dimmer\\\"] {\\n  top: auto !important;\\n  bottom: 0;\\n}\\n\\n.ui[class*=\\\"center dimmer\\\"] {\\n  top: 50% !important;\\n  transform: translateY(-50%);\\n  -webkit-transform: translateY(calc(-50% - 0.5px));\\n}\\n\\n.ui.segment > .ui[class*=\\\"top dimmer\\\"] {\\n  border-bottom-left-radius: 0 !important;\\n  border-bottom-right-radius: 0 !important;\\n}\\n\\n.ui.segment > .ui[class*=\\\"center dimmer\\\"] {\\n  border-radius: 0 !important;\\n}\\n\\n.ui.segment > .ui[class*=\\\"bottom dimmer\\\"] {\\n  border-top-left-radius: 0 !important;\\n  border-top-right-radius: 0 !important;\\n}\\n\\n.ui[class*=\\\"center dimmer\\\"].transition[class*=\\\"fade up\\\"].in {\\n  -webkit-animation-name: fadeInUpCenter;\\n  animation-name: fadeInUpCenter;\\n}\\n\\n.ui[class*=\\\"center dimmer\\\"].transition[class*=\\\"fade down\\\"].in {\\n  -webkit-animation-name: fadeInDownCenter;\\n  animation-name: fadeInDownCenter;\\n}\\n\\n.ui[class*=\\\"center dimmer\\\"].transition[class*=\\\"fade up\\\"].out {\\n  -webkit-animation-name: fadeOutUpCenter;\\n  animation-name: fadeOutUpCenter;\\n}\\n\\n.ui[class*=\\\"center dimmer\\\"].transition[class*=\\\"fade down\\\"].out {\\n  -webkit-animation-name: fadeOutDownCenter;\\n  animation-name: fadeOutDownCenter;\\n}\\n\\n.ui[class*=\\\"center dimmer\\\"].bounce.transition {\\n  -webkit-animation-name: bounceCenter;\\n  animation-name: bounceCenter;\\n}\\n\\n@-webkit-keyframes fadeInUpCenter {\\n  0% {\\n    opacity: 0;\\n    transform: translateY(-40%);\\n    -webkit-transform: translateY(calc(-40% - 0.5px));\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    transform: translateY(-50%);\\n    -webkit-transform: translateY(calc(-50% - 0.5px));\\n  }\\n}\\n\\n@keyframes fadeInUpCenter {\\n  0% {\\n    opacity: 0;\\n    transform: translateY(-40%);\\n    -webkit-transform: translateY(calc(-40% - 0.5px));\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    transform: translateY(-50%);\\n    -webkit-transform: translateY(calc(-50% - 0.5px));\\n  }\\n}\\n\\n@-webkit-keyframes fadeInDownCenter {\\n  0% {\\n    opacity: 0;\\n    transform: translateY(-60%);\\n    -webkit-transform: translateY(calc(-60% - 0.5px));\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    transform: translateY(-50%);\\n    -webkit-transform: translateY(calc(-50% - 0.5px));\\n  }\\n}\\n\\n@keyframes fadeInDownCenter {\\n  0% {\\n    opacity: 0;\\n    transform: translateY(-60%);\\n    -webkit-transform: translateY(calc(-60% - 0.5px));\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    transform: translateY(-50%);\\n    -webkit-transform: translateY(calc(-50% - 0.5px));\\n  }\\n}\\n\\n@-webkit-keyframes fadeOutUpCenter {\\n  0% {\\n    opacity: 1;\\n    transform: translateY(-50%);\\n    -webkit-transform: translateY(calc(-50% - 0.5px));\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    transform: translateY(-45%);\\n    -webkit-transform: translateY(calc(-45% - 0.5px));\\n  }\\n}\\n\\n@keyframes fadeOutUpCenter {\\n  0% {\\n    opacity: 1;\\n    transform: translateY(-50%);\\n    -webkit-transform: translateY(calc(-50% - 0.5px));\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    transform: translateY(-45%);\\n    -webkit-transform: translateY(calc(-45% - 0.5px));\\n  }\\n}\\n\\n@-webkit-keyframes fadeOutDownCenter {\\n  0% {\\n    opacity: 1;\\n    transform: translateY(-50%);\\n    -webkit-transform: translateY(calc(-50% - 0.5px));\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    transform: translateY(-55%);\\n    -webkit-transform: translateY(calc(-55% - 0.5px));\\n  }\\n}\\n\\n@keyframes fadeOutDownCenter {\\n  0% {\\n    opacity: 1;\\n    transform: translateY(-50%);\\n    -webkit-transform: translateY(calc(-50% - 0.5px));\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    transform: translateY(-55%);\\n    -webkit-transform: translateY(calc(-55% - 0.5px));\\n  }\\n}\\n\\n@-webkit-keyframes bounceCenter {\\n  0%, 20%, 50%, 80%, 100% {\\n    transform: translateY(-50%);\\n    -webkit-transform: translateY(calc(-50% - 0.5px));\\n  }\\n\\n  40% {\\n    -webkit-transform: translateY(calc(-50% - 30px));\\n    transform: translateY(calc(-50% - 30px));\\n  }\\n\\n  60% {\\n    -webkit-transform: translateY(calc(-50% - 15px));\\n    transform: translateY(calc(-50% - 15px));\\n  }\\n}\\n\\n@keyframes bounceCenter {\\n  0%, 20%, 50%, 80%, 100% {\\n    transform: translateY(-50%);\\n    -webkit-transform: translateY(calc(-50% - 0.5px));\\n  }\\n\\n  40% {\\n    -webkit-transform: translateY(calc(-50% - 30px));\\n    transform: translateY(calc(-50% - 30px));\\n  }\\n\\n  60% {\\n    -webkit-transform: translateY(calc(-50% - 15px));\\n    transform: translateY(calc(-50% - 15px));\\n  }\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n        User Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Dropdown\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Dropdown\\n*******************************/\\n\\n.ui.dropdown {\\n  cursor: pointer;\\n  position: relative;\\n  display: inline-block;\\n  outline: none;\\n  text-align: left;\\n  -webkit-transition: width 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: width 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: box-shadow 0.1s ease, width 0.1s ease;\\n  transition: box-shadow 0.1s ease, width 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n}\\n\\n/*******************************\\n            Content\\n*******************************/\\n\\n/*--------------\\n      Menu\\n---------------*/\\n\\n.ui.dropdown .menu {\\n  cursor: auto;\\n  position: absolute;\\n  display: none;\\n  outline: none;\\n  top: 100%;\\n  min-width: -webkit-max-content;\\n  min-width: -moz-max-content;\\n  min-width: max-content;\\n  margin: 0;\\n  padding: 0 0;\\n  background: #FFFFFF;\\n  font-size: 1em;\\n  text-shadow: none;\\n  text-align: left;\\n  -webkit-box-shadow: 0 2px 3px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 2px 3px 0 rgba(34, 36, 38, 0.15);\\n  border: 1px solid rgba(34, 36, 38, 0.15);\\n  border-radius: 0.28571429rem;\\n  -webkit-transition: opacity 0.1s ease;\\n  transition: opacity 0.1s ease;\\n  z-index: 11;\\n  will-change: transform, opacity;\\n}\\n\\n.ui.dropdown .menu > * {\\n  white-space: nowrap;\\n}\\n\\n/*--------------\\n  Hidden Input\\n---------------*/\\n\\n.ui.dropdown > input:not(.search):first-child,\\n.ui.dropdown > select {\\n  display: none !important;\\n}\\n\\n/*--------------\\n Dropdown Icon\\n---------------*/\\n\\n.ui.dropdown > .dropdown.icon {\\n  position: relative;\\n  width: auto;\\n  font-size: 0.85714286em;\\n  margin: 0 0 0 1em;\\n}\\n\\n.ui.dropdown .menu > .item .dropdown.icon {\\n  width: auto;\\n  float: right;\\n  margin: 0em 0 0 1em;\\n}\\n\\n.ui.dropdown .menu > .item .dropdown.icon + .text {\\n  margin-right: 1em;\\n}\\n\\n/*--------------\\n      Text\\n---------------*/\\n\\n.ui.dropdown > .text {\\n  display: inline-block;\\n  -webkit-transition: none;\\n  transition: none;\\n}\\n\\n/*--------------\\n    Menu Item\\n---------------*/\\n\\n.ui.dropdown .menu > .item {\\n  position: relative;\\n  cursor: pointer;\\n  display: block;\\n  border: none;\\n  height: auto;\\n  text-align: left;\\n  border-top: none;\\n  line-height: 1em;\\n  font-size: 1rem;\\n  color: rgba(0, 0, 0, 0.87);\\n  padding: 0.78571429rem 1.14285714rem !important;\\n  text-transform: none;\\n  font-weight: normal;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  -webkit-touch-callout: none;\\n}\\n\\n.ui.dropdown .menu > .item:first-child {\\n  border-top-width: 0;\\n}\\n\\n/*--------------\\n  Floated Content\\n---------------*/\\n\\n.ui.dropdown > .text > [class*=\\\"right floated\\\"],\\n.ui.dropdown .menu .item > [class*=\\\"right floated\\\"] {\\n  float: right !important;\\n  margin-right: 0 !important;\\n  margin-left: 1em !important;\\n}\\n\\n.ui.dropdown > .text > [class*=\\\"left floated\\\"],\\n.ui.dropdown .menu .item > [class*=\\\"left floated\\\"] {\\n  float: left !important;\\n  margin-left: 0 !important;\\n  margin-right: 1em !important;\\n}\\n\\n.ui.dropdown .menu .item > .icon.floated,\\n.ui.dropdown .menu .item > .flag.floated,\\n.ui.dropdown .menu .item > .image.floated,\\n.ui.dropdown .menu .item > img.floated {\\n  margin-top: 0em;\\n}\\n\\n/*--------------\\n  Menu Divider\\n---------------*/\\n\\n.ui.dropdown .menu > .header {\\n  margin: 1rem 0 0.75rem;\\n  padding: 0 1.14285714rem;\\n  color: rgba(0, 0, 0, 0.85);\\n  font-size: 0.78571429em;\\n  font-weight: bold;\\n  text-transform: uppercase;\\n}\\n\\n.ui.dropdown .menu > .divider {\\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\\n  height: 0;\\n  margin: 0.5em 0;\\n}\\n\\n.ui.dropdown.dropdown .menu > .input {\\n  width: auto;\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  margin: 1.14285714rem 0.78571429rem;\\n  min-width: 10rem;\\n}\\n\\n.ui.dropdown .menu > .header + .input {\\n  margin-top: 0;\\n}\\n\\n.ui.dropdown .menu > .input:not(.transparent) input {\\n  padding: 0.5em 1em;\\n}\\n\\n.ui.dropdown .menu > .input:not(.transparent) .button,\\n.ui.dropdown .menu > .input:not(.transparent) .icon,\\n.ui.dropdown .menu > .input:not(.transparent) .label {\\n  padding-top: 0.5em;\\n  padding-bottom: 0.5em;\\n}\\n\\n/*-----------------\\n  Item Description\\n-------------------*/\\n\\n.ui.dropdown > .text > .description,\\n.ui.dropdown .menu > .item > .description {\\n  float: right;\\n  margin: 0 0 0 1em;\\n  color: rgba(0, 0, 0, 0.4);\\n}\\n\\n/*-----------------\\n       Message\\n-------------------*/\\n\\n.ui.dropdown .menu > .message {\\n  padding: 0.78571429rem 1.14285714rem;\\n  font-weight: normal;\\n}\\n\\n.ui.dropdown .menu > .message:not(.ui) {\\n  color: rgba(0, 0, 0, 0.4);\\n}\\n\\n/*--------------\\n    Sub Menu\\n---------------*/\\n\\n.ui.dropdown .menu .menu {\\n  top: 0;\\n  left: 100%;\\n  right: auto;\\n  margin: 0 0 0 -0.5em !important;\\n  border-radius: 0.28571429rem !important;\\n  z-index: 21 !important;\\n}\\n\\n/* Hide Arrow */\\n\\n.ui.dropdown .menu .menu:after {\\n  display: none;\\n}\\n\\n/*--------------\\n   Sub Elements\\n---------------*/\\n\\n/* Icons / Flags / Labels / Image */\\n\\n.ui.dropdown > .text > .icon,\\n.ui.dropdown > .text > .label,\\n.ui.dropdown > .text > .flag,\\n.ui.dropdown > .text > img,\\n.ui.dropdown > .text > .image {\\n  margin-top: 0em;\\n}\\n\\n.ui.dropdown .menu > .item > .icon,\\n.ui.dropdown .menu > .item > .label,\\n.ui.dropdown .menu > .item > .flag,\\n.ui.dropdown .menu > .item > .image,\\n.ui.dropdown .menu > .item > img {\\n  margin-top: 0em;\\n}\\n\\n.ui.dropdown > .text > .icon,\\n.ui.dropdown > .text > .label,\\n.ui.dropdown > .text > .flag,\\n.ui.dropdown > .text > img,\\n.ui.dropdown > .text > .image,\\n.ui.dropdown .menu > .item > .icon,\\n.ui.dropdown .menu > .item > .label,\\n.ui.dropdown .menu > .item > .flag,\\n.ui.dropdown .menu > .item > .image,\\n.ui.dropdown .menu > .item > img {\\n  margin-left: 0;\\n  float: none;\\n  margin-right: 0.78571429rem;\\n}\\n\\n/*--------------\\n     Image\\n---------------*/\\n\\n.ui.dropdown > .text > img,\\n.ui.dropdown > .text > .image:not(.icon),\\n.ui.dropdown .menu > .item > .image:not(.icon),\\n.ui.dropdown .menu > .item > img {\\n  display: inline-block;\\n  vertical-align: top;\\n  width: auto;\\n  margin-top: -0.5em;\\n  margin-bottom: -0.5em;\\n  max-height: 2em;\\n}\\n\\n/*******************************\\n            Coupling\\n*******************************/\\n\\n/*--------------\\n      Menu\\n---------------*/\\n\\n/* Remove Menu Item Divider */\\n\\n.ui.dropdown .ui.menu > .item:before,\\n.ui.menu .ui.dropdown .menu > .item:before {\\n  display: none;\\n}\\n\\n/* Prevent Menu Item Border */\\n\\n.ui.menu .ui.dropdown .menu .active.item {\\n  border-left: none;\\n}\\n\\n/* Automatically float dropdown menu right on last menu item */\\n\\n.ui.menu .right.menu .dropdown:last-child .menu,\\n.ui.menu .right.dropdown.item .menu,\\n.ui.buttons > .ui.dropdown:last-child .menu {\\n  left: auto;\\n  right: 0;\\n}\\n\\n/*--------------\\n      Label\\n---------------*/\\n\\n/* Dropdown Menu */\\n\\n.ui.label.dropdown .menu {\\n  min-width: 100%;\\n}\\n\\n/*--------------\\n     Button\\n---------------*/\\n\\n/* No Margin On Icon Button */\\n\\n.ui.dropdown.icon.button > .dropdown.icon {\\n  margin: 0;\\n}\\n\\n.ui.button.dropdown .menu {\\n  min-width: 100%;\\n}\\n\\n/*******************************\\n              Types\\n*******************************/\\n\\n/*--------------\\n    Selection\\n---------------*/\\n\\n/* Displays like a select box */\\n\\n.ui.selection.dropdown {\\n  cursor: pointer;\\n  word-wrap: break-word;\\n  line-height: 1em;\\n  white-space: normal;\\n  outline: 0;\\n  -webkit-transform: rotateZ(0deg);\\n  transform: rotateZ(0deg);\\n  min-width: 14em;\\n  min-height: 2.71428571em;\\n  background: #FFFFFF;\\n  display: inline-block;\\n  padding: 0.78571429em 3.2em 0.78571429em 1em;\\n  color: rgba(0, 0, 0, 0.87);\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  border: 1px solid rgba(34, 36, 38, 0.15);\\n  border-radius: 0.28571429rem;\\n  -webkit-transition: width 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: width 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: box-shadow 0.1s ease, width 0.1s ease;\\n  transition: box-shadow 0.1s ease, width 0.1s ease, -webkit-box-shadow 0.1s ease;\\n}\\n\\n.ui.selection.dropdown.visible,\\n.ui.selection.dropdown.active {\\n  z-index: 10;\\n}\\n\\nselect.ui.dropdown {\\n  height: 38px;\\n  padding: 0.5em;\\n  border: 1px solid rgba(34, 36, 38, 0.15);\\n  visibility: visible;\\n}\\n\\n.ui.selection.dropdown > .search.icon,\\n.ui.selection.dropdown > .delete.icon,\\n.ui.selection.dropdown > .dropdown.icon {\\n  cursor: pointer;\\n  position: absolute;\\n  width: auto;\\n  height: auto;\\n  line-height: 1.21428571em;\\n  top: 0.78571429em;\\n  right: 1em;\\n  z-index: 3;\\n  margin: -0.78571429em;\\n  padding: 0.91666667em;\\n  opacity: 0.8;\\n  -webkit-transition: opacity 0.1s ease;\\n  transition: opacity 0.1s ease;\\n}\\n\\n/* Compact */\\n\\n.ui.compact.selection.dropdown {\\n  min-width: 0;\\n}\\n\\n/*  Selection Menu */\\n\\n.ui.selection.dropdown .menu {\\n  overflow-x: hidden;\\n  overflow-y: auto;\\n  -webkit-backface-visibility: hidden;\\n  backface-visibility: hidden;\\n  -webkit-overflow-scrolling: touch;\\n  border-top-width: 0 !important;\\n  width: auto;\\n  outline: none;\\n  margin: 0 -1px;\\n  min-width: calc(100% + 2px);\\n  width: calc(100% + 2px);\\n  border-radius: 0 0 0.28571429rem 0.28571429rem;\\n  -webkit-box-shadow: 0 2px 3px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 2px 3px 0 rgba(34, 36, 38, 0.15);\\n  -webkit-transition: opacity 0.1s ease;\\n  transition: opacity 0.1s ease;\\n}\\n\\n.ui.selection.dropdown .menu:after,\\n.ui.selection.dropdown .menu:before {\\n  display: none;\\n}\\n\\n/*--------------\\n    Message\\n---------------*/\\n\\n.ui.selection.dropdown .menu > .message {\\n  padding: 0.78571429rem 1.14285714rem;\\n}\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.selection.dropdown[class*=\\\"very short\\\"] .menu {\\n    max-height: 4.00714286rem;\\n  }\\n\\n  .ui.selection.dropdown.short .menu {\\n    max-height: 6.01071429rem;\\n  }\\n\\n  .ui.selection.dropdown .menu {\\n    max-height: 8.01428571rem;\\n  }\\n\\n  .ui.selection.dropdown.long .menu {\\n    max-height: 16.02857143rem;\\n  }\\n\\n  .ui.selection.dropdown[class*=\\\"very long\\\"] .menu {\\n    max-height: 24.04285714rem;\\n  }\\n}\\n\\n@media only screen and (min-width: 768px) {\\n  .ui.selection.dropdown[class*=\\\"very short\\\"] .menu {\\n    max-height: 5.34285714rem;\\n  }\\n\\n  .ui.selection.dropdown.short .menu {\\n    max-height: 8.01428571rem;\\n  }\\n\\n  .ui.selection.dropdown .menu {\\n    max-height: 10.68571429rem;\\n  }\\n\\n  .ui.selection.dropdown.long .menu {\\n    max-height: 21.37142857rem;\\n  }\\n\\n  .ui.selection.dropdown[class*=\\\"very long\\\"] .menu {\\n    max-height: 32.05714286rem;\\n  }\\n}\\n\\n@media only screen and (min-width: 992px) {\\n  .ui.selection.dropdown[class*=\\\"very short\\\"] .menu {\\n    max-height: 8.01428571rem;\\n  }\\n\\n  .ui.selection.dropdown.short .menu {\\n    max-height: 12.02142857rem;\\n  }\\n\\n  .ui.selection.dropdown .menu {\\n    max-height: 16.02857143rem;\\n  }\\n\\n  .ui.selection.dropdown.long .menu {\\n    max-height: 32.05714286rem;\\n  }\\n\\n  .ui.selection.dropdown[class*=\\\"very long\\\"] .menu {\\n    max-height: 48.08571429rem;\\n  }\\n}\\n\\n@media only screen and (min-width: 1920px) {\\n  .ui.selection.dropdown[class*=\\\"very short\\\"] .menu {\\n    max-height: 10.68571429rem;\\n  }\\n\\n  .ui.selection.dropdown.short .menu {\\n    max-height: 16.02857143rem;\\n  }\\n\\n  .ui.selection.dropdown .menu {\\n    max-height: 21.37142857rem;\\n  }\\n\\n  .ui.selection.dropdown.long .menu {\\n    max-height: 42.74285714rem;\\n  }\\n\\n  .ui.selection.dropdown[class*=\\\"very long\\\"] .menu {\\n    max-height: 64.11428571rem;\\n  }\\n}\\n\\n/* Menu Item */\\n\\n.ui.selection.dropdown .menu > .item {\\n  border-top: 1px solid #FAFAFA;\\n  padding: 0.78571429rem 1.14285714rem !important;\\n  white-space: normal;\\n  word-wrap: normal;\\n}\\n\\n/* User Item */\\n\\n.ui.selection.dropdown .menu > .hidden.addition.item {\\n  display: none;\\n}\\n\\n/* Hover */\\n\\n.ui.selection.dropdown:hover {\\n  border-color: rgba(34, 36, 38, 0.35);\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n/* Active */\\n\\n.ui.selection.active.dropdown {\\n  border-color: #96C8DA;\\n  -webkit-box-shadow: 0 2px 3px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 2px 3px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.selection.active.dropdown .menu {\\n  border-color: #96C8DA;\\n  -webkit-box-shadow: 0 2px 3px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 2px 3px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n/* Focus */\\n\\n.ui.selection.dropdown:focus {\\n  border-color: #96C8DA;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.selection.dropdown:focus .menu {\\n  border-color: #96C8DA;\\n  -webkit-box-shadow: 0 2px 3px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 2px 3px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n/* Visible */\\n\\n.ui.selection.visible.dropdown > .text:not(.default) {\\n  font-weight: normal;\\n  color: rgba(0, 0, 0, 0.8);\\n}\\n\\n/* Visible Hover */\\n\\n.ui.selection.active.dropdown:hover {\\n  border-color: #96C8DA;\\n  -webkit-box-shadow: 0 2px 3px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 2px 3px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.selection.active.dropdown:hover .menu {\\n  border-color: #96C8DA;\\n  -webkit-box-shadow: 0 2px 3px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 2px 3px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n/* Dropdown Icon */\\n\\n.ui.active.selection.dropdown > .dropdown.icon,\\n.ui.visible.selection.dropdown > .dropdown.icon {\\n  opacity: '';\\n  z-index: 3;\\n}\\n\\n/* Connecting Border */\\n\\n.ui.active.selection.dropdown {\\n  border-bottom-left-radius: 0 !important;\\n  border-bottom-right-radius: 0 !important;\\n}\\n\\n/* Empty Connecting Border */\\n\\n.ui.active.empty.selection.dropdown {\\n  border-radius: 0.28571429rem !important;\\n  -webkit-box-shadow: none !important;\\n          box-shadow: none !important;\\n}\\n\\n.ui.active.empty.selection.dropdown .menu {\\n  border: none !important;\\n  -webkit-box-shadow: none !important;\\n          box-shadow: none !important;\\n}\\n\\n/*--------------\\n   Searchable\\n---------------*/\\n\\n/* Search Selection */\\n\\n.ui.search.dropdown {\\n  min-width: '';\\n}\\n\\n/* Search Dropdown */\\n\\n.ui.search.dropdown > input.search {\\n  background: none transparent !important;\\n  border: none !important;\\n  -webkit-box-shadow: none !important;\\n          box-shadow: none !important;\\n  cursor: text;\\n  top: 0;\\n  left: 1px;\\n  width: 100%;\\n  outline: none;\\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\\n  padding: inherit;\\n}\\n\\n/* Text Layering */\\n\\n.ui.search.dropdown > input.search {\\n  position: absolute;\\n  z-index: 2;\\n}\\n\\n.ui.search.dropdown > .text {\\n  cursor: text;\\n  position: relative;\\n  left: 1px;\\n  z-index: 3;\\n}\\n\\n/* Search Selection */\\n\\n.ui.search.selection.dropdown > input.search {\\n  line-height: 1.21428571em;\\n  padding: 0.67857143em 3.2em 0.67857143em 1em;\\n}\\n\\n/* Used to size multi select input to character width */\\n\\n.ui.search.selection.dropdown > span.sizer {\\n  line-height: 1.21428571em;\\n  padding: 0.67857143em 3.2em 0.67857143em 1em;\\n  display: none;\\n  white-space: pre;\\n}\\n\\n/* Active/Visible Search */\\n\\n.ui.search.dropdown.active > input.search,\\n.ui.search.dropdown.visible > input.search {\\n  cursor: auto;\\n}\\n\\n.ui.search.dropdown.active > .text,\\n.ui.search.dropdown.visible > .text {\\n  pointer-events: none;\\n}\\n\\n/* Filtered Text */\\n\\n.ui.active.search.dropdown input.search:focus + .text .icon,\\n.ui.active.search.dropdown input.search:focus + .text .flag {\\n  opacity: 0.45;\\n}\\n\\n.ui.active.search.dropdown input.search:focus + .text {\\n  color: rgba(115, 115, 115, 0.87) !important;\\n}\\n\\n/* Search Menu */\\n\\n.ui.search.dropdown .menu {\\n  overflow-x: hidden;\\n  overflow-y: auto;\\n  -webkit-backface-visibility: hidden;\\n  backface-visibility: hidden;\\n  -webkit-overflow-scrolling: touch;\\n}\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.search.dropdown .menu {\\n    max-height: 8.01428571rem;\\n  }\\n}\\n\\n@media only screen and (min-width: 768px) {\\n  .ui.search.dropdown .menu {\\n    max-height: 10.68571429rem;\\n  }\\n}\\n\\n@media only screen and (min-width: 992px) {\\n  .ui.search.dropdown .menu {\\n    max-height: 16.02857143rem;\\n  }\\n}\\n\\n@media only screen and (min-width: 1920px) {\\n  .ui.search.dropdown .menu {\\n    max-height: 21.37142857rem;\\n  }\\n}\\n\\n/* Clearable Selection */\\n\\n.ui.dropdown > .remove.icon {\\n  cursor: pointer;\\n  font-size: 0.85714286em;\\n  margin: -0.78571429em;\\n  padding: 0.91666667em;\\n  right: 3em;\\n  top: 0.78571429em;\\n  position: absolute;\\n  opacity: 0.6;\\n  z-index: 3;\\n}\\n\\n.ui.clearable.dropdown .text,\\n.ui.clearable.dropdown a:last-of-type {\\n  margin-right: 1.5em;\\n}\\n\\n.ui.dropdown select.noselection ~ .remove.icon,\\n.ui.dropdown input[value=''] ~ .remove.icon,\\n.ui.dropdown input:not([value]) ~ .remove.icon,\\n.ui.dropdown.loading > .remove.icon {\\n  display: none;\\n}\\n\\n/*--------------\\n    Multiple\\n---------------*/\\n\\n/* Multiple Selection */\\n\\n.ui.multiple.dropdown {\\n  padding: 0.22619048em 3.2em 0.22619048em 0.35714286em;\\n}\\n\\n.ui.multiple.dropdown .menu {\\n  cursor: auto;\\n}\\n\\n/* Multiple Search Selection */\\n\\n.ui.multiple.search.dropdown,\\n.ui.multiple.search.dropdown > input.search {\\n  cursor: text;\\n}\\n\\n/* Selection Label */\\n\\n.ui.multiple.dropdown > .label {\\n  display: inline-block;\\n  white-space: normal;\\n  font-size: 1em;\\n  padding: 0.35714286em 0.78571429em;\\n  margin: 0.14285714rem 0.28571429rem 0.14285714rem 0;\\n  -webkit-box-shadow: 0 0 0 1px rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 0 0 1px rgba(34, 36, 38, 0.15) inset;\\n}\\n\\n/* Dropdown Icon */\\n\\n.ui.multiple.dropdown .dropdown.icon {\\n  margin: '';\\n  padding: '';\\n}\\n\\n/* Text */\\n\\n.ui.multiple.dropdown > .text {\\n  position: static;\\n  padding: 0;\\n  max-width: 100%;\\n  margin: 0.45238095em 0 0.45238095em 0.64285714em;\\n  line-height: 1.21428571em;\\n}\\n\\n.ui.multiple.dropdown > .label ~ input.search {\\n  margin-left: 0.14285714em !important;\\n}\\n\\n.ui.multiple.dropdown > .label ~ .text {\\n  display: none;\\n}\\n\\n/*-----------------\\n  Multiple Search\\n-----------------*/\\n\\n/* Prompt Text */\\n\\n.ui.multiple.search.dropdown > .text {\\n  display: inline-block;\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  padding: inherit;\\n  margin: 0.45238095em 0 0.45238095em 0.64285714em;\\n  line-height: 1.21428571em;\\n}\\n\\n.ui.multiple.search.dropdown > .label ~ .text {\\n  display: none;\\n}\\n\\n/* Search */\\n\\n.ui.multiple.search.dropdown > input.search {\\n  position: static;\\n  padding: 0;\\n  max-width: 100%;\\n  margin: 0.45238095em 0 0.45238095em 0.64285714em;\\n  width: 2.2em;\\n  line-height: 1.21428571em;\\n}\\n\\n/*--------------\\n     Inline\\n---------------*/\\n\\n.ui.inline.dropdown {\\n  cursor: pointer;\\n  display: inline-block;\\n  color: inherit;\\n}\\n\\n.ui.inline.dropdown .dropdown.icon {\\n  margin: 0 0.21428571em 0 0.21428571em;\\n  vertical-align: baseline;\\n}\\n\\n.ui.inline.dropdown > .text {\\n  font-weight: bold;\\n}\\n\\n.ui.inline.dropdown .menu {\\n  cursor: auto;\\n  margin-top: 0.21428571em;\\n  border-radius: 0.28571429rem;\\n}\\n\\n/*******************************\\n            States\\n*******************************/\\n\\n/*--------------------\\n        Active\\n----------------------*/\\n\\n/* Menu Item Active */\\n\\n.ui.dropdown .menu .active.item {\\n  background: transparent;\\n  font-weight: bold;\\n  color: rgba(0, 0, 0, 0.95);\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  z-index: 12;\\n}\\n\\n/*--------------------\\n        Hover\\n----------------------*/\\n\\n/* Menu Item Hover */\\n\\n.ui.dropdown .menu > .item:hover {\\n  background: rgba(0, 0, 0, 0.05);\\n  color: rgba(0, 0, 0, 0.95);\\n  z-index: 13;\\n}\\n\\n/*--------------------\\n       Loading\\n---------------------*/\\n\\n.ui.loading.dropdown > i.icon {\\n  height: 1em !important;\\n}\\n\\n.ui.loading.selection.dropdown > i.icon {\\n  padding: 1.5em 1.28571429em !important;\\n}\\n\\n.ui.loading.dropdown > i.icon:before {\\n  position: absolute;\\n  content: '';\\n  top: 50%;\\n  left: 50%;\\n  margin: -0.64285714em 0 0 -0.64285714em;\\n  width: 1.28571429em;\\n  height: 1.28571429em;\\n  border-radius: 500rem;\\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.loading.dropdown > i.icon:after {\\n  position: absolute;\\n  content: '';\\n  top: 50%;\\n  left: 50%;\\n  -webkit-box-shadow: 0 0 0 1px transparent;\\n          box-shadow: 0 0 0 1px transparent;\\n  margin: -0.64285714em 0 0 -0.64285714em;\\n  width: 1.28571429em;\\n  height: 1.28571429em;\\n  -webkit-animation: loader 0.6s infinite linear;\\n  animation: loader 0.6s infinite linear;\\n  border: 0.2em solid #767676;\\n  border-radius: 500rem;\\n}\\n\\n/* Coupling */\\n\\n.ui.loading.dropdown.button > i.icon:before,\\n.ui.loading.dropdown.button > i.icon:after {\\n  display: none;\\n}\\n\\n/*--------------------\\n     Default Text\\n----------------------*/\\n\\n.ui.dropdown:not(.button) > .default.text,\\n.ui.default.dropdown:not(.button) > .text {\\n  color: rgba(191, 191, 191, 0.87);\\n}\\n\\n.ui.dropdown:not(.button) > input:focus ~ .default.text,\\n.ui.default.dropdown:not(.button) > input:focus ~ .text {\\n  color: rgba(115, 115, 115, 0.87);\\n}\\n\\n/*--------------------\\n        Loading\\n----------------------*/\\n\\n.ui.loading.dropdown > .text {\\n  -webkit-transition: none;\\n  transition: none;\\n}\\n\\n/* Used To Check Position */\\n\\n.ui.dropdown .loading.menu {\\n  display: block;\\n  visibility: hidden;\\n  z-index: -1;\\n}\\n\\n.ui.dropdown > .loading.menu {\\n  left: 0 !important;\\n  right: auto !important;\\n}\\n\\n.ui.dropdown > .menu .loading.menu {\\n  left: 100% !important;\\n  right: auto !important;\\n}\\n\\n/*--------------------\\n    Keyboard Select\\n----------------------*/\\n\\n/* Selected Item */\\n\\n.ui.dropdown.selected,\\n.ui.dropdown .menu .selected.item {\\n  background: rgba(0, 0, 0, 0.03);\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/*--------------------\\n    Search Filtered\\n----------------------*/\\n\\n/* Filtered Item */\\n\\n.ui.dropdown > .filtered.text {\\n  visibility: hidden;\\n}\\n\\n.ui.dropdown .filtered.item {\\n  display: none !important;\\n}\\n\\n/*--------------------\\n        Error\\n----------------------*/\\n\\n.ui.dropdown.error,\\n.ui.dropdown.error > .text,\\n.ui.dropdown.error > .default.text {\\n  color: #9F3A38;\\n}\\n\\n.ui.selection.dropdown.error {\\n  background: #FFF6F6;\\n  border-color: #E0B4B4;\\n}\\n\\n.ui.selection.dropdown.error:hover {\\n  border-color: #E0B4B4;\\n}\\n\\n.ui.dropdown.error > .menu,\\n.ui.dropdown.error > .menu .menu {\\n  border-color: #E0B4B4;\\n}\\n\\n.ui.dropdown.error > .menu > .item {\\n  color: #9F3A38;\\n}\\n\\n.ui.multiple.selection.error.dropdown > .label {\\n  border-color: #E0B4B4;\\n}\\n\\n/* Item Hover */\\n\\n.ui.dropdown.error > .menu > .item:hover {\\n  background-color: #FFF2F2;\\n}\\n\\n/* Item Active */\\n\\n.ui.dropdown.error > .menu .active.item {\\n  background-color: #FDCFCF;\\n}\\n\\n/*--------------------\\n        Clear\\n----------------------*/\\n\\n.ui.dropdown > .clear.dropdown.icon {\\n  opacity: 0.8;\\n  -webkit-transition: opacity 0.1s ease;\\n  transition: opacity 0.1s ease;\\n}\\n\\n.ui.dropdown > .clear.dropdown.icon:hover {\\n  opacity: 1;\\n}\\n\\n/*--------------------\\n        Disabled\\n----------------------*/\\n\\n/* Disabled */\\n\\n.ui.disabled.dropdown,\\n.ui.dropdown .menu > .disabled.item {\\n  cursor: default;\\n  pointer-events: none;\\n  opacity: 0.45;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*--------------\\n    Direction\\n---------------*/\\n\\n/* Flyout Direction */\\n\\n.ui.dropdown .menu {\\n  left: 0;\\n}\\n\\n/* Default Side (Right) */\\n\\n.ui.dropdown .right.menu > .menu,\\n.ui.dropdown .menu .right.menu {\\n  left: 100% !important;\\n  right: auto !important;\\n  border-radius: 0.28571429rem !important;\\n}\\n\\n/* Leftward Opening Menu */\\n\\n.ui.dropdown > .left.menu {\\n  left: auto !important;\\n  right: 0 !important;\\n}\\n\\n.ui.dropdown > .left.menu .menu,\\n.ui.dropdown .menu .left.menu {\\n  left: auto;\\n  right: 100%;\\n  margin: 0 -0.5em 0 0 !important;\\n  border-radius: 0.28571429rem !important;\\n}\\n\\n.ui.dropdown .item .left.dropdown.icon,\\n.ui.dropdown .left.menu .item .dropdown.icon {\\n  width: auto;\\n  float: left;\\n  margin: 0em 0 0 0;\\n}\\n\\n.ui.dropdown .item .left.dropdown.icon,\\n.ui.dropdown .left.menu .item .dropdown.icon {\\n  width: auto;\\n  float: left;\\n  margin: 0em 0 0 0;\\n}\\n\\n.ui.dropdown .item .left.dropdown.icon + .text,\\n.ui.dropdown .left.menu .item .dropdown.icon + .text {\\n  margin-left: 1em;\\n  margin-right: 0;\\n}\\n\\n/*--------------\\n     Upward\\n---------------*/\\n\\n/* Upward Main Menu */\\n\\n.ui.upward.dropdown > .menu {\\n  top: auto;\\n  bottom: 100%;\\n  -webkit-box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.08);\\n          box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.08);\\n  border-radius: 0.28571429rem 0.28571429rem 0 0;\\n}\\n\\n/* Upward Sub Menu */\\n\\n.ui.dropdown .upward.menu {\\n  top: auto !important;\\n  bottom: 0 !important;\\n}\\n\\n/* Active Upward */\\n\\n.ui.simple.upward.active.dropdown,\\n.ui.simple.upward.dropdown:hover {\\n  border-radius: 0.28571429rem 0.28571429rem 0 0 !important;\\n}\\n\\n.ui.upward.dropdown.button:not(.pointing):not(.floating).active {\\n  border-radius: 0.28571429rem 0.28571429rem 0 0;\\n}\\n\\n/* Selection */\\n\\n.ui.upward.selection.dropdown .menu {\\n  border-top-width: 1px !important;\\n  border-bottom-width: 0 !important;\\n  -webkit-box-shadow: 0 -2px 3px 0 rgba(0, 0, 0, 0.08);\\n          box-shadow: 0 -2px 3px 0 rgba(0, 0, 0, 0.08);\\n}\\n\\n.ui.upward.selection.dropdown:hover {\\n  -webkit-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.05);\\n          box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.05);\\n}\\n\\n/* Active Upward */\\n\\n.ui.active.upward.selection.dropdown {\\n  border-radius: 0 0 0.28571429rem 0.28571429rem !important;\\n}\\n\\n/* Visible Upward */\\n\\n.ui.upward.selection.dropdown.visible {\\n  -webkit-box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.08);\\n          box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.08);\\n  border-radius: 0 0 0.28571429rem 0.28571429rem !important;\\n}\\n\\n/* Visible Hover Upward */\\n\\n.ui.upward.active.selection.dropdown:hover {\\n  -webkit-box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.05);\\n          box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.05);\\n}\\n\\n.ui.upward.active.selection.dropdown:hover .menu {\\n  -webkit-box-shadow: 0 -2px 3px 0 rgba(0, 0, 0, 0.08);\\n          box-shadow: 0 -2px 3px 0 rgba(0, 0, 0, 0.08);\\n}\\n\\n/*--------------\\n     Scrolling\\n---------------*/\\n\\n/*  Selection Menu */\\n\\n.ui.scrolling.dropdown .menu,\\n.ui.dropdown .scrolling.menu {\\n  overflow-x: hidden;\\n  overflow-y: auto;\\n}\\n\\n.ui.scrolling.dropdown .menu {\\n  overflow-x: hidden;\\n  overflow-y: auto;\\n  -webkit-backface-visibility: hidden;\\n  backface-visibility: hidden;\\n  -webkit-overflow-scrolling: touch;\\n  min-width: 100% !important;\\n  width: auto !important;\\n}\\n\\n.ui.dropdown .scrolling.menu {\\n  position: static;\\n  overflow-y: auto;\\n  border: none;\\n  -webkit-box-shadow: none !important;\\n          box-shadow: none !important;\\n  border-radius: 0 !important;\\n  margin: 0 !important;\\n  min-width: 100% !important;\\n  width: auto !important;\\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.scrolling.dropdown .menu .item.item.item,\\n.ui.dropdown .scrolling.menu > .item.item.item {\\n  border-top: none;\\n}\\n\\n.ui.scrolling.dropdown .menu .item:first-child,\\n.ui.dropdown .scrolling.menu .item:first-child {\\n  border-top: none;\\n}\\n\\n.ui.dropdown > .animating.menu .scrolling.menu,\\n.ui.dropdown > .visible.menu .scrolling.menu {\\n  display: block;\\n}\\n\\n/* Scrollbar in IE */\\n\\n@media all and (-ms-high-contrast: none) {\\n  .ui.scrolling.dropdown .menu,\\n  .ui.dropdown .scrolling.menu {\\n    min-width: calc(100% - 17px);\\n  }\\n}\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.scrolling.dropdown .menu,\\n  .ui.dropdown .scrolling.menu {\\n    max-height: 10.28571429rem;\\n  }\\n}\\n\\n@media only screen and (min-width: 768px) {\\n  .ui.scrolling.dropdown .menu,\\n  .ui.dropdown .scrolling.menu {\\n    max-height: 15.42857143rem;\\n  }\\n}\\n\\n@media only screen and (min-width: 992px) {\\n  .ui.scrolling.dropdown .menu,\\n  .ui.dropdown .scrolling.menu {\\n    max-height: 20.57142857rem;\\n  }\\n}\\n\\n@media only screen and (min-width: 1920px) {\\n  .ui.scrolling.dropdown .menu,\\n  .ui.dropdown .scrolling.menu {\\n    max-height: 20.57142857rem;\\n  }\\n}\\n\\n/*--------------\\n     Columnar\\n---------------*/\\n\\n.ui.dropdown[class*=\\\"two column\\\"] > .menu > .item {\\n  display: inline-block;\\n  width: 50%;\\n}\\n\\n.ui.dropdown[class*=\\\"three column\\\"] > .menu > .item {\\n  display: inline-block;\\n  width: 33%;\\n}\\n\\n.ui.dropdown[class*=\\\"four column\\\"] > .menu > .item {\\n  display: inline-block;\\n  width: 25%;\\n}\\n\\n.ui.dropdown[class*=\\\"five column\\\"] > .menu > .item {\\n  display: inline-block;\\n  width: 20%;\\n}\\n\\n/*--------------\\n     Simple\\n---------------*/\\n\\n/* Displays without javascript */\\n\\n.ui.simple.dropdown .menu:before,\\n.ui.simple.dropdown .menu:after {\\n  display: none;\\n}\\n\\n.ui.simple.dropdown .menu {\\n  position: absolute;\\n  /* IE hack to make dropdown icons appear inline */\\n  display: -ms-inline-flexbox !important;\\n  display: block;\\n  overflow: hidden;\\n  top: -9999px;\\n  opacity: 0;\\n  width: 0;\\n  height: 0;\\n  -webkit-transition: opacity 0.1s ease;\\n  transition: opacity 0.1s ease;\\n  margin-top: 0 !important;\\n}\\n\\n.ui.simple.active.dropdown,\\n.ui.simple.dropdown:hover {\\n  border-bottom-left-radius: 0 !important;\\n  border-bottom-right-radius: 0 !important;\\n}\\n\\n.ui.simple.active.dropdown > .menu,\\n.ui.simple.dropdown:hover > .menu {\\n  overflow: visible;\\n  width: auto;\\n  height: auto;\\n  top: 100%;\\n  opacity: 1;\\n}\\n\\n.ui.simple.dropdown > .menu > .item:active > .menu,\\n.ui.simple.dropdown:hover > .menu > .item:hover > .menu {\\n  overflow: visible;\\n  width: auto;\\n  height: auto;\\n  top: 0 !important;\\n  left: 100% !important;\\n  opacity: 1;\\n}\\n\\n.ui.simple.disabled.dropdown:hover .menu {\\n  display: none;\\n  height: 0;\\n  width: 0;\\n  overflow: hidden;\\n}\\n\\n/* Visible */\\n\\n.ui.simple.visible.dropdown > .menu {\\n  display: block;\\n}\\n\\n/* Scrolling */\\n\\n.ui.simple.scrolling.active.dropdown > .menu,\\n.ui.simple.scrolling.dropdown:hover > .menu {\\n  overflow-x: hidden;\\n  overflow-y: auto;\\n}\\n\\n/*--------------\\n      Fluid\\n---------------*/\\n\\n.ui.fluid.dropdown {\\n  display: block;\\n  width: 100% !important;\\n  min-width: 0;\\n}\\n\\n.ui.fluid.dropdown > .dropdown.icon {\\n  float: right;\\n}\\n\\n/*--------------\\n    Floating\\n---------------*/\\n\\n.ui.floating.dropdown .menu {\\n  left: 0;\\n  right: auto;\\n  -webkit-box-shadow: 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15) !important;\\n          box-shadow: 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15) !important;\\n  border-radius: 0.28571429rem !important;\\n}\\n\\n.ui.floating.dropdown > .menu {\\n  border-radius: 0.28571429rem !important;\\n}\\n\\n.ui:not(.upward).floating.dropdown > .menu {\\n  margin-top: 0.5em;\\n}\\n\\n.ui.upward.floating.dropdown > .menu {\\n  margin-bottom: 0.5em;\\n}\\n\\n/*--------------\\n     Pointing\\n---------------*/\\n\\n.ui.pointing.dropdown > .menu {\\n  top: 100%;\\n  margin-top: 0.78571429rem;\\n  border-radius: 0.28571429rem;\\n}\\n\\n.ui.pointing.dropdown > .menu:not(.hidden):after {\\n  display: block;\\n  position: absolute;\\n  pointer-events: none;\\n  content: '';\\n  visibility: visible;\\n  -webkit-transform: rotate(45deg);\\n  transform: rotate(45deg);\\n  width: 0.5em;\\n  height: 0.5em;\\n  -webkit-box-shadow: -1px -1px 0 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: -1px -1px 0 0 rgba(34, 36, 38, 0.15);\\n  background: #FFFFFF;\\n  z-index: 2;\\n}\\n\\n.ui.pointing.dropdown > .menu:not(.hidden):after {\\n  top: -0.25em;\\n  left: 50%;\\n  margin: 0 0 0 -0.25em;\\n}\\n\\n/* Top Left Pointing */\\n\\n.ui.top.left.pointing.dropdown > .menu {\\n  top: 100%;\\n  bottom: auto;\\n  left: 0;\\n  right: auto;\\n  margin: 1em 0 0;\\n}\\n\\n.ui.top.left.pointing.dropdown > .menu {\\n  top: 100%;\\n  bottom: auto;\\n  left: 0;\\n  right: auto;\\n  margin: 1em 0 0;\\n}\\n\\n.ui.top.left.pointing.dropdown > .menu:after {\\n  top: -0.25em;\\n  left: 1em;\\n  right: auto;\\n  margin: 0;\\n  -webkit-transform: rotate(45deg);\\n  transform: rotate(45deg);\\n}\\n\\n/* Top Right Pointing */\\n\\n.ui.top.right.pointing.dropdown > .menu {\\n  top: 100%;\\n  bottom: auto;\\n  right: 0;\\n  left: auto;\\n  margin: 1em 0 0;\\n}\\n\\n.ui.top.pointing.dropdown > .left.menu:after,\\n.ui.top.right.pointing.dropdown > .menu:after {\\n  top: -0.25em;\\n  left: auto !important;\\n  right: 1em !important;\\n  margin: 0;\\n  -webkit-transform: rotate(45deg);\\n  transform: rotate(45deg);\\n}\\n\\n/* Left Pointing */\\n\\n.ui.left.pointing.dropdown > .menu {\\n  top: 0;\\n  left: 100%;\\n  right: auto;\\n  margin: 0 0 0 1em;\\n}\\n\\n.ui.left.pointing.dropdown > .menu:after {\\n  top: 1em;\\n  left: -0.25em;\\n  margin: 0 0 0 0;\\n  -webkit-transform: rotate(-45deg);\\n  transform: rotate(-45deg);\\n}\\n\\n.ui.left:not(.top):not(.bottom).pointing.dropdown > .left.menu {\\n  left: auto !important;\\n  right: 100% !important;\\n  margin: 0 1em 0 0;\\n}\\n\\n.ui.left:not(.top):not(.bottom).pointing.dropdown > .left.menu:after {\\n  top: 1em;\\n  left: auto;\\n  right: -0.25em;\\n  margin: 0 0 0 0;\\n  -webkit-transform: rotate(135deg);\\n  transform: rotate(135deg);\\n}\\n\\n/* Right Pointing */\\n\\n.ui.right.pointing.dropdown > .menu {\\n  top: 0;\\n  left: auto;\\n  right: 100%;\\n  margin: 0 1em 0 0;\\n}\\n\\n.ui.right.pointing.dropdown > .menu:after {\\n  top: 1em;\\n  left: auto;\\n  right: -0.25em;\\n  margin: 0 0 0 0;\\n  -webkit-transform: rotate(135deg);\\n  transform: rotate(135deg);\\n}\\n\\n/* Bottom Pointing */\\n\\n.ui.bottom.pointing.dropdown > .menu {\\n  top: auto;\\n  bottom: 100%;\\n  left: 0;\\n  right: auto;\\n  margin: 0 0 1em;\\n}\\n\\n.ui.bottom.pointing.dropdown > .menu:after {\\n  top: auto;\\n  bottom: -0.25em;\\n  right: auto;\\n  margin: 0;\\n  -webkit-transform: rotate(-135deg);\\n  transform: rotate(-135deg);\\n}\\n\\n/* Reverse Sub-Menu Direction */\\n\\n.ui.bottom.pointing.dropdown > .menu .menu {\\n  top: auto !important;\\n  bottom: 0 !important;\\n}\\n\\n/* Bottom Left */\\n\\n.ui.bottom.left.pointing.dropdown > .menu {\\n  left: 0;\\n  right: auto;\\n}\\n\\n.ui.bottom.left.pointing.dropdown > .menu:after {\\n  left: 1em;\\n  right: auto;\\n}\\n\\n/* Bottom Right */\\n\\n.ui.bottom.right.pointing.dropdown > .menu {\\n  right: 0;\\n  left: auto;\\n}\\n\\n.ui.bottom.right.pointing.dropdown > .menu:after {\\n  left: auto;\\n  right: 1em;\\n}\\n\\n/* Upward pointing */\\n\\n.ui.pointing.upward.dropdown .menu,\\n.ui.top.pointing.upward.dropdown .menu {\\n  top: auto !important;\\n  bottom: 100% !important;\\n  margin: 0 0 0.78571429rem;\\n  border-radius: 0.28571429rem;\\n}\\n\\n.ui.pointing.upward.dropdown .menu:after,\\n.ui.top.pointing.upward.dropdown .menu:after {\\n  top: 100% !important;\\n  bottom: auto !important;\\n  -webkit-box-shadow: 1px 1px 0 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 1px 1px 0 0 rgba(34, 36, 38, 0.15);\\n  margin: -0.25em 0 0;\\n}\\n\\n/* Right Pointing Upward */\\n\\n.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu {\\n  top: auto !important;\\n  bottom: 0 !important;\\n  margin: 0 1em 0 0;\\n}\\n\\n.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after {\\n  top: auto !important;\\n  bottom: 0 !important;\\n  margin: 0 0 1em 0;\\n  -webkit-box-shadow: -1px -1px 0 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: -1px -1px 0 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n/* Left Pointing Upward */\\n\\n.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu {\\n  top: auto !important;\\n  bottom: 0 !important;\\n  margin: 0 0 0 1em;\\n}\\n\\n.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after {\\n  top: auto !important;\\n  bottom: 0 !important;\\n  margin: 0 0 1em 0;\\n  -webkit-box-shadow: -1px -1px 0 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: -1px -1px 0 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n/*--------------------\\n        Sizes\\n---------------------*/\\n\\n/* Dropdown Size */\\n\\n.ui.mini.dropdown {\\n  font-size: 0.78571429rem;\\n}\\n\\n.ui.tiny.dropdown {\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.small.dropdown {\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.dropdown {\\n  font-size: 1rem;\\n}\\n\\n.ui.large.dropdown {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.big.dropdown {\\n  font-size: 1.28571429rem;\\n}\\n\\n.ui.huge.dropdown {\\n  font-size: 1.42857143rem;\\n}\\n\\n.ui.massive.dropdown {\\n  font-size: 1.71428571rem;\\n}\\n\\n/* Dropdown Item Size */\\n\\n.ui.mini.dropdown .menu > .item {\\n  font-size: 0.78571429rem;\\n}\\n\\n.ui.tiny.dropdown .menu > .item {\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.small.dropdown .menu > .item {\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.dropdown .menu > .item {\\n  font-size: 1rem;\\n}\\n\\n.ui.large.dropdown .menu > .item {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.big.dropdown .menu > .item {\\n  font-size: 1.28571429rem;\\n}\\n\\n.ui.huge.dropdown .menu > .item {\\n  font-size: 1.42857143rem;\\n}\\n\\n.ui.massive.dropdown .menu > .item {\\n  font-size: 1.71428571rem;\\n}\\n\\n/*--------------\\n    Inverted\\n---------------*/\\n\\n/* General rules and basic dropdowns */\\n\\n.ui.inverted.dropdown .menu {\\n  background: #1B1C1D;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  border: 1px solid rgba(255, 255, 255, 0.15);\\n}\\n\\n.ui.inverted.dropdown .menu > .item {\\n  color: rgba(255, 255, 255, 0.8);\\n}\\n\\n.ui.inverted.dropdown .menu .active.item {\\n  background: transparent;\\n  color: rgba(255, 255, 255, 0.8);\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.inverted.dropdown .menu > .item:hover {\\n  background: rgba(255, 255, 255, 0.08);\\n  color: rgba(255, 255, 255, 0.8);\\n}\\n\\n.ui.inverted.dropdown.selected,\\n.ui.inverted.dropdown .menu .selected.item {\\n  background: rgba(255, 255, 255, 0.15);\\n  color: rgba(255, 255, 255, 0.8);\\n}\\n\\n.ui.inverted.dropdown .menu > .header {\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.dropdown > .text > .description,\\n.ui.inverted.dropdown .menu > .item > .description {\\n  color: rgba(255, 255, 255, 0.5);\\n}\\n\\n.ui.inverted.dropdown .menu > .divider {\\n  border-top: 1px solid rgba(255, 255, 255, 0.15);\\n}\\n\\n.ui.inverted.dropdown .scrolling.menu {\\n  border: none;\\n  border-top: 1px solid rgba(255, 255, 255, 0.15);\\n}\\n\\n/* Selection */\\n\\n.ui.inverted.selection.dropdown {\\n  border: 1px solid rgba(255, 255, 255, 0.15);\\n  background: #1B1C1D;\\n  color: rgba(255, 255, 255, 0.8);\\n}\\n\\n.ui.inverted.selection.dropdown:hover {\\n  border-color: rgba(255, 255, 255, 0.25);\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.inverted.selection.dropdown input {\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.dropdown:not(.button) > .default.text,\\n.ui.inverted.default.dropdown:not(.button) > .text {\\n  color: rgba(255, 255, 255, 0.5);\\n}\\n\\n.ui.inverted.dropdown:not(.button) > input:focus ~ .default.text,\\n.ui.inverted.default.dropdown:not(.button) > input:focus ~ .text {\\n  color: rgba(255, 255, 255, 0.7);\\n}\\n\\n.ui.inverted.selection.visible.dropdown > .text:not(.default) {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.inverted.active.search.dropdown input.search:focus + .text .icon,\\n.ui.inverted.active.search.dropdown input.search:focus + .text .flag {\\n  opacity: 0.45;\\n}\\n\\n.ui.inverted.active.search.dropdown input.search:focus + .text {\\n  color: rgba(255, 255, 255, 0.7) !important;\\n}\\n\\n.ui.inverted.selection.active.dropdown .menu,\\n.ui.inverted.selection.active.dropdown:hover {\\n  border-color: rgba(255, 255, 255, 0.15);\\n}\\n\\n.ui.inverted.selection.dropdown .menu > .item {\\n  border-top: 1px solid #242526;\\n}\\n\\n.ui.inverted.dropdown .menu > .message:not(.ui) {\\n  color: rgba(255, 255, 255, 0.5);\\n}\\n\\n/* Fixing the border */\\n\\n.ui.inverted.dropdown .menu > .item:first-child {\\n  border-top-width: 0;\\n}\\n\\n/* Labels */\\n\\n.ui.inverted.multiple.dropdown > .label {\\n  background-color: rgba(255, 255, 255, 0.7);\\n  background-image: none;\\n  color: #000000;\\n  -webkit-box-shadow: 0 0 0 1px rgba(255, 255, 255, 0) inset;\\n          box-shadow: 0 0 0 1px rgba(255, 255, 255, 0) inset;\\n}\\n\\n.ui.inverted.multiple.dropdown > .label:hover {\\n  background-color: rgba(255, 255, 255, 0.9);\\n  border-color: rgba(255, 255, 255, 0.9);\\n  background-image: none;\\n  color: #000000;\\n}\\n\\n.ui.inverted.multiple.dropdown > .label > .close.icon,\\n.ui.inverted.multiple.dropdown > .label > .delete.icon {\\n  opacity: 0.6;\\n}\\n\\n.ui.inverted.multiple.dropdown > .label > .close.icon:hover,\\n.ui.inverted.multiple.dropdown > .label > .delete.icon:hover {\\n  opacity: 0.8;\\n}\\n\\n/* Selection for form elements */\\n\\n.ui.inverted.dropdown textarea::-webkit-selection,\\n.ui.inverted.dropdown input::-webkit-selection {\\n  background-color: rgba(255, 255, 255, 0.25);\\n  color: rgba(255, 255, 255, 0.8);\\n}\\n\\n.ui.inverted.dropdown textarea::-moz-selection,\\n.ui.inverted.dropdown input::-moz-selection {\\n  background-color: rgba(255, 255, 255, 0.25);\\n  color: rgba(255, 255, 255, 0.8);\\n}\\n\\n.ui.inverted.dropdown textarea::selection,\\n.ui.inverted.dropdown input::selection {\\n  background-color: rgba(255, 255, 255, 0.25);\\n  color: rgba(255, 255, 255, 0.8);\\n}\\n\\n/* Scrollbars */\\n\\n.ui.inverted.dropdown .menu::-webkit-scrollbar-track {\\n  background: rgba(255, 255, 255, 0.1);\\n}\\n\\n.ui.inverted.dropdown .menu::-webkit-scrollbar-thumb {\\n  background: rgba(255, 255, 255, 0.25);\\n}\\n\\n.ui.inverted.dropdown .menu::-webkit-scrollbar-thumb:window-inactive {\\n  background: rgba(255, 255, 255, 0.15);\\n}\\n\\n.ui.inverted.dropdown .menu::-webkit-scrollbar-thumb:hover {\\n  background: rgba(255, 255, 255, 0.35);\\n}\\n\\n.ui.inverted.pointing.dropdown > .menu:after {\\n  background: #1B1C1D;\\n  -webkit-box-shadow: -1px -1px 0 0 rgba(255, 255, 255, 0.15);\\n          box-shadow: -1px -1px 0 0 rgba(255, 255, 255, 0.15);\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/* Dropdown Carets */\\n\\n@font-face {\\n  font-family: 'Dropdown';\\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfuIIAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zjo82LgAAAFwAAABVGhlYWQAQ88bAAACxAAAADZoaGVhAwcB6QAAAvwAAAAkaG10eAS4ABIAAAMgAAAAIGxvY2EBNgDeAAADQAAAABJtYXhwAAoAFgAAA1QAAAAgbmFtZVcZpu4AAAN0AAABRXBvc3QAAwAAAAAEvAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDX//3//wAB/+MPLQADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAIABJQElABMAABM0NzY3BTYXFhUUDwEGJwYvASY1AAUGBwEACAUGBoAFCAcGgAUBEgcGBQEBAQcECQYHfwYBAQZ/BwYAAQAAAG4BJQESABMAADc0PwE2MzIfARYVFAcGIyEiJyY1AAWABgcIBYAGBgUI/wAHBgWABwaABQWABgcHBgUFBgcAAAABABIASQC3AW4AEwAANzQ/ATYXNhcWHQEUBwYnBi8BJjUSBoAFCAcFBgYFBwgFgAbbBwZ/BwEBBwQJ/wgEBwEBB38GBgAAAAABAAAASQClAW4AEwAANxE0NzYzMh8BFhUUDwEGIyInJjUABQYHCAWABgaABQgHBgVbAQAIBQYGgAUIBwWABgYFBwAAAAEAAAABAADZuaKOXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAAAAACgAUAB4AQgBkAIgAqgAAAAEAAAAIABQAAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAOAAAAAQAAAAAAAgAOAEcAAQAAAAAAAwAOACQAAQAAAAAABAAOAFUAAQAAAAAABQAWAA4AAQAAAAAABgAHADIAAQAAAAAACgA0AGMAAwABBAkAAQAOAAAAAwABBAkAAgAOAEcAAwABBAkAAwAOACQAAwABBAkABAAOAFUAAwABBAkABQAWAA4AAwABBAkABgAOADkAAwABBAkACgA0AGMAaQBjAG8AbQBvAG8AbgBWAGUAcgBzAGkAbwBuACAAMQAuADAAaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AbgBSAGUAZwB1AGwAYQByAGkAYwBvAG0AbwBvAG4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAAVwAAoAAAAABSgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAdkAAAHZLDXE/09TLzIAAALQAAAAYAAAAGAIIweQY21hcAAAAzAAAABMAAAATA9+4ghnYXNwAAADfAAAAAgAAAAIAAAAEGhlYWQAAAOEAAAANgAAADYAQ88baGhlYQAAA7wAAAAkAAAAJAMHAelobXR4AAAD4AAAACAAAAAgBLgAEm1heHAAAAQAAAAABgAAAAYACFAAbmFtZQAABAgAAAFFAAABRVcZpu5wb3N0AAAFUAAAACAAAAAgAAMAAAEABAQAAQEBCGljb21vb24AAQIAAQA6+BwC+BsD+BgEHgoAGVP/i4seCgAZU/+LiwwHi2v4lPh0BR0AAACIDx0AAACNER0AAAAJHQAAAdASAAkBAQgPERMWGyAlKmljb21vb25pY29tb29udTB1MXUyMHVGMEQ3dUYwRDh1RjBEOXVGMERBAAACAYkABgAIAgABAAQABwAKAA0AVgCfAOgBL/yUDvyUDvyUDvuUDvtvi/emFYuQjZCOjo+Pj42Qiwj3lIsFkIuQiY6Hj4iNhouGi4aJh4eHCPsU+xQFiIiGiYaLhouHjYeOCPsU9xQFiI+Jj4uQCA77b4v3FBWLkI2Pjo8I9xT3FAWPjo+NkIuQi5CJjogI9xT7FAWPh42Hi4aLhomHh4eIiIaJhosI+5SLBYaLh42HjoiPiY+LkAgO+92d928Vi5CNkI+OCPcU9xQFjo+QjZCLkIuPiY6Hj4iNhouGCIv7lAWLhomHh4iIh4eJhouGi4aNiI8I+xT3FAWHjomPi5AIDvvdi+YVi/eUBYuQjZCOjo+Pj42Qi5CLkImOhwj3FPsUBY+IjYaLhouGiYeHiAj7FPsUBYiHhomGi4aLh42Hj4iOiY+LkAgO+JQU+JQViwwKAAAAAAMCAAGQAAUAAAFMAWYAAABHAUwBZgAAAPUAGQCEAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA8NoB4P/g/+AB4AAgAAAAAQAAAAAAAAAAAAAAIAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABAA4AAAACgAIAAIAAgABACDw2v/9//8AAAAAACDw1//9//8AAf/jDy0AAwABAAAAAAAAAAAAAAABAAH//wAPAAEAAAABAAA5emozXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAUAAACAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIADgBHAAEAAAAAAAMADgAkAAEAAAAAAAQADgBVAAEAAAAAAAUAFgAOAAEAAAAAAAYABwAyAAEAAAAAAAoANABjAAMAAQQJAAEADgAAAAMAAQQJAAIADgBHAAMAAQQJAAMADgAkAAMAAQQJAAQADgBVAAMAAQQJAAUAFgAOAAMAAQQJAAYADgA5AAMAAQQJAAoANABjAGkAYwBvAG0AbwBvAG4AVgBlAHIAcwBpAG8AbgAgADEALgAwAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG4AUgBlAGcAdQBsAGEAcgBpAGMAbwBtAG8AbwBuAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff');\\n  font-weight: normal;\\n  font-style: normal;\\n}\\n\\n.ui.dropdown > .dropdown.icon {\\n  font-family: 'Dropdown';\\n  line-height: 1;\\n  height: 1em;\\n  width: 1.23em;\\n  -webkit-backface-visibility: hidden;\\n  backface-visibility: hidden;\\n  font-weight: normal;\\n  font-style: normal;\\n  text-align: center;\\n}\\n\\n.ui.dropdown > .dropdown.icon {\\n  width: auto;\\n}\\n\\n.ui.dropdown > .dropdown.icon:before {\\n  content: '\\\\f0d7';\\n}\\n\\n/* Sub Menu */\\n\\n.ui.dropdown .menu .item .dropdown.icon:before {\\n  content: '\\\\f0da' ;\\n}\\n\\n.ui.dropdown .item .left.dropdown.icon:before,\\n.ui.dropdown .left.menu .item .dropdown.icon:before {\\n  content: \\\"\\\\f0d9\\\" ;\\n}\\n\\n/* Vertical Menu Dropdown */\\n\\n.ui.vertical.menu .dropdown.item > .dropdown.icon:before {\\n  content: \\\"\\\\f0da\\\" ;\\n}\\n\\n/* Icons for Reference\\n.dropdown.down.icon {\\n  content: \\\"\\\\f0d7\\\";\\n}\\n.dropdown.up.icon {\\n  content: \\\"\\\\f0d8\\\";\\n}\\n.dropdown.left.icon {\\n  content: \\\"\\\\f0d9\\\";\\n}\\n.dropdown.icon.icon {\\n  content: \\\"\\\\f0da\\\";\\n}\\n*/\\n\\n/*******************************\\n        User Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Video\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Types\\n*******************************/\\n\\n.ui.embed {\\n  position: relative;\\n  max-width: 100%;\\n  height: 0;\\n  overflow: hidden;\\n  background: #DCDDDE;\\n  padding-bottom: 56.25%;\\n}\\n\\n/*-----------------\\n  Embedded Content\\n------------------*/\\n\\n.ui.embed iframe,\\n.ui.embed embed,\\n.ui.embed object {\\n  position: absolute;\\n  border: none;\\n  width: 100%;\\n  height: 100%;\\n  top: 0;\\n  left: 0;\\n  margin: 0;\\n  padding: 0;\\n  overflow: hidden;\\n}\\n\\n/*-----------------\\n      Embed\\n------------------*/\\n\\n.ui.embed > .embed {\\n  display: none;\\n}\\n\\n/*--------------\\n   Placeholder\\n---------------*/\\n\\n.ui.embed > .placeholder {\\n  position: absolute;\\n  cursor: pointer;\\n  top: 0;\\n  left: 0;\\n  display: block;\\n  width: 100%;\\n  height: 100%;\\n  background-color: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\\n}\\n\\n/*--------------\\n      Icon\\n---------------*/\\n\\n.ui.embed > .icon {\\n  cursor: pointer;\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  width: 100%;\\n  height: 100%;\\n  z-index: 2;\\n}\\n\\n.ui.embed > .icon:after {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  width: 100%;\\n  height: 100%;\\n  z-index: 3;\\n  content: '';\\n  background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\\n  opacity: 0.5;\\n  -webkit-transition: opacity 0.5s ease;\\n  transition: opacity 0.5s ease;\\n}\\n\\n.ui.embed > .icon:before {\\n  position: absolute;\\n  top: 50%;\\n  left: 50%;\\n  -webkit-transform: translateX(-50%) translateY(-50%);\\n  transform: translateX(-50%) translateY(-50%);\\n  color: #FFFFFF;\\n  font-size: 6rem;\\n  text-shadow: 0 2px 10px rgba(34, 36, 38, 0.2);\\n  -webkit-transition: opacity 0.5s ease, color 0.5s ease;\\n  transition: opacity 0.5s ease, color 0.5s ease;\\n  z-index: 10;\\n}\\n\\n/*******************************\\n            States\\n*******************************/\\n\\n/*--------------\\n     Hover\\n---------------*/\\n\\n.ui.embed .icon:hover:after {\\n  background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\\n  opacity: 1;\\n}\\n\\n.ui.embed .icon:hover:before {\\n  color: #FFFFFF;\\n}\\n\\n/*--------------\\n     Active\\n---------------*/\\n\\n.ui.active.embed > .icon,\\n.ui.active.embed > .placeholder {\\n  display: none;\\n}\\n\\n.ui.active.embed > .embed {\\n  display: block;\\n}\\n\\n/*******************************\\n        Video Overrides\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n\\n/*******************************\\n          Variations\\n*******************************/\\n\\n.ui.square.embed {\\n  padding-bottom: 100%;\\n}\\n\\n.ui[class*=\\\"4:3\\\"].embed {\\n  padding-bottom: 75%;\\n}\\n\\n.ui[class*=\\\"16:9\\\"].embed {\\n  padding-bottom: 56.25%;\\n}\\n\\n.ui[class*=\\\"21:9\\\"].embed {\\n  padding-bottom: 42.85714286%;\\n}\\n/*!\\n * # Fomantic-UI - Modal\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n             Modal\\n*******************************/\\n\\n.ui.modal {\\n  position: absolute;\\n  display: none;\\n  z-index: 1001;\\n  text-align: left;\\n  background: #FFFFFF;\\n  border: none;\\n  -webkit-box-shadow: 1px 3px 3px 0 rgba(0, 0, 0, 0.2), 1px 3px 15px 2px rgba(0, 0, 0, 0.2);\\n          box-shadow: 1px 3px 3px 0 rgba(0, 0, 0, 0.2), 1px 3px 15px 2px rgba(0, 0, 0, 0.2);\\n  -webkit-transform-origin: 50% 25%;\\n  transform-origin: 50% 25%;\\n  -webkit-box-flex: 0;\\n      -ms-flex: 0 0 auto;\\n          flex: 0 0 auto;\\n  border-radius: 0.28571429rem;\\n  -webkit-user-select: text;\\n  -moz-user-select: text;\\n  -ms-user-select: text;\\n  user-select: text;\\n  will-change: top, left, margin, transform, opacity;\\n}\\n\\n.ui.modal > :first-child:not(.icon):not(.dimmer),\\n.ui.modal > .icon:first-child + *,\\n.ui.modal > .dimmer:first-child + *:not(.icon),\\n.ui.modal > .dimmer:first-child + .icon + * {\\n  border-top-left-radius: 0.28571429rem;\\n  border-top-right-radius: 0.28571429rem;\\n}\\n\\n.ui.modal > :last-child {\\n  border-bottom-left-radius: 0.28571429rem;\\n  border-bottom-right-radius: 0.28571429rem;\\n}\\n\\n/*******************************\\n            Content\\n*******************************/\\n\\n/*--------------\\n     Close\\n---------------*/\\n\\n.ui.modal > .close {\\n  cursor: pointer;\\n  position: absolute;\\n  top: -2.5rem;\\n  right: -2.5rem;\\n  z-index: 1;\\n  opacity: 0.8;\\n  font-size: 1.25em;\\n  color: #FFFFFF;\\n  width: 2.25rem;\\n  height: 2.25rem;\\n  padding: 0.625rem 0 0 0;\\n}\\n\\n.ui.modal > .close:hover {\\n  opacity: 1;\\n}\\n\\n/*--------------\\n     Header\\n---------------*/\\n\\n.ui.modal > .header {\\n  display: block;\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  background: #FFFFFF;\\n  margin: 0;\\n  padding: 1.25rem 1.5rem;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  color: rgba(0, 0, 0, 0.85);\\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.modal > .header:not(.ui) {\\n  font-size: 1.42857143rem;\\n  line-height: 1.28571429em;\\n  font-weight: bold;\\n}\\n\\n/*--------------\\n     Content\\n---------------*/\\n\\n.ui.modal > .content {\\n  display: block;\\n  width: 100%;\\n  font-size: 1em;\\n  line-height: 1.4;\\n  padding: 1.5rem;\\n  background: #FFFFFF;\\n}\\n\\n.ui.modal > .image.content {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: horizontal;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: row;\\n          flex-direction: row;\\n}\\n\\n/* Image */\\n\\n.ui.modal > .content > .image {\\n  display: block;\\n  -webkit-box-flex: 0;\\n      -ms-flex: 0 1 auto;\\n          flex: 0 1 auto;\\n  width: '';\\n  -ms-flex-item-align: start;\\n      align-self: start;\\n  max-width: 100%;\\n}\\n\\n.ui.modal > [class*=\\\"top aligned\\\"] {\\n  -ms-flex-item-align: start;\\n      align-self: start;\\n}\\n\\n.ui.modal > [class*=\\\"middle aligned\\\"] {\\n  -ms-flex-item-align: center;\\n      align-self: center;\\n}\\n\\n.ui.modal > [class*=\\\"stretched\\\"] {\\n  -ms-flex-item-align: stretch;\\n      align-self: stretch;\\n}\\n\\n/* Description */\\n\\n.ui.modal > .content > .description {\\n  display: block;\\n  -webkit-box-flex: 1;\\n      -ms-flex: 1 0 auto;\\n          flex: 1 0 auto;\\n  min-width: 0;\\n  -ms-flex-item-align: start;\\n      align-self: start;\\n}\\n\\n.ui.modal > .content > .icon + .description,\\n.ui.modal > .content > .image + .description {\\n  -webkit-box-flex: 0;\\n      -ms-flex: 0 1 auto;\\n          flex: 0 1 auto;\\n  min-width: '';\\n  width: auto;\\n  padding-left: 2em;\\n}\\n\\n/*rtl:ignore*/\\n\\n.ui.modal > .content > .image > i.icon {\\n  margin: 0;\\n  opacity: 1;\\n  width: auto;\\n  line-height: 1;\\n  font-size: 8rem;\\n}\\n\\n/*--------------\\n     Actions\\n---------------*/\\n\\n.ui.modal > .actions {\\n  background: #F9FAFB;\\n  padding: 1rem 1rem;\\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\\n  text-align: right;\\n}\\n\\n.ui.modal .actions > .button {\\n  margin-left: 0.75em;\\n}\\n\\n.ui.basic.modal > .actions {\\n  border-top: none;\\n}\\n\\n/*-------------------\\n       Responsive\\n--------------------*/\\n\\n/* Modal Width */\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.modal:not(.fullscreen) {\\n    width: 95%;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n@media only screen and (min-width: 768px) {\\n  .ui.modal:not(.fullscreen) {\\n    width: 88%;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n@media only screen and (min-width: 992px) {\\n  .ui.modal:not(.fullscreen) {\\n    width: 850px;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n@media only screen and (min-width: 1200px) {\\n  .ui.modal:not(.fullscreen) {\\n    width: 900px;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n@media only screen and (min-width: 1920px) {\\n  .ui.modal:not(.fullscreen) {\\n    width: 950px;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n/* Tablet and Mobile */\\n\\n@media only screen and (max-width: 991.98px) {\\n  .ui.modal > .header {\\n    padding-right: 2.25rem;\\n  }\\n\\n  .ui.modal > .close {\\n    top: 1.0535rem;\\n    right: 1rem;\\n    color: rgba(0, 0, 0, 0.87);\\n  }\\n}\\n\\n/* Mobile */\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.modal > .header {\\n    padding: 0.75rem 1rem !important;\\n    padding-right: 2.25rem !important;\\n  }\\n\\n  .ui.overlay.fullscreen.modal > .content.content.content {\\n    min-height: calc(100vh - 8.1rem);\\n  }\\n\\n  .ui.overlay.fullscreen.modal > .scrolling.content.content.content {\\n    max-height: calc(100vh - 8.1rem);\\n  }\\n\\n  .ui.modal > .content {\\n    display: block;\\n    padding: 1rem !important;\\n  }\\n\\n  .ui.modal > .close {\\n    top: 0.5rem !important;\\n    right: 0.5rem !important;\\n  }\\n\\n  /*rtl:ignore*/\\n\\n  .ui.modal .image.content {\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: column;\\n            flex-direction: column;\\n  }\\n\\n  .ui.modal .content > .image {\\n    display: block;\\n    max-width: 100%;\\n    margin: 0 auto !important;\\n    text-align: center;\\n    padding: 0 0 1rem !important;\\n  }\\n\\n  .ui.modal > .content > .image > i.icon {\\n    font-size: 5rem;\\n    text-align: center;\\n  }\\n\\n  /*rtl:ignore*/\\n\\n  .ui.modal .content > .description {\\n    display: block;\\n    width: 100% !important;\\n    margin: 0 !important;\\n    padding: 1rem 0 !important;\\n    -webkit-box-shadow: none;\\n            box-shadow: none;\\n  }\\n\\n  /* Let Buttons Stack */\\n\\n  .ui.modal > .actions {\\n    padding: 1rem 1rem 0rem !important;\\n  }\\n\\n  .ui.modal .actions > .buttons,\\n  .ui.modal .actions > .button {\\n    margin-bottom: 1rem;\\n  }\\n}\\n\\n/*--------------\\n    Coupling\\n---------------*/\\n\\n.ui.inverted.dimmer > .ui.modal {\\n  -webkit-box-shadow: 1px 3px 10px 2px rgba(0, 0, 0, 0.2);\\n          box-shadow: 1px 3px 10px 2px rgba(0, 0, 0, 0.2);\\n}\\n\\n/*******************************\\n             Types\\n*******************************/\\n\\n.ui.basic.modal {\\n  background-color: transparent;\\n  border: none;\\n  border-radius: 0;\\n  -webkit-box-shadow: none !important;\\n          box-shadow: none !important;\\n  color: #FFFFFF;\\n}\\n\\n.ui.basic.modal > .header,\\n.ui.basic.modal > .content,\\n.ui.basic.modal > .actions {\\n  background-color: transparent;\\n}\\n\\n.ui.basic.modal > .header {\\n  color: #FFFFFF;\\n}\\n\\n.ui.basic.modal > .close {\\n  top: 1rem;\\n  right: 1.5rem;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.dimmer > .basic.modal {\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.inverted.dimmer > .ui.basic.modal > .header {\\n  color: rgba(0, 0, 0, 0.85);\\n}\\n\\n/* Resort to margin positioning if legacy */\\n\\n.ui.legacy.legacy.modal,\\n.ui.legacy.legacy.page.dimmer > .ui.modal {\\n  left: 50% !important;\\n}\\n\\n.ui.legacy.legacy.modal:not(.aligned),\\n.ui.legacy.legacy.page.dimmer > .ui.modal:not(.aligned) {\\n  top: 50%;\\n}\\n\\n.ui.legacy.legacy.page.dimmer > .ui.scrolling.modal:not(.aligned),\\n.ui.page.dimmer > .ui.scrolling.legacy.legacy.modal:not(.aligned),\\n.ui.top.aligned.legacy.legacy.page.dimmer > .ui.modal:not(.aligned),\\n.ui.top.aligned.dimmer > .ui.legacy.legacy.modal:not(.aligned) {\\n  top: auto;\\n}\\n\\n.ui.legacy.overlay.fullscreen.modal {\\n  margin-top: -1rem !important;\\n}\\n\\n/*******************************\\n             States\\n*******************************/\\n\\n.ui.loading.modal {\\n  display: block;\\n  visibility: hidden;\\n  z-index: -1;\\n}\\n\\n.ui.active.modal {\\n  display: block;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*--------------\\n   Aligned\\n---------------*/\\n\\n.ui.top.aligned.modal {\\n  top: 5vh;\\n}\\n\\n.ui.bottom.aligned.modal {\\n  bottom: 5vh;\\n}\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.top.aligned.modal {\\n    top: 1rem;\\n  }\\n\\n  .ui.bottom.aligned.modal {\\n    bottom: 1rem;\\n  }\\n}\\n\\n/*--------------\\n    Scrolling\\n---------------*/\\n\\n/* Scrolling Dimmer */\\n\\n.scrolling.dimmable.dimmed {\\n  overflow: hidden;\\n}\\n\\n.scrolling.dimmable > .dimmer {\\n  -webkit-box-pack: start;\\n      -ms-flex-pack: start;\\n          justify-content: flex-start;\\n  position: fixed;\\n}\\n\\n.scrolling.dimmable.dimmed > .dimmer {\\n  overflow: auto;\\n  -webkit-overflow-scrolling: touch;\\n}\\n\\n.modals.dimmer .ui.scrolling.modal:not(.fullscreen) {\\n  margin: 1rem auto;\\n}\\n\\n/* Undetached Scrolling */\\n\\n.scrolling.undetached.dimmable.dimmed {\\n  overflow: auto;\\n  -webkit-overflow-scrolling: touch;\\n}\\n\\n.scrolling.undetached.dimmable.dimmed > .dimmer {\\n  overflow: hidden;\\n}\\n\\n.scrolling.undetached.dimmable .ui.scrolling.modal:not(.fullscreen) {\\n  position: absolute;\\n  left: 50%;\\n  margin-top: 1rem !important;\\n}\\n\\n/* Scrolling Content */\\n\\n.ui.modal > .scrolling.content {\\n  max-height: calc(80vh - 10rem);\\n  overflow: auto;\\n}\\n\\n.ui.overlay.fullscreen.modal > .content {\\n  min-height: calc(100vh - 9.1rem);\\n}\\n\\n.ui.overlay.fullscreen.modal > .scrolling.content {\\n  max-height: calc(100vh - 9.1rem);\\n}\\n\\n/*--------------\\n   Full Screen\\n---------------*/\\n\\n.ui.fullscreen.modal {\\n  width: 95%;\\n  left: 2.5%;\\n  margin: 1em auto;\\n}\\n\\n.ui.overlay.fullscreen.modal {\\n  width: 100%;\\n  left: 0;\\n  margin: 0 auto;\\n  top: 0;\\n  border-radius: 0;\\n}\\n\\n.ui.fullscreen.modal > .header {\\n  padding-right: 2.25rem;\\n}\\n\\n.ui.fullscreen.modal > .close {\\n  top: 1.0535rem;\\n  right: 1rem;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.basic.fullscreen.modal > .close {\\n  color: #FFFFFF;\\n}\\n\\n/*--------------\\n      Size\\n---------------*/\\n\\n.ui.modal {\\n  font-size: 1rem;\\n}\\n\\n/* Mini */\\n\\n.ui.mini.modal > .header:not(.ui) {\\n  font-size: 1.3em;\\n}\\n\\n/* Mini Modal Width */\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.mini.modal {\\n    width: 95%;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n@media only screen and (min-width: 768px) {\\n  .ui.mini.modal {\\n    width: 35.2%;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n@media only screen and (min-width: 992px) {\\n  .ui.mini.modal {\\n    width: 340px;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n@media only screen and (min-width: 1200px) {\\n  .ui.mini.modal {\\n    width: 360px;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n@media only screen and (min-width: 1920px) {\\n  .ui.mini.modal {\\n    width: 380px;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n/* Tiny */\\n\\n.ui.tiny.modal > .header:not(.ui) {\\n  font-size: 1.3em;\\n}\\n\\n/* Tiny Modal Width */\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.tiny.modal {\\n    width: 95%;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n@media only screen and (min-width: 768px) {\\n  .ui.tiny.modal {\\n    width: 52.8%;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n@media only screen and (min-width: 992px) {\\n  .ui.tiny.modal {\\n    width: 510px;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n@media only screen and (min-width: 1200px) {\\n  .ui.tiny.modal {\\n    width: 540px;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n@media only screen and (min-width: 1920px) {\\n  .ui.tiny.modal {\\n    width: 570px;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n/* Small */\\n\\n.ui.small.modal > .header:not(.ui) {\\n  font-size: 1.3em;\\n}\\n\\n/* Small Modal Width */\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.small.modal {\\n    width: 95%;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n@media only screen and (min-width: 768px) {\\n  .ui.small.modal {\\n    width: 70.4%;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n@media only screen and (min-width: 992px) {\\n  .ui.small.modal {\\n    width: 680px;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n@media only screen and (min-width: 1200px) {\\n  .ui.small.modal {\\n    width: 720px;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n@media only screen and (min-width: 1920px) {\\n  .ui.small.modal {\\n    width: 760px;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n/* Large Modal Width */\\n\\n.ui.large.modal > .header {\\n  font-size: 1.6em;\\n}\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.large.modal {\\n    width: 95%;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n@media only screen and (min-width: 768px) {\\n  .ui.large.modal {\\n    width: 88%;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n@media only screen and (min-width: 992px) {\\n  .ui.large.modal {\\n    width: 1020px;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n@media only screen and (min-width: 1200px) {\\n  .ui.large.modal {\\n    width: 1080px;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n@media only screen and (min-width: 1920px) {\\n  .ui.large.modal {\\n    width: 1140px;\\n    margin: 0 0 0 0;\\n  }\\n}\\n\\n/*****************************\\n          Inverted\\n*******************************/\\n\\n.ui.inverted.modal {\\n  background: rgba(0, 0, 0, 0.9);\\n}\\n\\n.ui.inverted.modal > .header,\\n.ui.inverted.modal > .content {\\n  background: rgba(0, 0, 0, 0.9);\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.modal > .actions {\\n  background: #191A1B;\\n  border-top: 1px solid rgba(34, 36, 38, 0.85);\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.dimmer > .modal > .close {\\n  color: rgba(0, 0, 0, 0.85);\\n}\\n\\n@media only screen and (max-width: 991.98px) {\\n  .ui.dimmer .inverted.modal > .close {\\n    color: #FFFFFF;\\n  }\\n}\\n\\n.ui.inverted.fullscreen.modal > .close {\\n  color: #FFFFFF;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Nag\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n             Nag\\n*******************************/\\n\\n.ui.nag {\\n  display: none;\\n  opacity: 0.95;\\n  position: relative;\\n  top: 0;\\n  left: 0;\\n  z-index: 999;\\n  min-height: 0;\\n  width: 100%;\\n  margin: 0;\\n  padding: 0.75em 1em;\\n  background: #555555;\\n  -webkit-box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.2);\\n          box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.2);\\n  font-size: 1rem;\\n  text-align: center;\\n  color: rgba(0, 0, 0, 0.87);\\n  border-radius: 0 0 0.28571429rem 0.28571429rem;\\n  -webkit-transition: 0.2s background ease;\\n  transition: 0.2s background ease;\\n}\\n\\na.ui.nag {\\n  cursor: pointer;\\n}\\n\\n.ui.nag > .title {\\n  display: inline-block;\\n  margin: 0 0.5em;\\n  color: #FFFFFF;\\n}\\n\\n.ui.nag > .close.icon {\\n  cursor: pointer;\\n  opacity: 0.4;\\n  position: absolute;\\n  top: 50%;\\n  right: 1em;\\n  font-size: 1em;\\n  margin: -0.5em 0 0;\\n  color: #FFFFFF;\\n  -webkit-transition: opacity 0.2s ease;\\n  transition: opacity 0.2s ease;\\n}\\n\\n/*******************************\\n             States\\n*******************************/\\n\\n/* Hover */\\n\\n.ui.nag:hover {\\n  background: #555555;\\n  opacity: 1;\\n}\\n\\n.ui.nag .close:hover {\\n  opacity: 1;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*--------------\\n     Static\\n---------------*/\\n\\n.ui.overlay.nag {\\n  position: absolute;\\n  display: block;\\n}\\n\\n/*--------------\\n     Fixed\\n---------------*/\\n\\n.ui.fixed.nag {\\n  position: fixed;\\n}\\n\\n/*--------------\\n     Bottom\\n---------------*/\\n\\n.ui.bottom.nags,\\n.ui.bottom.nag {\\n  border-radius: 0.28571429rem 0.28571429rem 0 0;\\n  top: auto;\\n  bottom: 0;\\n}\\n\\n/*--------------\\n     White\\n---------------*/\\n\\n.ui.inverted.nags .nag,\\n.ui.inverted.nag {\\n  background-color: #F3F4F5;\\n  color: rgba(0, 0, 0, 0.85);\\n}\\n\\n.ui.inverted.nags .nag .close,\\n.ui.inverted.nags .nag .title,\\n.ui.inverted.nag .close,\\n.ui.inverted.nag .title {\\n  color: rgba(0, 0, 0, 0.4);\\n}\\n\\n/*******************************\\n           Groups\\n*******************************/\\n\\n.ui.nags .nag {\\n  border-radius: 0 !important;\\n}\\n\\n.ui.nags .nag:last-child {\\n  border-radius: 0 0 0.28571429rem 0.28571429rem;\\n}\\n\\n.ui.bottom.nags .nag:last-child {\\n  border-radius: 0.28571429rem 0.28571429rem 0 0;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n        User Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Popup\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Popup\\n*******************************/\\n\\n.ui.popup {\\n  display: none;\\n  position: absolute;\\n  top: 0;\\n  right: 0;\\n  /* Fixes content being squished when inline (moz only) */\\n  min-width: -webkit-min-content;\\n  min-width: -moz-min-content;\\n  min-width: min-content;\\n  z-index: 1900;\\n  border: 1px solid #D4D4D5;\\n  line-height: 1.4285em;\\n  max-width: 250px;\\n  background: #FFFFFF;\\n  padding: 0.833em 1em;\\n  font-weight: normal;\\n  font-style: normal;\\n  color: rgba(0, 0, 0, 0.87);\\n  border-radius: 0.28571429rem;\\n  -webkit-box-shadow: 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.popup > .header {\\n  padding: 0;\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  font-size: 1.14285714em;\\n  line-height: 1.2;\\n  font-weight: bold;\\n}\\n\\n.ui.popup > .header + .content {\\n  padding-top: 0.5em;\\n}\\n\\n.ui.popup:before {\\n  position: absolute;\\n  content: '';\\n  width: 0.71428571em;\\n  height: 0.71428571em;\\n  background: #FFFFFF;\\n  -webkit-transform: rotate(45deg);\\n  transform: rotate(45deg);\\n  z-index: 1901;\\n  -webkit-box-shadow: 1px 1px 0 0 #bababc;\\n          box-shadow: 1px 1px 0 0 #bababc;\\n}\\n\\n/*******************************\\n            Types\\n*******************************/\\n\\n/*--------------\\n    Tooltip\\n---------------*/\\n\\n/* Content */\\n\\n[data-tooltip] {\\n  position: relative;\\n}\\n\\n/* Arrow */\\n\\n[data-tooltip]:before {\\n  pointer-events: none;\\n  position: absolute;\\n  content: '';\\n  font-size: 1rem;\\n  width: 0.71428571em;\\n  height: 0.71428571em;\\n  background: #FFFFFF;\\n  -webkit-transform: rotate(45deg);\\n  transform: rotate(45deg);\\n  z-index: 1901;\\n  -webkit-box-shadow: 1px 1px 0 0 #bababc;\\n          box-shadow: 1px 1px 0 0 #bababc;\\n}\\n\\n/* Popup */\\n\\n[data-tooltip]:after {\\n  pointer-events: none;\\n  content: attr(data-tooltip);\\n  position: absolute;\\n  text-transform: none;\\n  text-align: left;\\n  white-space: nowrap;\\n  font-size: 1rem;\\n  border: 1px solid #D4D4D5;\\n  line-height: 1.4285em;\\n  max-width: none;\\n  background: #FFFFFF;\\n  padding: 0.833em 1em;\\n  font-weight: normal;\\n  font-style: normal;\\n  color: rgba(0, 0, 0, 0.87);\\n  border-radius: 0.28571429rem;\\n  -webkit-box-shadow: 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n  z-index: 1900;\\n}\\n\\n/* Default Position (Top Center) */\\n\\n[data-tooltip]:not([data-position]):before {\\n  top: auto;\\n  right: auto;\\n  bottom: 100%;\\n  left: 50%;\\n  background: #FFFFFF;\\n  margin-left: -0.07142857rem;\\n  margin-bottom: 0.14285714rem;\\n}\\n\\n[data-tooltip]:not([data-position]):after {\\n  left: 50%;\\n  -webkit-transform: translateX(-50%);\\n  transform: translateX(-50%);\\n  bottom: 100%;\\n  margin-bottom: 0.5em;\\n}\\n\\n/* Animation */\\n\\n[data-tooltip]:before,\\n[data-tooltip]:after {\\n  pointer-events: none;\\n  visibility: hidden;\\n}\\n\\n[data-tooltip]:before {\\n  opacity: 0;\\n  -webkit-transform: rotate(45deg) scale(0) !important;\\n  transform: rotate(45deg) scale(0) !important;\\n  -webkit-transform-origin: center top;\\n  transform-origin: center top;\\n  -webkit-transition: all 0.1s ease;\\n  transition: all 0.1s ease;\\n}\\n\\n[data-tooltip]:after {\\n  opacity: 1;\\n  -webkit-transform-origin: center bottom;\\n  transform-origin: center bottom;\\n  -webkit-transition: all 0.1s ease;\\n  transition: all 0.1s ease;\\n}\\n\\n[data-tooltip]:hover:before,\\n[data-tooltip]:hover:after {\\n  visibility: visible;\\n  pointer-events: auto;\\n}\\n\\n[data-tooltip]:hover:before {\\n  -webkit-transform: rotate(45deg) scale(1) !important;\\n  transform: rotate(45deg) scale(1) !important;\\n  opacity: 1;\\n}\\n\\n/* Animation Position */\\n\\n[data-tooltip]:after,\\n[data-tooltip][data-position=\\\"top center\\\"]:after,\\n[data-tooltip][data-position=\\\"bottom center\\\"]:after {\\n  -webkit-transform: translateX(-50%) scale(0) !important;\\n  transform: translateX(-50%) scale(0) !important;\\n}\\n\\n[data-tooltip]:hover:after,\\n[data-tooltip][data-position=\\\"bottom center\\\"]:hover:after {\\n  -webkit-transform: translateX(-50%) scale(1) !important;\\n  transform: translateX(-50%) scale(1) !important;\\n}\\n\\n[data-tooltip][data-position=\\\"left center\\\"]:after,\\n[data-tooltip][data-position=\\\"right center\\\"]:after {\\n  -webkit-transform: translateY(-50%) scale(0) !important;\\n  transform: translateY(-50%) scale(0) !important;\\n}\\n\\n[data-tooltip][data-position=\\\"left center\\\"]:hover:after,\\n[data-tooltip][data-position=\\\"right center\\\"]:hover:after {\\n  -webkit-transform: translateY(-50%) scale(1) !important;\\n  transform: translateY(-50%) scale(1) !important;\\n}\\n\\n[data-tooltip][data-position=\\\"top left\\\"]:after,\\n[data-tooltip][data-position=\\\"top right\\\"]:after,\\n[data-tooltip][data-position=\\\"bottom left\\\"]:after,\\n[data-tooltip][data-position=\\\"bottom right\\\"]:after {\\n  -webkit-transform: scale(0) !important;\\n  transform: scale(0) !important;\\n}\\n\\n[data-tooltip][data-position=\\\"top left\\\"]:hover:after,\\n[data-tooltip][data-position=\\\"top right\\\"]:hover:after,\\n[data-tooltip][data-position=\\\"bottom left\\\"]:hover:after,\\n[data-tooltip][data-position=\\\"bottom right\\\"]:hover:after {\\n  -webkit-transform: scale(1) !important;\\n  transform: scale(1) !important;\\n}\\n\\n/*--------------\\n    Inverted\\n---------------*/\\n\\n/* Arrow */\\n\\n[data-tooltip][data-inverted]:before {\\n  -webkit-box-shadow: none !important;\\n          box-shadow: none !important;\\n}\\n\\n/* Arrow Position */\\n\\n[data-tooltip][data-inverted]:before {\\n  background: #1B1C1D;\\n}\\n\\n/* Popup  */\\n\\n[data-tooltip][data-inverted]:after {\\n  background: #1B1C1D;\\n  color: #FFFFFF;\\n  border: none;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n[data-tooltip][data-inverted]:after .header {\\n  background: none;\\n  color: #FFFFFF;\\n}\\n\\n/*--------------\\n    Position\\n---------------*/\\n\\n/* Top Center */\\n\\n[data-position=\\\"top center\\\"][data-tooltip]:after {\\n  top: auto;\\n  right: auto;\\n  left: 50%;\\n  bottom: 100%;\\n  -webkit-transform: translateX(-50%);\\n  transform: translateX(-50%);\\n  margin-bottom: 0.5em;\\n}\\n\\n[data-position=\\\"top center\\\"][data-tooltip]:before {\\n  top: auto;\\n  right: auto;\\n  bottom: 100%;\\n  left: 50%;\\n  background: #FFFFFF;\\n  margin-left: -0.07142857rem;\\n  margin-bottom: 0.14285714rem;\\n}\\n\\n/* Top Left */\\n\\n[data-position=\\\"top left\\\"][data-tooltip]:after {\\n  top: auto;\\n  right: auto;\\n  left: 0;\\n  bottom: 100%;\\n  margin-bottom: 0.5em;\\n}\\n\\n[data-position=\\\"top left\\\"][data-tooltip]:before {\\n  top: auto;\\n  right: auto;\\n  bottom: 100%;\\n  left: 1em;\\n  margin-left: -0.07142857rem;\\n  margin-bottom: 0.14285714rem;\\n}\\n\\n/* Top Right */\\n\\n[data-position=\\\"top right\\\"][data-tooltip]:after {\\n  top: auto;\\n  left: auto;\\n  right: 0;\\n  bottom: 100%;\\n  margin-bottom: 0.5em;\\n}\\n\\n[data-position=\\\"top right\\\"][data-tooltip]:before {\\n  top: auto;\\n  left: auto;\\n  bottom: 100%;\\n  right: 1em;\\n  margin-left: -0.07142857rem;\\n  margin-bottom: 0.14285714rem;\\n}\\n\\n/* Bottom Center */\\n\\n[data-position=\\\"bottom center\\\"][data-tooltip]:after {\\n  bottom: auto;\\n  right: auto;\\n  left: 50%;\\n  top: 100%;\\n  -webkit-transform: translateX(-50%);\\n  transform: translateX(-50%);\\n  margin-top: 0.5em;\\n}\\n\\n[data-position=\\\"bottom center\\\"][data-tooltip]:before {\\n  bottom: auto;\\n  right: auto;\\n  top: 100%;\\n  left: 50%;\\n  margin-left: -0.07142857rem;\\n  margin-top: 0.14285714rem;\\n}\\n\\n/* Bottom Left */\\n\\n[data-position=\\\"bottom left\\\"][data-tooltip]:after {\\n  left: 0;\\n  top: 100%;\\n  margin-top: 0.5em;\\n}\\n\\n[data-position=\\\"bottom left\\\"][data-tooltip]:before {\\n  bottom: auto;\\n  right: auto;\\n  top: 100%;\\n  left: 1em;\\n  margin-left: -0.07142857rem;\\n  margin-top: 0.14285714rem;\\n}\\n\\n/* Bottom Right */\\n\\n[data-position=\\\"bottom right\\\"][data-tooltip]:after {\\n  right: 0;\\n  top: 100%;\\n  margin-top: 0.5em;\\n}\\n\\n[data-position=\\\"bottom right\\\"][data-tooltip]:before {\\n  bottom: auto;\\n  left: auto;\\n  top: 100%;\\n  right: 1em;\\n  margin-left: -0.14285714rem;\\n  margin-top: 0.07142857rem;\\n}\\n\\n/* Left Center */\\n\\n[data-position=\\\"left center\\\"][data-tooltip]:after {\\n  right: 100%;\\n  top: 50%;\\n  margin-right: 0.5em;\\n  -webkit-transform: translateY(-50%);\\n  transform: translateY(-50%);\\n}\\n\\n[data-position=\\\"left center\\\"][data-tooltip]:before {\\n  right: 100%;\\n  top: 50%;\\n  margin-top: -0.14285714rem;\\n  margin-right: -0.07142857rem;\\n}\\n\\n/* Right Center */\\n\\n[data-position=\\\"right center\\\"][data-tooltip]:after {\\n  left: 100%;\\n  top: 50%;\\n  margin-left: 0.5em;\\n  -webkit-transform: translateY(-50%);\\n  transform: translateY(-50%);\\n}\\n\\n[data-position=\\\"right center\\\"][data-tooltip]:before {\\n  left: 100%;\\n  top: 50%;\\n  margin-top: -0.07142857rem;\\n  margin-left: 0.14285714rem;\\n}\\n\\n/* Arrow */\\n\\n[data-position~=\\\"bottom\\\"][data-tooltip]:before {\\n  background: #FFFFFF;\\n  -webkit-box-shadow: -1px -1px 0 0 #bababc;\\n          box-shadow: -1px -1px 0 0 #bababc;\\n}\\n\\n[data-position=\\\"left center\\\"][data-tooltip]:before {\\n  background: #FFFFFF;\\n  -webkit-box-shadow: 1px -1px 0 0 #bababc;\\n          box-shadow: 1px -1px 0 0 #bababc;\\n}\\n\\n[data-position=\\\"right center\\\"][data-tooltip]:before {\\n  background: #FFFFFF;\\n  -webkit-box-shadow: -1px 1px 0 0 #bababc;\\n          box-shadow: -1px 1px 0 0 #bababc;\\n}\\n\\n[data-position~=\\\"top\\\"][data-tooltip]:before {\\n  background: #FFFFFF;\\n}\\n\\n/* Inverted Arrow Color */\\n\\n[data-inverted][data-position~=\\\"bottom\\\"][data-tooltip]:before {\\n  background: #1B1C1D;\\n  -webkit-box-shadow: -1px -1px 0 0 #bababc;\\n          box-shadow: -1px -1px 0 0 #bababc;\\n}\\n\\n[data-inverted][data-position=\\\"left center\\\"][data-tooltip]:before {\\n  background: #1B1C1D;\\n  -webkit-box-shadow: 1px -1px 0 0 #bababc;\\n          box-shadow: 1px -1px 0 0 #bababc;\\n}\\n\\n[data-inverted][data-position=\\\"right center\\\"][data-tooltip]:before {\\n  background: #1B1C1D;\\n  -webkit-box-shadow: -1px 1px 0 0 #bababc;\\n          box-shadow: -1px 1px 0 0 #bababc;\\n}\\n\\n[data-inverted][data-position~=\\\"top\\\"][data-tooltip]:before {\\n  background: #1B1C1D;\\n}\\n\\n[data-position~=\\\"bottom\\\"][data-tooltip]:before {\\n  -webkit-transform-origin: center bottom;\\n  transform-origin: center bottom;\\n}\\n\\n[data-position~=\\\"bottom\\\"][data-tooltip]:after {\\n  -webkit-transform-origin: center top;\\n  transform-origin: center top;\\n}\\n\\n[data-position=\\\"left center\\\"][data-tooltip]:before {\\n  -webkit-transform-origin: top center;\\n  transform-origin: top center;\\n}\\n\\n[data-position=\\\"left center\\\"][data-tooltip]:after {\\n  -webkit-transform-origin: right center;\\n  transform-origin: right center;\\n}\\n\\n[data-position=\\\"right center\\\"][data-tooltip]:before {\\n  -webkit-transform-origin: right center;\\n  transform-origin: right center;\\n}\\n\\n[data-position=\\\"right center\\\"][data-tooltip]:after {\\n  -webkit-transform-origin: left center;\\n  transform-origin: left center;\\n}\\n\\n/*--------------\\n    Size\\n---------------*/\\n\\n[data-tooltip][data-variation~=\\\"mini\\\"]:before,\\n[data-tooltip][data-variation~=\\\"mini\\\"]:after {\\n  font-size: 0.78571429rem;\\n}\\n\\n[data-tooltip][data-variation~=\\\"tiny\\\"]:before,\\n[data-tooltip][data-variation~=\\\"tiny\\\"]:after {\\n  font-size: 0.85714286rem;\\n}\\n\\n[data-tooltip][data-variation~=\\\"small\\\"]:before,\\n[data-tooltip][data-variation~=\\\"small\\\"]:after {\\n  font-size: 0.92857143rem;\\n}\\n\\n[data-tooltip][data-variation~=\\\"medium\\\"]:before,\\n[data-tooltip][data-variation~=\\\"medium\\\"]:after {\\n  font-size: 1rem;\\n}\\n\\n[data-tooltip][data-variation~=\\\"large\\\"]:before,\\n[data-tooltip][data-variation~=\\\"large\\\"]:after {\\n  font-size: 1.14285714rem;\\n}\\n\\n[data-tooltip][data-variation~=\\\"huge\\\"]:before,\\n[data-tooltip][data-variation~=\\\"huge\\\"]:after {\\n  font-size: 1.42857143rem;\\n}\\n\\n/*--------------\\n    Basic\\n---------------*/\\n\\n[data-tooltip][data-variation~=\\\"basic\\\"]:before {\\n  display: none;\\n}\\n\\n/*--------------\\n     Spacing\\n---------------*/\\n\\n.ui.popup {\\n  margin: 0;\\n}\\n\\n/* Extending from Top */\\n\\n.ui.top.popup {\\n  margin: 0 0 0.71428571em;\\n}\\n\\n.ui.top.left.popup {\\n  -webkit-transform-origin: left bottom;\\n  transform-origin: left bottom;\\n}\\n\\n.ui.top.center.popup {\\n  -webkit-transform-origin: center bottom;\\n  transform-origin: center bottom;\\n}\\n\\n.ui.top.right.popup {\\n  -webkit-transform-origin: right bottom;\\n  transform-origin: right bottom;\\n}\\n\\n/* Extending from Vertical Center */\\n\\n.ui.left.center.popup {\\n  margin: 0 0.71428571em 0 0;\\n  -webkit-transform-origin: right 50%;\\n  transform-origin: right 50%;\\n}\\n\\n.ui.right.center.popup {\\n  margin: 0 0 0 0.71428571em;\\n  -webkit-transform-origin: left 50%;\\n  transform-origin: left 50%;\\n}\\n\\n/* Extending from Bottom */\\n\\n.ui.bottom.popup {\\n  margin: 0.71428571em 0 0;\\n}\\n\\n.ui.bottom.left.popup {\\n  -webkit-transform-origin: left top;\\n  transform-origin: left top;\\n}\\n\\n.ui.bottom.center.popup {\\n  -webkit-transform-origin: center top;\\n  transform-origin: center top;\\n}\\n\\n.ui.bottom.right.popup {\\n  -webkit-transform-origin: right top;\\n  transform-origin: right top;\\n}\\n\\n/*--------------\\n     Pointer\\n---------------*/\\n\\n/*--- Below ---*/\\n\\n.ui.bottom.center.popup:before {\\n  margin-left: -0.30714286em;\\n  top: -0.30714286em;\\n  left: 50%;\\n  right: auto;\\n  bottom: auto;\\n  -webkit-box-shadow: -1px -1px 0 0 #bababc;\\n          box-shadow: -1px -1px 0 0 #bababc;\\n}\\n\\n.ui.bottom.left.popup {\\n  margin-left: 0;\\n}\\n\\n/*rtl:rename*/\\n\\n.ui.bottom.left.popup:before {\\n  top: -0.30714286em;\\n  left: 1em;\\n  right: auto;\\n  bottom: auto;\\n  margin-left: 0;\\n  -webkit-box-shadow: -1px -1px 0 0 #bababc;\\n          box-shadow: -1px -1px 0 0 #bababc;\\n}\\n\\n.ui.bottom.right.popup {\\n  margin-right: 0;\\n}\\n\\n/*rtl:rename*/\\n\\n.ui.bottom.right.popup:before {\\n  top: -0.30714286em;\\n  right: 1em;\\n  bottom: auto;\\n  left: auto;\\n  margin-left: 0;\\n  -webkit-box-shadow: -1px -1px 0 0 #bababc;\\n          box-shadow: -1px -1px 0 0 #bababc;\\n}\\n\\n/*--- Above ---*/\\n\\n.ui.top.center.popup:before {\\n  top: auto;\\n  right: auto;\\n  bottom: -0.30714286em;\\n  left: 50%;\\n  margin-left: -0.30714286em;\\n}\\n\\n.ui.top.left.popup {\\n  margin-left: 0;\\n}\\n\\n/*rtl:rename*/\\n\\n.ui.top.left.popup:before {\\n  bottom: -0.30714286em;\\n  left: 1em;\\n  top: auto;\\n  right: auto;\\n  margin-left: 0;\\n}\\n\\n.ui.top.right.popup {\\n  margin-right: 0;\\n}\\n\\n/*rtl:rename*/\\n\\n.ui.top.right.popup:before {\\n  bottom: -0.30714286em;\\n  right: 1em;\\n  top: auto;\\n  left: auto;\\n  margin-left: 0;\\n}\\n\\n/*--- Left Center ---*/\\n\\n/*rtl:rename*/\\n\\n.ui.left.center.popup:before {\\n  top: 50%;\\n  right: -0.30714286em;\\n  bottom: auto;\\n  left: auto;\\n  margin-top: -0.30714286em;\\n  -webkit-box-shadow: 1px -1px 0 0 #bababc;\\n          box-shadow: 1px -1px 0 0 #bababc;\\n}\\n\\n/*--- Right Center  ---*/\\n\\n/*rtl:rename*/\\n\\n.ui.right.center.popup:before {\\n  top: 50%;\\n  left: -0.30714286em;\\n  bottom: auto;\\n  right: auto;\\n  margin-top: -0.30714286em;\\n  -webkit-box-shadow: -1px 1px 0 0 #bababc;\\n          box-shadow: -1px 1px 0 0 #bababc;\\n}\\n\\n/* Arrow Color By Location */\\n\\n.ui.bottom.popup:before {\\n  background: #FFFFFF;\\n}\\n\\n.ui.right.center.popup:before,\\n.ui.left.center.popup:before {\\n  background: #FFFFFF;\\n}\\n\\n.ui.top.popup:before {\\n  background: #FFFFFF;\\n}\\n\\n/* Inverted Arrow Color */\\n\\n.ui.inverted.bottom.popup:before {\\n  background: #1B1C1D;\\n}\\n\\n.ui.inverted.right.center.popup:before,\\n.ui.inverted.left.center.popup:before {\\n  background: #1B1C1D;\\n}\\n\\n.ui.inverted.top.popup:before {\\n  background: #1B1C1D;\\n}\\n\\n/*******************************\\n            Coupling\\n*******************************/\\n\\n/* Immediate Nested Grid */\\n\\n.ui.popup > .ui.grid:not(.padded) {\\n  width: calc(100% + 1.75rem);\\n  margin: -0.7rem -0.875rem;\\n}\\n\\n/*******************************\\n            States\\n*******************************/\\n\\n.ui.loading.popup {\\n  display: block;\\n  visibility: hidden;\\n  z-index: -1;\\n}\\n\\n.ui.animating.popup,\\n.ui.visible.popup {\\n  display: block;\\n}\\n\\n.ui.visible.popup {\\n  -webkit-transform: translateZ(0);\\n  transform: translateZ(0);\\n  -webkit-backface-visibility: hidden;\\n  backface-visibility: hidden;\\n}\\n\\n/*******************************\\n            Variations\\n*******************************/\\n\\n/*--------------\\n     Basic\\n---------------*/\\n\\n.ui.basic.popup:before {\\n  display: none;\\n}\\n\\n/*--------------\\n     Wide\\n---------------*/\\n\\n.ui.wide.popup {\\n  max-width: 350px;\\n}\\n\\n.ui[class*=\\\"very wide\\\"].popup {\\n  max-width: 550px;\\n}\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.wide.popup,\\n  .ui[class*=\\\"very wide\\\"].popup {\\n    max-width: 250px;\\n  }\\n}\\n\\n/*--------------\\n     Fluid\\n---------------*/\\n\\n.ui.fluid.popup {\\n  width: 100%;\\n  max-width: none;\\n}\\n\\n/*--------------\\n     Colors\\n---------------*/\\n\\n/* Inverted colors  */\\n\\n.ui.inverted.popup {\\n  background: #1B1C1D;\\n  color: #FFFFFF;\\n  border: none;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.inverted.popup .header {\\n  background-color: none;\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.popup:before {\\n  background-color: #1B1C1D;\\n  -webkit-box-shadow: none !important;\\n          box-shadow: none !important;\\n}\\n\\n/*--------------\\n     Flowing\\n---------------*/\\n\\n.ui.flowing.popup {\\n  max-width: none;\\n}\\n\\n/*--------------\\n     Sizes\\n---------------*/\\n\\n.ui.mini.popup {\\n  font-size: 0.78571429rem;\\n}\\n\\n.ui.tiny.popup {\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.small.popup {\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.popup {\\n  font-size: 1rem;\\n}\\n\\n.ui.large.popup {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.huge.popup {\\n  font-size: 1.42857143rem;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n        User Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Progress Bar\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Progress\\n*******************************/\\n\\n.ui.progress {\\n  position: relative;\\n  display: block;\\n  max-width: 100%;\\n  border: none;\\n  margin: 1em 0 2.5em;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  background: rgba(0, 0, 0, 0.1);\\n  padding: 0;\\n  border-radius: 0.28571429rem;\\n}\\n\\n.ui.progress:first-child {\\n  margin: 0 0 2.5em;\\n}\\n\\n.ui.progress:last-child {\\n  margin: 0 0 1.5em;\\n}\\n\\n/*******************************\\n            Content\\n*******************************/\\n\\n/* Activity Bar */\\n\\n.ui.progress .bar {\\n  display: block;\\n  line-height: 1;\\n  position: relative;\\n  width: 0;\\n  min-width: 2em;\\n  background: #888888;\\n  border-radius: 0.28571429rem;\\n  -webkit-transition: width 0.1s ease, background-color 0.1s ease;\\n  transition: width 0.1s ease, background-color 0.1s ease;\\n  overflow: hidden;\\n}\\n\\n.ui.ui.ui.progress:not([data-percent]):not(.indeterminate) .bar,\\n.ui.ui.ui.progress[data-percent=\\\"0\\\"]:not(.indeterminate) .bar {\\n  background: transparent;\\n}\\n\\n.ui.progress[data-percent=\\\"0\\\"] .bar .progress {\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.inverted.progress[data-percent=\\\"0\\\"] .bar .progress {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n/* Percent Complete */\\n\\n.ui.progress .bar > .progress {\\n  white-space: nowrap;\\n  position: absolute;\\n  width: auto;\\n  font-size: 0.92857143em;\\n  top: 50%;\\n  right: 0.5em;\\n  left: auto;\\n  bottom: auto;\\n  color: rgba(255, 255, 255, 0.7);\\n  text-shadow: none;\\n  margin-top: -0.5em;\\n  font-weight: bold;\\n  text-align: left;\\n}\\n\\n/* Label */\\n\\n.ui.progress > .label {\\n  position: absolute;\\n  width: 100%;\\n  font-size: 1em;\\n  top: 100%;\\n  right: auto;\\n  left: 0;\\n  bottom: auto;\\n  color: rgba(0, 0, 0, 0.87);\\n  font-weight: bold;\\n  text-shadow: none;\\n  margin-top: 0.2em;\\n  text-align: center;\\n  -webkit-transition: color 0.4s ease;\\n  transition: color 0.4s ease;\\n}\\n\\n/*******************************\\n            Types\\n*******************************/\\n\\n/* Indicating */\\n\\n.ui.indicating.progress[data-percent^=\\\"1\\\"] .bar,\\n.ui.indicating.progress[data-percent^=\\\"2\\\"] .bar {\\n  background-color: #D95C5C;\\n}\\n\\n.ui.indicating.progress[data-percent^=\\\"3\\\"] .bar {\\n  background-color: #EFBC72;\\n}\\n\\n.ui.indicating.progress[data-percent^=\\\"4\\\"] .bar,\\n.ui.indicating.progress[data-percent^=\\\"5\\\"] .bar {\\n  background-color: #E6BB48;\\n}\\n\\n.ui.indicating.progress[data-percent^=\\\"6\\\"] .bar {\\n  background-color: #DDC928;\\n}\\n\\n.ui.indicating.progress[data-percent^=\\\"7\\\"] .bar,\\n.ui.indicating.progress[data-percent^=\\\"8\\\"] .bar {\\n  background-color: #B4D95C;\\n}\\n\\n.ui.indicating.progress[data-percent^=\\\"9\\\"] .bar,\\n.ui.indicating.progress[data-percent^=\\\"100\\\"] .bar {\\n  background-color: #66DA81;\\n}\\n\\n/* Indicating Label */\\n\\n.ui.indicating.progress[data-percent^=\\\"1\\\"] .label,\\n.ui.indicating.progress[data-percent^=\\\"2\\\"] .label {\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.indicating.progress[data-percent^=\\\"3\\\"] .label {\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.indicating.progress[data-percent^=\\\"4\\\"] .label,\\n.ui.indicating.progress[data-percent^=\\\"5\\\"] .label {\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.indicating.progress[data-percent^=\\\"6\\\"] .label {\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.indicating.progress[data-percent^=\\\"7\\\"] .label,\\n.ui.indicating.progress[data-percent^=\\\"8\\\"] .label {\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.indicating.progress[data-percent^=\\\"9\\\"] .label,\\n.ui.indicating.progress[data-percent^=\\\"100\\\"] .label {\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n/* Inverted Indicating Label */\\n\\n.ui.inverted.indicating.progress[data-percent^=\\\"1\\\"] .label,\\n.ui.inverted.indicating.progress[data-percent^=\\\"2\\\"] .label {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.inverted.indicating.progress[data-percent^=\\\"3\\\"] .label {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.inverted.indicating.progress[data-percent^=\\\"4\\\"] .label,\\n.ui.inverted.indicating.progress[data-percent^=\\\"5\\\"] .label {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.inverted.indicating.progress[data-percent^=\\\"6\\\"] .label {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.inverted.indicating.progress[data-percent^=\\\"7\\\"] .label,\\n.ui.inverted.indicating.progress[data-percent^=\\\"8\\\"] .label {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.ui.inverted.indicating.progress[data-percent^=\\\"9\\\"] .label,\\n.ui.inverted.indicating.progress[data-percent^=\\\"100\\\"] .label {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n/* Single Digits */\\n\\n.ui.indicating.progress[data-percent=\\\"1\\\"] .bar,\\n.ui.indicating.progress[data-percent=\\\"2\\\"] .bar,\\n.ui.indicating.progress[data-percent=\\\"3\\\"] .bar,\\n.ui.indicating.progress[data-percent=\\\"4\\\"] .bar,\\n.ui.indicating.progress[data-percent=\\\"5\\\"] .bar,\\n.ui.indicating.progress[data-percent=\\\"6\\\"] .bar,\\n.ui.indicating.progress[data-percent=\\\"7\\\"] .bar,\\n.ui.indicating.progress[data-percent=\\\"8\\\"] .bar,\\n.ui.indicating.progress[data-percent=\\\"9\\\"] .bar {\\n  background-color: #D95C5C;\\n}\\n\\n.ui.indicating.progress[data-percent=\\\"0\\\"] .label,\\n.ui.indicating.progress[data-percent=\\\"1\\\"] .label,\\n.ui.indicating.progress[data-percent=\\\"2\\\"] .label,\\n.ui.indicating.progress[data-percent=\\\"3\\\"] .label,\\n.ui.indicating.progress[data-percent=\\\"4\\\"] .label,\\n.ui.indicating.progress[data-percent=\\\"5\\\"] .label,\\n.ui.indicating.progress[data-percent=\\\"6\\\"] .label,\\n.ui.indicating.progress[data-percent=\\\"7\\\"] .label,\\n.ui.indicating.progress[data-percent=\\\"8\\\"] .label,\\n.ui.indicating.progress[data-percent=\\\"9\\\"] .label {\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.inverted.indicating.progress[data-percent=\\\"0\\\"] .label,\\n.ui.inverted.indicating.progress[data-percent=\\\"1\\\"] .label,\\n.ui.inverted.indicating.progress[data-percent=\\\"2\\\"] .label,\\n.ui.inverted.indicating.progress[data-percent=\\\"3\\\"] .label,\\n.ui.inverted.indicating.progress[data-percent=\\\"4\\\"] .label,\\n.ui.inverted.indicating.progress[data-percent=\\\"5\\\"] .label,\\n.ui.inverted.indicating.progress[data-percent=\\\"6\\\"] .label,\\n.ui.inverted.indicating.progress[data-percent=\\\"7\\\"] .label,\\n.ui.inverted.indicating.progress[data-percent=\\\"8\\\"] .label,\\n.ui.inverted.indicating.progress[data-percent=\\\"9\\\"] .label {\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n/* Indicating Success */\\n\\n.ui.ui.indicating.progress.success .label {\\n  color: #1A531B;\\n}\\n\\n/* Multiple */\\n\\n.ui.multiple.progress {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n}\\n\\n/*******************************\\n             States\\n*******************************/\\n\\n/*--------------\\n     Success\\n---------------*/\\n\\n.ui.ui.progress.success .bar {\\n  background-color: #21BA45;\\n}\\n\\n.ui.ui.progress.success .bar,\\n.ui.ui.progress.success .bar::after {\\n  -webkit-animation: none;\\n  animation: none;\\n}\\n\\n.ui.progress.success > .label {\\n  color: #1A531B;\\n}\\n\\n/*--------------\\n     Warning\\n---------------*/\\n\\n.ui.ui.progress.warning .bar {\\n  background-color: #F2C037;\\n}\\n\\n.ui.ui.progress.warning .bar,\\n.ui.ui.progress.warning .bar::after {\\n  -webkit-animation: none;\\n  animation: none;\\n}\\n\\n.ui.progress.warning > .label {\\n  color: #794B02;\\n}\\n\\n/*--------------\\n     Error\\n---------------*/\\n\\n.ui.ui.progress.error .bar {\\n  background-color: #DB2828;\\n}\\n\\n.ui.ui.progress.error .bar,\\n.ui.ui.progress.error .bar::after {\\n  -webkit-animation: none;\\n  animation: none;\\n}\\n\\n.ui.progress.error > .label {\\n  color: #912D2B;\\n}\\n\\n/*--------------\\n     Active\\n---------------*/\\n\\n.ui.active.progress .bar {\\n  position: relative;\\n  min-width: 2em;\\n}\\n\\n.ui.active.progress .bar::after {\\n  content: '';\\n  opacity: 0;\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  right: 0;\\n  bottom: 0;\\n  background: #FFFFFF;\\n  border-radius: 0.28571429rem;\\n  -webkit-animation: progress-active 2s ease infinite;\\n  animation: progress-active 2s ease infinite;\\n  -webkit-transform-origin: left;\\n  transform-origin: left;\\n}\\n\\n@-webkit-keyframes progress-active {\\n  0% {\\n    opacity: 0.3;\\n    -webkit-transform: scale(0, 1);\\n    transform: scale(0, 1);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n  }\\n}\\n\\n@keyframes progress-active {\\n  0% {\\n    opacity: 0.3;\\n    -webkit-transform: scale(0, 1);\\n    transform: scale(0, 1);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n  }\\n}\\n\\n/*--------------\\n    Disabled\\n---------------*/\\n\\n.ui.disabled.progress {\\n  opacity: 0.35;\\n}\\n\\n.ui.ui.disabled.progress .bar,\\n.ui.ui.disabled.progress .bar::after {\\n  -webkit-animation: none;\\n  animation: none;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*--------------\\n    Inverted\\n---------------*/\\n\\n.ui.inverted.progress {\\n  background: rgba(255, 255, 255, 0.08);\\n  border: none;\\n}\\n\\n.ui.inverted.progress .bar {\\n  background: #888888;\\n}\\n\\n.ui.inverted.progress .bar > .progress {\\n  color: #1B1C1D;\\n}\\n\\n.ui.inverted.progress > .label {\\n  color: #FFFFFF;\\n}\\n\\n.ui.inverted.progress.success > .label {\\n  color: #21BA45;\\n}\\n\\n.ui.inverted.progress.warning > .label {\\n  color: #F2C037;\\n}\\n\\n.ui.inverted.progress.error > .label {\\n  color: #DB2828;\\n}\\n\\n/*--------------\\n    Attached\\n---------------*/\\n\\n/* bottom attached */\\n\\n.ui.progress.attached {\\n  background: transparent;\\n  position: relative;\\n  border: none;\\n  margin: 0;\\n}\\n\\n.ui.progress.attached,\\n.ui.progress.attached .bar {\\n  display: block;\\n  height: 0.2rem;\\n  padding: 0;\\n  overflow: hidden;\\n  border-radius: 0 0 0.28571429rem 0.28571429rem;\\n}\\n\\n.ui.progress.attached .bar {\\n  border-radius: 0;\\n}\\n\\n/* top attached */\\n\\n.ui.progress.top.attached,\\n.ui.progress.top.attached .bar {\\n  top: 0;\\n  border-radius: 0.28571429rem 0.28571429rem 0 0;\\n}\\n\\n.ui.progress.top.attached .bar {\\n  border-radius: 0;\\n}\\n\\n/* Coupling */\\n\\n.ui.segment > .ui.attached.progress,\\n.ui.card > .ui.attached.progress {\\n  position: absolute;\\n  top: auto;\\n  left: 0;\\n  bottom: 100%;\\n  width: 100%;\\n}\\n\\n.ui.segment > .ui.bottom.attached.progress,\\n.ui.card > .ui.bottom.attached.progress {\\n  top: 100%;\\n  bottom: auto;\\n}\\n\\n/*--------------\\n     Colors\\n---------------*/\\n\\n.ui.indeterminate.primary.progress .bar::before,\\n.ui.primary.progress .bar,\\n.ui.progress .primary.bar {\\n  background-color: #2185D0;\\n}\\n\\n.ui.inverted.indeterminate.primary.progress .bar::before,\\n.ui.primary.inverted.progress .bar,\\n.ui.inverted.progress .primary.bar {\\n  background-color: #54C8FF;\\n}\\n\\n.ui.indeterminate.secondary.progress .bar::before,\\n.ui.secondary.progress .bar,\\n.ui.progress .secondary.bar {\\n  background-color: #1B1C1D;\\n}\\n\\n.ui.inverted.indeterminate.secondary.progress .bar::before,\\n.ui.secondary.inverted.progress .bar,\\n.ui.inverted.progress .secondary.bar {\\n  background-color: #545454;\\n}\\n\\n.ui.indeterminate.red.progress .bar::before,\\n.ui.red.progress .bar,\\n.ui.progress .red.bar {\\n  background-color: #DB2828;\\n}\\n\\n.ui.inverted.indeterminate.red.progress .bar::before,\\n.ui.red.inverted.progress .bar,\\n.ui.inverted.progress .red.bar {\\n  background-color: #FF695E;\\n}\\n\\n.ui.indeterminate.orange.progress .bar::before,\\n.ui.orange.progress .bar,\\n.ui.progress .orange.bar {\\n  background-color: #F2711C;\\n}\\n\\n.ui.inverted.indeterminate.orange.progress .bar::before,\\n.ui.orange.inverted.progress .bar,\\n.ui.inverted.progress .orange.bar {\\n  background-color: #FF851B;\\n}\\n\\n.ui.indeterminate.yellow.progress .bar::before,\\n.ui.yellow.progress .bar,\\n.ui.progress .yellow.bar {\\n  background-color: #FBBD08;\\n}\\n\\n.ui.inverted.indeterminate.yellow.progress .bar::before,\\n.ui.yellow.inverted.progress .bar,\\n.ui.inverted.progress .yellow.bar {\\n  background-color: #FFE21F;\\n}\\n\\n.ui.indeterminate.olive.progress .bar::before,\\n.ui.olive.progress .bar,\\n.ui.progress .olive.bar {\\n  background-color: #B5CC18;\\n}\\n\\n.ui.inverted.indeterminate.olive.progress .bar::before,\\n.ui.olive.inverted.progress .bar,\\n.ui.inverted.progress .olive.bar {\\n  background-color: #D9E778;\\n}\\n\\n.ui.indeterminate.green.progress .bar::before,\\n.ui.green.progress .bar,\\n.ui.progress .green.bar {\\n  background-color: #21BA45;\\n}\\n\\n.ui.inverted.indeterminate.green.progress .bar::before,\\n.ui.green.inverted.progress .bar,\\n.ui.inverted.progress .green.bar {\\n  background-color: #2ECC40;\\n}\\n\\n.ui.indeterminate.teal.progress .bar::before,\\n.ui.teal.progress .bar,\\n.ui.progress .teal.bar {\\n  background-color: #00B5AD;\\n}\\n\\n.ui.inverted.indeterminate.teal.progress .bar::before,\\n.ui.teal.inverted.progress .bar,\\n.ui.inverted.progress .teal.bar {\\n  background-color: #6DFFFF;\\n}\\n\\n.ui.indeterminate.blue.progress .bar::before,\\n.ui.blue.progress .bar,\\n.ui.progress .blue.bar {\\n  background-color: #2185D0;\\n}\\n\\n.ui.inverted.indeterminate.blue.progress .bar::before,\\n.ui.blue.inverted.progress .bar,\\n.ui.inverted.progress .blue.bar {\\n  background-color: #54C8FF;\\n}\\n\\n.ui.indeterminate.violet.progress .bar::before,\\n.ui.violet.progress .bar,\\n.ui.progress .violet.bar {\\n  background-color: #6435C9;\\n}\\n\\n.ui.inverted.indeterminate.violet.progress .bar::before,\\n.ui.violet.inverted.progress .bar,\\n.ui.inverted.progress .violet.bar {\\n  background-color: #A291FB;\\n}\\n\\n.ui.indeterminate.purple.progress .bar::before,\\n.ui.purple.progress .bar,\\n.ui.progress .purple.bar {\\n  background-color: #A333C8;\\n}\\n\\n.ui.inverted.indeterminate.purple.progress .bar::before,\\n.ui.purple.inverted.progress .bar,\\n.ui.inverted.progress .purple.bar {\\n  background-color: #DC73FF;\\n}\\n\\n.ui.indeterminate.pink.progress .bar::before,\\n.ui.pink.progress .bar,\\n.ui.progress .pink.bar {\\n  background-color: #E03997;\\n}\\n\\n.ui.inverted.indeterminate.pink.progress .bar::before,\\n.ui.pink.inverted.progress .bar,\\n.ui.inverted.progress .pink.bar {\\n  background-color: #FF8EDF;\\n}\\n\\n.ui.indeterminate.brown.progress .bar::before,\\n.ui.brown.progress .bar,\\n.ui.progress .brown.bar {\\n  background-color: #A5673F;\\n}\\n\\n.ui.inverted.indeterminate.brown.progress .bar::before,\\n.ui.brown.inverted.progress .bar,\\n.ui.inverted.progress .brown.bar {\\n  background-color: #D67C1C;\\n}\\n\\n.ui.indeterminate.grey.progress .bar::before,\\n.ui.grey.progress .bar,\\n.ui.progress .grey.bar {\\n  background-color: #767676;\\n}\\n\\n.ui.inverted.indeterminate.grey.progress .bar::before,\\n.ui.grey.inverted.progress .bar,\\n.ui.inverted.progress .grey.bar {\\n  background-color: #DCDDDE;\\n}\\n\\n.ui.indeterminate.black.progress .bar::before,\\n.ui.black.progress .bar,\\n.ui.progress .black.bar {\\n  background-color: #1B1C1D;\\n}\\n\\n.ui.inverted.indeterminate.black.progress .bar::before,\\n.ui.black.inverted.progress .bar,\\n.ui.inverted.progress .black.bar {\\n  background-color: #545454;\\n}\\n\\n/*--------------\\n     Sizes\\n---------------*/\\n\\n.ui.tiny.progress {\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.tiny.progress .bar {\\n  height: 0.5em;\\n}\\n\\n.ui.small.progress {\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.small.progress .bar {\\n  height: 1em;\\n}\\n\\n.ui.progress {\\n  font-size: 1rem;\\n}\\n\\n.ui.progress .bar {\\n  height: 1.75em;\\n}\\n\\n.ui.large.progress {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.large.progress .bar {\\n  height: 2.5em;\\n}\\n\\n.ui.big.progress {\\n  font-size: 1.28571429rem;\\n}\\n\\n.ui.big.progress .bar {\\n  height: 3.5em;\\n}\\n\\n/*---------------\\n  Indeterminate\\n----------------*/\\n\\n.ui.indeterminate.progress .bar {\\n  width: 100%;\\n}\\n\\n.ui.indeterminate.progress .bar .progress,\\n.ui.progress .bar .centered.progress {\\n  text-align: center;\\n  position: relative;\\n}\\n\\n.ui.indeterminate.progress .bar::before {\\n  content: '';\\n  position: absolute;\\n  top: 0;\\n  bottom: 0;\\n  border-radius: 0.28571429rem;\\n  -webkit-animation: progress-pulsating 2s ease infinite;\\n  animation: progress-pulsating 2s ease infinite;\\n  -webkit-transform-origin: center;\\n  transform-origin: center;\\n  width: 100%;\\n}\\n\\n.ui.slow.indeterminate.progress .bar::before {\\n  -webkit-animation-duration: 4s;\\n  animation-duration: 4s;\\n}\\n\\n.ui.fast.indeterminate.progress .bar::before {\\n  -webkit-animation-duration: 1s;\\n  animation-duration: 1s;\\n}\\n\\n.ui.swinging.indeterminate.progress .bar::before {\\n  -webkit-transform-origin: left;\\n  transform-origin: left;\\n  -webkit-animation-name: progress-swinging;\\n  animation-name: progress-swinging;\\n}\\n\\n.ui.sliding.indeterminate.progress .bar::before {\\n  -webkit-transform-origin: left;\\n  transform-origin: left;\\n  -webkit-animation-name: progress-sliding;\\n  animation-name: progress-sliding;\\n}\\n\\n.ui.filling.indeterminate.progress .bar::before {\\n  -webkit-animation-name: progress-filling;\\n  animation-name: progress-filling;\\n}\\n\\n.ui.indeterminate.progress:not(.sliding):not(.filling):not(.swinging) .bar::before {\\n  background: #FFFFFF;\\n}\\n\\n.ui.sliding.indeterminate.progress .bar,\\n.ui.swinging.indeterminate.progress .bar,\\n.ui.filling.indeterminate.progress .bar {\\n  background: rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.inverted.sliding.indeterminate.progress .bar,\\n.ui.inverted.swinging.indeterminate.progress .bar,\\n.ui.inverted.filling.indeterminate.progress .bar {\\n  background: rgba(255, 255, 255, 0.08);\\n}\\n\\n.ui.sliding.indeterminate.progress .bar .progress,\\n.ui.swinging.indeterminate.progress .bar .progress {\\n  color: #1B1C1D;\\n}\\n\\n.ui.inverted.sliding.indeterminate.progress .bar .progress,\\n.ui.inverted.swinging.indeterminate.progress .bar .progress {\\n  color: rgba(255, 255, 255, 0.7);\\n}\\n\\n@-webkit-keyframes progress-swinging {\\n  0%, 100% {\\n    width: 10%;\\n    left: -25%;\\n  }\\n\\n  25%, 65% {\\n    width: 70%;\\n  }\\n\\n  50% {\\n    width: 10%;\\n    left: 100%;\\n  }\\n}\\n\\n@keyframes progress-swinging {\\n  0%, 100% {\\n    width: 10%;\\n    left: -25%;\\n  }\\n\\n  25%, 65% {\\n    width: 70%;\\n  }\\n\\n  50% {\\n    width: 10%;\\n    left: 100%;\\n  }\\n}\\n\\n@-webkit-keyframes progress-sliding {\\n  0% {\\n    width: 10%;\\n    left: -25%;\\n  }\\n\\n  50% {\\n    width: 70%;\\n  }\\n\\n  100% {\\n    width: 10%;\\n    left: 100%;\\n  }\\n}\\n\\n@keyframes progress-sliding {\\n  0% {\\n    width: 10%;\\n    left: -25%;\\n  }\\n\\n  50% {\\n    width: 70%;\\n  }\\n\\n  100% {\\n    width: 10%;\\n    left: 100%;\\n  }\\n}\\n\\n@-webkit-keyframes progress-filling {\\n  0% {\\n    -webkit-transform: scale(0, 1);\\n    transform: scale(0, 1);\\n  }\\n\\n  80% {\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n    opacity: 1;\\n  }\\n\\n  100% {\\n    opacity: 0;\\n  }\\n}\\n\\n@keyframes progress-filling {\\n  0% {\\n    -webkit-transform: scale(0, 1);\\n    transform: scale(0, 1);\\n  }\\n\\n  80% {\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n    opacity: 1;\\n  }\\n\\n  100% {\\n    opacity: 0;\\n  }\\n}\\n\\n@-webkit-keyframes progress-pulsating {\\n  0% {\\n    -webkit-transform: scale(0, 1);\\n    transform: scale(0, 1);\\n    opacity: 0.7;\\n  }\\n\\n  100% {\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n    opacity: 0;\\n  }\\n}\\n\\n@keyframes progress-pulsating {\\n  0% {\\n    -webkit-transform: scale(0, 1);\\n    transform: scale(0, 1);\\n    opacity: 0.7;\\n  }\\n\\n  100% {\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n    opacity: 0;\\n  }\\n}\\n\\n/*******************************\\n            Progress\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*******************************\\n             Theme\\n *******************************/\\n\\n.ui.slider:not(.vertical):not(.checkbox) {\\n  width: 100%;\\n  padding: 1em 0.5em;\\n}\\n\\n.ui.slider:not(.checkbox) {\\n  position: relative;\\n}\\n\\n.ui.slider:not(.checkbox):focus {\\n  outline: 0;\\n}\\n\\n.ui.slider .inner {\\n  position: relative;\\n  z-index: 2;\\n}\\n\\n.ui.slider:not(.vertical) .inner {\\n  height: 1.5em;\\n}\\n\\n.ui.slider .inner:hover {\\n  cursor: auto;\\n}\\n\\n.ui.slider .inner .track {\\n  position: absolute;\\n  border-radius: 4px;\\n  background-color: rgba(0, 0, 0, 0.05);\\n}\\n\\n.ui.slider:not(.vertical) .inner .track {\\n  width: 100%;\\n  height: 0.4em;\\n  top: 0.55em;\\n  left: 0;\\n}\\n\\n.ui.slider .inner .track-fill {\\n  position: absolute;\\n  border-radius: 4px;\\n  background-color: #1B1C1D;\\n}\\n\\n.ui.slider:not(.vertical) .inner .track-fill {\\n  height: 0.4em;\\n  top: 0.55em;\\n  left: 0;\\n}\\n\\n.ui.slider .inner .thumb {\\n  position: absolute;\\n  left: 0;\\n  top: 0;\\n  height: 1.5em;\\n  width: 1.5em;\\n  background: #FFFFFF -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\\n  background: #FFFFFF linear-gradient(transparent, rgba(0, 0, 0, 0.05));\\n  border-radius: 100%;\\n  -webkit-box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15), 0 0 0 1px rgba(34, 36, 38, 0.15) inset;\\n          box-shadow: 0 1px 2px 0 rgba(34, 36, 38, 0.15), 0 0 0 1px rgba(34, 36, 38, 0.15) inset;\\n  -webkit-transition: background 0.3s ease;\\n  transition: background 0.3s ease;\\n}\\n\\n.ui.slider:not(.disabled) .inner .thumb:hover {\\n  cursor: pointer;\\n  background: #f2f2f2 -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\\n  background: #f2f2f2 linear-gradient(transparent, rgba(0, 0, 0, 0.05));\\n}\\n\\n.ui.slider:not(.disabled):focus .inner .thumb {\\n  background: #f2f2f2 -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\\n  background: #f2f2f2 linear-gradient(transparent, rgba(0, 0, 0, 0.05));\\n}\\n\\n/*******************************\\n            States\\n*******************************/\\n\\n/*--------------\\n     Disabled\\n---------------*/\\n\\n.ui.disabled.slider:not(.checkbox) {\\n  opacity: 0.5;\\n}\\n\\n.ui.disabled.slider .inner:hover {\\n  cursor: auto;\\n}\\n\\n.ui.disabled.slider .inner .track-fill {\\n  background: #ccc;\\n}\\n\\n/*--------------\\n    Reversed\\n---------------*/\\n\\n.ui.reversed.slider .inner .track-fill {\\n  left: auto;\\n  right: 0;\\n}\\n\\n.ui.reversed.slider .inner .thumb {\\n  left: auto;\\n  right: 0;\\n}\\n\\n.ui.labeled.reversed.slider > .labels .label {\\n  -webkit-transform: translate(-100%, -100%);\\n  transform: translate(-100%, -100%);\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*--------------\\n    Vertical\\n---------------*/\\n\\n.ui.vertical.slider {\\n  height: 100%;\\n  width: 1.5em;\\n  padding: 0.5em 1em;\\n}\\n\\n.ui.vertical.slider .inner {\\n  height: 100%;\\n}\\n\\n.ui.vertical.slider .inner .track {\\n  height: 100%;\\n  width: 0.4em;\\n  left: 0.55em;\\n  top: 0;\\n}\\n\\n.ui.vertical.slider .inner .track-fill {\\n  width: 0.4em;\\n  left: 0.55em;\\n  top: 0;\\n}\\n\\n/* Vertical Reversed */\\n\\n.ui.vertical.reversed.slider .inner .thumb {\\n  top: auto;\\n  bottom: 0;\\n}\\n\\n.ui.vertical.reversed.slider .inner .track-fill {\\n  top: auto;\\n  bottom: 0;\\n}\\n\\n/*--------------\\n    Labeled\\n---------------*/\\n\\n.ui.labeled.slider > .labels {\\n  height: 1.5em;\\n  width: auto;\\n  margin: 0;\\n  padding: 0;\\n  position: absolute;\\n  top: 50%;\\n  left: 0;\\n  right: 0;\\n}\\n\\n.ui.labeled.slider:not(.vertical) > .labels {\\n  -webkit-transform: translateY(-50%);\\n  transform: translateY(-50%);\\n}\\n\\n.ui.labeled.slider > .labels .label {\\n  display: -webkit-inline-box;\\n  display: -ms-inline-flexbox;\\n  display: inline-flex;\\n  position: absolute;\\n  -webkit-transform: translate(-50%, -100%);\\n  transform: translate(-50%, -100%);\\n}\\n\\n.ui.labeled.ticked.slider > .labels .label:after {\\n  content: ' ';\\n  height: 1.5em;\\n  width: 1px;\\n  background: #ccc;\\n  position: absolute;\\n  top: 100%;\\n  left: 50%;\\n}\\n\\n/* Vertical Labels */\\n\\n.ui.labeled.vertical.slider > .labels {\\n  width: 1.5em;\\n  height: auto;\\n  left: 50%;\\n  top: 0;\\n  bottom: 0;\\n  -webkit-transform: translateX(-50%);\\n  transform: translateX(-50%);\\n}\\n\\n.ui.labeled.vertical.slider > .labels .label {\\n  -webkit-transform: translate(-100%, -50%);\\n  transform: translate(-100%, -50%);\\n}\\n\\n.ui.labeled.vertical.slider > .labels .label:after {\\n  width: 1.5em;\\n  height: 1px;\\n  left: 100%;\\n  top: 50%;\\n}\\n\\n/* Vertical Reversed Labels */\\n\\n.ui.labeled.vertical.reversed.slider > .labels .label {\\n  -webkit-transform: translate(-100%, 50%);\\n  transform: translate(-100%, 50%);\\n}\\n\\n/*--------------\\n    Hover\\n---------------*/\\n\\n.ui.hover.slider .inner .thumb {\\n  opacity: 0;\\n  -webkit-transition: opacity 0.2s linear;\\n  transition: opacity 0.2s linear;\\n}\\n\\n.ui.hover.slider:not(.disabled):hover .inner .thumb,\\n.ui.hover.slider:not(.disabled):focus .inner .thumb {\\n  opacity: 1;\\n}\\n\\n/*--------------\\n    Inverted\\n---------------*/\\n\\n.ui.inverted.slider .inner .track-fill {\\n  background-color: #545454;\\n}\\n\\n.ui.inverted.slider .inner .track {\\n  background-color: rgba(255, 255, 255, 0.08);\\n}\\n\\n/*--------------\\n     Colors\\n---------------*/\\n\\n/* Standard */\\n\\n.ui.primary.slider .inner .track-fill {\\n  background-color: #2185D0;\\n}\\n\\n.ui.primary.inverted.slider .inner .track-fill {\\n  background-color: #54C8FF;\\n}\\n\\n/* Basic */\\n\\n.ui.primary.slider.basic .inner .thumb {\\n  background-color: #2185D0;\\n}\\n\\n.ui.primary.slider.basic .inner .thumb:hover,\\n.ui.primary.slider.basic:focus .inner .thumb {\\n  background-color: #1678c2;\\n}\\n\\n/* Basic Inverted */\\n\\n.ui.primary.inverted.slider.basic .inner .thumb {\\n  background-color: #54C8FF;\\n}\\n\\n.ui.primary.inverted.slider.basic .inner .thumb:hover,\\n.ui.primary.inverted.slider.basic:focus .inner .thumb {\\n  background-color: #21b8ff;\\n}\\n\\n/* Standard */\\n\\n.ui.secondary.slider .inner .track-fill {\\n  background-color: #1B1C1D;\\n}\\n\\n.ui.secondary.inverted.slider .inner .track-fill {\\n  background-color: #545454;\\n}\\n\\n/* Basic */\\n\\n.ui.secondary.slider.basic .inner .thumb {\\n  background-color: #1B1C1D;\\n}\\n\\n.ui.secondary.slider.basic .inner .thumb:hover,\\n.ui.secondary.slider.basic:focus .inner .thumb {\\n  background-color: #27292a;\\n}\\n\\n/* Basic Inverted */\\n\\n.ui.secondary.inverted.slider.basic .inner .thumb {\\n  background-color: #545454;\\n}\\n\\n.ui.secondary.inverted.slider.basic .inner .thumb:hover,\\n.ui.secondary.inverted.slider.basic:focus .inner .thumb {\\n  background-color: #6e6e6e;\\n}\\n\\n/* Standard */\\n\\n.ui.red.slider .inner .track-fill {\\n  background-color: #DB2828;\\n}\\n\\n.ui.red.inverted.slider .inner .track-fill {\\n  background-color: #FF695E;\\n}\\n\\n/* Basic */\\n\\n.ui.red.slider.basic .inner .thumb {\\n  background-color: #DB2828;\\n}\\n\\n.ui.red.slider.basic .inner .thumb:hover,\\n.ui.red.slider.basic:focus .inner .thumb {\\n  background-color: #d01919;\\n}\\n\\n/* Basic Inverted */\\n\\n.ui.red.inverted.slider.basic .inner .thumb {\\n  background-color: #FF695E;\\n}\\n\\n.ui.red.inverted.slider.basic .inner .thumb:hover,\\n.ui.red.inverted.slider.basic:focus .inner .thumb {\\n  background-color: #ff392b;\\n}\\n\\n/* Standard */\\n\\n.ui.orange.slider .inner .track-fill {\\n  background-color: #F2711C;\\n}\\n\\n.ui.orange.inverted.slider .inner .track-fill {\\n  background-color: #FF851B;\\n}\\n\\n/* Basic */\\n\\n.ui.orange.slider.basic .inner .thumb {\\n  background-color: #F2711C;\\n}\\n\\n.ui.orange.slider.basic .inner .thumb:hover,\\n.ui.orange.slider.basic:focus .inner .thumb {\\n  background-color: #f26202;\\n}\\n\\n/* Basic Inverted */\\n\\n.ui.orange.inverted.slider.basic .inner .thumb {\\n  background-color: #FF851B;\\n}\\n\\n.ui.orange.inverted.slider.basic .inner .thumb:hover,\\n.ui.orange.inverted.slider.basic:focus .inner .thumb {\\n  background-color: #e76b00;\\n}\\n\\n/* Standard */\\n\\n.ui.yellow.slider .inner .track-fill {\\n  background-color: #FBBD08;\\n}\\n\\n.ui.yellow.inverted.slider .inner .track-fill {\\n  background-color: #FFE21F;\\n}\\n\\n/* Basic */\\n\\n.ui.yellow.slider.basic .inner .thumb {\\n  background-color: #FBBD08;\\n}\\n\\n.ui.yellow.slider.basic .inner .thumb:hover,\\n.ui.yellow.slider.basic:focus .inner .thumb {\\n  background-color: #eaae00;\\n}\\n\\n/* Basic Inverted */\\n\\n.ui.yellow.inverted.slider.basic .inner .thumb {\\n  background-color: #FFE21F;\\n}\\n\\n.ui.yellow.inverted.slider.basic .inner .thumb:hover,\\n.ui.yellow.inverted.slider.basic:focus .inner .thumb {\\n  background-color: #ebcd00;\\n}\\n\\n/* Standard */\\n\\n.ui.olive.slider .inner .track-fill {\\n  background-color: #B5CC18;\\n}\\n\\n.ui.olive.inverted.slider .inner .track-fill {\\n  background-color: #D9E778;\\n}\\n\\n/* Basic */\\n\\n.ui.olive.slider.basic .inner .thumb {\\n  background-color: #B5CC18;\\n}\\n\\n.ui.olive.slider.basic .inner .thumb:hover,\\n.ui.olive.slider.basic:focus .inner .thumb {\\n  background-color: #a7bd0d;\\n}\\n\\n/* Basic Inverted */\\n\\n.ui.olive.inverted.slider.basic .inner .thumb {\\n  background-color: #D9E778;\\n}\\n\\n.ui.olive.inverted.slider.basic .inner .thumb:hover,\\n.ui.olive.inverted.slider.basic:focus .inner .thumb {\\n  background-color: #d2e745;\\n}\\n\\n/* Standard */\\n\\n.ui.green.slider .inner .track-fill {\\n  background-color: #21BA45;\\n}\\n\\n.ui.green.inverted.slider .inner .track-fill {\\n  background-color: #2ECC40;\\n}\\n\\n/* Basic */\\n\\n.ui.green.slider.basic .inner .thumb {\\n  background-color: #21BA45;\\n}\\n\\n.ui.green.slider.basic .inner .thumb:hover,\\n.ui.green.slider.basic:focus .inner .thumb {\\n  background-color: #16ab39;\\n}\\n\\n/* Basic Inverted */\\n\\n.ui.green.inverted.slider.basic .inner .thumb {\\n  background-color: #2ECC40;\\n}\\n\\n.ui.green.inverted.slider.basic .inner .thumb:hover,\\n.ui.green.inverted.slider.basic:focus .inner .thumb {\\n  background-color: #1ea92e;\\n}\\n\\n/* Standard */\\n\\n.ui.teal.slider .inner .track-fill {\\n  background-color: #00B5AD;\\n}\\n\\n.ui.teal.inverted.slider .inner .track-fill {\\n  background-color: #6DFFFF;\\n}\\n\\n/* Basic */\\n\\n.ui.teal.slider.basic .inner .thumb {\\n  background-color: #00B5AD;\\n}\\n\\n.ui.teal.slider.basic .inner .thumb:hover,\\n.ui.teal.slider.basic:focus .inner .thumb {\\n  background-color: #009c95;\\n}\\n\\n/* Basic Inverted */\\n\\n.ui.teal.inverted.slider.basic .inner .thumb {\\n  background-color: #6DFFFF;\\n}\\n\\n.ui.teal.inverted.slider.basic .inner .thumb:hover,\\n.ui.teal.inverted.slider.basic:focus .inner .thumb {\\n  background-color: #3affff;\\n}\\n\\n/* Standard */\\n\\n.ui.blue.slider .inner .track-fill {\\n  background-color: #2185D0;\\n}\\n\\n.ui.blue.inverted.slider .inner .track-fill {\\n  background-color: #54C8FF;\\n}\\n\\n/* Basic */\\n\\n.ui.blue.slider.basic .inner .thumb {\\n  background-color: #2185D0;\\n}\\n\\n.ui.blue.slider.basic .inner .thumb:hover,\\n.ui.blue.slider.basic:focus .inner .thumb {\\n  background-color: #1678c2;\\n}\\n\\n/* Basic Inverted */\\n\\n.ui.blue.inverted.slider.basic .inner .thumb {\\n  background-color: #54C8FF;\\n}\\n\\n.ui.blue.inverted.slider.basic .inner .thumb:hover,\\n.ui.blue.inverted.slider.basic:focus .inner .thumb {\\n  background-color: #21b8ff;\\n}\\n\\n/* Standard */\\n\\n.ui.violet.slider .inner .track-fill {\\n  background-color: #6435C9;\\n}\\n\\n.ui.violet.inverted.slider .inner .track-fill {\\n  background-color: #A291FB;\\n}\\n\\n/* Basic */\\n\\n.ui.violet.slider.basic .inner .thumb {\\n  background-color: #6435C9;\\n}\\n\\n.ui.violet.slider.basic .inner .thumb:hover,\\n.ui.violet.slider.basic:focus .inner .thumb {\\n  background-color: #5829bb;\\n}\\n\\n/* Basic Inverted */\\n\\n.ui.violet.inverted.slider.basic .inner .thumb {\\n  background-color: #A291FB;\\n}\\n\\n.ui.violet.inverted.slider.basic .inner .thumb:hover,\\n.ui.violet.inverted.slider.basic:focus .inner .thumb {\\n  background-color: #745aff;\\n}\\n\\n/* Standard */\\n\\n.ui.purple.slider .inner .track-fill {\\n  background-color: #A333C8;\\n}\\n\\n.ui.purple.inverted.slider .inner .track-fill {\\n  background-color: #DC73FF;\\n}\\n\\n/* Basic */\\n\\n.ui.purple.slider.basic .inner .thumb {\\n  background-color: #A333C8;\\n}\\n\\n.ui.purple.slider.basic .inner .thumb:hover,\\n.ui.purple.slider.basic:focus .inner .thumb {\\n  background-color: #9627ba;\\n}\\n\\n/* Basic Inverted */\\n\\n.ui.purple.inverted.slider.basic .inner .thumb {\\n  background-color: #DC73FF;\\n}\\n\\n.ui.purple.inverted.slider.basic .inner .thumb:hover,\\n.ui.purple.inverted.slider.basic:focus .inner .thumb {\\n  background-color: #cf40ff;\\n}\\n\\n/* Standard */\\n\\n.ui.pink.slider .inner .track-fill {\\n  background-color: #E03997;\\n}\\n\\n.ui.pink.inverted.slider .inner .track-fill {\\n  background-color: #FF8EDF;\\n}\\n\\n/* Basic */\\n\\n.ui.pink.slider.basic .inner .thumb {\\n  background-color: #E03997;\\n}\\n\\n.ui.pink.slider.basic .inner .thumb:hover,\\n.ui.pink.slider.basic:focus .inner .thumb {\\n  background-color: #e61a8d;\\n}\\n\\n/* Basic Inverted */\\n\\n.ui.pink.inverted.slider.basic .inner .thumb {\\n  background-color: #FF8EDF;\\n}\\n\\n.ui.pink.inverted.slider.basic .inner .thumb:hover,\\n.ui.pink.inverted.slider.basic:focus .inner .thumb {\\n  background-color: #ff5bd1;\\n}\\n\\n/* Standard */\\n\\n.ui.brown.slider .inner .track-fill {\\n  background-color: #A5673F;\\n}\\n\\n.ui.brown.inverted.slider .inner .track-fill {\\n  background-color: #D67C1C;\\n}\\n\\n/* Basic */\\n\\n.ui.brown.slider.basic .inner .thumb {\\n  background-color: #A5673F;\\n}\\n\\n.ui.brown.slider.basic .inner .thumb:hover,\\n.ui.brown.slider.basic:focus .inner .thumb {\\n  background-color: #975b33;\\n}\\n\\n/* Basic Inverted */\\n\\n.ui.brown.inverted.slider.basic .inner .thumb {\\n  background-color: #D67C1C;\\n}\\n\\n.ui.brown.inverted.slider.basic .inner .thumb:hover,\\n.ui.brown.inverted.slider.basic:focus .inner .thumb {\\n  background-color: #b0620f;\\n}\\n\\n/* Standard */\\n\\n.ui.grey.slider .inner .track-fill {\\n  background-color: #767676;\\n}\\n\\n.ui.grey.inverted.slider .inner .track-fill {\\n  background-color: #DCDDDE;\\n}\\n\\n/* Basic */\\n\\n.ui.grey.slider.basic .inner .thumb {\\n  background-color: #767676;\\n}\\n\\n.ui.grey.slider.basic .inner .thumb:hover,\\n.ui.grey.slider.basic:focus .inner .thumb {\\n  background-color: #838383;\\n}\\n\\n/* Basic Inverted */\\n\\n.ui.grey.inverted.slider.basic .inner .thumb {\\n  background-color: #DCDDDE;\\n}\\n\\n.ui.grey.inverted.slider.basic .inner .thumb:hover,\\n.ui.grey.inverted.slider.basic:focus .inner .thumb {\\n  background-color: #c2c4c5;\\n}\\n\\n/* Standard */\\n\\n.ui.black.slider .inner .track-fill {\\n  background-color: #1B1C1D;\\n}\\n\\n.ui.black.inverted.slider .inner .track-fill {\\n  background-color: #545454;\\n}\\n\\n/* Basic */\\n\\n.ui.black.slider.basic .inner .thumb {\\n  background-color: #1B1C1D;\\n}\\n\\n.ui.black.slider.basic .inner .thumb:hover,\\n.ui.black.slider.basic:focus .inner .thumb {\\n  background-color: #27292a;\\n}\\n\\n/* Basic Inverted */\\n\\n.ui.black.inverted.slider.basic .inner .thumb {\\n  background-color: #545454;\\n}\\n\\n.ui.black.inverted.slider.basic .inner .thumb:hover,\\n.ui.black.inverted.slider.basic:focus .inner .thumb {\\n  background-color: #000000;\\n}\\n\\n/*--------------\\n     Basic\\n---------------*/\\n\\n/* Standard */\\n\\n.ui.slider.basic .inner .thumb {\\n  background-color: #1B1C1D;\\n}\\n\\n.ui.slider.basic .inner .thumb:hover,\\n.ui.slider.basic:focus .inner .thumb {\\n  background-color: #27292a;\\n}\\n\\n/*--------------\\n  Basic Inverted\\n---------------*/\\n\\n/* Standard */\\n\\n.ui.inverted.slider.basic .inner .thumb {\\n  background-color: #545454;\\n}\\n\\n.ui.inverted.slider.basic .inner .thumb:hover,\\n.ui.inverted.slider.basic:focus .inner .thumb {\\n  background-color: #000000;\\n}\\n\\n/*--------------\\n     Sizing\\n---------------*/\\n\\n/* Small */\\n\\n.ui.slider.small .inner .thumb {\\n  height: 1em;\\n  width: 1em;\\n}\\n\\n.ui.slider.small:not(.vertical) .inner {\\n  height: 1em;\\n}\\n\\n.ui.slider.small:not(.vertical) .inner .track,\\n.ui.slider.small:not(.vertical) .inner .track-fill {\\n  height: 0.3em;\\n  top: 0.35em;\\n}\\n\\n.ui.small.labeled.slider:not(.vertical) > .labels,\\n.ui.small.labeled.slider:not(.vertical) > .labels .label:after {\\n  height: 1em;\\n}\\n\\n/* Small Vertical */\\n\\n.ui.slider.small.vertical .inner {\\n  width: 1em;\\n}\\n\\n.ui.slider.small.vertical .inner .track,\\n.ui.slider.small.vertical .inner .track-fill {\\n  width: 0.3em;\\n  left: 0.35em;\\n}\\n\\n.ui.small.labeled.vertical.slider > .labels,\\n.ui.small.labeled.vertical.slider > .labels .label:after {\\n  width: 1em;\\n}\\n\\n/* Large */\\n\\n.ui.slider.large .inner .thumb {\\n  height: 2em;\\n  width: 2em;\\n}\\n\\n.ui.slider.large:not(.vertical) .inner {\\n  height: 2em;\\n}\\n\\n.ui.slider.large:not(.vertical) .inner .track,\\n.ui.slider.large:not(.vertical) .inner .track-fill {\\n  height: 0.5em;\\n  top: 0.75em;\\n}\\n\\n.ui.large.labeled.slider:not(.vertical) > .labels,\\n.ui.large.labeled.slider:not(.vertical) > .labels .label:after {\\n  height: 2em;\\n}\\n\\n/* Large Vertical */\\n\\n.ui.slider.large.vertical .inner {\\n  width: 2em;\\n}\\n\\n.ui.slider.large.vertical .inner .track,\\n.ui.slider.large.vertical .inner .track-fill {\\n  width: 0.5em;\\n  left: 0.75em;\\n}\\n\\n.ui.large.labeled.vertical.slider > .labels,\\n.ui.large.labeled.vertical.slider > .labels .label:after {\\n  width: 2em;\\n}\\n\\n/* Big */\\n\\n.ui.slider.big .inner .thumb {\\n  height: 2.5em;\\n  width: 2.5em;\\n}\\n\\n.ui.slider.big:not(.vertical) .inner {\\n  height: 2.5em;\\n}\\n\\n.ui.slider.big:not(.vertical) .inner .track,\\n.ui.slider.big:not(.vertical) .inner .track-fill {\\n  height: 0.6em;\\n  top: 0.95em;\\n}\\n\\n.ui.big.labeled.slider:not(.vertical) > .labels,\\n.ui.big.labeled.slider:not(.vertical) > .labels .label:after {\\n  height: 2.5em;\\n}\\n\\n/* Big Vertical */\\n\\n.ui.slider.big.vertical .inner {\\n  width: 2.5em;\\n}\\n\\n.ui.slider.big.vertical .inner .track,\\n.ui.slider.big.vertical .inner .track-fill {\\n  width: 0.6em;\\n  left: 0.95em;\\n}\\n\\n.ui.big.labeled.vertical.slider > .labels,\\n.ui.big.labeled.vertical.slider > .labels .label:after {\\n  width: 2.5em;\\n}\\n\\n/*******************************\\n        Slider Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Rating\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n           Rating\\n*******************************/\\n\\n.ui.rating {\\n  display: -webkit-inline-box;\\n  display: -ms-inline-flexbox;\\n  display: inline-flex;\\n  white-space: nowrap;\\n  vertical-align: baseline;\\n}\\n\\n.ui.rating:last-child {\\n  margin-right: 0;\\n}\\n\\n/* Icon */\\n\\n.ui.rating .icon {\\n  padding: 0;\\n  margin: 0;\\n  text-align: center;\\n  font-weight: normal;\\n  font-style: normal;\\n  -webkit-box-flex: 1;\\n      -ms-flex: 1 0 auto;\\n          flex: 1 0 auto;\\n  cursor: pointer;\\n  width: 1.25em;\\n  height: auto;\\n  -webkit-transition: opacity 0.1s ease, background 0.1s ease, text-shadow 0.1s ease, color 0.1s ease;\\n  transition: opacity 0.1s ease, background 0.1s ease, text-shadow 0.1s ease, color 0.1s ease;\\n  line-height: 1;\\n  -webkit-backface-visibility: hidden;\\n  backface-visibility: hidden;\\n}\\n\\n/*******************************\\n             Types\\n*******************************/\\n\\n/*-------------------\\n      Standard\\n--------------------*/\\n\\n/* Inactive Icon */\\n\\n.ui.rating .icon {\\n  background: transparent;\\n  color: rgba(0, 0, 0, 0.15);\\n}\\n\\n/* Active Icon */\\n\\n.ui.rating .active.icon {\\n  background: transparent;\\n  color: rgba(0, 0, 0, 0.85);\\n}\\n\\n/* Selected Icon */\\n\\n.ui.rating .icon.selected,\\n.ui.rating .icon.selected.active {\\n  background: transparent;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n/*--------------\\n     Colors\\n-------------- */\\n\\n.ui.primary.rating .active.icon {\\n  color: #54C8FF;\\n  text-shadow: 0px -1px 0px #2185D0, -1px 0px 0px #2185D0, 0px 1px 0px #2185D0, 1px 0px 0px #2185D0;\\n}\\n\\n.ui.primary.rating .icon.selected,\\n.ui.primary.rating .icon.selected.active {\\n  color: #21b8ff;\\n  text-shadow: 0px -1px 0px #1678c2, -1px 0px 0px #1678c2, 0px 1px 0px #1678c2, 1px 0px 0px #1678c2;\\n}\\n\\n.ui.secondary.rating .active.icon {\\n  color: #545454;\\n  text-shadow: 0px -1px 0px #1B1C1D, -1px 0px 0px #1B1C1D, 0px 1px 0px #1B1C1D, 1px 0px 0px #1B1C1D;\\n}\\n\\n.ui.secondary.rating .icon.selected,\\n.ui.secondary.rating .icon.selected.active {\\n  color: #6e6e6e;\\n  text-shadow: 0px -1px 0px #27292a, -1px 0px 0px #27292a, 0px 1px 0px #27292a, 1px 0px 0px #27292a;\\n}\\n\\n.ui.red.rating .active.icon {\\n  color: #FF695E;\\n  text-shadow: 0px -1px 0px #DB2828, -1px 0px 0px #DB2828, 0px 1px 0px #DB2828, 1px 0px 0px #DB2828;\\n}\\n\\n.ui.red.rating .icon.selected,\\n.ui.red.rating .icon.selected.active {\\n  color: #ff392b;\\n  text-shadow: 0px -1px 0px #d01919, -1px 0px 0px #d01919, 0px 1px 0px #d01919, 1px 0px 0px #d01919;\\n}\\n\\n.ui.orange.rating .active.icon {\\n  color: #FF851B;\\n  text-shadow: 0px -1px 0px #F2711C, -1px 0px 0px #F2711C, 0px 1px 0px #F2711C, 1px 0px 0px #F2711C;\\n}\\n\\n.ui.orange.rating .icon.selected,\\n.ui.orange.rating .icon.selected.active {\\n  color: #e76b00;\\n  text-shadow: 0px -1px 0px #f26202, -1px 0px 0px #f26202, 0px 1px 0px #f26202, 1px 0px 0px #f26202;\\n}\\n\\n.ui.yellow.rating .active.icon {\\n  color: #FFE21F;\\n  text-shadow: 0px -1px 0px #FBBD08, -1px 0px 0px #FBBD08, 0px 1px 0px #FBBD08, 1px 0px 0px #FBBD08;\\n}\\n\\n.ui.yellow.rating .icon.selected,\\n.ui.yellow.rating .icon.selected.active {\\n  color: #ebcd00;\\n  text-shadow: 0px -1px 0px #eaae00, -1px 0px 0px #eaae00, 0px 1px 0px #eaae00, 1px 0px 0px #eaae00;\\n}\\n\\n.ui.olive.rating .active.icon {\\n  color: #D9E778;\\n  text-shadow: 0px -1px 0px #B5CC18, -1px 0px 0px #B5CC18, 0px 1px 0px #B5CC18, 1px 0px 0px #B5CC18;\\n}\\n\\n.ui.olive.rating .icon.selected,\\n.ui.olive.rating .icon.selected.active {\\n  color: #d2e745;\\n  text-shadow: 0px -1px 0px #a7bd0d, -1px 0px 0px #a7bd0d, 0px 1px 0px #a7bd0d, 1px 0px 0px #a7bd0d;\\n}\\n\\n.ui.green.rating .active.icon {\\n  color: #2ECC40;\\n  text-shadow: 0px -1px 0px #21BA45, -1px 0px 0px #21BA45, 0px 1px 0px #21BA45, 1px 0px 0px #21BA45;\\n}\\n\\n.ui.green.rating .icon.selected,\\n.ui.green.rating .icon.selected.active {\\n  color: #1ea92e;\\n  text-shadow: 0px -1px 0px #16ab39, -1px 0px 0px #16ab39, 0px 1px 0px #16ab39, 1px 0px 0px #16ab39;\\n}\\n\\n.ui.teal.rating .active.icon {\\n  color: #6DFFFF;\\n  text-shadow: 0px -1px 0px #00B5AD, -1px 0px 0px #00B5AD, 0px 1px 0px #00B5AD, 1px 0px 0px #00B5AD;\\n}\\n\\n.ui.teal.rating .icon.selected,\\n.ui.teal.rating .icon.selected.active {\\n  color: #3affff;\\n  text-shadow: 0px -1px 0px #009c95, -1px 0px 0px #009c95, 0px 1px 0px #009c95, 1px 0px 0px #009c95;\\n}\\n\\n.ui.blue.rating .active.icon {\\n  color: #54C8FF;\\n  text-shadow: 0px -1px 0px #2185D0, -1px 0px 0px #2185D0, 0px 1px 0px #2185D0, 1px 0px 0px #2185D0;\\n}\\n\\n.ui.blue.rating .icon.selected,\\n.ui.blue.rating .icon.selected.active {\\n  color: #21b8ff;\\n  text-shadow: 0px -1px 0px #1678c2, -1px 0px 0px #1678c2, 0px 1px 0px #1678c2, 1px 0px 0px #1678c2;\\n}\\n\\n.ui.violet.rating .active.icon {\\n  color: #A291FB;\\n  text-shadow: 0px -1px 0px #6435C9, -1px 0px 0px #6435C9, 0px 1px 0px #6435C9, 1px 0px 0px #6435C9;\\n}\\n\\n.ui.violet.rating .icon.selected,\\n.ui.violet.rating .icon.selected.active {\\n  color: #745aff;\\n  text-shadow: 0px -1px 0px #5829bb, -1px 0px 0px #5829bb, 0px 1px 0px #5829bb, 1px 0px 0px #5829bb;\\n}\\n\\n.ui.purple.rating .active.icon {\\n  color: #DC73FF;\\n  text-shadow: 0px -1px 0px #A333C8, -1px 0px 0px #A333C8, 0px 1px 0px #A333C8, 1px 0px 0px #A333C8;\\n}\\n\\n.ui.purple.rating .icon.selected,\\n.ui.purple.rating .icon.selected.active {\\n  color: #cf40ff;\\n  text-shadow: 0px -1px 0px #9627ba, -1px 0px 0px #9627ba, 0px 1px 0px #9627ba, 1px 0px 0px #9627ba;\\n}\\n\\n.ui.pink.rating .active.icon {\\n  color: #FF8EDF;\\n  text-shadow: 0px -1px 0px #E03997, -1px 0px 0px #E03997, 0px 1px 0px #E03997, 1px 0px 0px #E03997;\\n}\\n\\n.ui.pink.rating .icon.selected,\\n.ui.pink.rating .icon.selected.active {\\n  color: #ff5bd1;\\n  text-shadow: 0px -1px 0px #e61a8d, -1px 0px 0px #e61a8d, 0px 1px 0px #e61a8d, 1px 0px 0px #e61a8d;\\n}\\n\\n.ui.brown.rating .active.icon {\\n  color: #D67C1C;\\n  text-shadow: 0px -1px 0px #A5673F, -1px 0px 0px #A5673F, 0px 1px 0px #A5673F, 1px 0px 0px #A5673F;\\n}\\n\\n.ui.brown.rating .icon.selected,\\n.ui.brown.rating .icon.selected.active {\\n  color: #b0620f;\\n  text-shadow: 0px -1px 0px #975b33, -1px 0px 0px #975b33, 0px 1px 0px #975b33, 1px 0px 0px #975b33;\\n}\\n\\n.ui.grey.rating .active.icon {\\n  color: #DCDDDE;\\n  text-shadow: 0px -1px 0px #767676, -1px 0px 0px #767676, 0px 1px 0px #767676, 1px 0px 0px #767676;\\n}\\n\\n.ui.grey.rating .icon.selected,\\n.ui.grey.rating .icon.selected.active {\\n  color: #c2c4c5;\\n  text-shadow: 0px -1px 0px #838383, -1px 0px 0px #838383, 0px 1px 0px #838383, 1px 0px 0px #838383;\\n}\\n\\n.ui.black.rating .active.icon {\\n  color: #545454;\\n  text-shadow: 0px -1px 0px #1B1C1D, -1px 0px 0px #1B1C1D, 0px 1px 0px #1B1C1D, 1px 0px 0px #1B1C1D;\\n}\\n\\n.ui.black.rating .icon.selected,\\n.ui.black.rating .icon.selected.active {\\n  color: #000000;\\n  text-shadow: 0px -1px 0px #27292a, -1px 0px 0px #27292a, 0px 1px 0px #27292a, 1px 0px 0px #27292a;\\n}\\n\\n/*******************************\\n             States\\n*******************************/\\n\\n/*-------------------\\n       Disabled\\n--------------------*/\\n\\n/* disabled rating */\\n\\n.ui.disabled.rating .icon {\\n  cursor: default;\\n}\\n\\n/*-------------------\\n   User Interactive\\n--------------------*/\\n\\n/* Selected Rating */\\n\\n.ui.rating.selected .active.icon {\\n  opacity: 1;\\n}\\n\\n.ui.rating.selected .icon.selected,\\n.ui.rating .icon.selected {\\n  opacity: 1;\\n}\\n\\n/*******************************\\n          Variations\\n*******************************/\\n\\n.ui.mini.rating {\\n  font-size: 0.78571429rem;\\n}\\n\\n.ui.tiny.rating {\\n  font-size: 0.85714286rem;\\n}\\n\\n.ui.small.rating {\\n  font-size: 0.92857143rem;\\n}\\n\\n.ui.rating {\\n  font-size: 1rem;\\n}\\n\\n.ui.large.rating {\\n  font-size: 1.14285714rem;\\n}\\n\\n.ui.huge.rating {\\n  font-size: 1.42857143rem;\\n}\\n\\n.ui.massive.rating {\\n  font-size: 2rem;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Search\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n             Search\\n*******************************/\\n\\n.ui.search {\\n  position: relative;\\n}\\n\\n.ui.search > .prompt {\\n  margin: 0;\\n  outline: none;\\n  -webkit-appearance: none;\\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\\n  text-shadow: none;\\n  font-style: normal;\\n  font-weight: normal;\\n  line-height: 1.21428571em;\\n  padding: 0.67857143em 1em;\\n  font-size: 1em;\\n  background: #FFFFFF;\\n  border: 1px solid rgba(34, 36, 38, 0.15);\\n  color: rgba(0, 0, 0, 0.87);\\n  -webkit-box-shadow: 0 0 0 0 transparent inset;\\n          box-shadow: 0 0 0 0 transparent inset;\\n  -webkit-transition: background-color 0.1s ease, color 0.1s ease, border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: background-color 0.1s ease, color 0.1s ease, border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\\n  transition: background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, border-color 0.1s ease;\\n  transition: background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\\n}\\n\\n.ui.search .prompt {\\n  border-radius: 500rem;\\n}\\n\\n/*--------------\\n     Icon\\n---------------*/\\n\\n.ui.search .prompt ~ .search.icon {\\n  cursor: pointer;\\n}\\n\\n/*--------------\\n    Results\\n---------------*/\\n\\n.ui.search > .results {\\n  display: none;\\n  position: absolute;\\n  top: 100%;\\n  left: 0;\\n  -webkit-transform-origin: center top;\\n  transform-origin: center top;\\n  white-space: normal;\\n  text-align: left;\\n  text-transform: none;\\n  background: #FFFFFF;\\n  margin-top: 0.5em;\\n  width: 18em;\\n  border-radius: 0.28571429rem;\\n  -webkit-box-shadow: 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n  border: 1px solid #D4D4D5;\\n  z-index: 998;\\n}\\n\\n.ui.search > .results > :first-child {\\n  border-radius: 0.28571429rem 0.28571429rem 0 0;\\n}\\n\\n.ui.search > .results > :last-child {\\n  border-radius: 0 0 0.28571429rem 0.28571429rem;\\n}\\n\\n/*--------------\\n    Result\\n---------------*/\\n\\n.ui.search > .results .result {\\n  cursor: pointer;\\n  display: block;\\n  overflow: hidden;\\n  font-size: 1em;\\n  padding: 0.85714286em 1.14285714em;\\n  color: rgba(0, 0, 0, 0.87);\\n  line-height: 1.33;\\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\\n}\\n\\n.ui.search > .results .result:last-child {\\n  border-bottom: none !important;\\n}\\n\\n/* Image */\\n\\n.ui.search > .results .result .image {\\n  float: right;\\n  overflow: hidden;\\n  background: none;\\n  width: 5em;\\n  height: 3em;\\n  border-radius: 0.25em;\\n}\\n\\n.ui.search > .results .result .image img {\\n  display: block;\\n  width: auto;\\n  height: 100%;\\n}\\n\\n/*--------------\\n      Info\\n---------------*/\\n\\n.ui.search > .results .result .image + .content {\\n  margin: 0 6em 0 0;\\n}\\n\\n.ui.search > .results .result .title {\\n  margin: -0.14285714em 0 0;\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  font-weight: bold;\\n  font-size: 1em;\\n  color: rgba(0, 0, 0, 0.85);\\n}\\n\\n.ui.search > .results .result .description {\\n  margin-top: 0;\\n  font-size: 0.92857143em;\\n  color: rgba(0, 0, 0, 0.4);\\n}\\n\\n.ui.search > .results .result .price {\\n  float: right;\\n  color: #21BA45;\\n}\\n\\n/*--------------\\n    Message\\n---------------*/\\n\\n.ui.search > .results > .message {\\n  padding: 1em 1em;\\n}\\n\\n.ui.search > .results > .message .header {\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  font-size: 1rem;\\n  font-weight: bold;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.search > .results > .message .description {\\n  margin-top: 0.25rem;\\n  font-size: 1em;\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n/* View All Results */\\n\\n.ui.search > .results > .action {\\n  display: block;\\n  border-top: none;\\n  background: #F3F4F5;\\n  padding: 0.92857143em 1em;\\n  color: rgba(0, 0, 0, 0.87);\\n  font-weight: bold;\\n  text-align: center;\\n}\\n\\n/*******************************\\n            States\\n*******************************/\\n\\n/*--------------------\\n       Focus\\n---------------------*/\\n\\n.ui.search > .prompt:focus {\\n  border-color: rgba(34, 36, 38, 0.35);\\n  background: #FFFFFF;\\n  color: rgba(0, 0, 0, 0.95);\\n}\\n\\n/*--------------------\\n       Loading\\n---------------------*/\\n\\n.ui.loading.search .input > i.icon:before {\\n  position: absolute;\\n  content: '';\\n  top: 50%;\\n  left: 50%;\\n  margin: -0.64285714em 0 0 -0.64285714em;\\n  width: 1.28571429em;\\n  height: 1.28571429em;\\n  border-radius: 500rem;\\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.loading.search .input > i.icon:after {\\n  position: absolute;\\n  content: '';\\n  top: 50%;\\n  left: 50%;\\n  margin: -0.64285714em 0 0 -0.64285714em;\\n  width: 1.28571429em;\\n  height: 1.28571429em;\\n  -webkit-animation: loader 0.6s infinite linear;\\n  animation: loader 0.6s infinite linear;\\n  border: 0.2em solid #767676;\\n  border-radius: 500rem;\\n  -webkit-box-shadow: 0 0 0 1px transparent;\\n          box-shadow: 0 0 0 1px transparent;\\n}\\n\\n/*--------------\\n      Hover\\n---------------*/\\n\\n.ui.search > .results .result:hover,\\n.ui.category.search > .results .category .result:hover {\\n  background: #F9FAFB;\\n}\\n\\n.ui.search .action:hover:not(div) {\\n  background: #E0E0E0;\\n}\\n\\n/*--------------\\n      Active\\n---------------*/\\n\\n.ui.category.search > .results .category.active {\\n  background: #F3F4F5;\\n}\\n\\n.ui.category.search > .results .category.active > .name {\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n.ui.search > .results .result.active,\\n.ui.category.search > .results .category .result.active {\\n  position: relative;\\n  border-left-color: rgba(34, 36, 38, 0.1);\\n  background: #F3F4F5;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n}\\n\\n.ui.search > .results .result.active .title {\\n  color: rgba(0, 0, 0, 0.85);\\n}\\n\\n.ui.search > .results .result.active .description {\\n  color: rgba(0, 0, 0, 0.85);\\n}\\n\\n/*--------------------\\n        Disabled\\n----------------------*/\\n\\n/* Disabled */\\n\\n.ui.disabled.search {\\n  cursor: default;\\n  pointer-events: none;\\n  opacity: 0.45;\\n}\\n\\n/*******************************\\n           Types\\n*******************************/\\n\\n/*--------------\\n    Selection\\n---------------*/\\n\\n.ui.search.selection .prompt {\\n  border-radius: 0.28571429rem;\\n}\\n\\n/* Remove input */\\n\\n.ui.search.selection > .icon.input > .remove.icon {\\n  pointer-events: none;\\n  position: absolute;\\n  left: auto;\\n  opacity: 0;\\n  color: '';\\n  top: 0;\\n  right: 0;\\n  -webkit-transition: color 0.1s ease, opacity 0.1s ease;\\n  transition: color 0.1s ease, opacity 0.1s ease;\\n}\\n\\n.ui.search.selection > .icon.input > .active.remove.icon {\\n  cursor: pointer;\\n  opacity: 0.8;\\n  pointer-events: auto;\\n}\\n\\n.ui.search.selection > .icon.input:not([class*=\\\"left icon\\\"]) > .icon ~ .remove.icon {\\n  right: 1.85714em;\\n}\\n\\n.ui.search.selection > .icon.input > .remove.icon:hover {\\n  opacity: 1;\\n  color: #DB2828;\\n}\\n\\n/*--------------\\n    Category\\n---------------*/\\n\\n.ui.category.search .results {\\n  width: 28em;\\n}\\n\\n.ui.category.search .results.animating,\\n.ui.category.search .results.visible {\\n  display: table;\\n}\\n\\n/* Category */\\n\\n.ui.category.search > .results .category {\\n  display: table-row;\\n  background: #F3F4F5;\\n  -webkit-box-shadow: none;\\n          box-shadow: none;\\n  -webkit-transition: background 0.1s ease, border-color 0.1s ease;\\n  transition: background 0.1s ease, border-color 0.1s ease;\\n}\\n\\n/* Last Category */\\n\\n.ui.category.search > .results .category:last-child {\\n  border-bottom: none;\\n}\\n\\n/* First / Last */\\n\\n.ui.category.search > .results .category:first-child .name + .result {\\n  border-radius: 0 0.28571429rem 0 0;\\n}\\n\\n.ui.category.search > .results .category:last-child .result:last-child {\\n  border-radius: 0 0 0.28571429rem 0;\\n}\\n\\n/* Category Result Name */\\n\\n.ui.category.search > .results .category > .name {\\n  display: table-cell;\\n  text-overflow: ellipsis;\\n  width: 100px;\\n  white-space: nowrap;\\n  background: transparent;\\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\\n  font-size: 1em;\\n  padding: 0.4em 1em;\\n  font-weight: bold;\\n  color: rgba(0, 0, 0, 0.4);\\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\\n}\\n\\n/* Category Result */\\n\\n.ui.category.search > .results .category .results {\\n  display: table-cell;\\n  background: #FFFFFF;\\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\\n}\\n\\n.ui.category.search > .results .category .result {\\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\\n  -webkit-transition: background 0.1s ease, border-color 0.1s ease;\\n  transition: background 0.1s ease, border-color 0.1s ease;\\n  padding: 0.85714286em 1.14285714em;\\n}\\n\\n/*******************************\\n           Variations\\n*******************************/\\n\\n/*-------------------\\n     Left / Right\\n--------------------*/\\n\\n.ui[class*=\\\"left aligned\\\"].search > .results {\\n  right: auto;\\n  left: 0;\\n}\\n\\n.ui[class*=\\\"right aligned\\\"].search > .results {\\n  right: 0;\\n  left: auto;\\n}\\n\\n/*--------------\\n    Fluid\\n---------------*/\\n\\n.ui.fluid.search .results {\\n  width: 100%;\\n}\\n\\n/*--------------\\n      Sizes\\n---------------*/\\n\\n.ui.mini.search {\\n  font-size: 0.78571429em;\\n}\\n\\n.ui.small.search {\\n  font-size: 0.92857143em;\\n}\\n\\n.ui.search {\\n  font-size: 1em;\\n}\\n\\n.ui.large.search {\\n  font-size: 1.14285714em;\\n}\\n\\n.ui.big.search {\\n  font-size: 1.28571429em;\\n}\\n\\n.ui.huge.search {\\n  font-size: 1.42857143em;\\n}\\n\\n.ui.massive.search {\\n  font-size: 1.71428571em;\\n}\\n\\n/*--------------\\n      Mobile\\n---------------*/\\n\\n@media only screen and (max-width: 767.98px) {\\n  .ui.search .results {\\n    max-width: calc(100vw - 2rem);\\n  }\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Shape\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n              Shape\\n*******************************/\\n\\n.ui.shape {\\n  position: relative;\\n  vertical-align: top;\\n  display: inline-block;\\n  -webkit-perspective: 2000px;\\n  perspective: 2000px;\\n  transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\\n  -webkit-transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out;\\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\\n}\\n\\n.ui.shape .sides {\\n  -webkit-transform-style: preserve-3d;\\n  transform-style: preserve-3d;\\n}\\n\\n.ui.shape .side {\\n  display: none;\\n  opacity: 1;\\n  width: 100%;\\n  margin: 0 !important;\\n  -webkit-backface-visibility: hidden;\\n  backface-visibility: hidden;\\n}\\n\\n.ui.shape .side * {\\n  -webkit-backface-visibility: visible !important;\\n  backface-visibility: visible !important;\\n}\\n\\n/*******************************\\n             Types\\n*******************************/\\n\\n.ui.cube.shape .side {\\n  min-width: 15em;\\n  height: 15em;\\n  padding: 2em;\\n  background-color: #E6E6E6;\\n  color: rgba(0, 0, 0, 0.87);\\n  -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.3);\\n          box-shadow: 0 0 2px rgba(0, 0, 0, 0.3);\\n}\\n\\n.ui.cube.shape .side > .content {\\n  width: 100%;\\n  height: 100%;\\n  display: table;\\n  text-align: center;\\n  -webkit-user-select: text;\\n  -moz-user-select: text;\\n  -ms-user-select: text;\\n  user-select: text;\\n}\\n\\n.ui.cube.shape .side > .content > div {\\n  display: table-cell;\\n  vertical-align: middle;\\n  font-size: 2em;\\n}\\n\\n/*******************************\\n          Variations\\n*******************************/\\n\\n.ui.text.shape.animating .sides {\\n  position: static;\\n}\\n\\n.ui.text.shape .side {\\n  white-space: nowrap;\\n}\\n\\n.ui.text.shape .side > * {\\n  white-space: normal;\\n}\\n\\n/*******************************\\n             States\\n*******************************/\\n\\n/*--------------\\n    Loading\\n---------------*/\\n\\n.ui.loading.shape {\\n  position: absolute;\\n  top: -9999px;\\n  left: -9999px;\\n}\\n\\n/*--------------\\n    Animating\\n---------------*/\\n\\n.ui.shape .animating.side {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  display: block;\\n  z-index: 100;\\n}\\n\\n.ui.shape .hidden.side {\\n  opacity: 0.6;\\n}\\n\\n/*--------------\\n      CSS\\n---------------*/\\n\\n.ui.shape.animating .sides {\\n  position: absolute;\\n  transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\\n  -webkit-transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out;\\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\\n}\\n\\n.ui.shape.animating .side {\\n  -webkit-transition: opacity 0.6s ease-in-out;\\n  transition: opacity 0.6s ease-in-out;\\n}\\n\\n.ui.shape .animating.side *,\\n.ui.shape.animating .side * {\\n  -webkit-transition: none;\\n  transition: none;\\n}\\n\\n/*--------------\\n     Active\\n---------------*/\\n\\n.ui.shape .active.side {\\n  display: block;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n        User Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Sidebar\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Sidebar\\n*******************************/\\n\\n/* Sidebar Menu */\\n\\n.ui.sidebar {\\n  position: fixed;\\n  top: 0;\\n  left: 0;\\n  -webkit-backface-visibility: hidden;\\n  backface-visibility: hidden;\\n  -webkit-transition: none;\\n  transition: none;\\n  will-change: transform;\\n  -webkit-transform: translate3d(0, 0, 0);\\n  transform: translate3d(0, 0, 0);\\n  visibility: hidden;\\n  -webkit-overflow-scrolling: touch;\\n  height: 100% !important;\\n  max-height: 100%;\\n  border-radius: 0 !important;\\n  margin: 0 !important;\\n  overflow-y: auto !important;\\n  z-index: 102;\\n}\\n\\n/* GPU Layers for Child Elements */\\n\\n.ui.sidebar > * {\\n  -webkit-backface-visibility: hidden;\\n  backface-visibility: hidden;\\n}\\n\\n/*--------------\\n   Direction\\n---------------*/\\n\\n.ui.left.sidebar {\\n  right: auto;\\n  left: 0;\\n  -webkit-transform: translate3d(-100%, 0, 0);\\n  transform: translate3d(-100%, 0, 0);\\n}\\n\\n.ui.right.sidebar {\\n  right: 0 !important;\\n  left: auto !important;\\n  -webkit-transform: translate3d(100%, 0, 0);\\n  transform: translate3d(100%, 0, 0);\\n}\\n\\n.ui.top.sidebar,\\n.ui.bottom.sidebar {\\n  width: 100% !important;\\n  height: auto !important;\\n}\\n\\n.ui.top.sidebar {\\n  top: 0 !important;\\n  bottom: auto !important;\\n  -webkit-transform: translate3d(0, -100%, 0);\\n  transform: translate3d(0, -100%, 0);\\n}\\n\\n.ui.bottom.sidebar {\\n  top: auto !important;\\n  bottom: 0 !important;\\n  -webkit-transform: translate3d(0, 100%, 0);\\n  transform: translate3d(0, 100%, 0);\\n}\\n\\n/*--------------\\n     Pushable\\n---------------*/\\n\\n.pushable {\\n  height: 100%;\\n  overflow-x: hidden;\\n  padding: 0 !important;\\n}\\n\\n/* Whole Page */\\n\\nbody.pushable {\\n  background: #545454;\\n}\\n\\nbody.pushable.dimmed {\\n  background: inherit;\\n}\\n\\n/* Page Context */\\n\\n.pushable:not(body) {\\n  -webkit-transform: translate3d(0, 0, 0);\\n  transform: translate3d(0, 0, 0);\\n}\\n\\n.pushable:not(body) > .ui.sidebar,\\n.pushable:not(body) > .fixed,\\n.pushable:not(body) > .pusher:after {\\n  position: absolute;\\n}\\n\\n/*--------------\\n     Fixed\\n---------------*/\\n\\n.pushable > .fixed {\\n  position: fixed;\\n  -webkit-backface-visibility: hidden;\\n  backface-visibility: hidden;\\n  transition: -webkit-transform 500ms ease;\\n  -webkit-transition: -webkit-transform 500ms ease;\\n  transition: transform 500ms ease;\\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\\n  will-change: transform;\\n  z-index: 101;\\n}\\n\\n/*--------------\\n     Page\\n---------------*/\\n\\n.pushable > .pusher {\\n  position: relative;\\n  -webkit-backface-visibility: hidden;\\n  backface-visibility: hidden;\\n  overflow: hidden;\\n  min-height: 100%;\\n  transition: -webkit-transform 500ms ease;\\n  -webkit-transition: -webkit-transform 500ms ease;\\n  transition: transform 500ms ease;\\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\\n  z-index: 2;\\n  /* Pusher should inherit background from context */\\n  background: inherit;\\n}\\n\\nbody.pushable > .pusher {\\n  background: #FFFFFF;\\n}\\n\\n/*--------------\\n     Dimmer\\n---------------*/\\n\\n.pushable > .pusher:after {\\n  position: fixed;\\n  top: 0;\\n  right: 0;\\n  content: '';\\n  background-color: rgba(0, 0, 0, 0.4);\\n  overflow: hidden;\\n  opacity: 0;\\n  -webkit-transition: opacity 500ms;\\n  transition: opacity 500ms;\\n  will-change: opacity;\\n  z-index: 1000;\\n}\\n\\n/*--------------\\n    Coupling\\n---------------*/\\n\\n.ui.sidebar.menu .item {\\n  border-radius: 0 !important;\\n}\\n\\n/*******************************\\n            States\\n*******************************/\\n\\n/*--------------\\n     Dimmed\\n---------------*/\\n\\n.pushable > .pusher.dimmed:after {\\n  width: 100% !important;\\n  height: 100% !important;\\n  opacity: 1 !important;\\n}\\n\\n/*--------------\\n    Animating\\n---------------*/\\n\\n.ui.animating.sidebar {\\n  visibility: visible;\\n}\\n\\n/*--------------\\n     Visible\\n---------------*/\\n\\n.ui.visible.sidebar {\\n  visibility: visible;\\n  -webkit-transform: translate3d(0, 0, 0);\\n  transform: translate3d(0, 0, 0);\\n}\\n\\n/* Shadow Direction */\\n\\n.ui.left.visible.sidebar,\\n.ui.right.visible.sidebar {\\n  -webkit-box-shadow: 0 0 20px rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 20px rgba(34, 36, 38, 0.15);\\n}\\n\\n.ui.top.visible.sidebar,\\n.ui.bottom.visible.sidebar {\\n  -webkit-box-shadow: 0 0 20px rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 20px rgba(34, 36, 38, 0.15);\\n}\\n\\n/* Visible On Load */\\n\\n.ui.visible.left.sidebar ~ .fixed,\\n.ui.visible.left.sidebar ~ .pusher {\\n  -webkit-transform: translate3d(260px, 0, 0);\\n  transform: translate3d(260px, 0, 0);\\n}\\n\\n.ui.visible.right.sidebar ~ .fixed,\\n.ui.visible.right.sidebar ~ .pusher {\\n  -webkit-transform: translate3d(-260px, 0, 0);\\n  transform: translate3d(-260px, 0, 0);\\n}\\n\\n.ui.visible.top.sidebar ~ .fixed,\\n.ui.visible.top.sidebar ~ .pusher {\\n  -webkit-transform: translate3d(0, 36px, 0);\\n  transform: translate3d(0, 36px, 0);\\n}\\n\\n.ui.visible.bottom.sidebar ~ .fixed,\\n.ui.visible.bottom.sidebar ~ .pusher {\\n  -webkit-transform: translate3d(0, -36px, 0);\\n  transform: translate3d(0, -36px, 0);\\n}\\n\\n/* opposite sides visible forces content overlay */\\n\\n.ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .fixed,\\n.ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .pusher,\\n.ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .fixed,\\n.ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .pusher {\\n  -webkit-transform: translate3d(0, 0, 0);\\n  transform: translate3d(0, 0, 0);\\n}\\n\\n/*--------------\\n       iOS\\n---------------*/\\n\\n/*******************************\\n          Variations\\n*******************************/\\n\\n/*--------------\\n     Width\\n---------------*/\\n\\n/* Left / Right */\\n\\n.ui.thin.left.sidebar,\\n.ui.thin.right.sidebar {\\n  width: 150px;\\n}\\n\\n.ui[class*=\\\"very thin\\\"].left.sidebar,\\n.ui[class*=\\\"very thin\\\"].right.sidebar {\\n  width: 60px;\\n}\\n\\n.ui.left.sidebar,\\n.ui.right.sidebar {\\n  width: 260px;\\n}\\n\\n.ui.wide.left.sidebar,\\n.ui.wide.right.sidebar {\\n  width: 350px;\\n}\\n\\n.ui[class*=\\\"very wide\\\"].left.sidebar,\\n.ui[class*=\\\"very wide\\\"].right.sidebar {\\n  width: 475px;\\n}\\n\\n/* Left Visible */\\n\\n.ui.visible.thin.left.sidebar ~ .fixed,\\n.ui.visible.thin.left.sidebar ~ .pusher {\\n  -webkit-transform: translate3d(150px, 0, 0);\\n  transform: translate3d(150px, 0, 0);\\n}\\n\\n.ui.visible[class*=\\\"very thin\\\"].left.sidebar ~ .fixed,\\n.ui.visible[class*=\\\"very thin\\\"].left.sidebar ~ .pusher {\\n  -webkit-transform: translate3d(60px, 0, 0);\\n  transform: translate3d(60px, 0, 0);\\n}\\n\\n.ui.visible.wide.left.sidebar ~ .fixed,\\n.ui.visible.wide.left.sidebar ~ .pusher {\\n  -webkit-transform: translate3d(350px, 0, 0);\\n  transform: translate3d(350px, 0, 0);\\n}\\n\\n.ui.visible[class*=\\\"very wide\\\"].left.sidebar ~ .fixed,\\n.ui.visible[class*=\\\"very wide\\\"].left.sidebar ~ .pusher {\\n  -webkit-transform: translate3d(475px, 0, 0);\\n  transform: translate3d(475px, 0, 0);\\n}\\n\\n/* Right Visible */\\n\\n.ui.visible.thin.right.sidebar ~ .fixed,\\n.ui.visible.thin.right.sidebar ~ .pusher {\\n  -webkit-transform: translate3d(-150px, 0, 0);\\n  transform: translate3d(-150px, 0, 0);\\n}\\n\\n.ui.visible[class*=\\\"very thin\\\"].right.sidebar ~ .fixed,\\n.ui.visible[class*=\\\"very thin\\\"].right.sidebar ~ .pusher {\\n  -webkit-transform: translate3d(-60px, 0, 0);\\n  transform: translate3d(-60px, 0, 0);\\n}\\n\\n.ui.visible.wide.right.sidebar ~ .fixed,\\n.ui.visible.wide.right.sidebar ~ .pusher {\\n  -webkit-transform: translate3d(-350px, 0, 0);\\n  transform: translate3d(-350px, 0, 0);\\n}\\n\\n.ui.visible[class*=\\\"very wide\\\"].right.sidebar ~ .fixed,\\n.ui.visible[class*=\\\"very wide\\\"].right.sidebar ~ .pusher {\\n  -webkit-transform: translate3d(-475px, 0, 0);\\n  transform: translate3d(-475px, 0, 0);\\n}\\n\\n/*******************************\\n          Animations\\n*******************************/\\n\\n/*--------------\\n    Overlay\\n---------------*/\\n\\n/* Set-up */\\n\\n.ui.overlay.sidebar {\\n  z-index: 102;\\n}\\n\\n/* Initial */\\n\\n.ui.left.overlay.sidebar {\\n  -webkit-transform: translate3d(-100%, 0, 0);\\n  transform: translate3d(-100%, 0, 0);\\n}\\n\\n.ui.right.overlay.sidebar {\\n  -webkit-transform: translate3d(100%, 0, 0);\\n  transform: translate3d(100%, 0, 0);\\n}\\n\\n.ui.top.overlay.sidebar {\\n  -webkit-transform: translate3d(0%, -100%, 0);\\n  transform: translate3d(0%, -100%, 0);\\n}\\n\\n.ui.bottom.overlay.sidebar {\\n  -webkit-transform: translate3d(0%, 100%, 0);\\n  transform: translate3d(0%, 100%, 0);\\n}\\n\\n/* Animation */\\n\\n.animating.ui.overlay.sidebar,\\n.ui.visible.overlay.sidebar {\\n  transition: -webkit-transform 500ms ease;\\n  -webkit-transition: -webkit-transform 500ms ease;\\n  transition: transform 500ms ease;\\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\\n}\\n\\n/* End - Sidebar */\\n\\n.ui.visible.left.overlay.sidebar {\\n  -webkit-transform: translate3d(0%, 0, 0);\\n  transform: translate3d(0%, 0, 0);\\n}\\n\\n.ui.visible.right.overlay.sidebar {\\n  -webkit-transform: translate3d(0%, 0, 0);\\n  transform: translate3d(0%, 0, 0);\\n}\\n\\n.ui.visible.top.overlay.sidebar {\\n  -webkit-transform: translate3d(0%, 0, 0);\\n  transform: translate3d(0%, 0, 0);\\n}\\n\\n.ui.visible.bottom.overlay.sidebar {\\n  -webkit-transform: translate3d(0%, 0, 0);\\n  transform: translate3d(0%, 0, 0);\\n}\\n\\n/* End - Pusher */\\n\\n.ui.visible.overlay.sidebar ~ .fixed,\\n.ui.visible.overlay.sidebar ~ .pusher {\\n  -webkit-transform: none !important;\\n  transform: none !important;\\n}\\n\\n/*--------------\\n      Push\\n---------------*/\\n\\n/* Initial */\\n\\n.ui.push.sidebar {\\n  transition: -webkit-transform 500ms ease;\\n  -webkit-transition: -webkit-transform 500ms ease;\\n  transition: transform 500ms ease;\\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\\n  z-index: 102;\\n}\\n\\n/* Sidebar - Initial */\\n\\n.ui.left.push.sidebar {\\n  -webkit-transform: translate3d(-100%, 0, 0);\\n  transform: translate3d(-100%, 0, 0);\\n}\\n\\n.ui.right.push.sidebar {\\n  -webkit-transform: translate3d(100%, 0, 0);\\n  transform: translate3d(100%, 0, 0);\\n}\\n\\n.ui.top.push.sidebar {\\n  -webkit-transform: translate3d(0%, -100%, 0);\\n  transform: translate3d(0%, -100%, 0);\\n}\\n\\n.ui.bottom.push.sidebar {\\n  -webkit-transform: translate3d(0%, 100%, 0);\\n  transform: translate3d(0%, 100%, 0);\\n}\\n\\n/* End */\\n\\n.ui.visible.push.sidebar {\\n  -webkit-transform: translate3d(0%, 0, 0);\\n  transform: translate3d(0%, 0, 0);\\n}\\n\\n/*--------------\\n    Uncover\\n---------------*/\\n\\n/* Initial */\\n\\n.ui.uncover.sidebar {\\n  -webkit-transform: translate3d(0, 0, 0);\\n  transform: translate3d(0, 0, 0);\\n  z-index: 1;\\n}\\n\\n/* End */\\n\\n.ui.visible.uncover.sidebar {\\n  -webkit-transform: translate3d(0, 0, 0);\\n  transform: translate3d(0, 0, 0);\\n  transition: -webkit-transform 500ms ease;\\n  -webkit-transition: -webkit-transform 500ms ease;\\n  transition: transform 500ms ease;\\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\\n}\\n\\n/*--------------\\n   Slide Along\\n---------------*/\\n\\n/* Initial */\\n\\n.ui.slide.along.sidebar {\\n  z-index: 1;\\n}\\n\\n/* Sidebar - Initial */\\n\\n.ui.left.slide.along.sidebar {\\n  -webkit-transform: translate3d(-50%, 0, 0);\\n  transform: translate3d(-50%, 0, 0);\\n}\\n\\n.ui.right.slide.along.sidebar {\\n  -webkit-transform: translate3d(50%, 0, 0);\\n  transform: translate3d(50%, 0, 0);\\n}\\n\\n.ui.top.slide.along.sidebar {\\n  -webkit-transform: translate3d(0, -50%, 0);\\n  transform: translate3d(0, -50%, 0);\\n}\\n\\n.ui.bottom.slide.along.sidebar {\\n  -webkit-transform: translate3d(0%, 50%, 0);\\n  transform: translate3d(0%, 50%, 0);\\n}\\n\\n/* Animation */\\n\\n.ui.animating.slide.along.sidebar {\\n  transition: -webkit-transform 500ms ease;\\n  -webkit-transition: -webkit-transform 500ms ease;\\n  transition: transform 500ms ease;\\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\\n}\\n\\n/* End */\\n\\n.ui.visible.slide.along.sidebar {\\n  -webkit-transform: translate3d(0%, 0, 0);\\n  transform: translate3d(0%, 0, 0);\\n}\\n\\n/*--------------\\n   Slide Out\\n---------------*/\\n\\n/* Initial */\\n\\n.ui.slide.out.sidebar {\\n  z-index: 1;\\n}\\n\\n/* Sidebar - Initial */\\n\\n.ui.left.slide.out.sidebar {\\n  -webkit-transform: translate3d(50%, 0, 0);\\n  transform: translate3d(50%, 0, 0);\\n}\\n\\n.ui.right.slide.out.sidebar {\\n  -webkit-transform: translate3d(-50%, 0, 0);\\n  transform: translate3d(-50%, 0, 0);\\n}\\n\\n.ui.top.slide.out.sidebar {\\n  -webkit-transform: translate3d(0%, 50%, 0);\\n  transform: translate3d(0%, 50%, 0);\\n}\\n\\n.ui.bottom.slide.out.sidebar {\\n  -webkit-transform: translate3d(0%, -50%, 0);\\n  transform: translate3d(0%, -50%, 0);\\n}\\n\\n/* Animation */\\n\\n.ui.animating.slide.out.sidebar {\\n  transition: -webkit-transform 500ms ease;\\n  -webkit-transition: -webkit-transform 500ms ease;\\n  transition: transform 500ms ease;\\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\\n}\\n\\n/* End */\\n\\n.ui.visible.slide.out.sidebar {\\n  -webkit-transform: translate3d(0%, 0, 0);\\n  transform: translate3d(0%, 0, 0);\\n}\\n\\n/*--------------\\n   Scale Down\\n---------------*/\\n\\n/* Initial */\\n\\n.ui.scale.down.sidebar {\\n  transition: -webkit-transform 500ms ease;\\n  -webkit-transition: -webkit-transform 500ms ease;\\n  transition: transform 500ms ease;\\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\\n  z-index: 102;\\n}\\n\\n/* Sidebar - Initial  */\\n\\n.ui.left.scale.down.sidebar {\\n  -webkit-transform: translate3d(-100%, 0, 0);\\n  transform: translate3d(-100%, 0, 0);\\n}\\n\\n.ui.right.scale.down.sidebar {\\n  -webkit-transform: translate3d(100%, 0, 0);\\n  transform: translate3d(100%, 0, 0);\\n}\\n\\n.ui.top.scale.down.sidebar {\\n  -webkit-transform: translate3d(0%, -100%, 0);\\n  transform: translate3d(0%, -100%, 0);\\n}\\n\\n.ui.bottom.scale.down.sidebar {\\n  -webkit-transform: translate3d(0%, 100%, 0);\\n  transform: translate3d(0%, 100%, 0);\\n}\\n\\n/* Pusher - Initial */\\n\\n.ui.scale.down.left.sidebar ~ .pusher {\\n  -webkit-transform-origin: 75% 50%;\\n  transform-origin: 75% 50%;\\n}\\n\\n.ui.scale.down.right.sidebar ~ .pusher {\\n  -webkit-transform-origin: 25% 50%;\\n  transform-origin: 25% 50%;\\n}\\n\\n.ui.scale.down.top.sidebar ~ .pusher {\\n  -webkit-transform-origin: 50% 75%;\\n  transform-origin: 50% 75%;\\n}\\n\\n.ui.scale.down.bottom.sidebar ~ .pusher {\\n  -webkit-transform-origin: 50% 25%;\\n  transform-origin: 50% 25%;\\n}\\n\\n/* Animation */\\n\\n.ui.animating.scale.down > .visible.ui.sidebar {\\n  transition: -webkit-transform 500ms ease;\\n  -webkit-transition: -webkit-transform 500ms ease;\\n  transition: transform 500ms ease;\\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\\n}\\n\\n.ui.visible.scale.down.sidebar ~ .pusher,\\n.ui.animating.scale.down.sidebar ~ .pusher {\\n  display: block !important;\\n  width: 100%;\\n  height: 100%;\\n  overflow: hidden !important;\\n}\\n\\n/* End */\\n\\n.ui.visible.scale.down.sidebar {\\n  -webkit-transform: translate3d(0, 0, 0);\\n  transform: translate3d(0, 0, 0);\\n}\\n\\n.ui.visible.scale.down.sidebar ~ .pusher {\\n  -webkit-transform: scale(0.75);\\n  transform: scale(0.75);\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Sticky\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n            Sticky\\n*******************************/\\n\\n.ui.sticky {\\n  position: static;\\n  -webkit-transition: none;\\n  transition: none;\\n  z-index: 800;\\n}\\n\\n/*******************************\\n            States\\n*******************************/\\n\\n/* Bound */\\n\\n.ui.sticky.bound {\\n  position: absolute;\\n  left: auto;\\n  right: auto;\\n}\\n\\n/* Fixed */\\n\\n.ui.sticky.fixed {\\n  position: fixed;\\n  left: auto;\\n  right: auto;\\n}\\n\\n/* Bound/Fixed Position */\\n\\n.ui.sticky.bound.top,\\n.ui.sticky.fixed.top {\\n  top: 0;\\n  bottom: auto;\\n}\\n\\n.ui.sticky.bound.bottom,\\n.ui.sticky.fixed.bottom {\\n  top: auto;\\n  bottom: 0;\\n}\\n\\n/*******************************\\n            Types\\n*******************************/\\n\\n.ui.native.sticky {\\n  position: -webkit-sticky;\\n  position: -moz-sticky;\\n  position: -ms-sticky;\\n  position: -o-sticky;\\n  position: sticky;\\n}\\n\\n/*******************************\\n         Theme Overrides\\n*******************************/\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Tab\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n           UI Tabs\\n*******************************/\\n\\n.ui.tab {\\n  display: none;\\n}\\n\\n/*******************************\\n             States\\n*******************************/\\n\\n/*--------------------\\n       Active\\n---------------------*/\\n\\n.ui.tab.active,\\n.ui.tab.open {\\n  display: block;\\n}\\n\\n/*--------------------\\n       Loading\\n---------------------*/\\n\\n.ui.tab.loading {\\n  position: relative;\\n  overflow: hidden;\\n  display: block;\\n  min-height: 250px;\\n}\\n\\n.ui.tab.loading * {\\n  position: relative !important;\\n  left: -10000px !important;\\n}\\n\\n.ui.tab.loading:before,\\n.ui.tab.loading.segment:before {\\n  position: absolute;\\n  content: '';\\n  top: 50%;\\n  left: 50%;\\n  margin: -1.25em 0 0 -1.25em;\\n  width: 2.5em;\\n  height: 2.5em;\\n  border-radius: 500rem;\\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\\n}\\n\\n.ui.tab.loading:after,\\n.ui.tab.loading.segment:after {\\n  position: absolute;\\n  content: '';\\n  top: 50%;\\n  left: 50%;\\n  margin: -1.25em 0 0 -1.25em;\\n  width: 2.5em;\\n  height: 2.5em;\\n  -webkit-animation: loader 0.6s infinite linear;\\n  animation: loader 0.6s infinite linear;\\n  border: 0.2em solid #767676;\\n  border-radius: 500rem;\\n  -webkit-box-shadow: 0 0 0 1px transparent;\\n          box-shadow: 0 0 0 1px transparent;\\n}\\n\\n/*******************************\\n         Tab Overrides\\n*******************************/\\n\\n/*******************************\\n        User Overrides\\n*******************************/\\n/*!\\n * # Fomantic-UI - Toast\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n        Toast container\\n*******************************/\\n\\n.ui.toast-container {\\n  position: fixed;\\n  z-index: 9999;\\n}\\n\\n.ui.top.right.toast-container {\\n  top: 0.85714286em;\\n  right: 0.85714286em;\\n  margin-left: 0.85714286em;\\n}\\n\\n.ui.top.left.toast-container {\\n  top: 0.85714286em;\\n  left: 0.85714286em;\\n  margin-right: 0.85714286em;\\n}\\n\\n.ui.top.center.toast-container {\\n  left: 50%;\\n  -webkit-transform: translate(-50%, 0);\\n  transform: translate(-50%, 0);\\n  top: 0.85714286em;\\n}\\n\\n.ui.bottom.right.toast-container {\\n  bottom: 0.85714286em;\\n  right: 0.85714286em;\\n  margin-left: 0.85714286em;\\n}\\n\\n.ui.bottom.left.toast-container {\\n  bottom: 0.85714286em;\\n  left: 0.85714286em;\\n  margin-right: 0.85714286em;\\n}\\n\\n.ui.bottom.center.toast-container {\\n  left: 50%;\\n  -webkit-transform: translate(-50%, 0);\\n  transform: translate(-50%, 0);\\n  bottom: 0.85714286em;\\n}\\n\\n/*******************************\\n            Toast\\n*******************************/\\n\\n.toast {\\n  display: block;\\n  border-radius: 0.28571429rem;\\n  padding: 0.78571429em 1em;\\n  margin: 0 0 6px;\\n  color: rgba(255, 255, 255, 0.9);\\n}\\n\\n.floating.toast,\\n.hoverfloating.toast:hover {\\n  -webkit-box-shadow: 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.hoverfloating.message:hover {\\n  -webkit-box-shadow: 0 0 0 1px inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n          box-shadow: 0 0 0 1px inset, 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);\\n}\\n\\n.center.toast-container .toast-box,\\n.right.toast-container .toast-box {\\n  margin-left: auto;\\n}\\n\\n.center.toast-container .toast-box {\\n  margin-right: auto;\\n}\\n\\n.visible.toast-box,\\n.animating.toast-box,\\n.toast-box {\\n  display: table !important;\\n}\\n\\n.toast-container .compact {\\n  display: block;\\n  width: 300px;\\n}\\n\\n.toast-container .message,\\n.toast:hover {\\n  opacity: 1;\\n  cursor: pointer;\\n}\\n\\n.icon.toast .content {\\n  padding-left: 3em;\\n}\\n\\n.toast > .content > .header {\\n  font-weight: bold;\\n}\\n\\n.info.toast {\\n  background-color: #31CCEC;\\n}\\n\\n.warning.toast {\\n  background-color: #F2C037;\\n}\\n\\n.success.toast {\\n  background-color: #21BA45;\\n}\\n\\n.error.toast {\\n  background-color: #DB2828;\\n}\\n\\n.toast-box .info.attached.progress .bar {\\n  background: #12a1bf !important;\\n}\\n\\n.toast-box .warning.attached.progress .bar {\\n  background: #cf9b0d !important;\\n}\\n\\n.toast-box .success.attached.progress .bar {\\n  background: #15792d !important;\\n}\\n\\n.toast-box .error.attached.progress .bar {\\n  background: #9c1a1a !important;\\n}\\n\\n/*--------------\\n     Colors\\n-------------- */\\n\\n.primary.toast {\\n  background-color: #2185D0;\\n}\\n\\n.inverted.primary.toast,\\n.toast-box .inverted.primary.attached.progress .bar {\\n  background-color: #54C8FF;\\n}\\n\\n.secondary.toast {\\n  background-color: #1B1C1D;\\n}\\n\\n.inverted.secondary.toast,\\n.toast-box .inverted.secondary.attached.progress .bar {\\n  background-color: #545454;\\n}\\n\\n.red.toast {\\n  background-color: #DB2828;\\n}\\n\\n.inverted.red.toast,\\n.toast-box .inverted.red.attached.progress .bar {\\n  background-color: #FF695E;\\n}\\n\\n.orange.toast {\\n  background-color: #F2711C;\\n}\\n\\n.inverted.orange.toast,\\n.toast-box .inverted.orange.attached.progress .bar {\\n  background-color: #FF851B;\\n}\\n\\n.yellow.toast {\\n  background-color: #FBBD08;\\n}\\n\\n.inverted.yellow.toast,\\n.toast-box .inverted.yellow.attached.progress .bar {\\n  background-color: #FFE21F;\\n}\\n\\n.olive.toast {\\n  background-color: #B5CC18;\\n}\\n\\n.inverted.olive.toast,\\n.toast-box .inverted.olive.attached.progress .bar {\\n  background-color: #D9E778;\\n}\\n\\n.green.toast {\\n  background-color: #21BA45;\\n}\\n\\n.inverted.green.toast,\\n.toast-box .inverted.green.attached.progress .bar {\\n  background-color: #2ECC40;\\n}\\n\\n.teal.toast {\\n  background-color: #00B5AD;\\n}\\n\\n.inverted.teal.toast,\\n.toast-box .inverted.teal.attached.progress .bar {\\n  background-color: #6DFFFF;\\n}\\n\\n.blue.toast {\\n  background-color: #2185D0;\\n}\\n\\n.inverted.blue.toast,\\n.toast-box .inverted.blue.attached.progress .bar {\\n  background-color: #54C8FF;\\n}\\n\\n.violet.toast {\\n  background-color: #6435C9;\\n}\\n\\n.inverted.violet.toast,\\n.toast-box .inverted.violet.attached.progress .bar {\\n  background-color: #A291FB;\\n}\\n\\n.purple.toast {\\n  background-color: #A333C8;\\n}\\n\\n.inverted.purple.toast,\\n.toast-box .inverted.purple.attached.progress .bar {\\n  background-color: #DC73FF;\\n}\\n\\n.pink.toast {\\n  background-color: #E03997;\\n}\\n\\n.inverted.pink.toast,\\n.toast-box .inverted.pink.attached.progress .bar {\\n  background-color: #FF8EDF;\\n}\\n\\n.brown.toast {\\n  background-color: #A5673F;\\n}\\n\\n.inverted.brown.toast,\\n.toast-box .inverted.brown.attached.progress .bar {\\n  background-color: #D67C1C;\\n}\\n\\n.grey.toast {\\n  background-color: #767676;\\n}\\n\\n.inverted.grey.toast,\\n.toast-box .inverted.grey.attached.progress .bar {\\n  background-color: #DCDDDE;\\n}\\n\\n.black.toast {\\n  background-color: #1B1C1D;\\n}\\n\\n.inverted.black.toast,\\n.toast-box .inverted.black.attached.progress .bar {\\n  background-color: #545454;\\n}\\n\\n.inverted.toast {\\n  color: rgba(0, 0, 0, 0.87);\\n}\\n\\n/*--------------\\n      Icon\\n---------------*/\\n\\n.icon.toast > .icon:not(.close) {\\n  display: inline-block;\\n  vertical-align: middle;\\n  font-size: 1.5em;\\n  position: absolute;\\n}\\n\\n.icon.toast > .content {\\n  display: inline-block;\\n  vertical-align: middle;\\n}\\n\\n/*---------------\\n   Progress Bar\\n ----------------*/\\n\\n.toast-box .attached.progress .bar {\\n  min-width: 0;\\n}\\n\\n.toast-box .active.progress .bar:after {\\n  -webkit-animation: progress-active 2s ease infinite !important;\\n  animation: progress-active 2s ease infinite !important;\\n}\\n\\n.toast-box {\\n  margin-bottom: 6px;\\n}\\n\\n.toast-box .toast,\\n.toast-box .message {\\n  margin-top: 0;\\n  margin-bottom: 0;\\n  position: relative;\\n}\\n\\n.toast-box .attached.progress {\\n  z-index: 1;\\n}\\n\\n.toast-box .bottom.attached.progress {\\n  margin: -3px 0 6px;\\n}\\n\\n.toast-box .top.attached.progress {\\n  margin: 6px 0 -3px;\\n}\\n\\n/* --------\\n Close Icon\\n -----------*/\\n\\n.toast-box .message > .close.icon {\\n  top: 0.3em;\\n  right: 0.3em;\\n}\\n\\n.toast-box .toast > .close.icon {\\n  cursor: pointer;\\n  position: absolute;\\n  margin: 0;\\n  top: 0.3em;\\n  right: 0.3em;\\n  opacity: 0.7;\\n  -webkit-transition: opacity 0.1s ease;\\n  transition: opacity 0.1s ease;\\n}\\n\\n.toast-box .toast > .close.icon:hover {\\n  opacity: 1;\\n}\\n/*!\\n * # Fomantic-UI - Transition\\n * http://github.com/fomantic/Fomantic-UI/\\n *\\n *\\n * Released under the MIT license\\n * http://opensource.org/licenses/MIT\\n *\\n */\\n\\n/*******************************\\n          Transitions\\n*******************************/\\n\\n.transition {\\n  -webkit-animation-iteration-count: 1;\\n  animation-iteration-count: 1;\\n  -webkit-animation-duration: 300ms;\\n  animation-duration: 300ms;\\n  -webkit-animation-timing-function: ease;\\n  animation-timing-function: ease;\\n  -webkit-animation-fill-mode: both;\\n  animation-fill-mode: both;\\n}\\n\\n/*******************************\\n            States\\n*******************************/\\n\\n/* Animating */\\n\\n.animating.transition {\\n  -webkit-backface-visibility: hidden;\\n  backface-visibility: hidden;\\n  visibility: visible !important;\\n}\\n\\n/* Loading */\\n\\n.loading.transition {\\n  position: absolute;\\n  top: -99999px;\\n  left: -99999px;\\n}\\n\\n/* Hidden */\\n\\n.hidden.transition {\\n  display: none;\\n  visibility: hidden;\\n}\\n\\n/* Visible */\\n\\n.visible.transition {\\n  display: block !important;\\n  visibility: visible !important;\\n  /*  backface-visibility: @backfaceVisibility;\\n  transform: @use3DAcceleration;*/\\n}\\n\\n/* Disabled */\\n\\n.disabled.transition {\\n  -webkit-animation-play-state: paused;\\n  animation-play-state: paused;\\n}\\n\\n/*******************************\\n          Variations\\n*******************************/\\n\\n.looping.transition {\\n  -webkit-animation-iteration-count: infinite;\\n  animation-iteration-count: infinite;\\n}\\n\\n/*******************************\\n          Transitions\\n*******************************/\\n\\n/*\\n  Some transitions adapted from Animate CSS\\n  https://github.com/daneden/animate.css\\n\\n  Additional transitions adapted from Glide\\n  by Nick Pettit - https://github.com/nickpettit/glide\\n*/\\n\\n/*--------------\\n     Browse\\n---------------*/\\n\\n.transition.browse {\\n  -webkit-animation-duration: 500ms;\\n  animation-duration: 500ms;\\n}\\n\\n.transition.browse.in {\\n  -webkit-animation-name: browseIn;\\n  animation-name: browseIn;\\n}\\n\\n.transition.browse.out,\\n.transition.browse.left.out {\\n  -webkit-animation-name: browseOutLeft;\\n  animation-name: browseOutLeft;\\n}\\n\\n.transition.browse.right.out {\\n  -webkit-animation-name: browseOutRight;\\n  animation-name: browseOutRight;\\n}\\n\\n/* In */\\n\\n@-webkit-keyframes browseIn {\\n  0% {\\n    -webkit-transform: scale(0.8) translateZ(0px);\\n    transform: scale(0.8) translateZ(0px);\\n    z-index: -1;\\n  }\\n\\n  10% {\\n    -webkit-transform: scale(0.8) translateZ(0px);\\n    transform: scale(0.8) translateZ(0px);\\n    z-index: -1;\\n    opacity: 0.7;\\n  }\\n\\n  80% {\\n    -webkit-transform: scale(1.05) translateZ(0px);\\n    transform: scale(1.05) translateZ(0px);\\n    opacity: 1;\\n    z-index: 999;\\n  }\\n\\n  100% {\\n    -webkit-transform: scale(1) translateZ(0px);\\n    transform: scale(1) translateZ(0px);\\n    z-index: 999;\\n  }\\n}\\n\\n@keyframes browseIn {\\n  0% {\\n    -webkit-transform: scale(0.8) translateZ(0px);\\n    transform: scale(0.8) translateZ(0px);\\n    z-index: -1;\\n  }\\n\\n  10% {\\n    -webkit-transform: scale(0.8) translateZ(0px);\\n    transform: scale(0.8) translateZ(0px);\\n    z-index: -1;\\n    opacity: 0.7;\\n  }\\n\\n  80% {\\n    -webkit-transform: scale(1.05) translateZ(0px);\\n    transform: scale(1.05) translateZ(0px);\\n    opacity: 1;\\n    z-index: 999;\\n  }\\n\\n  100% {\\n    -webkit-transform: scale(1) translateZ(0px);\\n    transform: scale(1) translateZ(0px);\\n    z-index: 999;\\n  }\\n}\\n\\n/* Out */\\n\\n@-webkit-keyframes browseOutLeft {\\n  0% {\\n    z-index: 999;\\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg);\\n  }\\n\\n  50% {\\n    z-index: -1;\\n    -webkit-transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\\n    transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\\n  }\\n\\n  80% {\\n    opacity: 1;\\n  }\\n\\n  100% {\\n    z-index: -1;\\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\\n    opacity: 0;\\n  }\\n}\\n\\n@keyframes browseOutLeft {\\n  0% {\\n    z-index: 999;\\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg);\\n  }\\n\\n  50% {\\n    z-index: -1;\\n    -webkit-transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\\n    transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\\n  }\\n\\n  80% {\\n    opacity: 1;\\n  }\\n\\n  100% {\\n    z-index: -1;\\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\\n    opacity: 0;\\n  }\\n}\\n\\n@-webkit-keyframes browseOutRight {\\n  0% {\\n    z-index: 999;\\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg);\\n  }\\n\\n  50% {\\n    z-index: 1;\\n    -webkit-transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\\n    transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\\n  }\\n\\n  80% {\\n    opacity: 1;\\n  }\\n\\n  100% {\\n    z-index: 1;\\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\\n    opacity: 0;\\n  }\\n}\\n\\n@keyframes browseOutRight {\\n  0% {\\n    z-index: 999;\\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg);\\n  }\\n\\n  50% {\\n    z-index: 1;\\n    -webkit-transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\\n    transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\\n  }\\n\\n  80% {\\n    opacity: 1;\\n  }\\n\\n  100% {\\n    z-index: 1;\\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\\n    opacity: 0;\\n  }\\n}\\n\\n/*--------------\\n     Drop\\n---------------*/\\n\\n.drop.transition {\\n  -webkit-transform-origin: top center;\\n  transform-origin: top center;\\n  -webkit-animation-duration: 400ms;\\n  animation-duration: 400ms;\\n  -webkit-animation-timing-function: cubic-bezier(0.34, 1.61, 0.7, 1);\\n  animation-timing-function: cubic-bezier(0.34, 1.61, 0.7, 1);\\n}\\n\\n.drop.transition.in {\\n  -webkit-animation-name: dropIn;\\n  animation-name: dropIn;\\n}\\n\\n.drop.transition.out {\\n  -webkit-animation-name: dropOut;\\n  animation-name: dropOut;\\n}\\n\\n/* Drop */\\n\\n@-webkit-keyframes dropIn {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: scale(0);\\n    transform: scale(0);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n  }\\n}\\n\\n@keyframes dropIn {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: scale(0);\\n    transform: scale(0);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n  }\\n}\\n\\n@-webkit-keyframes dropOut {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: scale(0);\\n    transform: scale(0);\\n  }\\n}\\n\\n@keyframes dropOut {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: scale(0);\\n    transform: scale(0);\\n  }\\n}\\n\\n/*--------------\\n      Fade\\n---------------*/\\n\\n.transition.fade.in {\\n  -webkit-animation-name: fadeIn;\\n  animation-name: fadeIn;\\n}\\n\\n.transition[class*=\\\"fade up\\\"].in {\\n  -webkit-animation-name: fadeInUp;\\n  animation-name: fadeInUp;\\n}\\n\\n.transition[class*=\\\"fade down\\\"].in {\\n  -webkit-animation-name: fadeInDown;\\n  animation-name: fadeInDown;\\n}\\n\\n.transition[class*=\\\"fade left\\\"].in {\\n  -webkit-animation-name: fadeInLeft;\\n  animation-name: fadeInLeft;\\n}\\n\\n.transition[class*=\\\"fade right\\\"].in {\\n  -webkit-animation-name: fadeInRight;\\n  animation-name: fadeInRight;\\n}\\n\\n.transition.fade.out {\\n  -webkit-animation-name: fadeOut;\\n  animation-name: fadeOut;\\n}\\n\\n.transition[class*=\\\"fade up\\\"].out {\\n  -webkit-animation-name: fadeOutUp;\\n  animation-name: fadeOutUp;\\n}\\n\\n.transition[class*=\\\"fade down\\\"].out {\\n  -webkit-animation-name: fadeOutDown;\\n  animation-name: fadeOutDown;\\n}\\n\\n.transition[class*=\\\"fade left\\\"].out {\\n  -webkit-animation-name: fadeOutLeft;\\n  animation-name: fadeOutLeft;\\n}\\n\\n.transition[class*=\\\"fade right\\\"].out {\\n  -webkit-animation-name: fadeOutRight;\\n  animation-name: fadeOutRight;\\n}\\n\\n/* In */\\n\\n@-webkit-keyframes fadeIn {\\n  0% {\\n    opacity: 0;\\n  }\\n\\n  100% {\\n    opacity: 1;\\n  }\\n}\\n\\n@keyframes fadeIn {\\n  0% {\\n    opacity: 0;\\n  }\\n\\n  100% {\\n    opacity: 1;\\n  }\\n}\\n\\n@-webkit-keyframes fadeInUp {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: translateY(10%);\\n    transform: translateY(10%);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: translateY(0%);\\n    transform: translateY(0%);\\n  }\\n}\\n\\n@keyframes fadeInUp {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: translateY(10%);\\n    transform: translateY(10%);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: translateY(0%);\\n    transform: translateY(0%);\\n  }\\n}\\n\\n@-webkit-keyframes fadeInDown {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: translateY(-10%);\\n    transform: translateY(-10%);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: translateY(0%);\\n    transform: translateY(0%);\\n  }\\n}\\n\\n@keyframes fadeInDown {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: translateY(-10%);\\n    transform: translateY(-10%);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: translateY(0%);\\n    transform: translateY(0%);\\n  }\\n}\\n\\n@-webkit-keyframes fadeInLeft {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: translateX(10%);\\n    transform: translateX(10%);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: translateX(0%);\\n    transform: translateX(0%);\\n  }\\n}\\n\\n@keyframes fadeInLeft {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: translateX(10%);\\n    transform: translateX(10%);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: translateX(0%);\\n    transform: translateX(0%);\\n  }\\n}\\n\\n@-webkit-keyframes fadeInRight {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: translateX(-10%);\\n    transform: translateX(-10%);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: translateX(0%);\\n    transform: translateX(0%);\\n  }\\n}\\n\\n@keyframes fadeInRight {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: translateX(-10%);\\n    transform: translateX(-10%);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: translateX(0%);\\n    transform: translateX(0%);\\n  }\\n}\\n\\n/* Out */\\n\\n@-webkit-keyframes fadeOut {\\n  0% {\\n    opacity: 1;\\n  }\\n\\n  100% {\\n    opacity: 0;\\n  }\\n}\\n\\n@keyframes fadeOut {\\n  0% {\\n    opacity: 1;\\n  }\\n\\n  100% {\\n    opacity: 0;\\n  }\\n}\\n\\n@-webkit-keyframes fadeOutUp {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: translateY(0%);\\n    transform: translateY(0%);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: translateY(5%);\\n    transform: translateY(5%);\\n  }\\n}\\n\\n@keyframes fadeOutUp {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: translateY(0%);\\n    transform: translateY(0%);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: translateY(5%);\\n    transform: translateY(5%);\\n  }\\n}\\n\\n@-webkit-keyframes fadeOutDown {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: translateY(0%);\\n    transform: translateY(0%);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: translateY(-5%);\\n    transform: translateY(-5%);\\n  }\\n}\\n\\n@keyframes fadeOutDown {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: translateY(0%);\\n    transform: translateY(0%);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: translateY(-5%);\\n    transform: translateY(-5%);\\n  }\\n}\\n\\n@-webkit-keyframes fadeOutLeft {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: translateX(0%);\\n    transform: translateX(0%);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: translateX(5%);\\n    transform: translateX(5%);\\n  }\\n}\\n\\n@keyframes fadeOutLeft {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: translateX(0%);\\n    transform: translateX(0%);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: translateX(5%);\\n    transform: translateX(5%);\\n  }\\n}\\n\\n@-webkit-keyframes fadeOutRight {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: translateX(0%);\\n    transform: translateX(0%);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: translateX(-5%);\\n    transform: translateX(-5%);\\n  }\\n}\\n\\n@keyframes fadeOutRight {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: translateX(0%);\\n    transform: translateX(0%);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: translateX(-5%);\\n    transform: translateX(-5%);\\n  }\\n}\\n\\n/*--------------\\n     Flips\\n---------------*/\\n\\n.flip.transition.in,\\n.flip.transition.out {\\n  -webkit-animation-duration: 600ms;\\n  animation-duration: 600ms;\\n}\\n\\n.horizontal.flip.transition.in {\\n  -webkit-animation-name: horizontalFlipIn;\\n  animation-name: horizontalFlipIn;\\n}\\n\\n.horizontal.flip.transition.out {\\n  -webkit-animation-name: horizontalFlipOut;\\n  animation-name: horizontalFlipOut;\\n}\\n\\n.vertical.flip.transition.in {\\n  -webkit-animation-name: verticalFlipIn;\\n  animation-name: verticalFlipIn;\\n}\\n\\n.vertical.flip.transition.out {\\n  -webkit-animation-name: verticalFlipOut;\\n  animation-name: verticalFlipOut;\\n}\\n\\n/* In */\\n\\n@-webkit-keyframes horizontalFlipIn {\\n  0% {\\n    -webkit-transform: perspective(2000px) rotateY(-90deg);\\n    transform: perspective(2000px) rotateY(-90deg);\\n    opacity: 0;\\n  }\\n\\n  100% {\\n    -webkit-transform: perspective(2000px) rotateY(0deg);\\n    transform: perspective(2000px) rotateY(0deg);\\n    opacity: 1;\\n  }\\n}\\n\\n@keyframes horizontalFlipIn {\\n  0% {\\n    -webkit-transform: perspective(2000px) rotateY(-90deg);\\n    transform: perspective(2000px) rotateY(-90deg);\\n    opacity: 0;\\n  }\\n\\n  100% {\\n    -webkit-transform: perspective(2000px) rotateY(0deg);\\n    transform: perspective(2000px) rotateY(0deg);\\n    opacity: 1;\\n  }\\n}\\n\\n@-webkit-keyframes verticalFlipIn {\\n  0% {\\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\\n    transform: perspective(2000px) rotateX(-90deg);\\n    opacity: 0;\\n  }\\n\\n  100% {\\n    -webkit-transform: perspective(2000px) rotateX(0deg);\\n    transform: perspective(2000px) rotateX(0deg);\\n    opacity: 1;\\n  }\\n}\\n\\n@keyframes verticalFlipIn {\\n  0% {\\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\\n    transform: perspective(2000px) rotateX(-90deg);\\n    opacity: 0;\\n  }\\n\\n  100% {\\n    -webkit-transform: perspective(2000px) rotateX(0deg);\\n    transform: perspective(2000px) rotateX(0deg);\\n    opacity: 1;\\n  }\\n}\\n\\n/* Out */\\n\\n@-webkit-keyframes horizontalFlipOut {\\n  0% {\\n    -webkit-transform: perspective(2000px) rotateY(0deg);\\n    transform: perspective(2000px) rotateY(0deg);\\n    opacity: 1;\\n  }\\n\\n  100% {\\n    -webkit-transform: perspective(2000px) rotateY(90deg);\\n    transform: perspective(2000px) rotateY(90deg);\\n    opacity: 0;\\n  }\\n}\\n\\n@keyframes horizontalFlipOut {\\n  0% {\\n    -webkit-transform: perspective(2000px) rotateY(0deg);\\n    transform: perspective(2000px) rotateY(0deg);\\n    opacity: 1;\\n  }\\n\\n  100% {\\n    -webkit-transform: perspective(2000px) rotateY(90deg);\\n    transform: perspective(2000px) rotateY(90deg);\\n    opacity: 0;\\n  }\\n}\\n\\n@-webkit-keyframes verticalFlipOut {\\n  0% {\\n    -webkit-transform: perspective(2000px) rotateX(0deg);\\n    transform: perspective(2000px) rotateX(0deg);\\n    opacity: 1;\\n  }\\n\\n  100% {\\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\\n    transform: perspective(2000px) rotateX(-90deg);\\n    opacity: 0;\\n  }\\n}\\n\\n@keyframes verticalFlipOut {\\n  0% {\\n    -webkit-transform: perspective(2000px) rotateX(0deg);\\n    transform: perspective(2000px) rotateX(0deg);\\n    opacity: 1;\\n  }\\n\\n  100% {\\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\\n    transform: perspective(2000px) rotateX(-90deg);\\n    opacity: 0;\\n  }\\n}\\n\\n/*--------------\\n      Scale\\n---------------*/\\n\\n.scale.transition.in {\\n  -webkit-animation-name: scaleIn;\\n  animation-name: scaleIn;\\n}\\n\\n.scale.transition.out {\\n  -webkit-animation-name: scaleOut;\\n  animation-name: scaleOut;\\n}\\n\\n@-webkit-keyframes scaleIn {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: scale(0.8);\\n    transform: scale(0.8);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n  }\\n}\\n\\n@keyframes scaleIn {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: scale(0.8);\\n    transform: scale(0.8);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n  }\\n}\\n\\n/* Out */\\n\\n@-webkit-keyframes scaleOut {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: scale(0.9);\\n    transform: scale(0.9);\\n  }\\n}\\n\\n@keyframes scaleOut {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: scale(0.9);\\n    transform: scale(0.9);\\n  }\\n}\\n\\n/*--------------\\n      Fly\\n---------------*/\\n\\n/* Inward */\\n\\n.transition.fly {\\n  -webkit-animation-duration: 0.6s;\\n  animation-duration: 0.6s;\\n  -webkit-transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\\n          transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\\n}\\n\\n.transition.fly.in {\\n  -webkit-animation-name: flyIn;\\n  animation-name: flyIn;\\n}\\n\\n.transition[class*=\\\"fly up\\\"].in {\\n  -webkit-animation-name: flyInUp;\\n  animation-name: flyInUp;\\n}\\n\\n.transition[class*=\\\"fly down\\\"].in {\\n  -webkit-animation-name: flyInDown;\\n  animation-name: flyInDown;\\n}\\n\\n.transition[class*=\\\"fly left\\\"].in {\\n  -webkit-animation-name: flyInLeft;\\n  animation-name: flyInLeft;\\n}\\n\\n.transition[class*=\\\"fly right\\\"].in {\\n  -webkit-animation-name: flyInRight;\\n  animation-name: flyInRight;\\n}\\n\\n/* Outward */\\n\\n.transition.fly.out {\\n  -webkit-animation-name: flyOut;\\n  animation-name: flyOut;\\n}\\n\\n.transition[class*=\\\"fly up\\\"].out {\\n  -webkit-animation-name: flyOutUp;\\n  animation-name: flyOutUp;\\n}\\n\\n.transition[class*=\\\"fly down\\\"].out {\\n  -webkit-animation-name: flyOutDown;\\n  animation-name: flyOutDown;\\n}\\n\\n.transition[class*=\\\"fly left\\\"].out {\\n  -webkit-animation-name: flyOutLeft;\\n  animation-name: flyOutLeft;\\n}\\n\\n.transition[class*=\\\"fly right\\\"].out {\\n  -webkit-animation-name: flyOutRight;\\n  animation-name: flyOutRight;\\n}\\n\\n/* In */\\n\\n@-webkit-keyframes flyIn {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\\n    transform: scale3d(0.3, 0.3, 0.3);\\n  }\\n\\n  20% {\\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\\n    transform: scale3d(1.1, 1.1, 1.1);\\n  }\\n\\n  40% {\\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\\n    transform: scale3d(0.9, 0.9, 0.9);\\n  }\\n\\n  60% {\\n    opacity: 1;\\n    -webkit-transform: scale3d(1.03, 1.03, 1.03);\\n    transform: scale3d(1.03, 1.03, 1.03);\\n  }\\n\\n  80% {\\n    -webkit-transform: scale3d(0.97, 0.97, 0.97);\\n    transform: scale3d(0.97, 0.97, 0.97);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: scale3d(1, 1, 1);\\n    transform: scale3d(1, 1, 1);\\n  }\\n}\\n\\n@keyframes flyIn {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\\n    transform: scale3d(0.3, 0.3, 0.3);\\n  }\\n\\n  20% {\\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\\n    transform: scale3d(1.1, 1.1, 1.1);\\n  }\\n\\n  40% {\\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\\n    transform: scale3d(0.9, 0.9, 0.9);\\n  }\\n\\n  60% {\\n    opacity: 1;\\n    -webkit-transform: scale3d(1.03, 1.03, 1.03);\\n    transform: scale3d(1.03, 1.03, 1.03);\\n  }\\n\\n  80% {\\n    -webkit-transform: scale3d(0.97, 0.97, 0.97);\\n    transform: scale3d(0.97, 0.97, 0.97);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: scale3d(1, 1, 1);\\n    transform: scale3d(1, 1, 1);\\n  }\\n}\\n\\n@-webkit-keyframes flyInUp {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: translate3d(0, 1500px, 0);\\n    transform: translate3d(0, 1500px, 0);\\n  }\\n\\n  60% {\\n    opacity: 1;\\n    -webkit-transform: translate3d(0, -20px, 0);\\n    transform: translate3d(0, -20px, 0);\\n  }\\n\\n  75% {\\n    -webkit-transform: translate3d(0, 10px, 0);\\n    transform: translate3d(0, 10px, 0);\\n  }\\n\\n  90% {\\n    -webkit-transform: translate3d(0, -5px, 0);\\n    transform: translate3d(0, -5px, 0);\\n  }\\n\\n  100% {\\n    -webkit-transform: translate3d(0, 0, 0);\\n    transform: translate3d(0, 0, 0);\\n  }\\n}\\n\\n@keyframes flyInUp {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: translate3d(0, 1500px, 0);\\n    transform: translate3d(0, 1500px, 0);\\n  }\\n\\n  60% {\\n    opacity: 1;\\n    -webkit-transform: translate3d(0, -20px, 0);\\n    transform: translate3d(0, -20px, 0);\\n  }\\n\\n  75% {\\n    -webkit-transform: translate3d(0, 10px, 0);\\n    transform: translate3d(0, 10px, 0);\\n  }\\n\\n  90% {\\n    -webkit-transform: translate3d(0, -5px, 0);\\n    transform: translate3d(0, -5px, 0);\\n  }\\n\\n  100% {\\n    -webkit-transform: translate3d(0, 0, 0);\\n    transform: translate3d(0, 0, 0);\\n  }\\n}\\n\\n@-webkit-keyframes flyInDown {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: translate3d(0, -1500px, 0);\\n    transform: translate3d(0, -1500px, 0);\\n  }\\n\\n  60% {\\n    opacity: 1;\\n    -webkit-transform: translate3d(0, 25px, 0);\\n    transform: translate3d(0, 25px, 0);\\n  }\\n\\n  75% {\\n    -webkit-transform: translate3d(0, -10px, 0);\\n    transform: translate3d(0, -10px, 0);\\n  }\\n\\n  90% {\\n    -webkit-transform: translate3d(0, 5px, 0);\\n    transform: translate3d(0, 5px, 0);\\n  }\\n\\n  100% {\\n    -webkit-transform: none;\\n    transform: none;\\n  }\\n}\\n\\n@keyframes flyInDown {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: translate3d(0, -1500px, 0);\\n    transform: translate3d(0, -1500px, 0);\\n  }\\n\\n  60% {\\n    opacity: 1;\\n    -webkit-transform: translate3d(0, 25px, 0);\\n    transform: translate3d(0, 25px, 0);\\n  }\\n\\n  75% {\\n    -webkit-transform: translate3d(0, -10px, 0);\\n    transform: translate3d(0, -10px, 0);\\n  }\\n\\n  90% {\\n    -webkit-transform: translate3d(0, 5px, 0);\\n    transform: translate3d(0, 5px, 0);\\n  }\\n\\n  100% {\\n    -webkit-transform: none;\\n    transform: none;\\n  }\\n}\\n\\n@-webkit-keyframes flyInLeft {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: translate3d(1500px, 0, 0);\\n    transform: translate3d(1500px, 0, 0);\\n  }\\n\\n  60% {\\n    opacity: 1;\\n    -webkit-transform: translate3d(-25px, 0, 0);\\n    transform: translate3d(-25px, 0, 0);\\n  }\\n\\n  75% {\\n    -webkit-transform: translate3d(10px, 0, 0);\\n    transform: translate3d(10px, 0, 0);\\n  }\\n\\n  90% {\\n    -webkit-transform: translate3d(-5px, 0, 0);\\n    transform: translate3d(-5px, 0, 0);\\n  }\\n\\n  100% {\\n    -webkit-transform: none;\\n    transform: none;\\n  }\\n}\\n\\n@keyframes flyInLeft {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: translate3d(1500px, 0, 0);\\n    transform: translate3d(1500px, 0, 0);\\n  }\\n\\n  60% {\\n    opacity: 1;\\n    -webkit-transform: translate3d(-25px, 0, 0);\\n    transform: translate3d(-25px, 0, 0);\\n  }\\n\\n  75% {\\n    -webkit-transform: translate3d(10px, 0, 0);\\n    transform: translate3d(10px, 0, 0);\\n  }\\n\\n  90% {\\n    -webkit-transform: translate3d(-5px, 0, 0);\\n    transform: translate3d(-5px, 0, 0);\\n  }\\n\\n  100% {\\n    -webkit-transform: none;\\n    transform: none;\\n  }\\n}\\n\\n@-webkit-keyframes flyInRight {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: translate3d(-1500px, 0, 0);\\n    transform: translate3d(-1500px, 0, 0);\\n  }\\n\\n  60% {\\n    opacity: 1;\\n    -webkit-transform: translate3d(25px, 0, 0);\\n    transform: translate3d(25px, 0, 0);\\n  }\\n\\n  75% {\\n    -webkit-transform: translate3d(-10px, 0, 0);\\n    transform: translate3d(-10px, 0, 0);\\n  }\\n\\n  90% {\\n    -webkit-transform: translate3d(5px, 0, 0);\\n    transform: translate3d(5px, 0, 0);\\n  }\\n\\n  100% {\\n    -webkit-transform: none;\\n    transform: none;\\n  }\\n}\\n\\n@keyframes flyInRight {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: translate3d(-1500px, 0, 0);\\n    transform: translate3d(-1500px, 0, 0);\\n  }\\n\\n  60% {\\n    opacity: 1;\\n    -webkit-transform: translate3d(25px, 0, 0);\\n    transform: translate3d(25px, 0, 0);\\n  }\\n\\n  75% {\\n    -webkit-transform: translate3d(-10px, 0, 0);\\n    transform: translate3d(-10px, 0, 0);\\n  }\\n\\n  90% {\\n    -webkit-transform: translate3d(5px, 0, 0);\\n    transform: translate3d(5px, 0, 0);\\n  }\\n\\n  100% {\\n    -webkit-transform: none;\\n    transform: none;\\n  }\\n}\\n\\n/* Out */\\n\\n@-webkit-keyframes flyOut {\\n  20% {\\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\\n    transform: scale3d(0.9, 0.9, 0.9);\\n  }\\n\\n  50%, 55% {\\n    opacity: 1;\\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\\n    transform: scale3d(1.1, 1.1, 1.1);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\\n    transform: scale3d(0.3, 0.3, 0.3);\\n  }\\n}\\n\\n@keyframes flyOut {\\n  20% {\\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\\n    transform: scale3d(0.9, 0.9, 0.9);\\n  }\\n\\n  50%, 55% {\\n    opacity: 1;\\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\\n    transform: scale3d(1.1, 1.1, 1.1);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\\n    transform: scale3d(0.3, 0.3, 0.3);\\n  }\\n}\\n\\n@-webkit-keyframes flyOutUp {\\n  20% {\\n    -webkit-transform: translate3d(0, 10px, 0);\\n    transform: translate3d(0, 10px, 0);\\n  }\\n\\n  40%, 45% {\\n    opacity: 1;\\n    -webkit-transform: translate3d(0, -20px, 0);\\n    transform: translate3d(0, -20px, 0);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: translate3d(0, 2000px, 0);\\n    transform: translate3d(0, 2000px, 0);\\n  }\\n}\\n\\n@keyframes flyOutUp {\\n  20% {\\n    -webkit-transform: translate3d(0, 10px, 0);\\n    transform: translate3d(0, 10px, 0);\\n  }\\n\\n  40%, 45% {\\n    opacity: 1;\\n    -webkit-transform: translate3d(0, -20px, 0);\\n    transform: translate3d(0, -20px, 0);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: translate3d(0, 2000px, 0);\\n    transform: translate3d(0, 2000px, 0);\\n  }\\n}\\n\\n@-webkit-keyframes flyOutDown {\\n  20% {\\n    -webkit-transform: translate3d(0, -10px, 0);\\n    transform: translate3d(0, -10px, 0);\\n  }\\n\\n  40%, 45% {\\n    opacity: 1;\\n    -webkit-transform: translate3d(0, 20px, 0);\\n    transform: translate3d(0, 20px, 0);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: translate3d(0, -2000px, 0);\\n    transform: translate3d(0, -2000px, 0);\\n  }\\n}\\n\\n@keyframes flyOutDown {\\n  20% {\\n    -webkit-transform: translate3d(0, -10px, 0);\\n    transform: translate3d(0, -10px, 0);\\n  }\\n\\n  40%, 45% {\\n    opacity: 1;\\n    -webkit-transform: translate3d(0, 20px, 0);\\n    transform: translate3d(0, 20px, 0);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: translate3d(0, -2000px, 0);\\n    transform: translate3d(0, -2000px, 0);\\n  }\\n}\\n\\n@-webkit-keyframes flyOutRight {\\n  20% {\\n    opacity: 1;\\n    -webkit-transform: translate3d(20px, 0, 0);\\n    transform: translate3d(20px, 0, 0);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: translate3d(-2000px, 0, 0);\\n    transform: translate3d(-2000px, 0, 0);\\n  }\\n}\\n\\n@keyframes flyOutRight {\\n  20% {\\n    opacity: 1;\\n    -webkit-transform: translate3d(20px, 0, 0);\\n    transform: translate3d(20px, 0, 0);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: translate3d(-2000px, 0, 0);\\n    transform: translate3d(-2000px, 0, 0);\\n  }\\n}\\n\\n@-webkit-keyframes flyOutLeft {\\n  20% {\\n    opacity: 1;\\n    -webkit-transform: translate3d(-20px, 0, 0);\\n    transform: translate3d(-20px, 0, 0);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: translate3d(2000px, 0, 0);\\n    transform: translate3d(2000px, 0, 0);\\n  }\\n}\\n\\n@keyframes flyOutLeft {\\n  20% {\\n    opacity: 1;\\n    -webkit-transform: translate3d(-20px, 0, 0);\\n    transform: translate3d(-20px, 0, 0);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: translate3d(2000px, 0, 0);\\n    transform: translate3d(2000px, 0, 0);\\n  }\\n}\\n\\n/*--------------\\n     Slide\\n---------------*/\\n\\n.transition.slide.in,\\n.transition[class*=\\\"slide down\\\"].in {\\n  -webkit-animation-name: slideInY;\\n  animation-name: slideInY;\\n  -webkit-transform-origin: top center;\\n  transform-origin: top center;\\n}\\n\\n.transition[class*=\\\"slide up\\\"].in {\\n  -webkit-animation-name: slideInY;\\n  animation-name: slideInY;\\n  -webkit-transform-origin: bottom center;\\n  transform-origin: bottom center;\\n}\\n\\n.transition[class*=\\\"slide left\\\"].in {\\n  -webkit-animation-name: slideInX;\\n  animation-name: slideInX;\\n  -webkit-transform-origin: center right;\\n  transform-origin: center right;\\n}\\n\\n.transition[class*=\\\"slide right\\\"].in {\\n  -webkit-animation-name: slideInX;\\n  animation-name: slideInX;\\n  -webkit-transform-origin: center left;\\n  transform-origin: center left;\\n}\\n\\n.transition.slide.out,\\n.transition[class*=\\\"slide down\\\"].out {\\n  -webkit-animation-name: slideOutY;\\n  animation-name: slideOutY;\\n  -webkit-transform-origin: top center;\\n  transform-origin: top center;\\n}\\n\\n.transition[class*=\\\"slide up\\\"].out {\\n  -webkit-animation-name: slideOutY;\\n  animation-name: slideOutY;\\n  -webkit-transform-origin: bottom center;\\n  transform-origin: bottom center;\\n}\\n\\n.transition[class*=\\\"slide left\\\"].out {\\n  -webkit-animation-name: slideOutX;\\n  animation-name: slideOutX;\\n  -webkit-transform-origin: center right;\\n  transform-origin: center right;\\n}\\n\\n.transition[class*=\\\"slide right\\\"].out {\\n  -webkit-animation-name: slideOutX;\\n  animation-name: slideOutX;\\n  -webkit-transform-origin: center left;\\n  transform-origin: center left;\\n}\\n\\n/* In */\\n\\n@-webkit-keyframes slideInY {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: scaleY(0);\\n    transform: scaleY(0);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: scaleY(1);\\n    transform: scaleY(1);\\n  }\\n}\\n\\n@keyframes slideInY {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: scaleY(0);\\n    transform: scaleY(0);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: scaleY(1);\\n    transform: scaleY(1);\\n  }\\n}\\n\\n@-webkit-keyframes slideInX {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: scaleX(0);\\n    transform: scaleX(0);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: scaleX(1);\\n    transform: scaleX(1);\\n  }\\n}\\n\\n@keyframes slideInX {\\n  0% {\\n    opacity: 0;\\n    -webkit-transform: scaleX(0);\\n    transform: scaleX(0);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: scaleX(1);\\n    transform: scaleX(1);\\n  }\\n}\\n\\n/* Out */\\n\\n@-webkit-keyframes slideOutY {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: scaleY(1);\\n    transform: scaleY(1);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: scaleY(0);\\n    transform: scaleY(0);\\n  }\\n}\\n\\n@keyframes slideOutY {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: scaleY(1);\\n    transform: scaleY(1);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: scaleY(0);\\n    transform: scaleY(0);\\n  }\\n}\\n\\n@-webkit-keyframes slideOutX {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: scaleX(1);\\n    transform: scaleX(1);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: scaleX(0);\\n    transform: scaleX(0);\\n  }\\n}\\n\\n@keyframes slideOutX {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: scaleX(1);\\n    transform: scaleX(1);\\n  }\\n\\n  100% {\\n    opacity: 0;\\n    -webkit-transform: scaleX(0);\\n    transform: scaleX(0);\\n  }\\n}\\n\\n/*--------------\\n     Swing\\n---------------*/\\n\\n.transition.swing {\\n  -webkit-animation-duration: 800ms;\\n  animation-duration: 800ms;\\n}\\n\\n.transition[class*=\\\"swing down\\\"].in {\\n  -webkit-animation-name: swingInX;\\n  animation-name: swingInX;\\n  -webkit-transform-origin: top center;\\n  transform-origin: top center;\\n}\\n\\n.transition[class*=\\\"swing up\\\"].in {\\n  -webkit-animation-name: swingInX;\\n  animation-name: swingInX;\\n  -webkit-transform-origin: bottom center;\\n  transform-origin: bottom center;\\n}\\n\\n.transition[class*=\\\"swing left\\\"].in {\\n  -webkit-animation-name: swingInY;\\n  animation-name: swingInY;\\n  -webkit-transform-origin: center right;\\n  transform-origin: center right;\\n}\\n\\n.transition[class*=\\\"swing right\\\"].in {\\n  -webkit-animation-name: swingInY;\\n  animation-name: swingInY;\\n  -webkit-transform-origin: center left;\\n  transform-origin: center left;\\n}\\n\\n.transition.swing.out,\\n.transition[class*=\\\"swing down\\\"].out {\\n  -webkit-animation-name: swingOutX;\\n  animation-name: swingOutX;\\n  -webkit-transform-origin: top center;\\n  transform-origin: top center;\\n}\\n\\n.transition[class*=\\\"swing up\\\"].out {\\n  -webkit-animation-name: swingOutX;\\n  animation-name: swingOutX;\\n  -webkit-transform-origin: bottom center;\\n  transform-origin: bottom center;\\n}\\n\\n.transition[class*=\\\"swing left\\\"].out {\\n  -webkit-animation-name: swingOutY;\\n  animation-name: swingOutY;\\n  -webkit-transform-origin: center right;\\n  transform-origin: center right;\\n}\\n\\n.transition[class*=\\\"swing right\\\"].out {\\n  -webkit-animation-name: swingOutY;\\n  animation-name: swingOutY;\\n  -webkit-transform-origin: center left;\\n  transform-origin: center left;\\n}\\n\\n/* In */\\n\\n@-webkit-keyframes swingInX {\\n  0% {\\n    -webkit-transform: perspective(1000px) rotateX(90deg);\\n    transform: perspective(1000px) rotateX(90deg);\\n    opacity: 0;\\n  }\\n\\n  40% {\\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\\n    transform: perspective(1000px) rotateX(-30deg);\\n    opacity: 1;\\n  }\\n\\n  60% {\\n    -webkit-transform: perspective(1000px) rotateX(15deg);\\n    transform: perspective(1000px) rotateX(15deg);\\n  }\\n\\n  80% {\\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\\n    transform: perspective(1000px) rotateX(-7.5deg);\\n  }\\n\\n  100% {\\n    -webkit-transform: perspective(1000px) rotateX(0deg);\\n    transform: perspective(1000px) rotateX(0deg);\\n  }\\n}\\n\\n@keyframes swingInX {\\n  0% {\\n    -webkit-transform: perspective(1000px) rotateX(90deg);\\n    transform: perspective(1000px) rotateX(90deg);\\n    opacity: 0;\\n  }\\n\\n  40% {\\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\\n    transform: perspective(1000px) rotateX(-30deg);\\n    opacity: 1;\\n  }\\n\\n  60% {\\n    -webkit-transform: perspective(1000px) rotateX(15deg);\\n    transform: perspective(1000px) rotateX(15deg);\\n  }\\n\\n  80% {\\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\\n    transform: perspective(1000px) rotateX(-7.5deg);\\n  }\\n\\n  100% {\\n    -webkit-transform: perspective(1000px) rotateX(0deg);\\n    transform: perspective(1000px) rotateX(0deg);\\n  }\\n}\\n\\n@-webkit-keyframes swingInY {\\n  0% {\\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\\n    transform: perspective(1000px) rotateY(-90deg);\\n    opacity: 0;\\n  }\\n\\n  40% {\\n    -webkit-transform: perspective(1000px) rotateY(30deg);\\n    transform: perspective(1000px) rotateY(30deg);\\n    opacity: 1;\\n  }\\n\\n  60% {\\n    -webkit-transform: perspective(1000px) rotateY(-17.5deg);\\n    transform: perspective(1000px) rotateY(-17.5deg);\\n  }\\n\\n  80% {\\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\\n    transform: perspective(1000px) rotateY(7.5deg);\\n  }\\n\\n  100% {\\n    -webkit-transform: perspective(1000px) rotateY(0deg);\\n    transform: perspective(1000px) rotateY(0deg);\\n  }\\n}\\n\\n@keyframes swingInY {\\n  0% {\\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\\n    transform: perspective(1000px) rotateY(-90deg);\\n    opacity: 0;\\n  }\\n\\n  40% {\\n    -webkit-transform: perspective(1000px) rotateY(30deg);\\n    transform: perspective(1000px) rotateY(30deg);\\n    opacity: 1;\\n  }\\n\\n  60% {\\n    -webkit-transform: perspective(1000px) rotateY(-17.5deg);\\n    transform: perspective(1000px) rotateY(-17.5deg);\\n  }\\n\\n  80% {\\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\\n    transform: perspective(1000px) rotateY(7.5deg);\\n  }\\n\\n  100% {\\n    -webkit-transform: perspective(1000px) rotateY(0deg);\\n    transform: perspective(1000px) rotateY(0deg);\\n  }\\n}\\n\\n/* Out */\\n\\n@-webkit-keyframes swingOutX {\\n  0% {\\n    -webkit-transform: perspective(1000px) rotateX(0deg);\\n    transform: perspective(1000px) rotateX(0deg);\\n  }\\n\\n  40% {\\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\\n    transform: perspective(1000px) rotateX(-7.5deg);\\n  }\\n\\n  60% {\\n    -webkit-transform: perspective(1000px) rotateX(17.5deg);\\n    transform: perspective(1000px) rotateX(17.5deg);\\n  }\\n\\n  80% {\\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\\n    transform: perspective(1000px) rotateX(-30deg);\\n    opacity: 1;\\n  }\\n\\n  100% {\\n    -webkit-transform: perspective(1000px) rotateX(90deg);\\n    transform: perspective(1000px) rotateX(90deg);\\n    opacity: 0;\\n  }\\n}\\n\\n@keyframes swingOutX {\\n  0% {\\n    -webkit-transform: perspective(1000px) rotateX(0deg);\\n    transform: perspective(1000px) rotateX(0deg);\\n  }\\n\\n  40% {\\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\\n    transform: perspective(1000px) rotateX(-7.5deg);\\n  }\\n\\n  60% {\\n    -webkit-transform: perspective(1000px) rotateX(17.5deg);\\n    transform: perspective(1000px) rotateX(17.5deg);\\n  }\\n\\n  80% {\\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\\n    transform: perspective(1000px) rotateX(-30deg);\\n    opacity: 1;\\n  }\\n\\n  100% {\\n    -webkit-transform: perspective(1000px) rotateX(90deg);\\n    transform: perspective(1000px) rotateX(90deg);\\n    opacity: 0;\\n  }\\n}\\n\\n@-webkit-keyframes swingOutY {\\n  0% {\\n    -webkit-transform: perspective(1000px) rotateY(0deg);\\n    transform: perspective(1000px) rotateY(0deg);\\n  }\\n\\n  40% {\\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\\n    transform: perspective(1000px) rotateY(7.5deg);\\n  }\\n\\n  60% {\\n    -webkit-transform: perspective(1000px) rotateY(-10deg);\\n    transform: perspective(1000px) rotateY(-10deg);\\n  }\\n\\n  80% {\\n    -webkit-transform: perspective(1000px) rotateY(30deg);\\n    transform: perspective(1000px) rotateY(30deg);\\n    opacity: 1;\\n  }\\n\\n  100% {\\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\\n    transform: perspective(1000px) rotateY(-90deg);\\n    opacity: 0;\\n  }\\n}\\n\\n@keyframes swingOutY {\\n  0% {\\n    -webkit-transform: perspective(1000px) rotateY(0deg);\\n    transform: perspective(1000px) rotateY(0deg);\\n  }\\n\\n  40% {\\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\\n    transform: perspective(1000px) rotateY(7.5deg);\\n  }\\n\\n  60% {\\n    -webkit-transform: perspective(1000px) rotateY(-10deg);\\n    transform: perspective(1000px) rotateY(-10deg);\\n  }\\n\\n  80% {\\n    -webkit-transform: perspective(1000px) rotateY(30deg);\\n    transform: perspective(1000px) rotateY(30deg);\\n    opacity: 1;\\n  }\\n\\n  100% {\\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\\n    transform: perspective(1000px) rotateY(-90deg);\\n    opacity: 0;\\n  }\\n}\\n\\n/*--------------\\n      Zoom\\n---------------*/\\n\\n.transition.zoom.in {\\n  -webkit-animation-name: zoomIn;\\n  animation-name: zoomIn;\\n}\\n\\n.transition.zoom.out {\\n  -webkit-animation-name: zoomOut;\\n  animation-name: zoomOut;\\n}\\n\\n@-webkit-keyframes zoomIn {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: scale(0);\\n    transform: scale(0);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n  }\\n}\\n\\n@keyframes zoomIn {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: scale(0);\\n    transform: scale(0);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n  }\\n}\\n\\n@-webkit-keyframes zoomOut {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: scale(0);\\n    transform: scale(0);\\n  }\\n}\\n\\n@keyframes zoomOut {\\n  0% {\\n    opacity: 1;\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n  }\\n\\n  100% {\\n    opacity: 1;\\n    -webkit-transform: scale(0);\\n    transform: scale(0);\\n  }\\n}\\n\\n/*******************************\\n       Static Animations\\n*******************************/\\n\\n/*--------------\\n    Emphasis\\n---------------*/\\n\\n.flash.transition {\\n  -webkit-animation-duration: 750ms;\\n  animation-duration: 750ms;\\n  -webkit-animation-name: flash;\\n  animation-name: flash;\\n}\\n\\n.shake.transition {\\n  -webkit-animation-duration: 750ms;\\n  animation-duration: 750ms;\\n  -webkit-animation-name: shake;\\n  animation-name: shake;\\n}\\n\\n.bounce.transition {\\n  -webkit-animation-duration: 750ms;\\n  animation-duration: 750ms;\\n  -webkit-animation-name: bounce;\\n  animation-name: bounce;\\n}\\n\\n.tada.transition {\\n  -webkit-animation-duration: 750ms;\\n  animation-duration: 750ms;\\n  -webkit-animation-name: tada;\\n  animation-name: tada;\\n}\\n\\n.pulse.transition {\\n  -webkit-animation-duration: 500ms;\\n  animation-duration: 500ms;\\n  -webkit-animation-name: pulse;\\n  animation-name: pulse;\\n}\\n\\n.jiggle.transition {\\n  -webkit-animation-duration: 750ms;\\n  animation-duration: 750ms;\\n  -webkit-animation-name: jiggle;\\n  animation-name: jiggle;\\n}\\n\\n.transition.glow {\\n  -webkit-animation-duration: 2000ms;\\n  animation-duration: 2000ms;\\n  -webkit-animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1);\\n  animation-timing-function: cubic-bezier(0.19, 1, 0.22, 1);\\n}\\n\\n.transition.glow {\\n  -webkit-animation-name: glow;\\n  animation-name: glow;\\n}\\n\\n/* Flash */\\n\\n@-webkit-keyframes flash {\\n  0%, 50%, 100% {\\n    opacity: 1;\\n  }\\n\\n  25%, 75% {\\n    opacity: 0;\\n  }\\n}\\n\\n@keyframes flash {\\n  0%, 50%, 100% {\\n    opacity: 1;\\n  }\\n\\n  25%, 75% {\\n    opacity: 0;\\n  }\\n}\\n\\n/* Shake */\\n\\n@-webkit-keyframes shake {\\n  0%, 100% {\\n    -webkit-transform: translateX(0);\\n    transform: translateX(0);\\n  }\\n\\n  10%, 30%, 50%, 70%, 90% {\\n    -webkit-transform: translateX(-10px);\\n    transform: translateX(-10px);\\n  }\\n\\n  20%, 40%, 60%, 80% {\\n    -webkit-transform: translateX(10px);\\n    transform: translateX(10px);\\n  }\\n}\\n\\n@keyframes shake {\\n  0%, 100% {\\n    -webkit-transform: translateX(0);\\n    transform: translateX(0);\\n  }\\n\\n  10%, 30%, 50%, 70%, 90% {\\n    -webkit-transform: translateX(-10px);\\n    transform: translateX(-10px);\\n  }\\n\\n  20%, 40%, 60%, 80% {\\n    -webkit-transform: translateX(10px);\\n    transform: translateX(10px);\\n  }\\n}\\n\\n/* Bounce */\\n\\n@-webkit-keyframes bounce {\\n  0%, 20%, 50%, 80%, 100% {\\n    -webkit-transform: translateY(0);\\n    transform: translateY(0);\\n  }\\n\\n  40% {\\n    -webkit-transform: translateY(-30px);\\n    transform: translateY(-30px);\\n  }\\n\\n  60% {\\n    -webkit-transform: translateY(-15px);\\n    transform: translateY(-15px);\\n  }\\n}\\n\\n@keyframes bounce {\\n  0%, 20%, 50%, 80%, 100% {\\n    -webkit-transform: translateY(0);\\n    transform: translateY(0);\\n  }\\n\\n  40% {\\n    -webkit-transform: translateY(-30px);\\n    transform: translateY(-30px);\\n  }\\n\\n  60% {\\n    -webkit-transform: translateY(-15px);\\n    transform: translateY(-15px);\\n  }\\n}\\n\\n/* Tada */\\n\\n@-webkit-keyframes tada {\\n  0% {\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n  }\\n\\n  10%, 20% {\\n    -webkit-transform: scale(0.9) rotate(-3deg);\\n    transform: scale(0.9) rotate(-3deg);\\n  }\\n\\n  30%, 50%, 70%, 90% {\\n    -webkit-transform: scale(1.1) rotate(3deg);\\n    transform: scale(1.1) rotate(3deg);\\n  }\\n\\n  40%, 60%, 80% {\\n    -webkit-transform: scale(1.1) rotate(-3deg);\\n    transform: scale(1.1) rotate(-3deg);\\n  }\\n\\n  100% {\\n    -webkit-transform: scale(1) rotate(0);\\n    transform: scale(1) rotate(0);\\n  }\\n}\\n\\n@keyframes tada {\\n  0% {\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n  }\\n\\n  10%, 20% {\\n    -webkit-transform: scale(0.9) rotate(-3deg);\\n    transform: scale(0.9) rotate(-3deg);\\n  }\\n\\n  30%, 50%, 70%, 90% {\\n    -webkit-transform: scale(1.1) rotate(3deg);\\n    transform: scale(1.1) rotate(3deg);\\n  }\\n\\n  40%, 60%, 80% {\\n    -webkit-transform: scale(1.1) rotate(-3deg);\\n    transform: scale(1.1) rotate(-3deg);\\n  }\\n\\n  100% {\\n    -webkit-transform: scale(1) rotate(0);\\n    transform: scale(1) rotate(0);\\n  }\\n}\\n\\n/* Pulse */\\n\\n@-webkit-keyframes pulse {\\n  0% {\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n    opacity: 1;\\n  }\\n\\n  50% {\\n    -webkit-transform: scale(0.9);\\n    transform: scale(0.9);\\n    opacity: 0.7;\\n  }\\n\\n  100% {\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n    opacity: 1;\\n  }\\n}\\n\\n@keyframes pulse {\\n  0% {\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n    opacity: 1;\\n  }\\n\\n  50% {\\n    -webkit-transform: scale(0.9);\\n    transform: scale(0.9);\\n    opacity: 0.7;\\n  }\\n\\n  100% {\\n    -webkit-transform: scale(1);\\n    transform: scale(1);\\n    opacity: 1;\\n  }\\n}\\n\\n/* Jiggle */\\n\\n@-webkit-keyframes jiggle {\\n  0% {\\n    -webkit-transform: scale3d(1, 1, 1);\\n    transform: scale3d(1, 1, 1);\\n  }\\n\\n  30% {\\n    -webkit-transform: scale3d(1.25, 0.75, 1);\\n    transform: scale3d(1.25, 0.75, 1);\\n  }\\n\\n  40% {\\n    -webkit-transform: scale3d(0.75, 1.25, 1);\\n    transform: scale3d(0.75, 1.25, 1);\\n  }\\n\\n  50% {\\n    -webkit-transform: scale3d(1.15, 0.85, 1);\\n    transform: scale3d(1.15, 0.85, 1);\\n  }\\n\\n  65% {\\n    -webkit-transform: scale3d(0.95, 1.05, 1);\\n    transform: scale3d(0.95, 1.05, 1);\\n  }\\n\\n  75% {\\n    -webkit-transform: scale3d(1.05, 0.95, 1);\\n    transform: scale3d(1.05, 0.95, 1);\\n  }\\n\\n  100% {\\n    -webkit-transform: scale3d(1, 1, 1);\\n    transform: scale3d(1, 1, 1);\\n  }\\n}\\n\\n@keyframes jiggle {\\n  0% {\\n    -webkit-transform: scale3d(1, 1, 1);\\n    transform: scale3d(1, 1, 1);\\n  }\\n\\n  30% {\\n    -webkit-transform: scale3d(1.25, 0.75, 1);\\n    transform: scale3d(1.25, 0.75, 1);\\n  }\\n\\n  40% {\\n    -webkit-transform: scale3d(0.75, 1.25, 1);\\n    transform: scale3d(0.75, 1.25, 1);\\n  }\\n\\n  50% {\\n    -webkit-transform: scale3d(1.15, 0.85, 1);\\n    transform: scale3d(1.15, 0.85, 1);\\n  }\\n\\n  65% {\\n    -webkit-transform: scale3d(0.95, 1.05, 1);\\n    transform: scale3d(0.95, 1.05, 1);\\n  }\\n\\n  75% {\\n    -webkit-transform: scale3d(1.05, 0.95, 1);\\n    transform: scale3d(1.05, 0.95, 1);\\n  }\\n\\n  100% {\\n    -webkit-transform: scale3d(1, 1, 1);\\n    transform: scale3d(1, 1, 1);\\n  }\\n}\\n\\n/* Glow */\\n\\n@-webkit-keyframes glow {\\n  0% {\\n    background-color: #FCFCFD;\\n  }\\n\\n  30% {\\n    background-color: #FFF6CD;\\n  }\\n\\n  100% {\\n    background-color: #FCFCFD;\\n  }\\n}\\n\\n@keyframes glow {\\n  0% {\\n    background-color: #FCFCFD;\\n  }\\n\\n  30% {\\n    background-color: #FFF6CD;\\n  }\\n\\n  100% {\\n    background-color: #FCFCFD;\\n  }\\n}\\n\\n/*******************************\\n         Site Overrides\\n*******************************/\", \"\"]);\n","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, bindable, computedFrom } from \"aurelia-framework\";\nimport { ItemReference } from \"items/models/item-record\";\nimport { ItemLine } from \"items/models/activity-detail-report\";\n\n@autoinject\nexport class ActivityDetailLineView extends StandardView {\n\n    formDisabled: boolean = false;\n\n    @bindable\n    itemLine: ItemLine;\n\n    @bindable\n    allItems: ItemReference[] = [];\n\n    $itemDropdown: HTMLElement;\n\n    constructor() {\n        super(ActivityDetailLineView.name);\n    }\n\n    async activate(params, routeData) {\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        await this._setupFields();\n        await super.attached();\n    }\n\n    disableForm() {\n        this.formDisabled = true;\n    }\n\n    enableForm() {\n        this.formDisabled = false;\n    }\n    \n    async _setupFields() {\n        await Promise.all([\n            $(this.$itemDropdown).dropdown({\n                fullTextSearch: true,\n                onChange: async (value, text, $selectedItem) => {\n                    if (value) {\n                        this.logger.info(`this.itemLine :: ${this.itemLine}`)\n                        this.itemLine.item = this.allItems ? this.allItems.find((item) => item.id == value) : null;\n                    } else {\n                        this.itemLine.item = null;\n                    }\n                }\n            })]);\n    }\n\n}","module.exports = \"<template> <require from=shared-ui/converters/boolean-format></require> <require from=shared-ui/converters/currency-format></require> <form class=\\\"ui form\\\"> <div class=\\\"two fields\\\"> <div class=\\\"field required\\\"> <label>Item</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$itemDropdown> <input name=item type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">Item</div> <div class=menu> <div repeat.for=\\\"item of allItems\\\" class=item data-value.bind=item.id> ${item.name}</div> </div> </div> </div> </div> </form> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { bindable, autoinject, observable, computedFrom } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport { ItemReference } from \"items/models/item-record\";\nimport { ItemService } from \"items/services/item_service\";\nimport { ActivityDetailRequest, ItemLine } from \"items/models/activity-detail-report\";\n\n\n@autoinject\nexport class ActivityDetailReport extends StandardView {\n\n    @observable\n    searchInput: string;\n\n    formDisabled: boolean = false;\n\n    allTimeInventory: boolean = false;\n\n    dateFrom: Date;\n\n    dateTo: Date;\n\n    includeAllItems: boolean = false;\n\n    currentItemReference: ItemReference;\n\n    itemLines: ItemLine[] = [];\n\n    allItems: ItemReference[] = [];\n\n    currentLineNumber: number = 0;\n\n    $dateFromCalendar: HTMLElement;\n\n    $dateToCalendar: HTMLElement;\n\n    $exportLink: HTMLElement;\n\n    $asOfCalendar: HTMLElement;\n\n    $itemDropdown: HTMLElement;\n\n    constructor(private itemService: ItemService) {\n        super(ActivityDetailReport.name);\n    }\n\n    async activate(params, routeData) {\n        try {\n            let promiseResponse = await Promise.all([               \n                this.itemService.getAllRecords()\n              ]);\n              this.allItems = promiseResponse[0].filter((itemRec)=> itemRec.isInventoryItem === true && itemRec.isKitItem === false);\n            this.addNewItemLine();\n        } catch (err) {\n            this.errorMessageUtil.showError(err);\n            this.router.navigateToRoute(ROUTES.DASHBOARD.name, {}, { trigger: true, replace: true });\n        }\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        await this._setupFields();\n        await super.attached();\n    }\n\n    disableForm() {\n        this.formDisabled = true;\n    }\n\n    enableForm() {\n        this.formDisabled = false;\n    }\n\n    async _setupFields() {\n        await Promise.all([\n            $('.ui.checkbox').checkbox(),\n\n            $(this.$dateFromCalendar).calendar({\n                type: 'date',\n                onChange: (date, text, mode) => {\n                    this.dateFrom = date;\n                }\n            }),\n\n            $(this.$dateToCalendar).calendar({\n                type: 'date',\n                onChange: (date, text, mode) => {\n                    this.dateTo = date;\n                }\n            })           \n        ]);\n    }\n\n    async addNewItemLine(itemLine?: ItemLine) {\n        if(itemLine){      \n          if(!itemLine.item){\n            this.errorMessageUtil.showErrorMessage(\"Need To Provide an Item.\");\n            return;\n          }         \n          itemLine.addedLine = true;\n        }\n        this.itemLines.push(new ItemLine({lineNumber: this.currentLineNumber}));\n        this.currentLineNumber++;\n      }\n\n    async removeItemLine(lineToRemove) {\n        this.itemLines = this.itemLines.filter((itemLine) => itemLine.lineNumber != lineToRemove.lineNumber);\n    }\n\n    async getReport() {\n        this.disableView();\n        let activityDetailRequest = new ActivityDetailRequest({\n            allTimeInventory: this.allTimeInventory,\n            dateFrom: this.allTimeInventory ? null : this.dateFrom,\n            dateTo: this.allTimeInventory ? null : this.dateTo,\n            itemIds: this.itemLines.filter((item)=> item.addedLine).map((item) => item.item.id)\n        });\n        this.logger.info(`activityDetailRequest :: ${JSON.stringify(activityDetailRequest)}`);\n        let activityDetailResponse = await this.itemService.getActivityDetailResponse(activityDetailRequest);\n        this.logger.info(`activityDetailResponse :: ${activityDetailResponse}`);\n        $(this.$exportLink).attr('href', `data:application/vnd.ms-excel;base64, ${escape(activityDetailResponse.fileDataBase64)}`);\n        this.$exportLink.click();\n        this.enableView();\n    }  \n\n}","module.exports = \"<template> <require from=shared-ui/converters/simple-date-format></require> <require from=shared-ui/converters/boolean-format></require> <require from=items/views/activity-detail-line-view></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui centered grid\\\"> <div class=\\\"four wide column\\\"> <button class=\\\"positive ui button\\\" click.delegate=getReport()>Download Report</button> <a href=\\\"data:text/csv;charset=utf-8,\\\" hidden download=ActivityDetailReport.xls ref=$exportLink>Download</a> </div> <div class=\\\"eight wide column\\\"> <h1 class=\\\"ui center aligned header\\\">Activity Detail Report</h1> </div> <div class=\\\"four wide column\\\"> </div> <div class=\\\"sixteen wide column\\\"> <form class=\\\"ui form\\\"> <h4 class=\\\"ui dividing header\\\">Dates</h4> <div class=\\\"two fields\\\"> <div class=field> <div class=\\\"ui toggle checkbox\\\"> <input type=checkbox name=allTimeInventory tabindex=0 class=hidden checked.bind=allTimeInventory> <label>All Time Inventory</label> </div> </div> </div> <div class=\\\"two fields\\\" show.bind=!allTimeInventory> <div class=\\\"field required\\\"> <label>Date From</label> <div class=\\\"ui calendar\\\" ref=$dateFromCalendar> <div class=\\\"ui input left icon\\\"> <i class=\\\"calendar icon\\\"></i> <input type=text placeholder=\\\"Date From\\\" name=date-from> </div> </div> </div> <div class=\\\"field required\\\"> <label>Date To</label> <div class=\\\"ui calendar\\\" ref=$dateToCalendar> <div class=\\\"ui input left icon\\\"> <i class=\\\"calendar icon\\\"></i> <input type=text placeholder=\\\"Date To\\\" name=date-to> </div> </div> </div> </div> <h4 class=\\\"ui dividing header\\\">Items</h4> <div class=\\\"two fields\\\"> <div class=field> <div class=\\\"ui toggle checkbox\\\"> <input type=checkbox name=includeAllItems tabindex=0 class=hidden checked.bind=includeAllItems> <label>Include All Items</label> </div> </div> </div> <div class=\\\"ui cards\\\" show.bind=!includeAllItems> <div class=\\\"ui raised fluid card\\\" repeat.for=\\\"itemLine of itemLines\\\"> <div class=content> <div class=header> <div class=\\\"ui negative button\\\" if.bind=itemLine.addedLine tabindex=0 click.delegate=removeItemLine(itemLine)>Remove</div> </div> <div class=description> <activity-detail-line-view item-line.two-way=itemLine all-items.two-way=allItems> </activity-detail-line-view> <div class=\\\"ui primary button\\\" if.bind=!itemLine.addedLine tabindex=0 click.delegate=addNewItemLine(itemLine)>Add Item</div> </div> </div> </div> </div> </form> </div> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { bindable, autoinject, computedFrom } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport { ItemRecord } from \"items/models/item-record\";\nimport { OrderReference, OrderItem, Order, Address } from \"orders/models/order\";\nimport { ItemService } from \"items/services/item_service\";\nimport { OrderService } from \"orders/services/order_service\";\nimport { SimpleDateFormatValueConverter } from \"shared-ui/converters/simple-date-format\";\nimport parse from \"papaparse\";\n\n@autoinject\nexport class ItemView extends StandardView {\n  @bindable\n  item: ItemRecord;\n\n  @bindable\n  totalCommittedOrders: number;\n\n  @bindable\n  totalBackorderedOrders: number;\n\n  $viewItemForm: HTMLElement;\n\n  $exportCommittedLink: HTMLElement;\n  $exportBackorderedLink: HTMLElement;\n\n  constructor(private itemService: ItemService, private orderService: OrderService, private simpleDateFormat: SimpleDateFormatValueConverter) {\n    super(ItemView.name);\n    this.item = null;\n  }\n\n  async activate(params, routeData) {\n    try {\n      let itemId = params[\"id\"];\n      if (!itemId) {\n        throw \"No Item Id Provided.\";\n      }\n      itemId = parseInt(itemId, 10)\n      let requestResponses = await Promise.all([\n        this.itemService.getRecord(itemId),\n        this._getLineCount([['order_id.winery_order_status','in',['pending_fulfill','packed']],['product_template_id', '=', itemId], ['qty_committed', '>', 0]]),\n        this._getLineCount([['order_id.winery_order_status','in',['pending_fulfill','packed']],['product_template_id', '=', itemId], ['qty_backordered', '>', 0]])\n      ]);\n      this.item = requestResponses[0];\n      this.totalCommittedOrders = requestResponses[1];\n      this.totalBackorderedOrders = requestResponses[2];\n    } catch (err) {\n      this.errorMessageUtil.showError(err);\n      this.router.navigateToRoute(ROUTES.DASHBOARD.name, {}, { trigger: true, replace: true });\n    }\n    await super.activate(params, routeData);\n  }\n\n  async _getLineCount(filters = []) {\n    let orderLines = await this.orderService.getAllLineRecords(filters);\n    let orderIds = [];\n    orderLines.forEach((orderLine) => {\n      if (orderIds.indexOf(orderLine.orderId) === -1) {\n        orderIds.push(orderLine.orderId);\n      }\n    });\n    return orderIds.length;\n  }\n\n  async attached() {\n    await super.attached();\n  }\n\n  @computedFrom()\n  get viewOrderRoute() {\n    return ROUTES.VIEW_ORDER.name;\n  }\n\n  async clickExportCommitted() {\n    this.disableView();\n    let fieldFilters = [['product_template_id', '=', this.item.id], ['qty_committed', '>', 0]];\n    let orderLines = await this.orderService.getAllLineRecords(fieldFilters);\n    let orders = await this._getOrdersByLines(orderLines);\n    let orderLinesCSV = this.convertOrderLinesToCsv(orderLines, orders);\n    $(this.$exportCommittedLink).attr('href', `data:text/csv;charset=utf-8, ${escape(orderLinesCSV)}`);\n    this.$exportCommittedLink.click();\n    this.enableView();\n  }\n\n  async clickExportBackordered() {\n    this.disableView();\n    let fieldFilters = [['product_template_id', '=', this.item.id], ['qty_backordered', '>', 0]];\n    let orderLines = await this.orderService.getAllLineRecords(fieldFilters);\n    let orders = await this._getOrdersByLines(orderLines);\n    let orderLinesCSV = this.convertOrderLinesToCsv(orderLines, orders);\n    $(this.$exportBackorderedLink).attr('href', `data:text/csv;charset=utf-8, ${escape(orderLinesCSV)}`);\n    this.$exportBackorderedLink.click();\n    this.enableView();\n  }\n\n  async _getOrdersByLines(orderLines: OrderItem[] = []): Promise<OrderReference[]> {\n    let orderIds = orderLines.map((orderLine) => {\n        return orderLine.orderId;\n    });\n    if(orderIds.length == 0){\n      return [];\n    }\n    return await this.orderService.getAllRecords([[\"id\", \"in\", orderIds]]);\n  }\n\n  convertOrderLinesToCsv(orderLines: OrderItem[], orderRefs: OrderReference[]) {\n    return parse.unparse(orderLines.map((orderLine) => {\n      let order = orderRefs.find((orderRef) => {\n        return orderRef.id == orderLine.orderId;\n      }) as OrderReference;\n      let orderData = order || {} as OrderReference;\n      let shippingAddress = (order.shippingAddress || {}) as Address;\n      return {\n        \"Order #\": orderData.wineryOrderNumber,\n        \"VinFillment #\": orderLine.orderNumber,\n        \"Status\": orderData.status,\n        \"Ship Via\": orderData.shippingMethodName,\n        \"Future Ship Date\": this.simpleDateFormat.toView(orderData.futureShipDate),\n        \"Addressee\": shippingAddress.addressee,\n        \"Attention\": shippingAddress.attention,\n        \"Address 1\": shippingAddress.address1,\n        \"Address 2\": shippingAddress.address2,\n        \"City\": shippingAddress.city,\n        \"State\": shippingAddress.stateName,\n        \"Zip\": shippingAddress.zip,\n        \"Country\": shippingAddress.countryName,\n        \"Item\": orderLine.itemName,\n        \"Sku\": orderLine.sku,\n        \"Quantity\": orderLine.quantity,\n        \"Committed\": orderLine.committed,\n        \"Backordered\": orderLine.backordered\n      };\n    }));\n  }\n\n}","module.exports = \"<template> <require from=shared-ui/converters/simple-date-format></require> <require from=shared-ui/converters/boolean-format></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui centered stackable padded grid\\\"> <div class=\\\"sixteen wide column\\\"> <h1 class=\\\"ui center aligned header\\\">${item.name}</h1> </div> <div class=\\\"sixteen wide column\\\"> <button class=\\\"positive ui large button\\\" if.bind=\\\"totalCommittedOrders > 0\\\" click.delegate=clickExportCommitted()>Export Committed Orders</button> <a href=\\\"data:text/csv;charset=utf-8,\\\" hidden download=committedorders.csv ref=$exportCommittedLink>Download Committed Orders</a> <button class=\\\"positive ui large button\\\" if.bind=\\\"totalBackorderedOrders > 0\\\" click.delegate=clickExportBackordered()>Export Backordered Orders</button> <a href=\\\"data:text/csv;charset=utf-8,\\\" hidden download=backorderedorders.csv ref=$exportBackorderedLink>Download Backoredered Orders</a> </div> </div> <form class=\\\"ui form\\\" ref=$viewItemForm> <h4 class=\\\"ui dividing header\\\">Primary Information</h4> <div class=\\\"two fields\\\"> <div class=field> <b>Item:</b> ${item.name} </div> <div class=field> <b>Sku:</b> ${item.winerySku} </div> </div> <div class=\\\"two fields\\\"> <div class=field> <b>On Hand:</b> ${item.onHand} </div> <div class=field> <b>Available:</b> ${item.available} </div> </div> <div class=\\\"two fields\\\"> <div class=field> <b>Backordered:</b> ${item.backordered} </div> <div class=field> <b>Committed:</b> ${item.committed} </div> </div> <div class=\\\"two fields\\\"> <div class=field> <b>Backordered Orders Count:</b> ${totalBackorderedOrders} </div> <div class=field> <b>Committed Orders Count:</b> ${totalCommittedOrders} </div> </div> </form> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, computedFrom } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport {VIEW_TYPES} from \"items/views/list-items-view\"\n\n@autoinject\nexport class ItemsDashboard extends StandardView {\n    alertNotificationsLoading: boolean;\n    kpisLoading: boolean;\n    constructor() {\n        super(ItemsDashboard.name); \n        this.alertNotificationsLoading = true;\n        this.kpisLoading = true;\n        this.screenViewUtility.viewName = \"\";\n    }\n\n    async attached() {\n        await super.attached();        \n    }\n\n    async activate(params, routeData) {\n        await super.activate(params, routeData);\n        this.screenViewUtility.viewName = \"\";               \n    }   \n\n    @computedFrom()\n    get allListType(){\n        return  VIEW_TYPES.ALL;\n    }\n\n    @computedFrom()\n    get backorderedType(){\n        return  VIEW_TYPES.BACKORDERED;\n    }\n\n    @computedFrom()\n    get committedType(){\n        return  VIEW_TYPES.COMMITTED;\n    }\n\n    @computedFrom()\n    get onHandType(){\n        return  VIEW_TYPES.ON_HAND;\n    }\n\n    @computedFrom()\n    get allItemsRoute(){\n        return ROUTES.LIST_ITEMS.name;\n    }\n\n    @computedFrom()\n    get activityDetailRoute(){\n        return ROUTES.ACTIVITY_DETAIL_REPORT.name;\n    }\n\n    @computedFrom()\n    get transfersRoute(){\n        return ROUTES.LIST_WINERY_TRANSFERS.name;\n    }\n}","module.exports = \"<template> <div class=\\\"ui link stackable dashboard cards\\\"> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: allItemsRoute; params.bind: {listType: allListType}\\\"> <div class=header>All Items</div> <div class=description>View all Items.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: allItemsRoute; params.bind: {listType: backorderedType}\\\"> <div class=header>Backordered Items</div> <div class=description>View backordered Items.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: allItemsRoute; params.bind: {listType: onHandType}\\\"> <div class=header>On Hand Items</div> <div class=description>View all Items that have inventory.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: allItemsRoute; params.bind: {listType: committedType}\\\"> <div class=header>Committed Items</div> <div class=description>View Items committed To open Orders.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: transfersRoute\\\"> <div class=header>Transfers</div> <div class=description>View Transfers of inventory for Items.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: activityDetailRoute\\\"> <div class=header>Activity Detail</div> <div class=description>View the activity of a specific Item.</div> </a> </div> </div> <style>.dashboard.cards .content{text-align:center;min-height:80px}</style> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { bindable, autoinject, observable, computedFrom } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport { ItemReference } from \"items/models/item-record\";\nimport { ItemService } from \"items/services/item_service\";\nimport parse from 'papaparse';\nimport { SearchResult } from \"shared-models/search-result\";\n\nexport enum VIEW_TYPES {\n    ALL = \"all\",\n    BACKORDERED = \"backordered\",\n    ON_HAND = \"on-hand\",\n    COMMITTED = \"committed\"\n}\n\n@autoinject\nexport class ListItemsView extends StandardView {\n    \n    filteredItems: ItemReference[] = [];\n\n    itemListDisabled: boolean = false;\n\n    @observable\n    searchInput: string;\n\n    currentSearchResult: SearchResult;\n    \n    currentPage: number = 1;\n\n    $exportLink: HTMLElement;\n\n    listType: string;\n\n    constructor(private itemService: ItemService) {\n        super(ListItemsView.name);\n    }\n\n    async activate(params, routeData) {\n        try {          \n            this.listType = params[\"listType\"];\n            await this._getItems();\n        } catch (err) {\n            this.errorMessageUtil.showError(err);\n            this.router.navigateToRoute(ROUTES.DASHBOARD.name, {}, { trigger: true, replace: true });\n        }\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        await super.attached();\n    }\n\n    async _getItems() {\n        let fieldFilters = this._getFilters();        \n        this.logger.info(`fieldFilters :: ${JSON.stringify(fieldFilters)}`);\n        this.currentSearchResult = await this.itemService.searchRecords({page: this.currentPage, filter: this.searchInput, fieldFilters: fieldFilters});\n        this.filteredItems = this.currentSearchResult.records as ItemReference[];\n    }\n\n    _getFilters() {\n        if(this.listType === VIEW_TYPES.BACKORDERED){\n            return this._getBackorderedFilters();\n        } \n        if(this.listType === VIEW_TYPES.ON_HAND){\n            return this._getOnHandFilters();\n        } \n        if(this.listType === VIEW_TYPES.COMMITTED){\n            return this._getCommittedFilters();\n        }\n        return [];\n    }\n\n    _getBackorderedFilters(){\n        return [['backordered', '>', 0]];\n    }\n\n    _getOnHandFilters(){\n        return [['on_hand', '>', 0]];\n    }\n\n    _getCommittedFilters(){\n        return [['committed', '>', 0]];\n    }\n\n    disableItemList() {\n        this.itemListDisabled = true;\n    }\n\n    enableItemList() {\n        this.itemListDisabled = false;\n    }\n\n    async searchInputChanged(newValue: string, oldValue: string) {\n        this.disableItemList()\n        this.currentPage = 1;\n        await this._getItems(); \n        this.enableItemList()       \n    }\n\n    async clickPrevious() {\n        this.disableItemList();\n        if (this.currentPage > 1) {\n            this.currentPage--;\n        }\n        await this._getItems();\n        this.enableItemList();\n    }\n\n    async clickNext() {\n        this.disableItemList();\n        if (this.currentPage < this.currentSearchResult.pageCount) {\n            this.currentPage++;\n        }\n        await this._getItems();\n        this.enableItemList();\n    }\n    \n    @computedFrom()\n    get viewItemRoute(){\n        return ROUTES.VIEW_ITEM.name;\n    }\n\n    async exportItems() {\n        this.disableView();\n        let fieldFilters = this._getFilters();\n        let items = [];\n        if (this.searchInput) {\n            items = this.filteredItems\n        } else {\n            items = await this.itemService.getAllRecords(fieldFilters);\n        }\n        let itemsCSV = this.convertItemsToCsv(items);\n        $(this.$exportLink).attr('href', `data:text/csv;charset=utf-8, ${escape(itemsCSV)}`);       \n        this.$exportLink.click(); \n        this.enableView();\n    }\n\n    convertItemsToCsv(items) {\n        return parse.unparse(items.map((item) => {\n            return {\n                \"Name\" : item.name,\n                \"Sku\" : item.winerySku,\n                \"On Hand\" : item.onHand,\n                \"Available\" : item.available,\n                \"Committed\" : item.committed,\n                \"Backordered\" : item.backordered\n            };\n        }));\n    }\n\n\n}","module.exports = \"<template> <require from=shared-ui/converters/simple-date-format></require> <require from=shared-ui/converters/boolean-format></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui centered grid\\\"> <div class=\\\"sixteen wide column\\\"> <h1 class=\\\"ui center aligned header\\\">Item List</h1> </div> <div class=\\\"five wide column\\\"> <button class=\\\"positive ui button\\\" click.delegate=exportItems()>Export</button> <a href=\\\"data:text/csv;charset=utf-8,\\\" hidden download=itemlist.csv ref=$exportLink>Download</a> </div> <div class=\\\"six wide column\\\"> <div class=\\\"ui fluid input\\\"> <input type=text placeholder=Search... value.bind=searchInput> </div> </div> <div class=\\\"five wide column\\\"> <div class=\\\"ui grid\\\"> <div class=\\\"right floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === 1 ? 'disabled' : ''} button\\\" click.delegate=clickPrevious()> <i class=\\\"left arrow icon\\\"></i> </div> </div> <div class=\\\"six wide column\\\"> <span class=\\\"ui blue medium text\\\">Page ${currentPage} of ${currentSearchResult.pageCount || 1}</span> </div> <div class=\\\"left floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === currentSearchResult.pageCount ? 'disabled' : ''} button\\\" click.delegate=clickNext()> <i class=\\\"right arrow icon\\\"></i> </div> </div> </div> </div> <div class=\\\"sixteen wide column\\\"> <div class=\\\"ui ${itemListDisabled ? 'active' : ''} inverted dimmer\\\"> <div class=\\\"ui text centered loader\\\">Loading</div> </div> <div class=\\\"ui link four doubling cards\\\"> <div class=\\\"ui raised fluid card\\\" repeat.for=\\\"item of filteredItems\\\"> <a class=content route-href=\\\"route.bind: viewItemRoute; params.bind: {id: item.id}\\\"> <div class=header></div> <div class=description> <h2 class=\\\"ui medium header\\\"> <div class=content> ${item.name} <div class=\\\"sub header\\\">${item.winerySku}</div> </div> </h2> <form class=\\\"ui form\\\"> <div class=\\\"two fields\\\"> <div class=field> <label>On Hand</label> ${item.onHand} </div> <div class=field> <label>Available</label> ${item.available} </div> </div> <div class=\\\"two fields\\\"> <div class=field> <label>Committed</label> ${item.committed} </div> <div class=field> <label>Backordered</label> ${item.backordered} </div> </div> </form> </div> </a> </div> </div> </div> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, observable, computedFrom } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport { SearchResult } from \"shared-models/search-result\";\nimport parse from \"papaparse\";\nimport { WineryTransferReference } from \"items/models/winery-transfer\";\nimport { WineryTransferService } from \"items/services/winery-transfer-service\";\nimport { SimpleDateFormatValueConverter } from \"shared-ui/converters/simple-date-format\";\n\n@autoinject\nexport class WineryTransferListView extends StandardView {\n\n    wineryTransfers: WineryTransferReference[];\n\n    currentSearchResult: SearchResult;\n\n    currentPage: number = 1;\n\n    listDisabled: boolean = false;    \n\n    $downloadCSVLink: HTMLElement;\n\n    $exportLink: HTMLElement;\n\n    @observable\n    searchInput: string = \"\";\n\n    constructor(private wineryTransferService: WineryTransferService, private simpleDateFormat: SimpleDateFormatValueConverter) {\n        super(WineryTransferListView.name);\n    }\n\n    async activate(params, routeData) {\n        try {\n            await this._getResults();           \n        } catch (err) {\n            this.errorMessageUtil.showError(err);\n            this.routeToView(ROUTES.DASHBOARD.name);\n        }\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        await super.attached();\n    }\n\n    async _getResults() {\n        this.currentSearchResult = await this.wineryTransferService.searchRecords({page: this.currentPage, filter: this.searchInput});\n        this.wineryTransfers = this.currentSearchResult.records as WineryTransferReference[];\n    }\n\n    async searchInputChanged(newValue: string, oldValue: string) {\n        this.disableList();\n        this.currentPage = 1;\n        await this._getResults();\n        this.enableList();\n    }\n\n    async clickPrevious() {\n        this.disableList();\n        if (this.currentPage > 1) {\n            this.currentPage--;\n        }\n        await this._getResults();\n        this.enableList();\n    }\n\n    async clickNext() {\n        this.disableList();\n        if (this.currentPage < this.currentSearchResult.pageCount) {\n            this.currentPage++;\n        }\n        await this._getResults();\n        this.enableList();\n    }\n\n    async exportTransfers() {\n        this.disableView();\n        let wineryTransfers = [];\n        if (this.searchInput) {\n            wineryTransfers = this.wineryTransfers\n        } else {\n            wineryTransfers = await this.wineryTransferService.getAllRecords();\n        }\n        \n        let csvData = this.convertToCsv(wineryTransfers);\n        $(this.$exportLink).attr('href', `data:text/csv;charset=utf-8, ${escape(csvData)}`);       \n        this.$exportLink.click();\n        this.enableView();\n    }\n\n    convertToCsv(wineryTransfers: WineryTransferReference[]) {\n        if(wineryTransfers.length === 0){\n            return \"Receipt Date, Reference, Transfer Location, Total Charges\\n\";\n        }\n        return parse.unparse(wineryTransfers.map((wineryTransfer) => {\n            return {\n                \"Receipt Date\": this.simpleDateFormat.toView(wineryTransfer.receiptDate),\n                \"Reference\": wineryTransfer.reference,\n                \"Transfer Location\": wineryTransfer.transferLocation.name,\n                \"Total Charges\": wineryTransfer.totalCharges\n            };\n        }));\n    }    \n\n    @computedFrom()\n    get viewTransferRoute(){\n        return ROUTES.VIEW_WINERY_TRANSFER.name;\n    }\n\n    disableList() {\n        this.listDisabled = true;\n    }\n\n    enableList() {\n        this.listDisabled = false;\n    }\n}","module.exports = \"<template> <require from=shared-ui/converters/boolean-format></require> <require from=shared-ui/converters/simple-date-format></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui centered stackable grid\\\"> <div class=\\\"sixteen wide column\\\"> <h1 class=\\\"ui center aligned header\\\">Winery Transfers</h1> </div> <div class=\\\"five wide column\\\"> <button class=\\\"positive ui button\\\" click.delegate=exportTransfers()>Export</button> <a href=\\\"data:text/csv;charset=utf-8,\\\" hidden download=winerytransfers.csv ref=$exportLink>Download</a> </div> <div class=\\\"six wide column\\\"> <div class=\\\"ui fluid input\\\"> <input type=text placeholder=Search... value.bind=searchInput> </div> </div> <div class=\\\"five wide column\\\"> <div class=\\\"ui grid\\\"> <div class=\\\"right floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === 1 ? 'disabled' : ''} button\\\" click.delegate=clickPrevious()> <i class=\\\"left arrow icon\\\"></i> </div> </div> <div class=\\\"six wide column\\\"> <span class=\\\"ui blue medium text\\\">Page ${currentPage} of ${currentSearchResult.pageCount || 1}</span> </div> <div class=\\\"left floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === (currentSearchResult.pageCount || 1) ? 'disabled' : ''} button\\\" click.delegate=clickNext()> <i class=\\\"right arrow icon\\\"></i> </div> </div> </div> </div> <div class=\\\"sixteen wide column\\\"> <div class=\\\"ui ${listDisabled ? 'active' : ''} inverted dimmer\\\"> <div class=\\\"ui text centered loader\\\">Loading</div> </div> <div class=\\\"ui link four doubling stackable cards\\\"> <div class=\\\"ui raised fluid card\\\" repeat.for=\\\"wineryTransfer of wineryTransfers\\\"> <a class=content route-href=\\\"route.bind: viewTransferRoute; params.bind: {id: wineryTransfer.id}\\\"> <div class=header> <div class=\\\"ui grid\\\"> <div class=\\\"sixteen wide column\\\"> <div class=header> ${wineryTransfer.name} : ${wineryTransfer.reference} </div> </div> </div> </div> <div class=description> <form class=\\\"ui form\\\" ref=$viewForm> <div class=\\\"one fields\\\"> <div class=field> <b>Receipt Date:</b> ${wineryTransfer.receiptDate | simpleDateFormat} </div> </div> <div class=\\\"one fields\\\"> <div class=field> <b>Transfer Location :</b> ${wineryTransfer.transferLocation.name} </div> </div> </form> </div> </a> </div> </div> </div> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { bindable, autoinject, computedFrom } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport { SimpleDateFormatValueConverter } from \"shared-ui/converters/simple-date-format\";\nimport { WineryTransfer } from \"items/models/winery-transfer\";\nimport { WineryTransferService } from \"items/services/winery-transfer-service\";\n\n@autoinject\nexport class WineryTransferView extends StandardView {\n  @bindable\n  wineryTransfer: WineryTransfer;\n\n  $viewForm: HTMLElement;\n\n  constructor(private wineryTransferService: WineryTransferService, private simpleDateFormat: SimpleDateFormatValueConverter) {\n    super(WineryTransferView.name);\n    this.wineryTransfer = null;\n  }\n\n  async activate(params, routeData) {\n    try {\n      let wineryTransferId = params[\"id\"];\n      if (!wineryTransferId) {\n        throw \"No Winery Transfer Id Provided.\";\n      }\n      wineryTransferId = parseInt(wineryTransferId, 10)\n      let requestResponses = await Promise.all([\n        this.wineryTransferService.getRecord(wineryTransferId)\n      ]);\n      this.wineryTransfer = requestResponses[0];\n    } catch (err) {\n      this.errorMessageUtil.showError(err);\n      this.router.navigateToRoute(ROUTES.DASHBOARD.name, {}, { trigger: true, replace: true });\n    }\n    await super.activate(params, routeData);\n  }\n\n  async attached() {\n    await super.attached();\n  }\n\n  @computedFrom()\n  get viewItemRoute(){\n      return ROUTES.VIEW_ITEM.name;\n  }\n\n}","module.exports = \"<template> <require from=shared-ui/converters/simple-date-format></require> <require from=shared-ui/converters/boolean-format></require> <require from=shared-ui/converters/currency-format></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui centered stackable padded grid\\\"> <div class=\\\"sixteen wide column\\\"> <h1 class=\\\"ui center aligned header\\\">${wineryTransfer.name}</h1> </div> </div> <form class=\\\"ui form\\\" ref=$viewForm> <h4 class=\\\"ui dividing header\\\">Primary Information</h4> <div class=\\\"two fields\\\"> <div class=field> <b>Transfer Location:</b> ${wineryTransfer.transferLocation.name} </div> <div class=field> <b>Reference:</b> ${wineryTransfer.reference} </div> </div> <div class=\\\"two fields\\\"> <div class=field> <b>Receipt Date:</b> ${wineryTransfer.receiptDate | simpleDateFormat} </div> <div class=field> <b>Total Charges:</b> ${wineryTransfer.totalCharges | currencyFormat} </div> </div> <h4 class=\\\"ui dividing header\\\">Items</h4> <div class=\\\"ui link cards\\\"> <a class=\\\"ui raised fluid card\\\" repeat.for=\\\"itemLine of wineryTransfer.items\\\" route-href=\\\"route.bind: viewItemRoute; params.bind: {id: itemLine.itemId}\\\"> <div class=content> <div class=description> <form class=\\\"ui form\\\"> <div class=\\\"four fields\\\"> <div class=field> <b>Item:</b> ${itemLine.itemName} </div> <div class=field> <b>Sku:</b> ${itemLine.sku} </div> <div class=field> <b>Quantity:</b> ${itemLine.quantity} </div> <div class=field> <b>Total Charges:</b> ${itemLine.totalCharges | currencyFormat} </div> </div> </form> </div> </div> </a> </div> </form> </div> </template>\";","import Amplify, { Auth } from \"aws-amplify\";\nimport { autoinject, Container } from \"aurelia-framework\";\nimport { AureliaConfiguration } from \"aurelia-configuration\";\nimport { RouterConfiguration, Router, activationStrategy } from \"aurelia-router\";\nimport { StandardView } from \"shared-ui/views/standard-view\";\nimport { ROUTES } from \"routes\";\nimport { UserSession } from \"user/models/user-session\";\n\n@autoinject\nexport class Loader extends StandardView {\n    isLoggedIn: boolean;\n\n    constructor(private aureliaConfig: AureliaConfiguration) {\n        super(Loader.name);\n        this.isLoggedIn = false;\n    }\n\n    async activate(params, routeData) {\n        try {\n            await this.setupAWS();\n            this.isLoggedIn = true\n        } catch (err) {\n            this.isLoggedIn = false\n        }\n\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        await super.attached();\n    }\n\n    async configureRouter(config: RouterConfiguration, router: Router) {\n        config.title = 'VinFillment Winery Portal';\n        config.options.pushState = true;\n        for (let route in ROUTES) {\n            let routeObj = ROUTES[route];\n            config.mapRoute({\n                route: routeObj.routes,\n                name: routeObj.name,\n                moduleId: routeObj.moduleId,\n                nav: true,\n                title: routeObj.title,\n                activationStrategy: activationStrategy.invokeLifecycle\n            });\n        }\n        function preActivateStep() {\n            return async (navigationInstruction, next) => {\n                let userSession = Container.instance.get(UserSession);\n                if (userSession) {\n                    await userSession.refreshToken();\n                }\n                return next();\n            };\n        }\n        config.addPreActivateStep(preActivateStep)\n        this.router = router;\n    }\n\n    async setupAWS() {\n        Amplify.configure({\n            Auth: {\n                identityPoolId: this.aureliaConfig.get('aws.identityPoolId'),\n                region: this.aureliaConfig.get('aws.region'),\n                userPoolId: this.aureliaConfig.get('aws.userPoolId'),\n                userPoolWebClientId: this.aureliaConfig.get('aws.userPoolWebClientId'),\n            },\n            API: {\n                endpoints: [\n                    {\n                        name: \"CustomerPortalBackend\",\n                        region: this.aureliaConfig.get('aws.region'),\n                        endpoint: this.aureliaConfig.get('aws.endpoint')\n                    }\n                ]\n            }\n        });\n        return new Promise((resolve, reject) => {\n            Auth.currentAuthenticatedUser({\n                bypassCache: true  // Optional, By default is false. If set to true, this call will send a request to Cognito to get the latest user data\n            }).then(user => resolve())\n                .catch(err => reject());\n        });\n    }\n}","module.exports = \"<template> <require from=./app></require> <require from=./login/views/login-view></require> <app containerless if.bind=isLoggedIn></app> <login-view containerless if.bind=!isLoggedIn></login-view> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { bindable, autoinject } from \"aurelia-framework\";\nimport { LOGIN_FORM_TYPE } from \"../login-view\";\nimport { LoginService } from \"login/services/login-service\";\nimport { ScreenViewUtility } from \"shared-ui/utility/screen-view-utility\";\n\n@autoinject\nexport class EnterCodeView extends StandardView{\n    @bindable\n    formType: LOGIN_FORM_TYPE;\n    @bindable\n    email: string;   \n    $form: any;\n    code: string;\n    password: string;\n\n    constructor(private loginService: LoginService, private screenViewUtil: ScreenViewUtility){\n        super(EnterCodeView.name);\n        this.enableView();\n    }\n\n    async attached() {\n        await super.attached();\n        $(this.$form).form({\n            on: 'blur',\n            onSuccess: (event, fields) => {\n                event.preventDefault(); //Keep from submitting the page\n                this.resetPassword();\n            },\n            fields: {\n                email: {\n                    identifier: 'email',\n                    rules: [\n                        {\n                            type: 'email',\n                            prompt: 'Please enter a valid e-mail'\n                        }\n                    ]\n                },\n                code: {\n                    identifier: 'code',\n                    rules: [\n                        {\n                            type: 'empty',\n                            prompt: 'Code cannot be blank'\n                        }\n                    ]\n                },\n                password: {\n                    identifier: 'password',\n                    rules: [\n                        {\n                            type: 'empty',\n                            prompt: 'Password cannot be blank'\n                        }\n                    ]\n                }\n            }\n        });\n    }\n\n    clickGoBack(){\n        this.formType = LOGIN_FORM_TYPE.FORGOT_PASSWORD_SEND_CODE;\n    }\n\n    async resetPassword(){\n        this.disableView();\n        try{\n            await this.loginService.sendNewPasswordWithCode(this.email, this.code, this.password);\n            this.formType = LOGIN_FORM_TYPE.LOGIN;\n        } catch(err){\n            $(this.$form).form('add errors', [err.message]);\n        }\n        this.enableView();\n    }\n}","module.exports = \"<template> <require from=../shared/input-field-view.html></require> <require from=../shared/large-button-field-view.html></require> <form class=\\\"ui centered grid form\\\" ref=$form style=margin-left:0> <div class=row> <input-field-view containerless> <div class=\\\"ui left icon large input\\\"> <i class=\\\"user icon\\\"></i> <input type=text name=email value.bind=\\\"email | lowercaseFormat\\\" placeholder=\\\"Email address\\\"> </div> </input-field-view> </div> <div class=row> <input-field-view containerless> <div class=\\\"ui left icon large input\\\"> <i class=\\\"lock icon\\\"></i> <input type=text name=code value.bind=code placeholder=code> </div> </input-field-view> </div> <div class=row> <input-field-view containerless> <div class=\\\"ui left icon large input\\\"> <i class=\\\"lock icon\\\"></i> <input type=password name=password value.bind=password placeholder=\\\"New Password\\\"> </div> <div class=\\\"ui error message\\\"></div> </input-field-view> </div> <div class=row> <u class=\\\"center aligned column field\\\"> <a href=# click.delegate=clickGoBack()>Go Back</a> </u> </div> <div class=row style=margin-top:32px> <large-button-field-view containerless> <div class=\\\"ui fluid primary big submit button field\\\"> Reset Password</div> </large-button-field-view> </div> </form> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { bindable, autoinject } from \"aurelia-framework\";\nimport { LOGIN_FORM_TYPE } from \"../login-view\";\nimport { LoginService } from \"login/services/login-service\";\nimport { ScreenViewUtility } from \"shared-ui/utility/screen-view-utility\";\n\n@autoinject\nexport class SendCodeView extends StandardView{\n    @bindable\n    formType: LOGIN_FORM_TYPE;\n    @bindable\n    email: string;    \n    $form: any;   \n\n    constructor(private loginService: LoginService, private screenViewUtil: ScreenViewUtility){\n        super(SendCodeView.name);\n        this.enableView();\n    }\n\n    async attached() {\n        await super.attached();\n        $(this.$form).form({\n            on: 'blur',\n            onSuccess: (event, fields) => {\n                event.preventDefault(); //Keep from submitting the page\n                this.emailCode();\n            },\n            fields: {\n                email: {\n                    identifier: 'email',\n                    rules: [\n                        {\n                            type: 'email',\n                            prompt: 'Please enter a valid e-mail'\n                        }\n                    ]\n                }\n            }\n        });\n    }\n\n    clickGoBack(){\n        this.formType = LOGIN_FORM_TYPE.LOGIN;\n    }\n\n    async emailCode(){\n        this.disableView();\n        try{\n            await this.loginService.sendForgotPasswordCode(this.email);\n            this.formType = LOGIN_FORM_TYPE.FORGOT_PASSWORD_ENTER_CODE;\n        } catch(err){\n            $(this.$form).form('add errors', [err.message]);\n        }\n        this.enableView();\n    }\n}","module.exports = \"<template> <require from=../shared/input-field-view.html></require> <require from=../shared/button-field-view.html></require> <form class=\\\"ui centered grid form\\\" ref=$form style=margin-left:0> <div class=row> <input-field-view containerless> <div class=\\\"ui left icon large input\\\"> <i class=\\\"user icon\\\"></i> <input type=text name=email value.bind=\\\"email | lowercaseFormat\\\" placeholder=\\\"Email address\\\"> </div> <div class=\\\"ui error message\\\"></div> </input-field-view></div>  <div class=row> <u class=\\\"center aligned column field\\\"> <a href=# click.delegate=clickGoBack()>Go Back</a> </u> </div> <div class=row style=margin-top:32px> <button-field-view containerless> <div class=\\\"ui fluid primary big submit button field\\\"> Email Code</div> </button-field-view></div>  </form> </template>\";","import { LoginPassport } from \"login/models/login-passport\";\nimport { computedFrom } from \"aurelia-binding\";\nimport { LoginService } from \"login/services/login-service\";\nimport { CognitoUser } from \"@aws-amplify/auth\";\nimport { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, bindable } from \"aurelia-framework\";\nimport { LOGIN_FORM_TYPE } from \"./login-view\";\nimport { ScreenViewUtility } from \"shared-ui/utility/screen-view-utility\";\n\n@autoinject\nexport class LoginFormView extends StandardView {\n    @bindable\n    formType: LOGIN_FORM_TYPE;\n    @bindable\n    email: string;\n    @bindable\n    user: CognitoUser | any;    \n    $form: any;\n    password: string;\n\n    newPassword: string;\n\n    constructor(private loginService: LoginService, private screenViewUtil: ScreenViewUtility) {\n        super(LoginFormView.name);\n        this.user = null;\n        this.enableView();\n    }\n\n    async attached() {\n        await super.attached();\n        $(this.$form).form({\n            on: 'blur',\n            onSuccess: (event, fields) => {\n                event.preventDefault(); //Keep from submitting the page\n                this.login();\n            },\n            fields: {\n                email: {\n                    identifier: 'email',\n                    rules: [\n                        {\n                            type: 'email',\n                            prompt: 'Please enter a valid e-mail'\n                        }\n                    ]\n                },\n                password: {\n                    identifier: 'password',\n                    rules: [\n                        {\n                            type: 'empty',\n                            prompt: 'Please enter your password'\n                        }\n                    ]\n                }\n            }\n        });\n    }\n\n    @computedFrom('email', 'password')\n    get loginPassport(): LoginPassport {\n        this.password = (this.password || \"\").trim();\n        return new LoginPassport({ email: this.email, password: this.password });\n    }\n    \n    async clickForgotPassword() {\n        this.formType = LOGIN_FORM_TYPE.FORGOT_PASSWORD_SEND_CODE;\n    }\n\n    async login() {\n        let loggedIn = false;\n        this.disableView();\n        try {\n            let loginResponse = await this.loginService.login(this.loginPassport);\n            if (loginResponse.isSuccessful) {\n                loggedIn = true;\n                location.reload();\n            } else if (loginResponse.needNewPassword) {\n                this.user = loginResponse.user;\n                this.formType = LOGIN_FORM_TYPE.NEW_PASSWORD;\n            } else {\n                let message = loginResponse.message;\n                if(message === \"User does not exist.\" || message === \"Incorrect username or password.\"){\n                    message = \"Incorrect Email or Password.\";\n                }                \n                $(this.$form).form('add errors', [message]);\n            }\n\n        } catch (err) {\n            $(this.$form).form('add errors', [\"Error Logging In. Please Try again.\"]);\n        }\n        if(!loggedIn){\n            this.enableView();\n        }        \n    }\n}","module.exports = \"<template> <require from=./shared/input-field-view.html></require> <require from=./shared/button-field-view.html></require> <form class=\\\"ui centered grid form\\\" ref=$form style=margin-left:0> <div class=row> <input-field-view containerless> <div class=\\\"ui left icon large input\\\"> <i class=\\\"user icon\\\"></i> <input type=text name=email value.bind=\\\"email | lowercaseFormat\\\" placeholder=\\\"Email address\\\"> </div> </input-field-view> </div> <div class=row> <input-field-view containerless> <div class=\\\"ui left icon large input\\\"> <i class=\\\"lock icon\\\"></i> <input type=password name=password value.bind=password placeholder=Password> </div> <div class=\\\"ui error message\\\"></div> </input-field-view> </div> <div class=row> <u class=\\\"center aligned column field\\\"> <a href=# click.delegate=clickForgotPassword()>Forgot Password?</a> </u> </div> <div class=row style=margin-top:32px> <button-field-view containerless> <div class=\\\"ui fluid primary big submit button field\\\"> Login</div> </button-field-view> </div> </form> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { CognitoUser } from \"@aws-amplify/auth\";\nimport { computedFrom } from \"aurelia-binding\";\nimport { autoinject } from \"aurelia-framework\";\nimport { ScreenViewUtility } from \"shared-ui/utility/screen-view-utility\";\n\nexport enum LOGIN_FORM_TYPE {\n  LOGIN,\n  NEW_PASSWORD,\n  FORGOT_PASSWORD_SEND_CODE,\n  FORGOT_PASSWORD_ENTER_CODE,\n}\n\n@autoinject\nexport class LoginView extends StandardView {\n  formType: LOGIN_FORM_TYPE;\n  email: string;\n  user: CognitoUser | any;\n\n  constructor(private screenViewUtil: ScreenViewUtility) {\n    super(LoginView.name);\n    this.screenViewUtil.disableView = false;    \n  }\n\n  async activate(params, routeData) {\n    await super.activate(params, routeData);\n  }\n\n  async attached() {  \n    this.formType = LOGIN_FORM_TYPE.LOGIN; \n    await super.attached();\n  }\n\n  @computedFrom('formType')\n  get isLoginForm(): boolean{\n    return this.formType === LOGIN_FORM_TYPE.LOGIN;\n  }\n\n  @computedFrom('formType')\n  get isNewPasswordForm(): boolean{\n    return this.formType === LOGIN_FORM_TYPE.NEW_PASSWORD;\n  }\n\n  @computedFrom('formType')\n  get isForgotPasswordSendCodeForm(): boolean{\n    return this.formType === LOGIN_FORM_TYPE.FORGOT_PASSWORD_SEND_CODE;\n  }\n\n  @computedFrom('formType')\n  get isForgotPasswordEnterCodeForm(): boolean{\n    return this.formType === LOGIN_FORM_TYPE.FORGOT_PASSWORD_ENTER_CODE;\n  }\n\n}","module.exports = \"<template> <require from=fomantic-ui-css/semantic.css></require> <require from=./login-form-view></require> <require from=./forgot-password/send-code-view></require> <require from=./forgot-password/enter-code-view></require> <require from=./new-password/new-password-view></require> <require from=shared-ui/views/disable-view></require> <div class=\\\"ui container one column center aligned grid\\\"> <div class=column id=maincolumn> <div class=\\\"ui segment\\\" id=login-segment> <div class=\\\"ui inverted segment\\\" id=header-segment> <div> <img class=\\\"ui centered medium image\\\" src=/images/VinFillment_white.png> </div> <h2 class=\\\"ui header\\\"> <div class=content>Customer Portal</div> </h2> </div> <disable-view></disable-view> <login-form-view if.bind=isLoginForm containerless disable-view.two-way=disableView email.two-way=email user.two-way=user form-type.two-way=formType> </login-form-view> <new-password-view if.bind=isNewPasswordForm containerless disable-view.two-way=disableView email.two-way=email user.two-way=user form-type.two-way=formType></new-password-view> <send-code-view if.bind=isForgotPasswordSendCodeForm containerless disable-view.two-way=disableView email.two-way=email form-type.two-way=formType></send-code-view> <enter-code-view if.bind=isForgotPasswordEnterCodeForm containerless disable-view.two-way=disableView email.two-way=email form-type.two-way=formType></enter-code-view> </div> </div> </div> <style>@media only screen and (max-width:767px){.ui.container{margin:0!important}#maincolumn{padding:0}}#header-segment{background-color:#343350;margin-bottom:80px}#login-segment{padding-top:0;padding-right:0;padding-left:0;padding-bottom:4em}body{background-color:#bcbcbc}</style> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { bindable, autoinject } from \"aurelia-framework\";\nimport { LOGIN_FORM_TYPE } from \"../login-view\";\nimport { LoginService } from \"login/services/login-service\";\nimport { computedFrom } from \"aurelia-binding\";\nimport { LoginPassport } from \"login/models/login-passport\";\nimport { CognitoUser } from \"@aws-amplify/auth\";\nimport { ScreenViewUtility } from \"shared-ui/utility/screen-view-utility\";\n\n@autoinject\nexport class NewPasswordView extends StandardView {\n    @bindable\n    formType: LOGIN_FORM_TYPE;\n    @bindable\n    email: string;\n    @bindable\n    user: CognitoUser | any;    \n    $form: any;\n    code: string;\n    oldPassword: string;\n    newPassword: string;\n\n    constructor(private loginService: LoginService, private screenViewUtil: ScreenViewUtility) {\n        super(NewPasswordView.name);\n        this.enableView();\n    }\n\n    async attached() {\n        await super.attached();\n        $(this.$form).form({\n            on: 'blur',\n            onSuccess: (event, fields) => {\n                event.preventDefault(); //Keep from submitting the page\n                this.resetPassword();\n            },\n            fields: {\n                email: {\n                    identifier: 'email',\n                    rules: [\n                        {\n                            type: 'email',\n                            prompt: 'Please enter a valid e-mail'\n                        }\n                    ]\n                },\n                oldPassword: {\n                    identifier: 'oldPassword',\n                    rules: [\n                        {\n                            type: 'empty',\n                            prompt: 'Code cannot be blank'\n                        }\n                    ]\n                },\n                newPassword: {\n                    identifier: 'newPassword',\n                    rules: [\n                        {\n                            type: 'empty',\n                            prompt: 'Password cannot be blank'\n                        }\n                    ]\n                }\n            }\n        });\n    }\n\n    clickGoBack() {\n        this.formType = LOGIN_FORM_TYPE.FORGOT_PASSWORD_SEND_CODE;\n    }\n\n    @computedFrom('email', 'password')\n    get loginPassport(): LoginPassport {\n        this.oldPassword = (this.oldPassword || \"\").trim();\n        return new LoginPassport({ email: this.email, password: this.oldPassword });\n    }\n\n    async resetPassword() {\n        let loggedIn = false;\n        this.disableView();\n        try {\n            let loginResponse = await this.loginService.setNewPassword(this.loginPassport, this.newPassword, this.user);\n            if (loginResponse.isSuccessful) {\n                loggedIn = true;\n                location.reload();\n            } else {\n                $(this.$form).form('add errors', [loginResponse.message]);\n            }\n        } catch (err) {\n            $(this.$form).form('add errors', [err.message]);\n        }\n        if(!loggedIn){\n            this.enableView();\n        }       \n    }\n}","module.exports = \"<template> <require from=../shared/input-field-view.html></require> <require from=../shared/large-button-field-view.html></require> <form class=\\\"ui centered grid form\\\" ref=$form style=margin-left:0> <div class=row> <input-field-view containerless> <div class=\\\"ui left icon large input\\\"> <i class=\\\"user icon\\\"></i> <input type=text name=email value.bind=\\\"email | lowercaseFormat\\\" placeholder=\\\"Email address\\\"> </div> </input-field-view> </div> <div class=row> <input-field-view containerless> <div class=\\\"ui left icon large input\\\"> <i class=\\\"lock icon\\\"></i> <input type=password name=oldPassword value.bind=oldPassword placeholder=\\\"Current Password\\\"> </div> </input-field-view> </div> <div class=row> <input-field-view containerless> <div class=\\\"ui left icon large input\\\"> <i class=\\\"lock icon\\\"></i> <input type=password name=newPassword value.bind=newPassword placeholder=\\\"New Password\\\"> </div> <div class=\\\"ui error message\\\"></div> </input-field-view> </div> <div class=row> <u class=\\\"center aligned column field\\\"> <a href=# click.delegate=clickGoBack()>Go Back</a> </u> </div> <div class=row style=margin-top:32px> <large-button-field-view containerless> <div class=\\\"ui fluid primary big submit button field\\\"> Change Password</div> </large-button-field-view> </div> </form> </template>\";","module.exports = \"<template> <div class=\\\"three wide computer five wide tablet ten wide mobile column field\\\"> <slot></slot> </div> </template>\";","module.exports = \"<template> <div class=\\\"eight wide computer ten wide tablet sixteen wide mobile column field\\\"> <slot></slot> </div> </template>\";","module.exports = \"<template> <div class=\\\"five wide computer seven wide tablet fourteen wide mobile column field\\\"> <slot></slot> </div> </template>\";","/// <reference types=\"aurelia-loader-webpack/src/webpack-hot-interface\"/>\n// we want font-awesome to load as soon as possible to show the fa-spinner\nimport './styles.css';\nimport 'fomantic-ui-css/semantic.css';\nimport 'font-awesome/css/font-awesome.css';\nimport { Aurelia, LogManager } from 'aurelia-framework';\nimport { ConsoleAppender } from 'aurelia-logging-console';\nimport { PLATFORM } from 'aurelia-pal';\nimport Bluebird from 'bluebird';\nimport '../extra_modules/semantic.js';\n\nLogManager.addAppender(new ConsoleAppender());\nLogManager.setLevel(LogManager.logLevel.debug);\n\n// remove out if you don't want a Promise polyfill (remove also from webpack.config.js)\nBluebird.config({ warnings: { wForgottenReturn: false } });\n\nconst delay = ms => new Promise(res => setTimeout(res, ms));\n\nexport async function configure(aurelia: Aurelia) {  \n  aurelia.use\n    .standardConfiguration()\n    .globalResources(PLATFORM.moduleName('shared-ui/converters/lowercase-format'))\n    .globalResources(PLATFORM.moduleName('shared-ui/converters/currency-format'))\n    .globalResources(PLATFORM.moduleName('shared-ui/converters/simple-datetime-format'))\n    .globalResources(PLATFORM.moduleName('shared-ui/converters/simple-date-format'))\n    .globalResources(PLATFORM.moduleName('shared-ui/converters/boolean-format'))\n    .developmentLogging();\n\n  aurelia.use.plugin(PLATFORM.moduleName(\"aurelia-configuration\"), config => {\n    config.setEnvironments({\n      local: ['localhost:8080', 'localhost:8084', 'localhost'],\n      staging: ['d3daxp27ztlrk9.cloudfront.net', 'staging.vinfillment.portal.stravinski.io'],\n      live: ['deunxv7xshi0b.cloudfront.net', 'vinfillment.portal.stravinski.io']\n    });\n  });\n  \n  // Uncomment the line below to enable animation.\n  // aurelia.use.plugin(PLATFORM.moduleName('aurelia-animator-css'));\n  // if the css animator is enabled, add swap-order=\"after\" to all router-view elements\n\n  // Anyone wanting to use HTMLImports to load views, will need to install the following plugin.\n  // aurelia.use.plugin(PLATFORM.moduleName('aurelia-html-import-template-loader'));\n  $('#splash-loader').show();\n  await aurelia.start();\n  aurelia.setRoot(PLATFORM.moduleName('loader'));  \n}\n\n","import { autoinject } from \"aurelia-dependency-injection\";\nimport { StandardView } from \"shared-ui/views/standard-view\";\nimport { UserSession } from \"user/models/user-session\";\n\n@autoinject\nexport class BottomNavBar extends StandardView{    \n\n    constructor() {\n        super(BottomNavBar.name);\n    }\n\n    async activate(params, routeData) {\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        await super.attached();\n    }\n\n    async onClickUserIcon() {\n        await this.userSession.logout();\n    }\n\n    async onClickHomeIcon() {\n        this.router.navigateToRoute(\n            'dashboard',\n            {},\n            { replace: true, trigger: true }\n        );\n    }\n}","module.exports = \"<template> <div class=\\\"ui bottom fixed inverted huge menu\\\"> <div class=\\\"ui container four column equal width middle aligned center aligned grid\\\"> <a class=\\\"column item\\\" click.delegate=onClickHomeIcon()> <i class=\\\"home icon\\\"></i> </a> <a class=\\\"column item\\\"> <i class=\\\"bell icon\\\"></i> </a> <a class=\\\"column item\\\"> <i class=\\\"plus icon\\\"></i> </a> <a class=\\\"column item\\\" click.delegate=onClickUserIcon()> <i class=\\\"user icon\\\"></i> </a> </div> </div> </template>\";","import { autoinject, bindable, computedFrom } from \"aurelia-framework\";\nimport { StandardView } from \"shared-ui/views/standard-view\";\nimport { NotificationService } from \"notifications/services/notification-service\";\nimport { AlertNotification } from \"notifications/models/alert-notification\";\nimport { ScreenViewUtility } from \"shared-ui/utility/screen-view-utility\";\nimport { UserSession } from \"user/models/user-session\";\nimport { ROUTES } from \"routes\";\n\n@autoinject\nexport class SideNavBar extends StandardView {\n    @bindable\n    showSideBar: boolean;\n    $sideBar: any;\n    $notificationIcon: any;\n    alertNotifications: AlertNotification[];\n\n    constructor(private notificationService: NotificationService) {\n        super(SideNavBar.name);\n        this.screenViewUtility.disableView = false;\n        this.alertNotifications = [];\n    }\n\n    async activate(params, routeData) {\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        // let promiseResponse = await Promise.all([\n        //     this.notificationService.getAlertNotifications(),\n        //     super.attached()\n        // ]);\n        // this.alertNotifications = promiseResponse[0];\n\n        $(this.$sideBar)\n            .sidebar({\n                context: $('.bottom.segment'),\n                returnScroll: true,\n                onShow: () => {\n                    if (this.hasActiveNotifications) {\n                        $(this.$notificationIcon).transition('jiggle');\n                    }\n                },\n                onHidden: () => {\n                    this.scrollToTop();\n                    this.showSideBar = false;\n                },\n                onVisible: () => {\n                    this.scrollToTop();\n                    this.showSideBar = true;\n                }\n            })\n            .sidebar('attach events', '.sidebarpusher');\n    }\n\n    async routeToView(routeName: string) {\n        $(this.$sideBar).sidebar('hide');\n        await super.routeToView(routeName);\n      }\n    \n    async onClickHome() {\n        await this.routeToView(ROUTES.DASHBOARD.name);\n    }\n\n    async onClickNotifications() {\n        await this.routeToView(ROUTES.NAVIGATION.name);        \n    }\n\n    async onClickNewOrder() {\n        await this.routeToView(ROUTES.CREATE_ORDER.name);        \n    }\n\n    async onClickImportOrders() {\n        await this.routeToView(ROUTES.VIEW_IMPORT_ORDERS.name);        \n    }\n\n    async onClickViewOrders() {\n        await this.routeToView(ROUTES.ORDER_LIST_DASHBOARD.name);        \n    }\n\n    async onClickOrderBatches() {\n        await this.routeToView(ROUTES.LIST_ORDER_BATCHES.name);\n    }\n\n    async onClickChangeOrders() {\n        await this.routeToView(ROUTES.LIST_CHANGE_ORDER.name);\n    }\n\n    async onClickShippingStatus() {\n        this.errorMessageUtil.showErrorMessage(\"Not Yet Implemented.\");    \n    }\n\n    async onClickRates() {\n        this.errorMessageUtil.showErrorMessage(\"Not Yet Implemented.\");    \n    }\n\n    async onClickItems() {\n        await this.routeToView(ROUTES.ITEMS_DASHBOARD.name);\n    }\n\n    async onClickReports() {\n        this.errorMessageUtil.showErrorMessage(\"Not Yet Implemented.\");  \n    }\n\n    async onClickColdChain() {\n        await this.routeToView(ROUTES.COLD_CHAIN_DASHBOARD.name);    \n    }\n\n    async onClickReturns() {\n        return this.routeToView(ROUTES.RETURNS_DASHBOARD.name);    \n    }\n\n    async onClickAddressBook() {\n        await this.routeToView(ROUTES.LIST_SHIPPING_ADDRESSES.name);\n    }\n\n    async onClickLogout() {\n        await this.userSession.logout();\n    }\n\n\n\n    @computedFrom('alertNotifications')\n    get hasActiveNotifications(): boolean {\n        return this.alertNotifications.length > 0;\n    }\n\n    @computedFrom('userSession.user.name')\n    get userName(): string {\n        if(!this.userSession.user){\n            return \"\";\n        }\n        return this.userSession.user.name;\n    }\n}","module.exports = \"<template> <div class=\\\"ui left fixed vertical inverted sidebar borderless menu\\\" id=nav-side-bar ref=$sideBar> <div class=item> ${userName} </div> <a class=item click.delegate=onClickHome()> <div class=\\\"right aligned content\\\"> <div class=header> <i class=\\\"large warehouse icon\\\"></i> Home </div> </div> </a> <a class=item click.delegate=onClickNotifications()> <div class=\\\"right aligned content\\\"> <div class=header> <i class=\\\"large icons\\\" ref=$notificationIcon> <i class=\\\"large bell icon\\\"></i> <i if.bind=hasActiveNotifications class=\\\"inverted corner certificate red icon\\\"></i> </i> Notifications </div> </div> </a> <a class=item> <div class=\\\"right aligned content\\\"> <div class=header> <i class=\\\"large user icon\\\"></i> User </div> </div> </a> <a class=item click.delegate=onClickLogout()> <div class=\\\"middle aligned content\\\"> <div class=header> <i class=\\\"large arrow left alternate icon\\\"></i> Logout </div> </div> </a> <div class=\\\"ui divider\\\"> </div> <a class=item click.delegate=onClickNewOrder()> <div class=\\\"middle aligned content\\\"> <div class=header> <i class=\\\"large edit icon\\\"></i> Create Order </div> </div> </a> <a class=item click.delegate=onClickImportOrders()> <div class=\\\"middle aligned content\\\"> <div class=header> <i class=\\\"large cloud upload icon\\\"></i> Import Orders </div> </div> </a> <a class=item click.delegate=onClickViewOrders()> <div class=\\\"middle aligned content\\\"> <div class=header> <i class=\\\"large list icon\\\"></i> View Orders </div> </div> </a> <a class=item click.delegate=onClickOrderBatches()> <div class=\\\"middle aligned content\\\"> <div class=header> <i class=\\\"large copy icon\\\"></i> Order Batches </div> </div> </a> <a class=item click.delegate=onClickChangeOrders()> <div class=\\\"middle aligned content\\\"> <div class=header> <i class=\\\"large tools icon\\\"></i> Change Orders </div> </div> </a> <a class=item click.delegate=onClickShippingStatus()> <div class=\\\"middle aligned content\\\"> <div class=header> <i class=\\\"large truck icon\\\"></i> Shipping Status </div> </div> </a> <a class=item> <div class=\\\"middle aligned content\\\" click.delegate=onClickRates()> <div class=header> <i class=\\\"large receipt icon\\\"></i> Rates </div> </div> </a> <a class=item> <div class=\\\"middle aligned content\\\" click.delegate=onClickItems()> <div class=header> <i class=\\\"large boxes icon\\\"></i> Items/Inventory </div> </div> </a> <a class=item> <div class=\\\"middle aligned content\\\" click.delegate=onClickReports()> <div class=header> <i class=\\\"large chart bar icon\\\"></i> Reports </div> </div> </a> <a class=item> <div class=\\\"middle aligned content\\\" click.delegate=onClickReturns()> <div class=header> <i class=\\\"large truck packing icon\\\"></i> Returns </div> </div> </a> <a class=item> <div class=\\\"middle aligned content\\\" click.delegate=onClickColdChain()> <div class=header> <i class=\\\"large snowflake icon\\\"></i> Cold Chain </div> </div> </a> <a class=item> <div class=\\\"middle aligned content\\\" click.delegate=onClickAddressBook()> <div class=header> <i class=\\\"large address book packing icon\\\"></i> Address Book </div> </div> </a> </div> <style>#nav-side-bar{background-color:#343350}</style> </template>\";","import { autoinject } from \"aurelia-dependency-injection\";\nimport { StandardView } from \"shared-ui/views/standard-view\";\nimport { UserSession } from \"user/models/user-session\";\nimport { computedFrom } from \"aurelia-binding\";\nimport { Winery } from \"user/models/user\";\nimport { ROUTES } from \"routes\";\n\n@autoinject\nexport class TopNavBar extends StandardView {\n    showInputBox: boolean;\n\n    $wineryDropdown: HTMLElement;\n\n    constructor() {\n        super(TopNavBar.name);\n    }\n\n    async activate(params, routeData) {\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        await Promise.all([\n            $(this.$wineryDropdown).dropdown({\n                fullTextSearch: true,\n                onChange: async (value, text, $selectedItem) => {                    \n                    if (text) {         \n                        if(text === \"Logout\"){\n                            await this.userSession.logout();\n                        }  else{\n                            this.userSession.currentWinery = this.userSession.user.availableWineries.find((winery)=>winery.name == text)\n                            this.routeToView(ROUTES.DASHBOARD.name);\n                        }\n                    }\n                }\n            })]);\n        await super.attached();        \n        this.showInputBox = false;        \n    }\n\n    async onClickSearchIcon() {\n        this.showInputBox = true;\n    }\n\n    @computedFrom('userSession.user.wineryImage')\n    get wineryImage(): string{\n        return this.userSession && this.userSession.user ? this.userSession.user.wineryImage : \"\";\n    }\n\n    @computedFrom('screenViewUtility.viewName', 'userSession.user.wineryImage')\n    get showImage(): boolean{\n        return !this.screenViewUtility.viewName && !!this.wineryImage;\n    }\n\n    @computedFrom('screenViewUtility.viewName', 'userSession.user.wineryImage')\n    get showText(): boolean{\n        return !!this.userSession.user && !this.wineryImage;\n    }\n\n    @computedFrom('screenViewUtility.viewName', 'userSession.user.wineryName')\n    get navBarTitle(): string{\n        if(this.screenViewUtility.viewName || !this.userSession.user){\n            return this.screenViewUtility.viewName;\n        }\n        return `${this.userSession.user ? this.userSession.user.wineryName : \"\"} Winery Portal`;\n    }\n\n    @computedFrom('userSession.currentWinery')\n    get currentWineryName(): string{\n        if(this.userSession.currentWinery){\n            return this.userSession.currentWinery.name;\n        }\n        return \"\";\n    }\n\n    @computedFrom('userSession.currentWinery', 'userSession.user')\n    get availableWineries(): Winery[]{  \n        if(!this.userSession.user){\n            return [];\n        }      \n        if(!this.userSession.currentWinery){\n            return this.userSession.user.availableWineries;\n        }\n        return this.userSession.user.availableWineries.filter((winery)=>winery.id != this.userSession.currentWinery.id);\n    }\n}","module.exports = \"<template> <div class=\\\"ui borderless fixed menu\\\"> <a class=\\\"ui left item sidebarpusher\\\"> <i class=\\\"large sidebar icon\\\"></i> </a> <div class=\\\"center item\\\"> <h3 class=\\\"ui small header\\\">VinFillment Winery Portal</h3> </div> <div class=\\\"ui right compact dropdown item\\\" ref=$wineryDropdown> ${currentWineryName} <i class=\\\"dropdown icon\\\"></i> <div class=menu> <div repeat.for=\\\"availableWinery of availableWineries\\\" class=item data-value.bind=availableWinery.id> ${availableWinery.name}</div> <div class=item data-value=logout> Logout</div> </div> </div> </div> <style>@media only screen and (max-width:767px){.ui.image{max-width:210px}}</style> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject } from \"aurelia-framework\";\nimport { NotificationService } from \"notifications/services/notification-service\";\nimport { AlertNotification, AlertNotificationSelection, AlertNotificationRead } from \"notifications/models/alert-notification\";\nimport { computedFrom } from \"aurelia-binding\";\nimport { UserSession } from \"user/models/user-session\";\n\nenum VIEW_TYPE {\n    CURRENT_ALERTS,\n    READ_ALERTS\n}\n\n@autoinject\nexport class AlertNotificationsBookView extends StandardView {\n    currentAlertNotifications: AlertNotificationSelection[];\n    readAlertNotifications: AlertNotificationSelection[];\n    viewType: VIEW_TYPE;\n    selectAll: boolean;\n    $currentItem: any;\n    $readItem: any;\n\n    constructor(private notificationService: NotificationService) {\n        super(AlertNotificationsBookView.name);\n        this.currentAlertNotifications = [];\n        this.readAlertNotifications = [];\n        this.selectAll = false;\n    }\n\n    async attached() {\n        await super.attached();\n        this.viewType = VIEW_TYPE.CURRENT_ALERTS;\n        this.screenViewUtility.viewName = \"Notifications\";\n        $('.ui.dropdown').dropdown();\n        let allNotifications = await this.notificationService.getAlertNotifications();\n        this.currentAlertNotifications = AlertNotificationSelection.buildFromNotifications(allNotifications);\n    }\n\n    async activate(params, routeData) {\n        await super.activate(params, routeData);\n    }\n\n    async currentItemClicked() {\n        this.viewType = VIEW_TYPE.CURRENT_ALERTS;\n        $(this.$currentItem)\n            .addClass('active')\n            .siblings()\n            .removeClass('active');\n    }\n\n    async readItemClicked() {\n        this.viewType = VIEW_TYPE.READ_ALERTS;\n        $(this.$readItem)\n            .addClass('active')\n            .siblings()\n            .removeClass('active');\n    }\n\n    async checkboxClicked() {\n        this.selectAll = this.selectAll ? false : true;\n        let notificationsToCheck = this.isCurrentItems ? this.currentAlertNotifications : this.readAlertNotifications;\n        notificationsToCheck.forEach(notification => notification.isChecked = this.selectAll ? true : false);\n    }\n\n    async markAsRead() {\n        this.readAlertNotifications = this.readAlertNotifications.concat(this.currentAlertNotifications\n            .filter(notification => notification.isChecked)\n            .map(notification => new AlertNotificationSelection(notification)));\n        this.readAlertNotifications.forEach(notification => {\n            notification.isChecked = false;\n            notification.alertNotification.contactsRead.push( new AlertNotificationRead({\n                contact: this.userSession.user.name,\n                dateRead: new Date()\n            }))\n        });\n        this.currentAlertNotifications = this.currentAlertNotifications\n            .filter(notification => !notification.isChecked)\n        this.selectAll = false;\n    }\n\n    async markAsUnRead() {\n        this.currentAlertNotifications = this.currentAlertNotifications.concat(this.readAlertNotifications\n            .filter(notification => notification.isChecked)\n            .map(notification => new AlertNotificationSelection(notification)));\n        this.currentAlertNotifications.forEach(notification => {\n            notification.isChecked = false;\n            notification.alertNotification.contactsRead.filter(\n                readContact => readContact.contact !== this.userSession.user.name\n            );\n        })\n        this.readAlertNotifications = this.readAlertNotifications\n            .filter(notification => !notification.isChecked)\n        this.selectAll = false;\n    }\n\n    @computedFrom('viewType')\n    get isCurrentItems(): boolean {\n        return this.viewType === VIEW_TYPE.CURRENT_ALERTS;\n    }\n\n    @computedFrom('viewType')\n    get isReadItems(): boolean {\n        return this.viewType === VIEW_TYPE.READ_ALERTS;\n    }\n\n\n}","module.exports = \"<template> <require from=./alert-notifications-current-view></require> <require from=./alert-notifications-read-view></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui grid\\\"> <div class=row> <div class=\\\"sixteen wide column\\\"> <div class=\\\"ui secondary pointing menu\\\" ref=$notificationMenu> <div class=\\\"ui checkbox\\\" style=margin-top:10px click.delegate=checkboxClicked()> <input if.bind=selectAll type=checkbox checked=\\\"\\\"> <input else type=checkbox> <label> </label> </div> <div class=\\\"ui dropdown\\\" style=margin-top:10px> <i class=\\\"chevron down icon\\\"></i> <div class=menu> <div if.bind=isCurrentItems class=item click.delegate=markAsRead()>Mark As Read</div> <div if.bind=isReadItems class=item click.delegate=markAsUnRead()>Mark As UnRead</div> </div> </div> <a class=\\\"item active\\\" click.delegate=currentItemClicked() ref=$currentItem> Current </a> <a class=item click.delegate=readItemClicked() ref=$readItem> Read </a> </div> </div> </div> </div> <div> <alert-notifications-current-view if.bind=isCurrentItems containerless current-alert-notifications.two-way=currentAlertNotifications></alert-notifications-current-view> <alert-notifications-read-view if.bind=isReadItems containerless read-alert-notifications.two-way=readAlertNotifications></alert-notifications-read-view> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { AlertNotificationSelection } from \"notifications/models/alert-notification\";\nimport { bindable } from \"aurelia-framework\";\n\nexport class AlertNotificationsCurrentView extends StandardView{\n    @bindable\n    currentAlertNotifications: AlertNotificationSelection[];\n\n    constructor() {\n        super(AlertNotificationsCurrentView.name);\n        this.currentAlertNotifications = [];\n    }\n\n    async attached() {\n        await super.attached();\n    }\n\n    async activate(params, routeData) {\n        await super.activate(params, routeData);\n    }\n}","module.exports = \"<template> <div class=\\\"ui doubling stackable one column middle aligned grid padded\\\"> <div class=column repeat.for=\\\"currentAlertNotification of currentAlertNotifications\\\"> <div class=\\\"ui card fluid\\\"> <div class=content ref=$kpicard> <div class=\\\"ui grid\\\"> <a class=row> <div class=\\\"one wide column box\\\"> <div class=\\\"ui checkbox\\\" click.delegate=currentAlertNotification.changeIsChecked()> <input if.bind=currentAlertNotification.isChecked type=checkbox checked=\\\"\\\"> <input else type=checkbox> <label></label> </div> </div> <div class=\\\"ten wide left aligned column box\\\"> <div class=\\\"ui medium header\\\">${currentAlertNotification.title}</div> </div> <div class=\\\"five wide right aligned column box\\\"> 7/20/2019 </div> </a> <a class=row> <div class=\\\"one wide column box\\\"> </div> <div class=\\\"fifteen wide left aligned column box\\\"> <div>${currentAlertNotification.message}</div> </div> </a> </div> </div> </div> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { AlertNotification, AlertNotificationSelection } from \"notifications/models/alert-notification\";\nimport { bindable } from \"aurelia-framework\";\n\nexport class AlertNotificationsReadView extends StandardView{\n    @bindable\n    readAlertNotifications: AlertNotificationSelection[];\n\n    constructor() {\n        super(AlertNotificationsReadView.name);\n        this.readAlertNotifications = [];\n    }\n\n    async attached() {\n        await super.attached();\n    }\n\n    async activate(params, routeData) {\n        await super.activate(params, routeData);\n    }\n}","module.exports = \"<template> <div class=\\\"ui doubling stackable one column middle aligned grid padded\\\"> <div class=column repeat.for=\\\"readAlertNotification of readAlertNotifications\\\"> <div class=\\\"ui card fluid\\\"> <div class=content ref=$kpicard> <div class=\\\"ui grid\\\"> <a class=row> <div class=\\\"one wide column box\\\"> <div class=\\\"ui checkbox\\\" click.delegate=readAlertNotification.changeIsChecked()> <input if.bind=readAlertNotification.isChecked type=checkbox checked=\\\"\\\"> <input else type=checkbox> <label></label> </div> </div> <div class=\\\"ten wide left aligned column box\\\"> <div class=\\\"ui medium header\\\">${readAlertNotification.title}</div> </div> <div class=\\\"five wide right aligned column box\\\"> 7/20/2019 </div> </a> <a class=row> <div class=\\\"one wide column box\\\"> </div> <div class=\\\"fifteen wide left aligned column box\\\"> <div>${readAlertNotification.message}</div> </div> </a> </div> </div> </div> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, observable } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport parse from \"papaparse\";\nimport { targetContext, computedFrom } from \"aurelia-binding\";\nimport { ImportOrderService } from \"orders/services/import-orders-service\";\nimport { ImportOrderSetup, ImportOrderColumn } from \"orders/models/import-order-setup\";\nimport { ImportOrderBatch } from \"orders/models/import-order-batch\";\nimport { IntegratedShipMethod } from \"orders/models/integrated-ship-method\";\nimport { ItemService } from \"items/services/item_service\";\nimport { ItemReference } from \"items/models/item-record\";\n\nclass OrderError{\n    dataRow: number;\n    columnName: string;\n    message: string;\n    constructor(dataRow: number, columnName: string, message: string){\n        this.dataRow = dataRow;\n        this.columnName = columnName;\n        this.message = message;\n    }\n}\n\nclass MatchedColumn {\n    columnName: string;\n    matchedColumn: ImportOrderColumn;\n    integratedShipMethods: IntegratedShipMethod[];\n    items: ItemReference[];\n    data: any[];\n    constructor(columnName:string, matchedColumn: ImportOrderColumn, data: any[], integratedShipMethods: IntegratedShipMethod[], items: ItemReference[]){\n        this.columnName = columnName;\n        this.matchedColumn = matchedColumn ? new ImportOrderColumn(matchedColumn) : null;\n        this.integratedShipMethods = (integratedShipMethods || []).map((shipMethod)=> new IntegratedShipMethod(shipMethod));\n        this.items = (items || []).map((item)=> new ItemReference(item));\n        this.data = data || [];\n    }\n\n    dataAtRow(orderRow: number): string{\n        if(!this.data || orderRow < 1 || this.data.length < orderRow){\n            return \"\";\n        }\n        return this.data[orderRow - 1];\n    }\n\n    @computedFrom('data', 'matchedColumn')\n    get allErrors(): OrderError[]{\n        let errors = [];       \n        for(var i = 1; i <= this.data.length; i++){\n            if(!this.matchedColumn){            \n                errors.push(new OrderError(i, this.columnName, `Could not find matching Column`));\n            } else {\n                let dataRow = this.data[i - 1];\n                if(!this.matchedColumn.isDataMatched(dataRow)){\n                    errors.push(new OrderError(i, this.columnName, `Data is not valid`));\n                }\n                if(this.matchedColumn.isMandatory && !dataRow){\n                    errors.push(new OrderError(i, this.columnName, `Column is Mandatory`));\n                }\n                if(this.matchedColumn.isItemSku && dataRow){\n                    let foundItems = this.items.filter((item)=>item.name.trim() == dataRow.trim() || item.winerySku.trim() == dataRow.trim());\n                    if(foundItems.length === 0){\n                        errors.push(new OrderError(i, this.columnName, `Item Sku was not found`));\n                    }\n                }\n                if(this.matchedColumn.isShipMethod && dataRow){\n                    let foundShipMethod = this.integratedShipMethods.filter((intShipMethod)=>intShipMethod.name.trim() == dataRow.trim() || intShipMethod.shippingMethod.name.trim() == dataRow.trim());\n                    if(foundShipMethod.length === 0){\n                        errors.push(new OrderError(i, this.columnName, `Shipping Method was not found`));\n                    }\n                }\n            }\n        }\n        return errors;\n    }\n\n    errorsAtRow(orderRow: number): OrderError[]{\n        return this.allErrors.filter((orderError) => orderError.dataRow === orderRow)\n    }\n}\n\n@autoinject\nexport class ImportOrdersView extends StandardView {\n\n    $hiddenFileInput: HTMLElement;\n\n    $setupDropdown: HTMLElement;\n\n    $sampleTemplateLink: HTMLElement;\n\n    $shippingMethodsLink: HTMLElement;\n\n    $itemsLink: HTMLElement;\n\n    @observable\n    csvFile: File;\n\n    @observable\n    csvFileData: string;\n\n    csvFileObject: any[];\n\n    creatingOrders: boolean = false;\n\n    setupRecords: ImportOrderSetup[];\n\n    integratedShipMethods: IntegratedShipMethod[];\n\n    items: ItemReference[];\n\n    setupRecord: ImportOrderSetup;\n\n    currentOrderRow: number = 1;\n\n    currentOrderErrorRow: number = 0;\n\n    constructor(private importOrdersService: ImportOrderService, private itemService: ItemService) {\n        super(ImportOrdersView.name);\n    }\n\n    async activate(params, routeData) {\n        try { \n            let promiseRecords = await Promise.all([\n                this.importOrdersService.getSetupRecords(),\n                this.itemService.getAllRecords()\n            ]);        \n            this.setupRecords = promiseRecords[0];\n            this.items = promiseRecords[1];\n\n            if(this.setupRecords.length === 0 || !this.setupRecords[0].integrationType){\n                this.errorMessageUtil.showErrorMessage(\"There was an Issue getting the Setup Records. If the issue persists, please contact VinFillment.\");\n                this.routeToView(ROUTES.DASHBOARD.name, {});\n            }\n            this.integratedShipMethods = await this.importOrdersService.getAllIntegratedShipMethods([['integration_type', '=', this.setupRecords[0].integrationType.id]]);\n            this.items.sort((a: ItemReference, b:ItemReference)=>{return b.onHand - a.onHand});        \n          } catch (err) {\n            this.errorMessageUtil.showError(err);\n            this.routeToView(ROUTES.DASHBOARD.name, {});\n          }\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        await this._setupFields();\n        await super.attached();\n    }\n\n    async _setupFields() {\n        this._setShipMethodCSV();\n        this._setItemCSV();\n        $(this.$setupDropdown).dropdown(\n            {\n              onChange: async (value, text, $selectedItem) => {\n                if(value){\n                    this.setupRecord = this.setupRecords.find((setupRecord) => setupRecord.id == value);\n                    $(this.$sampleTemplateLink).attr('href', `data:text/csv;charset=utf-8,${escape(this.setupRecord.csvFileData)}`);    \n                } else{\n                    this.setupRecord = null;\n                }     \n              }\n            });\n        let defaultSetupRecord = this.setupRecords.length === 1 ? this.setupRecords[0] : this.setupRecords.find((setup)=>!setup.isDefault);\n        await $(this.$setupDropdown).dropdown('set selected', defaultSetupRecord.id);\n    }\n\n    _setShipMethodCSV(){\n        let csvObj = []\n        this.integratedShipMethods.forEach((shipMethod)=>csvObj.push({\n            \"Ship Method\" : shipMethod.shippingMethod.name,\n            \"Code\" : shipMethod.name,\n        }));\n        if(csvObj.length === 0){\n            csvObj.push({\n                \"Ship Method\" : \"\",\n                \"Code\" : \"\",\n            });\n        }\n        $(this.$shippingMethodsLink).attr('href', `data:text/csv;charset=utf-8,${escape(parse.unparse(csvObj))}`);\n    }\n\n    _setItemCSV(){\n        let csvObj = []\n        this.items.forEach((item)=>csvObj.push({\n            \"Name\" : item.name,\n            \"Sku\" : item.winerySku,\n            \"On Hand\": item.onHand,\n            \"Available\": item.available\n        }));\n        if(csvObj.length === 0){\n            csvObj.push({\n                \"Name\" : \"\",\n                \"Sku\" : \"\",\n                \"On Hand\": \"\",\n                \"Available\": \"\"\n            });\n        }\n        $(this.$itemsLink).attr('href', `data:text/csv;charset=utf-8,${escape(parse.unparse(csvObj))}`);\n    }\n\n    @computedFrom('csvFile')\n    get fileName(): string {\n        if(this.csvFile){\n            return this.csvFile.name;\n        }\n        return \"\";\n    }\n\n    @computedFrom('csvFile')\n    get fileSize(): string {\n        if(this.csvFile){\n            return Math.ceil(this.csvFile.size/1000) + \" KB\";\n        }\n        return \"0 KB\";\n    }\n\n    @computedFrom('csvFileObject')\n    get numberOfOrders(): number {\n        if(this.csvFileObject){            \n            return this.csvFileObject.length;\n        }\n        return 0;\n    }\n\n    @computedFrom('errors')\n    get numberOfErrors(): number {       \n        return this.errors.length;\n    }\n\n    @computedFrom('orderErrors.length')\n    get numberOfOrderErrors(): number { \n        let uniqueOrderLines = [];\n        this.orderErrors.forEach((orderError) => {\n            if(uniqueOrderLines.indexOf(orderError.dataRow) === -1){\n                uniqueOrderLines.push(orderError.dataRow);\n            }\n        })\n        return uniqueOrderLines.length;\n    }\n\n    @computedFrom('columns.allErrors')\n    get orderErrors(): OrderError[] {\n        let orderErrors = [];\n        for(var i = 0; i < this.columns.length; i++){            \n            this.columns[i].allErrors.forEach((orderError)=>{\n                orderErrors.push(orderError);\n            });\n        }\n        return orderErrors;\n    }\n\n    @computedFrom('orderErrors.length', 'numberOfOrders', 'csvFileObject')\n    get errors(): string[] {        \n        if(this.numberOfOrders === 0 && this.csvFileObject){\n            return [\"There are no orders on the spreadsheet.\"];\n        }   \n        let uniqueMessages = [];    \n        this.orderErrors.forEach((orderError)=> {\n            let errorMessage = `${orderError.message} for Column ${orderError.columnName}`;\n            if(uniqueMessages.indexOf(errorMessage) === -1){\n                uniqueMessages.push(errorMessage);\n            }\n        });\n        return uniqueMessages;\n    }\n\n    @computedFrom('numberOfErrors', 'numberOfOrders')\n    get showCreateButton(){\n        return this.numberOfErrors === 0 && this.numberOfOrders > 0;\n    }\n\n    @computedFrom('csvFileObject')\n    get columns(): MatchedColumn[] {\n        if(!this.csvFileObject || this.csvFileObject.length === 0){\n            return [];\n        }\n        return Object.keys(this.csvFileObject[0]).map((key) => {\n            let matchedColumn = this.setupRecord.columns.find((column)=> column.isColumnMatched(key));\n            return new MatchedColumn(key, matchedColumn, this.csvFileObject.map((orderLine) => orderLine[key]), this.integratedShipMethods, this.items);\n        });        \n    }\n\n    async createOrders(){\n        this.disableView();\n        let batch = new ImportOrderBatch({\n            csvFileData: this.csvFileData,\n            csvFileName: this.fileName,\n            importOrdersSetup: this.setupRecord,\n            integrationType: this.setupRecord.integrationType\n        });\n        let batchId = await this.importOrdersService.submitImportOrderBatch(batch);\n        this.router.navigateToRoute(ROUTES.VIEW_ORDER_BATCH.name, {id: batchId}, { trigger: true, replace: true });\n        this.enableView();\n    }\n\n    async csvFileChanged(newValue: File, oldValue: File){\n        this.csvFileData = await this.getFileCSVData(newValue);\n    }\n\n    async csvFileDataChanged(newValue: string, oldValue: string){\n        if(this.csvFileData){\n            let parseResponse = parse.parse(this.csvFileData, {\n                header: true,\n                trimHeaders: true,\n                skipEmptyLines: true\n            });\n            if(parseResponse.errors.length > 0){\n                this.errorMessageUtil.showErrorMessage(parseResponse.errors.map((parseError) => parseError.message).join(\"\\r\\n\"));\n                this.csvFile = null;\n            } else{\n                this.csvFileObject = parseResponse.data;\n            }            \n        } else{\n            this.csvFileObject = null;\n        }\n    }\n\n    async getFileCSVData(newValue): Promise<string> {\n        if(!newValue){\n            return \"\";\n        }\n        return await new Promise((resolve, reject) => {\n            let reader = new FileReader();\n            reader.readAsText(newValue);\n\n            reader.onload = function () {\n                let result = reader.result as string;                \n                resolve(result);\n            };\n\n            reader.onerror = function () {\n                reject(reader.error);\n            };\n        });\n    }\n\n    async chooseFile() {\n        this.disableView();\n        $(this.$hiddenFileInput).click();\n        this.enableView();\n    }\n\n    async fileChosen(self) {\n        let fileList = event.target[\"files\"] as FileList;\n        if (fileList && fileList.length > 0) {\n            this.csvFile = fileList[0] as File;\n            this.currentOrderRow = 1;\n        }\n\n    }\n\n    async clickPrevious() {\n        if (this.currentOrderRow > 1) {\n            this.currentOrderRow--;\n            this.currentOrderErrorRow = 0;\n        }\n    }\n\n    async clickNext() {\n        if (this.currentOrderRow < this.numberOfOrders) {\n            this.currentOrderRow++;\n            this.currentOrderErrorRow = 0;\n        }\n    }\n\n    async clickPreviousError() {\n        if (this.currentOrderErrorRow > 0) {            \n            this.currentOrderErrorRow--;\n            if(this.currentOrderErrorRow > 0){\n                let orderError = this.orderErrors[this.currentOrderErrorRow-1];\n                this.currentOrderRow = orderError.dataRow;\n            } else{\n                this.currentOrderRow = 1;\n            }            \n        }\n    }\n\n    async clickNextError() {\n        if (this.currentOrderErrorRow < this.numberOfOrderErrors) {\n            this.currentOrderErrorRow++;\n            let orderError = this.orderErrors[this.currentOrderErrorRow-1];\n            this.currentOrderRow = orderError.dataRow;\n        }\n    }\n}","module.exports = \"<template> <require from=shared-ui/converters/simple-date-format></require> <require from=shared-ui/converters/boolean-format></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui centered stackable grid\\\"> <div class=\\\"sixteen wide column\\\"> <h1 class=\\\"ui center aligned header\\\">Import Orders</h1> </div> </div> <div class=\\\"ui segment\\\"> <div class=\\\"ui stackable one column grid\\\"> <div class=column> <div class=\\\"ui info message\\\"> <div class=header> Importing Orders Information </div> <p>You will need to choose a CSV file by clicking the button below. Duplicate orders are not allowed.</p> <div class=\\\"ui list\\\"> <div class=item> <a href=\\\"data:text/csv;charset=utf-8,\\\" download=ShippingMethods.csv ref=$shippingMethodsLink>ShippingMethods.csv</a> </div> <div class=item> <a href=\\\"data:text/csv;charset=utf-8,\\\" download=Items.csv ref=$itemsLink>Items.csv</a> </div> </div> </div> </div> <div class=column> <form class=\\\"ui form\\\" ref=$importOrdersForm> <div class=\\\"two fields\\\"> <div class=field> <label>Format Type</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$setupDropdown> <input name=setup type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">Format Type</div> <div class=menu> <div repeat.for=\\\"setupRecord of setupRecords\\\" class=item data-value.bind=setupRecord.id> ${setupRecord.name}</div> </div> </div> </div> <div class=field> <label>Sample Template</label> <a href=\\\"data:text/csv;charset=utf-8,\\\" download=SampleOrderSpreadsheet.csv ref=$sampleTemplateLink show.bind=setupRecord.csvFileData>SampleOrderSpreadsheet.csv</a> </div> </div> </form> </div> <div class=column show.bind=!!setupRecord> <button class=\\\"positive ui button\\\" click.delegate=chooseFile()>Choose File</button> <button show.bind=showCreateButton class=\\\"primary ui button\\\" click.delegate=createOrders()>Import</button> <input type=file hidden accept=.csv ref=$hiddenFileInput change.delegate=fileChosen($event) onclick=\\\"this.value=null\\\"/> </div> <div class=column show.bind=!!setupRecord> <form class=\\\"ui form\\\" ref=$importOrdersForm> <div class=\\\"three fields\\\"> <div class=\\\"inline field\\\"> <label>File Name:</label> ${fileName} </div> <div class=\\\"inline field\\\"> <label>Number Of Orders:</label> ${numberOfOrders} </div> <div class=\\\"inline field\\\"> <label>Number Of Errors:</label> ${numberOfOrderErrors} </div> </div> </form> </div> <div class=column show.bind=!!setupRecord> <div class=\\\"ui negative message\\\" repeat.for=\\\"error of errors\\\"> <div class=header> ${error} </div> </div> </div> <div class=\\\"ui segment column\\\" show.bind=\\\"columns.length > 0\\\"> <div class=\\\"ui stackable one column aligned grid\\\"> <div class=\\\"center aligned one column row\\\"> <div class=column> <div class=\\\"ui icon ${currentOrderRow === 1 ? 'disabled' : ''} button\\\" click.delegate=clickPrevious()> <i class=\\\"left arrow icon\\\"></i> </div> <span class=\\\"ui blue medium text\\\">Order ${currentOrderRow} of ${numberOfOrders || 1}</span> <div class=\\\"ui icon ${currentOrderRow === numberOfOrders ? 'disabled' : ''} button\\\" click.delegate=clickNext()> <i class=\\\"right arrow icon\\\"></i> </div> </div> </div> <div class=\\\"center aligned one column row\\\" show.bind=\\\"numberOfOrderErrors > 0\\\"> <div class=column> <div class=\\\"ui icon ${currentOrderErrorRow === 0 ? 'disabled' : ''} button\\\" click.delegate=clickPreviousError()> <i class=\\\"left arrow icon\\\"></i> </div> <span class=\\\"ui blue medium text\\\">Error ${currentOrderErrorRow} of ${numberOfOrderErrors || 0}</span> <div class=\\\"ui icon ${currentOrderErrorRow === numberOfOrderErrors ? 'disabled' : ''} button\\\" click.delegate=clickNextError()> <i class=\\\"right arrow icon\\\"></i> </div> </div> </div> </div> <div class=column> <div class=\\\"ui four doubling stackable cards\\\"> <div class=\\\"ui raised fluid card\\\" repeat.for=\\\"column of columns\\\"> <div class=content> <div class=header> ${column.columnName} </div> <div class=description> ${column.dataAtRow(currentOrderRow)} <div class=\\\"ui negative message\\\" repeat.for=\\\"error of column.errorsAtRow(currentOrderRow)\\\"> <div class=header> ${error.message} </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div>  </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, observable } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport { SearchResult } from \"shared-models/search-result\";\nimport parse from \"papaparse\";\nimport { ImportOrderBatch } from \"orders/models/import-order-batch\";\nimport { ImportOrderService } from \"orders/services/import-orders-service\";\n\n@autoinject\nexport class OrderBatchListView extends StandardView {\n\n    filteredRecords: ImportOrderBatch[];\n\n    currentSearchResult: SearchResult;\n\n    currentPage: number = 1;\n\n    listDisabled: boolean = false;\n\n    $downloadCSVLink: HTMLElement;\n\n    $exportLink: HTMLElement;\n\n    @observable\n    searchInput: string = \"\";\n\n    constructor(private importOrderService: ImportOrderService) {\n        super(OrderBatchListView.name);\n    }\n\n    async activate(params, routeData) {\n        try {\n            await this._getResults();           \n        } catch (err) {\n            this.errorMessageUtil.showError(err);\n            this.routeToView(ROUTES.DASHBOARD.name);\n        }\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        await super.attached();\n    }\n\n    async _getResults() {\n        this.currentSearchResult = await this.importOrderService.searchBatchRecords(this.currentPage, this.searchInput);\n        this.filteredRecords = this.currentSearchResult.records as ImportOrderBatch[];\n    }\n\n    async searchInputChanged(newValue: string, oldValue: string) {\n        this.disableList();\n        this.currentPage = 1;\n        await this._getResults();\n        this.enableList();\n    }\n\n    async clickPrevious() {\n        this.disableList();\n        if (this.currentPage > 1) {\n            this.currentPage--;\n        }\n        await this._getResults();\n        this.enableList();\n    }\n\n    async clickNext() {\n        this.disableList();\n        if (this.currentPage < this.currentSearchResult.pageCount) {\n            this.currentPage++;\n        }\n        await this._getResults();\n        this.enableList();\n    }\n\n    disableList() {\n        this.listDisabled = true;\n    }\n\n    enableList() {\n        this.listDisabled = false;\n    }\n\n    async export() {\n        this.disableView();\n        let records = [];\n        if (this.searchInput) {\n            records = this.filteredRecords\n        } else {\n            records = await this.importOrderService.getBatchRecords();\n        }\n        \n        let recordsCSV = this.convertToCsv(records);\n        $(this.$exportLink).attr('href', `data:text/csv;charset=utf-8, ${escape(recordsCSV)}`);       \n        this.$exportLink.click();\n        this.enableView();\n    }\n\n    convertToCsv(records: ImportOrderBatch[]) {\n        return parse.unparse(records.map((record) => {\n            return {\n                \"Date\": record.createDate,\n                \"Status\": record.status,\n                \"Integration Type\": record.integrationType,\n                \"Integration Partner\": record.integrationPartner,\n                \"File Name\": record.csvFileName,\n                \"Number Of Orders\": record.numberOfOrders,\n                \"Orders Pending\": record.numberOfOrdersPending,\n                \"Orders Cancelled\": record.numberOfOrdersCancelled,\n                \"Orders Uploaded\": record.numberOfOrdersUploaded,\n                \"Errors\": record.errorMessage\n            };\n        }));\n    }\n    \n    viewRecord(record: ImportOrderBatch){\n        this.routeToView(ROUTES.VIEW_ORDER_BATCH.name, {id: record.id});\n    }\n}","module.exports = \"<template> <require from=shared-ui/converters/simple-date-format></require> <require from=shared-ui/converters/simple-datetime-format></require> <require from=shared-ui/converters/boolean-format></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui centered stackable grid\\\"> <div class=\\\"sixteen wide column\\\"> <h1 class=\\\"ui center aligned header\\\">Order Batches</h1> </div> <div class=\\\"five wide column\\\"> <button class=\\\"positive ui button\\\" click.delegate=export()>Export</button> <a href=\\\"data:text/csv;charset=utf-8,\\\" hidden download=batchlist.csv ref=$exportLink>Download</a> </div> <div class=\\\"six wide column\\\"> <div class=\\\"ui fluid input\\\"> <input type=text placeholder=Search... value.bind=searchInput> </div> </div> <div class=\\\"five wide column\\\"> <div class=\\\"ui grid\\\"> <div class=\\\"right floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === 1 ? 'disabled' : ''} button\\\" click.delegate=clickPrevious()> <i class=\\\"left arrow icon\\\"></i> </div> </div> <div class=\\\"six wide column\\\"> <span class=\\\"ui blue medium text\\\">Page ${currentPage} of ${currentSearchResult.pageCount || 1}</span> </div> <div class=\\\"left floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === currentSearchResult.pageCount ? 'disabled' : ''} button\\\" click.delegate=clickNext()> <i class=\\\"right arrow icon\\\"></i> </div> </div> </div> </div> <div class=\\\"sixteen wide column\\\"> <div class=\\\"ui ${listDisabled ? 'active' : ''} inverted dimmer\\\"> <div class=\\\"ui text centered loader\\\">Loading</div> </div> <div class=\\\"ui three doubling stackable cards\\\"> <div class=\\\"ui raised fluid card\\\" repeat.for=\\\"filteredRecord of filteredRecords\\\"> <div class=content> <div class=header> <div class=\\\"ui grid\\\"> <div class=\\\"sixteen wide column\\\"> <button class=\\\"positive ui compact tiny button\\\" click.delegate=viewRecord(filteredRecord)>View</button> </div> <div class=\\\"sixteen wide column\\\"> ${filteredRecord.name} </div> </div> </div> <div class=description> <form class=\\\"ui form\\\" ref=$viewForm> <div class=\\\"two fields\\\"> <div class=field> <label>Date</label> ${filteredRecord.createDate | simpleDateTimeFormat} </div> </div> <div class=\\\"two fields\\\"> <div class=field> <label>Total Orders</label> ${filteredRecord.numberOfOrders} </div> <div class=field> <label>Orders Pending</label> ${filteredRecord.numberOfOrdersPending} </div> </div> <div class=\\\"two fields\\\"> <div class=field> <label>Orders Uploaded</label> ${filteredRecord.numberOfOrdersUploaded} </div> <div class=field> <label>Orders Cancelled</label> ${filteredRecord.numberOfOrdersCancelled} </div> </div> </form> </div> </div> </div> </div> </div> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { bindable, autoinject, computedFrom } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport { ImportOrderBatch } from \"orders/models/import-order-batch\";\nimport { ImportOrderService } from \"orders/services/import-orders-service\";\n\n@autoinject\nexport class OrderBatchView extends StandardView {\n  @bindable\n  orderBatch: ImportOrderBatch = null;\n\n  $viewForm: HTMLElement;\n\n  $csvFileLink: HTMLElement;\n\n  orderBatchId: number;\n\n  constructor(private importOrderService: ImportOrderService) {\n    super(OrderBatchView.name);\n  }\n\n  async activate(params, routeData) {\n    try {\n      this.orderBatchId = params[\"id\"] ? parseInt(params[\"id\"]) : null;\n      if (!this.orderBatchId) {\n        throw \"Need to provide the Order Batch Id.\"\n      }\n      this.orderBatch = await this.importOrderService.getBatchRecord(this.orderBatchId);\n    } catch (err) {\n      this.errorMessageUtil.showError(err);\n      this.routeToView(ROUTES.DASHBOARD.name);\n    }\n    await super.activate(params, routeData);\n  }\n\n  async attached() {\n    this._setupFields();\n    await super.attached();\n  }\n\n  _setupFields() {\n    $(this.$csvFileLink).attr('href', `data:text/csv;charset=utf-8, ${escape(this.orderBatch.csvFileData)}`);\n  }\n\n}","module.exports = \"<template> <require from=shared-ui/converters/simple-datetime-format></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui centered stackable one column grid\\\"> <div class=column> <h1 class=\\\"ui center aligned header\\\">${orderBatch.name}</h1> </div> <div class=column> <form class=\\\"ui form\\\" ref=$viewForm> <h4 class=\\\"ui dividing header\\\">Primary Information</h4> <div class=\\\"two fields\\\"> <div class=field> <label>Date Created</label> ${orderBatch.createDate | simpleDateTimeFormat} </div> <div class=field> <label>Status</label> ${orderBatch.status} </div> </div> <div class=\\\"two fields\\\"> <div class=field> <label>Integration Type</label> ${orderBatch.integrationType.name} </div> <div class=field> <label>File Data</label> <a href=\\\"data:text/csv;charset=utf-8,\\\" download.bind=orderBatch.csvFileName ref=$csvFileLink show.bind=orderBatch.csvFileName>${orderBatch.csvFileName}</a> </div> </div> <div class=\\\"two fields\\\" if.bind=orderBatch.createdByUser> <div class=field> <label>Created By</label> ${orderBatch.createdByUser.name} </div> </div> <h4 class=\\\"ui dividing header\\\">Order Counts</h4> <div class=\\\"two fields\\\"> <div class=field> <label>Total Orders</label> ${orderBatch.numberOfOrders} </div> <div class=field> <label>Orders Pending</label> ${orderBatch.numberOfOrdersPending} </div> </div> <div class=\\\"two fields\\\"> <div class=field> <label>Orders Uploaded</label> ${orderBatch.numberOfOrdersUploaded} </div> <div class=field> <label>Orders Cancelled</label> ${orderBatch.numberOfOrdersCancelled} </div> </div> <h4 class=\\\"ui dividing header\\\">Other</h4> <div class=\\\"two fields\\\"> <div class=field> <label>Errors</label> ${orderBatch.errorMessage} </div> </div> </form> </div> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, bindable, computedFrom } from \"aurelia-framework\";\nimport { ItemReference } from \"items/models/item-record\";\nimport { OrderLine } from \"orders/models/order\";\n\n@autoinject\nexport class OrderCreateItemView extends StandardView {\n\n    formDisabled: boolean = false;\n\n    @bindable\n    orderLine: OrderLine;\n\n    @bindable\n    allItems: ItemReference[] = [];\n\n    $itemDropdown: HTMLElement;\n\n    constructor() {\n        super(OrderCreateItemView.name);\n    }\n\n    async activate(params, routeData) {\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        await this._setupFields();\n        await super.attached();\n    }\n\n    disableForm() {\n        this.formDisabled = true;\n    }\n\n    enableForm() {\n        this.formDisabled = false;\n    }\n    \n    async _setupFields() {\n        await Promise.all([\n            $(this.$itemDropdown).dropdown({\n                fullTextSearch: true,\n                onChange: async (value, text, $selectedItem) => {\n                    if (value) {\n                        this.orderLine.item = this.allItems ? this.allItems.find((item) => item.id == value) : null;\n                    } else {\n                        this.orderLine.item = null;\n                    }\n                }\n            })]);\n    }\n\n}","module.exports = \"<template> <require from=shared-ui/converters/boolean-format></require> <require from=shared-ui/converters/currency-format></require> <form class=\\\"ui form\\\"> <div class=\\\"four fields\\\"> <div class=\\\"eight wide field required\\\"> <label>Item</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$itemDropdown> <input name=item type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">Item</div> <div class=menu> <div repeat.for=\\\"item of allItems\\\" class=item data-value.bind=item.id> ${item.name}</div> </div> </div> </div> <div class=\\\"three wide field\\\"> <label>Available</label> ${orderLine.item.available} </div> <div class=\\\"three wide field required\\\"> <label>Quantity</label> <input type=text name=quantity value.bind=orderLine.quantity placeholder=\\\"1 or greater...\\\"> </div> </div> </form> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, bindable, observable, Disposable, BindingEngine } from \"aurelia-framework\";\nimport { computedFrom } from \"aurelia-binding\";\nimport { CountryReference, StateReference } from \"orders/models/country-record\";\nimport { CarrierReference, ShippingMethodReference } from \"orders/models/carrier-record\";\nimport { ItemReference } from \"items/models/item-record\";\nimport { OrderService } from \"orders/services/order_service\";\nimport { ROUTES } from \"routes\";\nimport { ShippingAddress } from \"shipping-addresses/models/shipping-address-record\";\nimport { ShippingAddressService } from \"shipping-addresses/services/shipping_address_service\";\nimport { CountryService } from \"orders/services/country_service\";\nimport { ItemService } from \"items/services/item_service\";\nimport { Order, OrderItem, OrderLine, OrderReference } from \"orders/models/order\";\nimport { CarrierService } from \"orders/services/carrier_service\";\nimport { ColdChainZip } from \"cold-chain/models/cold-chain-zip\";\nimport { ColdChainService } from \"cold-chain/services/cold-chain-service\";\n\n@autoinject\nexport class OrderCreateView extends StandardView {\n\n  orderFormDisabled: boolean = false;\n\n  $stateDropdown: HTMLElement;\n\n  $countryDropdown: HTMLElement;\n\n  $carrierDropdown: HTMLElement;\n\n  $shipMethodDropdown: HTMLElement;\n\n  $shippingAddressDropdown: HTMLElement;\n\n  $useBusinessAddress: HTMLElement;\n\n  $showColdChainInfo: HTMLElement;\n\n  $shelterInPlace: HTMLElement;\n\n  $itemDropdown: HTMLElement;\n\n  $createOrderForm: HTMLElement;\n\n  $itemForm: HTMLElement;\n\n  $futureShipDateCalendar: HTMLElement;\n\n  // $addItemModal: HTMLElement;\n\n  $addAddressModal: HTMLElement;\n\n  $addressForm: HTMLElement;\n\n  $coldChainView: HTMLElement;\n\n  $coldChainLoading: HTMLElement;\n\n  order: Order;\n\n  @observable\n  orderNumber: string;\n\n  countries: CountryReference[] = [];\n\n  carriers: CarrierReference[] = [];\n\n  selectedCountry: CountryReference;\n\n  selectedState: StateReference;\n\n  newAddresslabelName: string = \"\";\n\n  isDuplicateOrder: boolean = false;\n\n  isColdChainCompatible: boolean = false;\n\n  coldChainZip: ColdChainZip = null;\n\n  duplicateOrder: OrderReference = null;  \n\n  @observable\n  selectedShippingAddress: ShippingAddress;\n\n  currentItemReference: ItemReference;\n\n  currentItemQuantity: number;\n\n  currentOrderLineNumber: number = 0;\n\n  orderLines: OrderLine[] = [];\n\n  allItems: ItemReference[] = [];\n\n  @bindable\n  allAddresses: ShippingAddress[] = [];\n\n  private subscription: Disposable;\n\n  constructor(\n    private orderService: OrderService,\n    private countryService: CountryService,\n    private itemService: ItemService,\n    private carrierService: CarrierService,\n    private bindingEngine: BindingEngine,\n    private coldChainService: ColdChainService,\n    private shippingAddressService: ShippingAddressService) {\n    super(OrderCreateView.name);\n  }\n\n  async activate(params, routeData) {\n    try {\n      let promiseResponse = await Promise.all([\n        this.countryService.getAllCountryRecords(),\n        this.carrierService.getRecords(),\n        this.shippingAddressService.getAllRecords(),\n        this.itemService.getAllRecords()\n      ]);\n      this.countries = promiseResponse[0];\n      this.carriers = promiseResponse[1];\n      this.allAddresses = promiseResponse[2];\n      this.allItems = promiseResponse[3];\n      let addressId = params[\"addressid\"];\n      if (addressId) {\n        this.selectedShippingAddress = await this.shippingAddressService.getRecord(addressId);\n      }\n      this.order = new Order({});\n      this.addNewOrderItem();\n    } catch (err) {\n      this.errorMessageUtil.showError(err);\n      this.routeToView(ROUTES.DASHBOARD.name);\n    }\n    await super.activate(params, routeData);\n  }\n\n  async attached() {\n    await this._setupFields();\n    await this._setupForms();\n    await super.attached();\n    this.subscription = this.bindingEngine\n      .propertyObserver(this.order.shippingAddress, 'zip')\n      .subscribe(() => this.changedZipcode())\n  }\n\n  public detached(): void {\n    this.subscription.dispose();\n}\n\n  disableOrderForm() {\n    this.orderFormDisabled = true;\n  }\n\n  enableOrderForm() {\n    this.orderFormDisabled = false;\n  }\n\n  async _setupForms() {\n    await Promise.all([\n      $(this.$createOrderForm).form({\n        on: 'blur',\n        inline: true,\n        dateHandling: 'date',\n        onSuccess: (event: JQuery.TriggeredEvent<HTMLElement>, fields: any) => {\n          var errors = [];\n          if (this.orderLines.length === 0) {\n            errors.push(\"Need to provide one or more items.\");           \n          }\n          if(!this.coldChainZip && this.order.isShippingColdChain()){\n            errors.push(`Cannot Ship Cold Chain to zipcode: ${this.order.shippingAddress.zip}`);\n          }          \n          if(errors.length === 0){\n            this.createOrder();\n          } else{\n            $(this.$createOrderForm).form('add errors', errors);\n            this.scrollToBottom();\n            this.enableView();\n          }\n        },\n        onFailure: (formErrors: string[], fields: any) => {\n          if (this.orderLines.length === 0) {\n            formErrors.push(\"Need to provide one or more items.\")\n          }\n          $(this.$createOrderForm).form('add errors', formErrors);\n          this.scrollToBottom();\n          this.enableView();\n        },\n        fields: {\n          \"orderNumber\": {\n            identifier: 'order-number',\n            rules: [\n              {\n                type: 'empty',\n                prompt: 'Need To Provide an Order Number'\n              }\n            ]\n          },\n          \"email\": {\n            identifier: 'email',\n            rules: [\n              {\n                type: 'empty',\n                prompt: 'Need To Provide an Email'\n              },\n              {\n                type: 'email',\n                prompt: 'Email Provided is not valid'\n              }\n            ]\n          },\n          \"futureShipDate\": {\n            identifier: 'future-ship-date',\n            rules: [\n              {\n                type: 'empty',\n                prompt: 'Need to provide a Date'\n              }\n            ]\n          },\n          \"selectedCarrier\": {\n            identifier: 'selected-carrier',\n            rules: [\n              {\n                type: 'empty',\n                prompt: 'Need to provide a Carrier'\n              }\n            ]\n          },\n          \"selectedShippingMethod\": {\n            identifier: 'selected-ship-method',\n            rules: [\n              {\n                type: 'empty',\n                prompt: 'Need to provide a Shipping Method'\n              }\n            ]\n          },\n        }\n      }),\n      $(this.$itemForm).form({\n        on: 'blur',\n        inline: true,\n        dateHandling: 'date',\n        onSuccess: (event: JQuery.TriggeredEvent<HTMLElement>, fields: any) => {\n          this.addNewOrderItem();\n        },\n        onFailure: (formErrors: string[], fields: any) => {\n          $(this.$itemForm).form('add errors', formErrors);          \n          this.enableView();\n        },\n        fields: {\n          \"item\": {\n            identifier: 'item',\n            rules: [\n              {\n                type: 'empty',\n                prompt: 'Need To Provide an Item'\n              }\n            ]\n          },\n          \"quantity\": {\n            identifier: 'quantity',\n            rules: [\n              {\n                type: 'integer[1..1000000]',\n                prompt: 'Need To Provide a positive quantity'\n              }\n            ]\n          }\n        }\n      }),\n      $(this.$addressForm).form({\n        on: 'blur',\n        inline: true,\n        dateHandling: 'date',\n        onSuccess: (event: JQuery.TriggeredEvent<HTMLElement>, fields: any) => {\n          this.saveNewAddress();          \n        },\n        onFailure: (formErrors: string[], fields: any) => {\n          $(this.$addressForm).form('add errors', formErrors);\n          this.enableView();\n        },\n        fields: {\n          \"label-name\": {\n            identifier: 'label-name',\n            rules: [\n              {\n                type: 'empty',\n                prompt: 'Need To Provide an Label Name'\n              }\n            ]\n          }\n        }\n      })\n    ]);\n  }\n\n  async _setupFields() {\n    $(this.$useBusinessAddress).hide();\n    $(this.$shelterInPlace).hide();\n    await Promise.all([\n      $(this.$futureShipDateCalendar).calendar({\n        type: 'date',\n        disabledDaysOfWeek: [0, 6],\n        minDate: new Date(),\n        onChange: (date, text, mode) => {\n          this.order.futureShipDate = date;\n        }\n      }),\n      $('.ui.checkbox').checkbox(),\n\n      $(this.$stateDropdown).dropdown({\n        fullTextSearch: true,\n        onChange: async (value, text, $selectedItem) => {\n          if (value) {\n            this.order.shippingAddress.state = this.currentCountry ? this.currentCountry.states.find((state) => state.id == value) : null;\n          } else {\n            this.order.shippingAddress.state = null;\n          }\n        }\n      }),\n\n      $(this.$countryDropdown).dropdown({\n        fullTextSearch: true,\n        onChange: async (value, text, $selectedItem) => {\n          if (value) {\n            this.order.shippingAddress.country = this.countries.find((country) => country.id == value);\n          } else {\n            this.order.shippingAddress.country = null;\n          }\n          await $(this.$stateDropdown).dropdown('clear');\n        }\n      }),\n\n      $(this.$carrierDropdown).dropdown({\n        fullTextSearch: true,\n        onChange: async (value, text, $selectedItem) => {\n          if (value) {\n            this.order.carrier = this.carriers.find((carrier) => carrier.id == value);\n            $(this.$useBusinessAddress).show();\n            $(this.$shelterInPlace).show();\n          } else {\n            this.order.carrier = null;\n            $(this.$useBusinessAddress).hide();\n            $(this.$shelterInPlace).hide();\n          }\n          await $(this.$shipMethodDropdown).dropdown('clear');\n        }\n      }),\n\n      $(this.$shipMethodDropdown).dropdown({\n        fullTextSearch: true,\n        onChange: async (value, text, $selectedItem) => {\n          if (value) {\n            this.order.shippingMethod = this.currentCarrier ? this.currentCarrier.shippingMethods.find((shippingMethod) => shippingMethod.id == value) : null;\n          } else {\n            this.order.shippingMethod = null;\n          }\n        }\n      }),\n\n      $(this.$shippingAddressDropdown).dropdown({\n        fullTextSearch: true,\n        onChange: async (value, text, $selectedItem) => {\n            if (value) {\n                this.selectedShippingAddress = this.allAddresses ? this.allAddresses.find((address) => address.id == value) : null;\n            } else {\n                this.selectedShippingAddress = null;\n            }\n        }\n      })\n      \n    ]);\n    if (this.selectedShippingAddress) {\n      await $(this.$shippingAddressDropdown).dropdown('set selected', this.selectedShippingAddress.id);\n    }\n    await $(this.$countryDropdown).dropdown('set selected', this.unitedStates.id);\n  }\n\n  @computedFrom('selectedShippingAddress', 'order.email', 'order.shippingAddress.addressee')\n  get showNewAddress(): boolean{\n    if(this.selectedShippingAddress){\n      return false;\n    }\n    return !!this.order.email && !!this.order.shippingAddress.addressee;\n  }\n\n  \n  @computedFrom(\n    'selectedShippingAddress',\n    'order.shippingAddress.addressee',\n    'order.shippingAddress.attention',\n    'order.shippingAddress.address1',\n    'order.shippingAddress.address2',\n    'order.shippingAddress.city',\n    'order.shippingAddress.state',\n    'order.shippingAddress.zip',\n    'order.shippingAddress.country',\n    'order.email',\n    'order.shippingAddress.phone')\n  get showUpdateAddress(): boolean {\n    if (!this.selectedShippingAddress || !this.order.shippingAddress) {\n      return false;\n    }\n    let stateMatch = true;\n    if (this.selectedShippingAddress.state) {\n      if (!this.order.shippingAddress.state) {\n        stateMatch = false;\n      } else {\n        stateMatch = this.selectedShippingAddress.state.id == this.order.shippingAddress.state.id;\n      }\n    } else {\n      if (this.order.shippingAddress.state) {\n        stateMatch = false;\n      }\n    }\n    let countryMatch = true;\n    if (this.selectedShippingAddress.country) {\n      if (!this.order.shippingAddress.country) {\n        countryMatch = false;\n      } else {\n        countryMatch = this.selectedShippingAddress.country.id == this.order.shippingAddress.country.id;\n      }\n    } else {\n      if (this.order.shippingAddress.country) {\n        countryMatch = false;\n      }\n    }\n    return this.selectedShippingAddress.addressee !== this.order.shippingAddress.addressee ||\n      this.selectedShippingAddress.attention !== this.order.shippingAddress.attention ||\n      this.selectedShippingAddress.street !== this.order.shippingAddress.address1 ||\n      this.selectedShippingAddress.street2 !== this.order.shippingAddress.address2 ||\n      this.selectedShippingAddress.city !== this.order.shippingAddress.city ||\n      !stateMatch ||\n      this.selectedShippingAddress.zipcode !== this.order.shippingAddress.zip ||\n      !countryMatch ||\n      this.selectedShippingAddress.emails !== this.order.email ||\n      this.selectedShippingAddress.phone !== this.order.shippingAddress.phone;\n  }\n\n  @computedFrom('countries.length')\n  get unitedStates(): CountryReference {\n    if (this.countries && this.countries.length > 0) {\n      return this.countries.find((country) => country.name === \"United States\");\n    }\n    return null;\n  }\n\n  @computedFrom('order.shippingAddress.country', 'countries.length')\n  get currentCountry(): CountryReference {\n    if (!this.order.shippingAddress || !this.order.shippingAddress.country) {\n      return null;\n    }\n    return this.countries.find((country) => country.id === this.order.shippingAddress.country.id)\n  }\n\n  @computedFrom('order.carrier', 'carriers.length')\n  get currentCarrier(): CarrierReference {\n    if (!this.order.carrier) {\n      return null;\n    }\n    return this.carriers.find((carrier) => carrier.id === this.order.carrier.id)\n  }\n\n  @computedFrom('currentCountry')\n  get states(): StateReference[] {\n    if (this.currentCountry) {\n      return this.currentCountry.states;\n    }\n    return [];\n  }\n\n  @computedFrom('currentCarrier')\n  get shippingMethods(): ShippingMethodReference[] {\n    if (this.currentCarrier) {\n      return this.currentCarrier.shippingMethods;\n    }\n    return [];\n  }\n\n  async orderNumberChanged(newValue: string, oldValue: string) {\n\n    if (newValue) {\n      let foundRecords = await this.orderService.getRecordsByOrderNumber(newValue);\n      if (foundRecords.length > 0) {\n        this.isDuplicateOrder = true;\n        this.duplicateOrder = foundRecords[0];\n        this.order.wineryOrderNumber = \"\";\n      } else {\n        this.order.wineryOrderNumber = newValue;\n        this.duplicateOrder = null;\n        this.isDuplicateOrder = false;\n      }\n    } else {\n      this.order.wineryOrderNumber = \"\";\n      this.duplicateOrder = null;\n      this.isDuplicateOrder = false;\n    }\n  }  \n\n  async changedZipcode() {\n    this.logger.info(`changedZipcode`);\n    this.isColdChainCompatible = false;\n    if(this.order.shippingAddress.zip && this.order.shippingAddress.zip.length > 3){\n      $(this.$showColdChainInfo).hide(); \n      await this._setColdChainCompaitible();  \n    } else{\n      $(this.$showColdChainInfo).show();\n    }  \n  }\n\n  async _setColdChainCompaitible() {\n    this.coldChainZip = null;\n    if(!this.order.shippingAddress.zip || this.order.shippingAddress.zip.length < 4 || this.order.shippingAddress.isInternational()){\n      this.isColdChainCompatible = false;\n      return;\n    }\n    $(this.$coldChainView).hide();\n    $(this.$coldChainLoading).show();\n    let zip = parseInt(this.order.shippingAddress.zip.split(\"-\")[0],10).toString();\n    let searchResults = await this.coldChainService.searchColdChainZips(1, zip, 100);\n    this.coldChainZip = searchResults.records.find((coldChainZipRecord) => {\n      return coldChainZipRecord.zipcode == zip;\n    }) as ColdChainZip;   \n    $(this.$coldChainView).show();\n    $(this.$coldChainLoading).hide();\n    if(this.coldChainZip){\n      this.isColdChainCompatible = true;\n      return;\n    }\n    this.isColdChainCompatible = false;\n  }\n\n  async selectedShippingAddressChanged(newValue: ShippingAddress, oldValue: ShippingAddress) {\n    await $(this.$countryDropdown).dropdown('set selected', this.unitedStates.id);\n    await $(this.$stateDropdown).dropdown('clear');\n    this.order.shippingAddress.addressee = \"\";\n    this.order.shippingAddress.attention = \"\";\n    this.order.shippingAddress.address1 = \"\";\n    this.order.shippingAddress.address2 = \"\";\n    this.order.shippingAddress.city = \"\";\n    this.order.shippingAddress.zip = \"\";\n    this.order.email = \"\";\n    this.order.shippingAddress.phone = \"\";\n    if (newValue) {\n      await $(this.$countryDropdown).dropdown('set selected', newValue.country.id);\n      await $(this.$stateDropdown).dropdown('set selected', newValue.state.id);\n      this.order.shippingAddress.addressee = newValue.addressee;\n      this.order.shippingAddress.attention = newValue.attention;\n      this.order.shippingAddress.address1 = newValue.street;\n      this.order.shippingAddress.address2 = newValue.street2;\n      this.order.shippingAddress.city = newValue.city;\n      this.order.shippingAddress.zip = newValue.zipcode;\n      this.order.email = newValue.emails;\n      this.order.shippingAddress.phone = newValue.phone;\n    }\n    this.enableOrderForm();\n  }\n\n  async showNewAddressModal() {\n    this.newAddresslabelName = this.order.shippingAddress.addressee;\n    $(this.$addAddressModal).modal('show');\n  }\n\n  async updateAddress() {\n    this.disableOrderForm();\n    try {\n      if (!this.selectedShippingAddress) {\n        this.errorMessageUtil.showErrorMessage(\"No Address Selected To Update\");\n      } else {\n        this.selectedShippingAddress.addressee = this.order.shippingAddress.addressee;\n        this.selectedShippingAddress.attention = this.order.shippingAddress.attention;\n        this.selectedShippingAddress.street = this.order.shippingAddress.address1;\n        this.selectedShippingAddress.street2 = this.order.shippingAddress.address2;\n        this.selectedShippingAddress.city = this.order.shippingAddress.city;\n        this.selectedShippingAddress.state = this.order.shippingAddress.state;\n        this.selectedShippingAddress.zipcode = this.order.shippingAddress.zip;\n        this.selectedShippingAddress.country = this.order.shippingAddress.country;\n        this.selectedShippingAddress.phone = this.order.shippingAddress.phone;\n        this.selectedShippingAddress.emails = this.order.email;\n        await this.shippingAddressService.updateRecord(this.selectedShippingAddress.id, this.selectedShippingAddress);\n      }\n\n    } catch (err) {\n      this.errorMessageUtil.showError(err);\n    }\n\n    this.enableOrderForm();\n  }\n\n  async saveNewAddress() {\n    this.disableOrderForm();\n    try {\n      let newShippingAddress = new ShippingAddress({\n        name: this.newAddresslabelName,\n        addressee: this.order.shippingAddress.addressee,\n        attention: this.order.shippingAddress.attention,\n        street: this.order.shippingAddress.address1,\n        street2: this.order.shippingAddress.address2,\n        city: this.order.shippingAddress.city,\n        state: this.order.shippingAddress.state,\n        zipcode: this.order.shippingAddress.zip,\n        country: this.order.shippingAddress.country,\n        phone: this.order.shippingAddress.phone,\n        emails: this.order.email,\n        isResidential: true\n      });\n      let addressId = await this.shippingAddressService.createRecord(newShippingAddress);\n      newShippingAddress.id = addressId;      \n      this.selectedShippingAddress = newShippingAddress;\n      await $(this.$shippingAddressDropdown).dropdown('set value', addressId);\n      await $(this.$shippingAddressDropdown).dropdown('set text', this.newAddresslabelName);\n      $(this.$addAddressModal).modal('hide');\n    } catch (err) {\n      this.errorMessageUtil.showError(err);\n    }\n    this.enableOrderForm();\n  }\n\n  async clickSaveNewAddress(){\n    $(this.$addressForm).form('validate form');\n  }\n\n  async addNewOrderItem(orderItem?: OrderLine) {\n    if(orderItem){      \n      if(!orderItem.item){\n        this.errorMessageUtil.showErrorMessage(\"Need To Provide an Item.\");\n        return;\n      }\n      if(!orderItem.quantity || orderItem.quantity < 1){\n        this.errorMessageUtil.showErrorMessage(\"Need To Provide a Quantity of 1 or more.\");\n        return;\n      }\n      orderItem.addedLine = true;\n    }\n    this.orderLines.push(new OrderLine({lineNumber: this.currentOrderLineNumber}));\n    this.currentOrderLineNumber++;\n  }\n\n  async removeOrderItem(orderLineToRemove) {\n    this.orderLines = this.orderLines.filter((orderLine) => orderLine.lineNumber != orderLineToRemove.lineNumber);\n  }\n\n  async createOrder() {\n    this.scrollToTop();\n    this.disableView();\n    try {\n      this.order.items = (this.orderLines || []).filter((orderLine)=>orderLine.addedLine).map((orderLine) => {\n        return new OrderItem({\n          id: orderLine.item.productId,\n          quantity: orderLine.quantity\n        })\n      });\n      let orderId = await this.orderService.createRecord(this.order);\n      this.logger.info(`saved order :: ${orderId}`);\n      this.routeToView(ROUTES.VIEW_ORDER.name, { id: orderId });\n    } catch (err) {\n      this.errorMessageUtil.showError(err);\n      this.scrollToBottom();\n    }\n    this.enableView();\n  }\n\n  async clickSaveOrder() {\n    this.scrollToTop();\n    this.disableView();\n    $(this.$createOrderForm).form('validate form');\n  }\n}","module.exports = \"<template> <require from=shared-ui/converters/boolean-format></require> <require from=orders/views/order-create-item-view></require> <div class=\\\"ui segment\\\"> <h1 class=\\\"ui center aligned header\\\">CREATE NEW ORDER</h1> <form class=\\\"ui form\\\" ref=$createOrderForm> <div class=\\\"ui ${orderFormDisabled ? 'active' : ''} inverted dimmer\\\"> <div class=\\\"ui text centered loader\\\">Loading</div> </div> <h4 class=\\\"ui dividing header\\\">Primary Information</h4> <div class=\\\"two fields\\\"> <div class=\\\"field required\\\"> <label>Order Number</label> <input type=text name=order-number value.bind=orderNumber placeholder=\\\"Order Number\\\"> <div class=\\\"ui negative ${isDuplicateOrder ? '' : 'hidden'} message\\\"> <div class=header> There is another <a route-href=\\\"route: order; params.bind: {id: duplicateOrder.id}\\\" target=_blank>order</a> with this order number. </div> </div> </div> <div class=\\\"field required\\\"> <label>Requested Ship/Pickup Date</label> <div class=\\\"ui calendar\\\" ref=$futureShipDateCalendar> <div class=\\\"ui input left icon\\\"> <i class=\\\"calendar icon\\\"></i> <input type=text placeholder=\\\"Ship/Pickup Date\\\" name=future-ship-date> </div> </div> </div> </div> <h4 class=\\\"ui dividing header\\\">Options</h4> <div class=\\\"two fields\\\"> <div class=field> <div class=\\\"ui toggle checkbox\\\"> <input type=checkbox name=ice tabindex=0 class=hidden checked.bind=order.includeIce> <label>Ice Packs</label> </div> </div> <div class=field> <label>Declared Value For Shipment</label> <input type=text name=declared-shipment placeholder=\\\"Must be between $101 and $1000\\\" value.bind=order.declaredValue> </div> </div> <div class=\\\"two fields\\\"> <div class=field> <label>Shipping Instructions</label> <textarea rows=2 value.bind=order.shippingInstructions></textarea> </div> <div class=field> <label>Gift Note</label> <textarea rows=2 value.bind=order.giftMessage></textarea> </div> </div> <h4 class=\\\"ui dividing header\\\">Shipping Method</h4> <div class=\\\"two fields\\\"> <div class=\\\"field required\\\"> <label>Carrier/Type</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$carrierDropdown> <input name=carriers type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">Carrier</div> <div class=menu> <div repeat.for=\\\"carrier of carriers\\\" class=item data-value.bind=carrier.id> ${carrier.name}</div> </div> </div> </div> <div class=\\\"field required\\\"> <label>Method</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$shipMethodDropdown> <input name=shipmethod type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">Ship Method</div> <div class=menu> <div repeat.for=\\\"shippingMethod of shippingMethods\\\" class=item data-value.bind=shippingMethod.id> ${shippingMethod.name}</div> </div> </div> </div> </div> <h4 class=\\\"ui dividing header\\\">Cold Chain</h4> <div class=\\\"ui icon hidden message\\\" ref=$coldChainLoading> <div class=content> <div class=header> <i class=\\\"notched circle loading icon\\\"></i> Just one second, checking if Cold Chain Compatible. </div> </div> </div> <span ref=$coldChainView> <p ref=$showColdChainInfo> <span class=\\\"ui medium red text\\\"> * A Zipcode must be provided to check Cold Chain Compatibility. </span> </p> <div class=\\\"two fields\\\"> <div class=field> <b>Is Compatible:</b> ${isColdChainCompatible | booleanFormat} </div> <div if.bind=isColdChainCompatible class=field> <b>Zone:</b> ${coldChainZip.zoneNumber()} </div> </div> <div if.bind=isColdChainCompatible class=\\\"two fields\\\"> <div class=field> <b>Delivery Day:</b> ${coldChainZip.deliveryDay.name} </div> <div class=field> <b>Delivery Time:</b> ${coldChainZip.deliveryTime} </div> </div> </span> <h4 class=\\\"ui dividing header\\\">Shipping Address</h4> <div class=\\\"two fields\\\"> <div class=field> <label>Select Shipping Address</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$shippingAddressDropdown> <input name=addresses type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">Shipping Address</div> <div class=menu> <div repeat.for=\\\"address of allAddresses\\\" class=item data-value.bind=address.id> ${address.name} </div> </div> </div> </div> </div> <p ref=$useBusinessAddress> <span class=\\\"ui medium red text\\\"> * Please use BUSINESS address whenever possible to increase likelihood of a 21+ year old being present to sign </span> </p> <p ref=$shelterInPlace> <span class=\\\"ui medium red text\\\"> ** All pick-ups/drop-offs for our winery clients at this time are by appointment only and need to be scheduled and approved with at least a 2-day notice. Please email <a href=mailto:Earanda@vinfillment.com>Efren Aranda</a> to schedule appointment. </span> </p> <div class=\\\"two fields\\\"> <div class=field> <label>Addressee</label> <input type=text name=addressee placeholder=\\\"Recipient Name\\\" value.bind=order.shippingAddress.addressee> </div> <div class=field> <label>Attention</label> <input type=text name=attention placeholder=\\\"Company Name\\\" value.bind=order.shippingAddress.attention> </div> </div> <div class=\\\"two fields\\\"> <div class=field> <label>Address 1</label> <input type=text name=address-1 placeholder=\\\"Address 1\\\" value.bind=order.shippingAddress.address1> </div> <div class=field> <label>Address 2</label> <input type=text name=address-2 placeholder=\\\"Address 2\\\" value.bind=order.shippingAddress.address2> </div> </div> <div class=\\\"two fields\\\"> <div class=field> <label>City</label> <input type=text name=address-1 placeholder=City value.bind=order.shippingAddress.city> </div> <div class=field> <label>Zip</label> <input type=text name=zip placeholder=Zipcode value.bind=order.shippingAddress.zip> </div> </div> <div class=\\\"two fields\\\"> <div class=field> <label>Country</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$countryDropdown> <input name=countries type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">Country</div> <div class=menu> <div repeat.for=\\\"country of countries\\\" class=item data-value.bind=country.id> ${country.name}</div> </div> </div> </div> <div class=field> <label>State</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$stateDropdown> <input name=states type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">State</div> <div class=menu> <div repeat.for=\\\"state of states\\\" class=item data-value.bind=state.id> ${state.name}</div> </div> </div> </div> </div> <div class=\\\"two fields\\\"> <div class=\\\"field required\\\"> <label>Recipient Email</label> <input type=text name=email placeholder=Email value.bind=order.email> </div> <div class=field> <label>Phone</label> <input type=text name=phone placeholder=\\\"Phone Number\\\" value.bind=order.shippingAddress.phone> </div> </div> <span style=display:none>${showNewAddress}</span> <span style=display:none>${showUpdateAddress}</span> <div class=\\\"ui primary button\\\" click.delegate=showNewAddressModal() show.bind=showNewAddress>Save New Address </div> <div class=\\\"ui primary button\\\" click.delegate=updateAddress() show.bind=showUpdateAddress>Update Address </div> <h4 class=\\\"ui dividing header\\\">Items</h4> <div class=\\\"ui cards\\\"> <div class=\\\"ui raised fluid card\\\" repeat.for=\\\"orderLine of orderLines\\\"> <div class=content> <div class=header> <div class=\\\"ui negative button\\\" if.bind=orderLine.addedLine tabindex=0 click.delegate=removeOrderItem(orderLine)>Remove</div> </div> <div class=description> <order-create-item-view order-line.two-way=orderLine all-items.two-way=allItems></order-create-item-view> <div class=\\\"ui primary button\\\" if.bind=!orderLine.addedLine tabindex=0 click.delegate=addNewOrderItem(orderLine)>Add Item</div> </div> </div> </div> </div> <h4 class=\\\"ui dividing header\\\"></h4> <div class=\\\"ui error message\\\"> </div> <div class=\\\"ui positive button\\\" tabindex=0 click.delegate=clickSaveOrder()>Submit Order</div> </form> <div class=\\\"ui modal\\\" ref=$addAddressModal> <i class=\\\"close icon\\\"></i> <div class=\\\"ui icon header\\\"> Create Address </div> <div class=content> <form class=\\\"ui form\\\" ref=$addressForm> <div class=\\\"two fields\\\"> <div class=\\\"field required\\\"> <label>Label Name (Addressee)</label> <input type=text name=label-name value.bind=newAddresslabelName placeholder=\\\"Address Identifier\\\"> </div> </div> <h4 class=\\\"ui dividing header\\\"></h4> <div class=\\\"ui error message\\\"></div> <div class=\\\"ui positive button\\\" tabindex=0 click.delegate=clickSaveNewAddress()>Save Address</div> </form> </div> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport {VIEW_TYPES} from \"orders/views/order-list-view\"\n\n@autoinject\nexport class OrderListDashboard extends StandardView {\n    alertNotificationsLoading: boolean;\n    kpisLoading: boolean;\n    constructor() {\n        super(OrderListDashboard.name); \n        this.alertNotificationsLoading = true;\n        this.kpisLoading = true;\n        this.screenViewUtility.viewName = \"\";\n    }\n\n    async attached() {\n        await super.attached();        \n    }\n\n    async activate(params, routeData) {\n        await super.activate(params, routeData);\n        this.screenViewUtility.viewName = \"\";               \n    }\n\n    async onClickAllOrders() {\n        await this.routeToView(ROUTES.LIST_ORDERS.name, {listType: VIEW_TYPES.ALL});     \n    }\n\n    async onClickOpenOrders() {\n        await this.routeToView(ROUTES.LIST_ORDERS.name, {listType: VIEW_TYPES.OPEN});        \n    }\n\n    async onClickWeatherHolds() {\n        await this.routeToView(ROUTES.LIST_ORDERS.name, {listType: VIEW_TYPES.WEATHER_HOLDS});  \n    }\n\n    async onClickBackorders() {\n        await this.routeToView(ROUTES.LIST_ORDERS.name, {listType: VIEW_TYPES.BACKORDERS});  \n    }\n}","module.exports = \"<template> <div class=\\\"ui link stackable dashboard cards\\\"> <div class=\\\"ui raised card\\\"> <a class=content click.delegate=onClickAllOrders()> <div class=header>All Orders</div> <div class=description>View all the Orders.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content click.delegate=onClickOpenOrders()> <div class=header>Open Orders</div> <div class=description>View only the open Orders.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content click.delegate=onClickWeatherHolds()> <div class=header>Weather Holds</div> <div class=description>View Orders on Weather Hold.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content click.delegate=onClickBackorders()> <div class=header>Backorders</div> <div class=description>View Orders on Backorder.</div> </a> </div> </div> <style>.dashboard.cards .content{text-align:center;min-height:80px}</style> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { bindable, autoinject, observable } from \"aurelia-framework\";\nimport { OrderReference } from \"orders/models/order\";\nimport { OrderService } from \"orders/services/order_service\";\nimport { ROUTES } from \"routes\";\nimport { SearchResult } from \"shared-models/search-result\";\nimport { SimpleDateFormatValueConverter } from \"shared-ui/converters/simple-date-format\";\nimport { BooleanFormatValueConverter } from \"shared-ui/converters/boolean-format\";\nimport parse from \"papaparse\";\n\nexport enum VIEW_TYPES {\n    ALL = \"all\",\n    OPEN = \"open\",\n    WEATHER_HOLDS = \"weather-holds\",\n    BACKORDERS = \"backorders\",\n    COLD_CHAIN_COMP = \"cold-chain-comp\",\n    COLD_CHAIN_ORDERS = \"cold-chain\",\n}\n\n@autoinject\nexport class OrderListView extends StandardView {\n    @bindable\n    orders: OrderReference[];\n\n    currentSearchResult: SearchResult;\n\n    currentPage: number = 1;\n\n    orderListDisabled: boolean = false;\n\n    $downloadCSVLink: HTMLElement;\n\n    $exportLink: HTMLElement;\n\n    listType: string;\n\n    @observable\n    searchInput: string = \"\";\n\n\n    constructor(\n        private orderService: OrderService, \n        private simpleDateFormat: SimpleDateFormatValueConverter, \n        private booleanFormat: BooleanFormatValueConverter) {\n        super(OrderListView.name);\n        this.orders = [];\n    }\n\n    async activate(params, routeData) {\n        try {            \n            this.listType = params[\"listType\"];\n            await this._getOrders();\n            this.logger.info(`this.orders :: ${JSON.stringify(this.orders)}`);            \n        } catch (err) {\n            this.errorMessageUtil.showError(err);\n            this.routeToView(ROUTES.DASHBOARD.name);\n        }\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        await super.attached();\n    }\n\n    async _getOrders() {\n        let fieldFilters = [];\n        if(this.listType === VIEW_TYPES.OPEN){\n            fieldFilters = this._getOpenFilters();\n        } else if(this.listType === VIEW_TYPES.WEATHER_HOLDS){\n            fieldFilters = this._getWhFilters();\n        } else if(this.listType === VIEW_TYPES.BACKORDERS){\n            fieldFilters = this._getBackorderedFilters();\n        } else if(this.listType === VIEW_TYPES.COLD_CHAIN_COMP){\n            fieldFilters = this._getColdChainCompFilters();\n        } else if(this.listType === VIEW_TYPES.COLD_CHAIN_ORDERS){\n            fieldFilters = this._getColdChainFilters();\n        }\n        this.logger.info(`fieldFilters :: ${JSON.stringify(fieldFilters)}`);\n        this.currentSearchResult = await this.orderService.searchRecords({page: this.currentPage, filter: this.searchInput, fieldFilters: fieldFilters});\n        this.orders = this.currentSearchResult.records as OrderReference[];\n    }\n\n    _getOpenFilters(){\n        return [['winery_order_status', '=', ['pending_approval','pending_fulfill']]];\n    }\n\n    _getWhFilters(){      \n        let allFilters = this._getOpenFilters();  \n        allFilters.push(['weather_hold', '=', true] as string[]);      \n        return allFilters;\n    }\n\n    _getBackorderedFilters(){\n        let allFilters = this._getOpenFilters();  \n        allFilters.push(['order_is_backordered', '=', true] as string[]);      \n        return allFilters;\n    }\n\n    _getColdChainCompFilters(){\n        let allFilters = this._getOpenFilters();  \n        allFilters.push(['is_cold_chain_compatible', '=', true] as string[]);      \n        allFilters.push(['is_cold_chain', '=', false] as string[]);      \n        return allFilters;\n    }\n\n    _getColdChainFilters(){\n        let allFilters = this._getOpenFilters();  \n        allFilters.push(['is_cold_chain', '=', true] as string[]);      \n        return allFilters;\n    }\n\n    async searchInputChanged(newValue: string, oldValue: string) {\n        this.disableAddressList();\n        this.currentPage = 1;\n        await this._getOrders();\n        this.enableAddressList();\n    }\n\n    async clickPrevious() {\n        this.disableAddressList();\n        if (this.currentPage > 1) {\n            this.currentPage--;\n        }\n        await this._getOrders();\n        this.enableAddressList();\n    }\n\n    async clickNext() {\n        this.disableAddressList();\n        if (this.currentPage < this.currentSearchResult.pageCount) {\n            this.currentPage++;\n        }\n        await this._getOrders();\n        this.enableAddressList();\n    }\n\n\n    disableAddressList() {\n        this.orderListDisabled = true;\n    }\n\n    enableAddressList() {\n        this.orderListDisabled = false;\n    }\n\n    async exportOrders() {\n        this.disableView();\n        let ordersToExport = [];\n        if (this.searchInput) {\n            ordersToExport = this.orders\n        } else {\n            ordersToExport = await this.orderService.getAllRecords();\n        }\n        let ordersCSV = this.convertOrdersToCsv(ordersToExport);\n        $(this.$exportLink).attr('href', `data:text/csv;charset=utf-8, ${escape(ordersCSV)}`);       \n        this.$exportLink.click();        \n        this.enableView();\n    }\n\n    convertOrdersToCsv(ordersToExport: OrderReference[]) {\n        return parse.unparse(ordersToExport.map((orderToExport) => {\n            return {\n                \"VinFillment Order Number\": orderToExport.vinfillmentOrderNumber,\n                \"Order Number\": orderToExport.wineryOrderNumber,\n                \"Status\": orderToExport.status,\n                \"Future Ship Date\": this.simpleDateFormat.toView(orderToExport.futureShipDate),\n                \"Ship Date\": orderToExport.shipDate,\n                \"Carrier\": orderToExport.carrierName,\n                \"Shipping Method\": orderToExport.shippingMethodName,\n                \"Shipping Instructions\": orderToExport.shippingInstructions,\n                \"Gift Message\": orderToExport.giftMessage,\n                \"Include Ice\": this.booleanFormat.toView(orderToExport.includeIce),\n                \"email\": orderToExport.email,\n                \"declaredValue\": orderToExport.declaredValue,\n                \"Addressee\": orderToExport.shippingAddress.addressee,                \n                \"Attention\": orderToExport.shippingAddress.attention,                \n                \"Address1\": orderToExport.shippingAddress.address1,                \n                \"Address2\": orderToExport.shippingAddress.address2,                \n                \"City\": orderToExport.shippingAddress.city,                \n                \"State\": orderToExport.shippingAddress.stateName,                \n                \"Zip\": orderToExport.shippingAddress.zip,                \n                \"Country\": orderToExport.shippingAddress.countryName,                \n                \"Phone\": orderToExport.shippingAddress.phone          \n            };\n        }));\n    }\n\n    newOrder(){\n        this.routeToView(ROUTES.CREATE_ORDER.name);\n    }\n\n    viewOrder(currentOrder){\n        this.routeToView(ROUTES.VIEW_ORDER.name, {id: currentOrder.id});\n    }\n\n    changeOrder(currentOrder){\n        this.routeToView(ROUTES.CREATE_CHANGE_ORDER.name, {orderid: currentOrder.id});\n    }\n\n\n}","module.exports = \"<template> <require from=shared-ui/converters/simple-date-format></require> <require from=shared-ui/converters/boolean-format></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui centered stackable grid\\\"> <div class=\\\"sixteen wide column\\\"> <h1 class=\\\"ui center aligned header\\\">Orders</h1> </div> <div class=\\\"five wide column\\\"> <button class=\\\"primary ui button\\\" click.delegate=newOrder()>New</button> <button class=\\\"positive ui button\\\" click.delegate=exportOrders()>Export</button> <a href=\\\"data:text/csv;charset=utf-8,\\\" hidden download=orderlist.csv ref=$exportLink>Download</a> </div> <div class=\\\"six wide column\\\"> <div class=\\\"ui fluid input\\\"> <input type=text placeholder=Search... value.bind=searchInput> </div> </div> <div class=\\\"five wide column\\\"> <div class=\\\"ui grid\\\"> <div class=\\\"right floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === 1 ? 'disabled' : ''} button\\\" click.delegate=clickPrevious()> <i class=\\\"left arrow icon\\\"></i> </div> </div> <div class=\\\"six wide column\\\"> <span class=\\\"ui blue medium text\\\">Page ${currentPage} of ${currentSearchResult.pageCount || 1}</span> </div> <div class=\\\"left floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === currentSearchResult.pageCount ? 'disabled' : ''} button\\\" click.delegate=clickNext()> <i class=\\\"right arrow icon\\\"></i> </div> </div> </div> </div> <div class=\\\"sixteen wide column\\\"> <div class=\\\"ui segment\\\"> <div class=\\\"ui ${orderListDisabled ? 'active' : ''} inverted dimmer\\\"> <div class=\\\"ui text centered loader\\\">Loading</div> </div> <div class=\\\"ui three doubling stackable cards\\\"> <div class=\\\"ui raised fluid card\\\" repeat.for=\\\"order of orders\\\"> <div class=content> <div class=header> <div class=\\\"ui stackable grid\\\"> <div class=\\\"sixteen wide column\\\"> <button class=\\\"positive ui compact tiny button\\\" click.delegate=viewOrder(order)>View</button> <span class=\\\"ui small header\\\">${order.wineryOrderNumber}</span> </div> <div class=\\\"sixteen wide column\\\" style=padding:3px!important> ${order.status} </div> </div> </div> <div class=description> <div class=\\\"ui stackable grid\\\"> <div class=\\\"sixteen wide column\\\" style=padding:3px!important> ${order.shippingMethodName} </div> <div if.bind=!order.shipDate class=\\\"sixteen wide column\\\" style=padding:3px!important> ${order.futureShipDate | simpleDateFormat} </div> <div if.bind=order.shipDate class=\\\"sixteen wide column\\\" style=padding:3px!important> ${order.shipDate | simpleDateFormat} </div> <div class=\\\"sixteen wide column\\\" style=padding:3px!important> <p style=white-space:pre-line>${order.shippingAddress.addressForm}</p> </div> <div class=\\\"sixteen wide column\\\" style=padding:3px!important> <p style=white-space:pre-line>${order.email}</p> </div> <div if.bind=order.trackingNumberList class=\\\"sixteen wide column\\\" style=padding:3px!important> <a href.bind=order.trackingLink target=_blank>${order.trackingNumberList}</a> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { bindable, autoinject, computedFrom } from \"aurelia-framework\";\nimport { OrderReference, Order } from \"orders/models/order\";\nimport { OrderService } from \"orders/services/order_service\";\nimport { ROUTES } from \"routes\";\nimport { ChangeOrderService } from \"change-orders/services/change_order_service\";\nimport { ChangeOrder } from \"change-orders/models/change-order\";\n\n@autoinject\nexport class OrderView extends StandardView {\n  @bindable\n  order: Order;\n\n  changeOrders: ChangeOrder[];\n\n  constructor(private orderService: OrderService, private changeOrderService: ChangeOrderService) {\n    super(OrderView.name);\n    this.order = null;\n  }\n\n  async activate(params, routeData) {\n    try {\n      let orderId = params[\"id\"] ? parseInt(params[\"id\"]): null;\n      this.order = await this.orderService.getRecord(orderId);\n      this.changeOrders = await this.changeOrderService.getChangeOrdersByOrder(orderId);\n      this.logger.info(`this.order :: ${JSON.stringify(this.order)}`);\n    } catch (err) {\n      this.errorMessageUtil.showError(err);\n      this.routeToView(ROUTES.DASHBOARD.name);\n    }\n    await super.activate(params, routeData);\n  }\n\n  async attached() {\n    await super.attached();\n  }\n\n  @computedFrom('order.wineryOrderNumber')\n  get wineryOrderNumber(): string {\n    if (this.order) {\n      return this.order.wineryOrderNumber;\n    }\n    return \"\";\n  }\n\n  _addNewLine(data) {\n    return data ? data + \"\\r\\n\" : \"\";\n  }\n\n  _addBankSpaceAfter(data) {\n    return data ? data + \" \" : \"\"\n  }\n\n  async viewChangeOrder(changeOrder: ChangeOrder) {\n    this.disableView();\n    if (changeOrder && changeOrder.id) {\n      this.routeToView(ROUTES.VIEW_CHANGE_ORDER.name, { id: changeOrder.id });\n    }\n    this.enableView();\n  }\n\n  @computedFrom('order.status')\n  get statusColor(): string {\n    if (this.order.isVoided()) {\n      return \"red\";\n    }   \n    return \"blue\";\n  }\n\n  @computedFrom('changeOrders.length')\n  get pendingChangeOrder(): ChangeOrder {\n    let pendingChangeOrder = null;\n    this.changeOrders.forEach((changeOrder) => {\n      if (changeOrder.status == \"Pending Approval\") {\n        pendingChangeOrder = changeOrder;\n      }\n    });\n    return pendingChangeOrder;\n  }\n\n  @computedFrom('order.shippingAddress')\n  get shippingAddress(): string {\n    let address = this.order.shippingAddress;\n    let state = address.state ? address.state.name : \"\";\n    let country = address.country ? address.country.name : \"\";\n    return this._addNewLine(address.attention) +\n      this._addNewLine(address.addressee) +\n      this._addNewLine(address.address1) +\n      this._addNewLine(address.address2) +\n      this._addBankSpaceAfter(address.city) + this._addBankSpaceAfter(state) + this._addNewLine(address.zip) +\n      country;\n  }\n\n  async clickChangeOrder() {\n    if (this.pendingChangeOrder) {\n      this.routeToView(ROUTES.VIEW_CHANGE_ORDER.name, { id: this.pendingChangeOrder.id });\n    } else {\n      this.routeToView(ROUTES.CREATE_CHANGE_ORDER.name, { orderid: this.order.id });\n    }\n\n  }\n\n}","module.exports = \"<template> <require from=shared-ui/converters/simple-date-format></require> <require from=shared-ui/converters/boolean-format></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui ${statusColor} right ribbon label\\\"> <h1 class=\\\"ui inverted header\\\">${order.status}</h1> </div> <div class=\\\"ui centered stackable grid\\\"> <div class=\\\"five wide column\\\"> <button class=\\\"positive ui button\\\" click.delegate=clickChangeOrder() show.bind=!pendingChangeOrder>Create Change Order</button> <button class=\\\"positive ui button\\\" click.delegate=clickChangeOrder() show.bind=pendingChangeOrder>Pending Change Order</button> </div> <div class=\\\"six wide column\\\"> <h1 class=\\\"ui center aligned header\\\">Order ${wineryOrderNumber}</h1> </div> <div class=\\\"five wide column\\\"> </div> <div class=\\\"sixteen wide column\\\"> <form class=\\\"ui form\\\" ref=$viewOrderForm> <h4 class=\\\"ui dividing header\\\">Primary Information</h4> <div class=\\\"two fields\\\"> <div class=field> <b>VinFillment Order Number:</b> ${order.vinfillmentOrderNumber} </div> <div class=field> <b>Order Number:</b> ${order.wineryOrderNumber} </div> </div> <div class=\\\"two fields\\\"> <div class=field> <b>Requested Ship/Pickup Date:</b> ${order.futureShipDate | simpleDateFormat} </div> <div class=field> <b>Weather Hold:</b> ${order.weatherHold | booleanFormat} </div> </div> <div class=\\\"two fields\\\" if.bind=order.createdByUser> <div class=field> <b>Created By:</b> ${order.createdByUser.name} </div> </div> <h4 class=\\\"ui dividing header\\\">Options</h4> <div class=\\\"two fields\\\"> <div class=field> <b>Ice Packs:</b> ${order.includeIce | booleanFormat} </div> <div class=field> <b>Declared Value For Shipment:</b> ${order.declaredValue} </div> </div> <div class=\\\"two fields\\\"> <div class=field> <b>Shipping Instructions:</b> ${order.shippingInstructions} </div> <div class=field> <b>Gift Note:</b> ${order.giftMessage} </div> </div> <h4 class=\\\"ui dividing header\\\">Shipping Method</h4> <div class=\\\"two fields\\\"> <div class=field> <b>Carrier/Type:</b> ${order.carrier ? order.carrier.name : \\\"\\\"} </div> <div class=field> <b>Method:</b> ${order.shippingMethod ? order.shippingMethod.name : \\\"\\\"} </div> </div> <h4 class=\\\"ui dividing header\\\">Shipping Address</h4> <p style=white-space:pre-line>${shippingAddress}</p> <div class=\\\"two fields\\\"> <div class=field> <b>Recipient Email:</b> ${order.email} </div> <div class=field> <b>Phone:</b> ${order.shippingAddress.phone} </div> </div> <h4 class=\\\"ui dividing header\\\">Cold Chain</h4> <div class=\\\"two fields\\\"> <div class=field> <b>Is Compatible:</b> ${order.isColdChainCompatible | booleanFormat} </div> <div if.bind=order.isColdChainCompatible class=field> <b>Zone:</b> ${order.coldChainZone.name} </div> </div> <div if.bind=order.isColdChainCompatible class=\\\"two fields\\\"> <div class=field> <b>Delivery Day:</b> ${order.coldChainDeliveryDay.name} </div> <div class=field> <b>Delivery Time:</b> ${order.coldChainDeliveryTime} </div> </div> <div if.bind=\\\"order.trackingNumbers.length > 0\\\"> <h4 class=\\\"ui dividing header\\\">Tracking</h4> <div class=\\\"one fields\\\"> <div class=field> <b>Tracking Link:</b> <a href.bind=order.trackingLink target=_blank>${order.trackingNumberList}</a> </div> </div> <div class=\\\"ui cards\\\"> <div class=card repeat.for=\\\"trackingNumber of order.trackingNumbers\\\"> <div class=content> <div class=header><a href.bind=trackingNumber.carrierTrackingLink target=_blank>${trackingNumber.name}</a></div> </div> <div class=content> <form class=\\\"ui form\\\"> <div class=\\\"one fields\\\"> <div class=field> <b>Status:</b> ${trackingNumber.currentCarrierStatus} </div> </div> <div class=\\\"two fields\\\"> <div class=field> <b>Attempts:</b> ${trackingNumber.numberOfAttempts} </div> <div if.bind=!trackingNumber.actualDelivery class=field> <b>Est. Delivery:</b> ${trackingNumber.estimatedDelivery | simpleDateTimeFormat} </div> <div if.bind=trackingNumber.actualDelivery class=field> <b>Actual Delivery:</b> ${trackingNumber.actualDelivery | simpleDateTimeFormat} </div> </div> </form> </div> </div> </div> </div> <h4 class=\\\"ui dividing header\\\">Items</h4> <div class=\\\"ui cards\\\"> <div class=card repeat.for=\\\"orderLine of order.items\\\"> <div class=content> <div class=header>${orderLine.itemName}</div> ${orderLine.sku} </div> <div class=content> <form class=\\\"ui form\\\"> <div class=\\\"two fields\\\"> <div class=field> <b>Quantity:</b> ${orderLine.quantity} </div> <div class=field> <b>Committed:</b> ${orderLine.committed} </div> </div> <div class=\\\"two fields\\\"> <div class=field> <b>Backordered:</b> ${orderLine.backordered} </div> <div class=field> <b>Shipped:</b> ${orderLine.shipped} </div> </div> </form> </div> </div> </div> <h4 class=\\\"ui dividing header\\\">Change Orders</h4> <div class=\\\"ui cards\\\"> <div class=card repeat.for=\\\"changeOrder of changeOrders\\\"> <div class=content> <div class=header> <button class=\\\"positive ui compact tiny button\\\" click.delegate=viewChangeOrder(changeOrder)>View</button> ${changeOrder.status} </div> </div> <div class=content> <form class=\\\"ui form\\\"> <div class=\\\"one fields\\\"> <div class=field> <b>Date:</b> ${changeOrder.createDate | simpleDateTimeFormat} </div> </div> <div class=\\\"one fields\\\"> <div class=field> ${changeOrder.changeRequestsTypes} </div> </div> </form> </div> </div> </div> </form> </div> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { bindable, autoinject, observable, computedFrom } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport parse from 'papaparse';\nimport { SearchResult } from \"shared-models/search-result\";\nimport { ReturnReference } from \"returns/models/return-record\";\nimport { ReturnService } from \"returns/services/return-service\";\n\nexport enum VIEW_TYPES {\n    ALL = \"all\",\n    PENDING = \"pending\"\n}\n\n@autoinject\nexport class ListReturnsView extends StandardView {\n    \n    filteredRecords: ReturnReference[] = [];\n\n    listDisabled: boolean = false;\n\n    @observable\n    searchInput: string;\n\n    currentSearchResult: SearchResult;\n    \n    currentPage: number = 1;\n\n    $exportLink: HTMLElement;\n\n    listType: string;\n\n    constructor(private returnService: ReturnService) {\n        super(ListReturnsView.name);\n    }\n\n    async activate(params, routeData) {\n        try {          \n            this.listType = params[\"listType\"];\n            await this._getRecords();\n        } catch (err) {\n            this.errorMessageUtil.showError(err);\n            this.router.navigateToRoute(ROUTES.DASHBOARD.name, {}, { trigger: true, replace: true });\n        }\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        await super.attached();\n    }\n\n    async _getRecords() {\n        let fieldFilters = this._getFilters();        \n        this.logger.info(`fieldFilters :: ${JSON.stringify(fieldFilters)}`);\n        this.currentSearchResult = await this.returnService.searchRecords({page: this.currentPage, filter: this.searchInput, fieldFilters: fieldFilters});\n        this.filteredRecords = this.currentSearchResult.records as ReturnReference[];\n    }\n\n    _getFilters() {\n        if(this.listType === VIEW_TYPES.PENDING){\n            return this._getPendingFilters();\n        }\n        return [];\n    }\n\n    _getPendingFilters(){\n        return [['status', '=', 'pending']];\n    }\n\n    disableList() {\n        this.listDisabled = true;\n    }\n\n    enableList() {\n        this.listDisabled = false;\n    }\n\n    async searchInputChanged(newValue: string, oldValue: string) {\n        this.disableList()\n        this.currentPage = 1;\n        await this._getRecords(); \n        this.enableList()       \n    }\n\n    async clickPrevious() {\n        this.disableList();\n        if (this.currentPage > 1) {\n            this.currentPage--;\n        }\n        await this._getRecords();\n        this.enableList();\n    }\n\n    async clickNext() {\n        this.disableList();\n        if (this.currentPage < this.currentSearchResult.pageCount) {\n            this.currentPage++;\n        }\n        await this._getRecords();\n        this.enableList();\n    }\n    \n    @computedFrom()\n    get viewReturnRoute(){\n        return ROUTES.VIEW_RETURN.name;\n    }    \n    \n    async exportRecords() {\n        this.disableView();\n        let fieldFilters = this._getFilters();\n        let records = [];\n        if (this.searchInput) {\n            records = this.filteredRecords\n        } else {\n            records = await this.returnService.getAllRecords(fieldFilters);\n        }\n        let recordsCSV = this.convertRecordsToCsv(records);\n        $(this.$exportLink).attr('href', `data:text/csv;charset=utf-8, ${escape(recordsCSV)}`);       \n        this.$exportLink.click(); \n        this.enableView();\n    }\n\n    convertRecordsToCsv(records: ReturnReference[]) {\n        if(records.length === 0){\n            return parse.unparse([{\n                \"Order#\" : \"\",\n                \"Recipient Name\": \"\",\n                \"Ship Date\": \"\",\n                \"Return Date\": \"\",\n                \"Ship Method\": \"\",\n                \"Return Reason\": \"\",\n                \"Notes\": \"\",\n            }]);\n        }\n        return parse.unparse(records.map((record) => {\n            return {\n                \"Order#\" : record.orderNumber,\n                \"Recipient Name\": record.recipientName,\n                \"Ship Date\": record.shipDate,\n                \"Return Date\": record.returnDate,\n                \"Ship Method\": record.shippingMethod.name,\n                \"Return Reason\": record.returnReason.name,\n                \"Notes\": record.notes\n            };\n        }));\n    }\n\n\n}","module.exports = \"<template> <require from=shared-ui/converters/simple-date-format></require> <require from=shared-ui/converters/boolean-format></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui centered grid\\\"> <div class=\\\"sixteen wide column\\\"> <h1 class=\\\"ui center aligned header\\\">Return List</h1> </div> <div class=\\\"five wide column\\\"> <button class=\\\"positive ui button\\\" click.delegate=exportRecords()>Export</button> <a href=\\\"data:text/csv;charset=utf-8,\\\" hidden download=returnlist.csv ref=$exportLink>Download</a> </div> <div class=\\\"six wide column\\\"> <div class=\\\"ui fluid input\\\"> <input type=text placeholder=Search... value.bind=searchInput> </div> </div> <div class=\\\"five wide column\\\"> <div class=\\\"ui grid\\\"> <div class=\\\"right floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === 1 ? 'disabled' : ''} button\\\" click.delegate=clickPrevious()> <i class=\\\"left arrow icon\\\"></i> </div> </div> <div class=\\\"six wide column\\\"> <span class=\\\"ui blue medium text\\\">Page ${currentPage} of ${currentSearchResult.pageCount || 1}</span> </div> <div class=\\\"left floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === currentSearchResult.pageCount ? 'disabled' : ''} button\\\" click.delegate=clickNext()> <i class=\\\"right arrow icon\\\"></i> </div> </div> </div> </div> <div class=\\\"sixteen wide column\\\"> <div class=\\\"ui ${listDisabled ? 'active' : ''} inverted dimmer\\\"> <div class=\\\"ui text centered loader\\\">Loading</div> </div> <div class=\\\"ui link four doubling cards\\\"> <div class=\\\"ui raised fluid card\\\" repeat.for=\\\"return of filteredRecords\\\"> <a class=content route-href=\\\"route.bind: viewReturnRoute; params.bind: {id: return.id}\\\"> <span class=\\\"ui ${return.statusColor} right ribbon large label\\\"> ${return.statusName} </span> <div class=header></div> <div class=description> <form class=\\\"ui form\\\"> <div class=\\\"one fields\\\"> <div class=field> <b>Order: </b>${return.orderNumber}</div> </div> <div class=\\\"one fields\\\"> <div class=field> <b>Recipient: </b>${return.recipientName}</div> </div> <div class=\\\"one fields\\\"> <div class=field> <b>Returned: </b>${return.returnDate | simpleDateFormat} </div> </div> <div class=\\\"one fields\\\"> <div class=field> <b>Reason: </b>${return.returnReason.name}</div> </div> </form> </div> </a> </div> </div> </div> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { bindable, autoinject, computedFrom } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport { ReturnRecord } from \"returns/models/return-record\";\nimport { ReturnService } from \"returns/services/return-service\";\n\n@autoinject\nexport class ReturnView extends StandardView {\n  @bindable\n  return: ReturnRecord;\n\n  $viewReturnForm: HTMLElement;\n\n  constructor(private returnService: ReturnService) {\n    super(ReturnView.name);\n    this.return = null;\n  }\n\n  async activate(params, routeData) {\n    try {\n      let returnId = params[\"id\"];\n      if (!returnId) {\n        throw \"No Return Id Provided.\";\n      }\n      returnId = parseInt(returnId, 10)\n      let requestResponses = await Promise.all([\n        this.returnService.getRecord(returnId)\n      ]);\n      this.return = requestResponses[0];\n    } catch (err) {\n      this.errorMessageUtil.showError(err);\n      this.router.navigateToRoute(ROUTES.DASHBOARD.name, {}, { trigger: true, replace: true });\n    }\n    await super.activate(params, routeData);\n  }\n\n  async attached() {\n    await super.attached();\n  }\n\n  @computedFrom()\n  get viewOrderRoute() {\n    return ROUTES.VIEW_ORDER.name;\n  }\n\n  @computedFrom()\n  get viewItemRoute(){\n      return ROUTES.VIEW_ITEM.name;\n  }\n\n  async clickHandleReturn() {\n    this.errorMessageUtil.showErrorMessage(\"Not Yet Implemented.\");    \n  }\n}","module.exports = \"<template> <require from=shared-ui/converters/simple-date-format></require> <require from=shared-ui/converters/boolean-format></require> <div class=\\\"ui segment\\\"> <form class=\\\"ui form\\\" ref=$viewReturnForm> <div class=\\\"ui stackable grid\\\"> <div class=\\\"ten wide column\\\"> <button class=\\\"positive ui left button\\\" click.delegate=clickHandleReturn() show.bind=return.isPending>Handle Return</button> </div> <div class=\\\"right aligned six wide column\\\"> <div class=\\\"ui ${return.statusColor} label\\\"> <h1 class=\\\"ui inverted header\\\">${return.statusName}</h1> </div> </div> </div> <h4 class=\\\"ui dividing header\\\">Primary Information</h4> <div class=\\\"two fields\\\"> <div class=field> <b>Order: </b><a class=content route-href=\\\"route.bind: viewOrderRoute; params.bind: {id: return.order.id}\\\">${return.orderNumber}</a> </div> <div class=field> <b>Recipient:</b> ${return.recipientName} </div> </div> <div class=\\\"two fields\\\"> <div class=field> <b>Shipped Date:</b> ${return.shipDate | simpleDateFormat} </div> <div class=field> <b>Return Date:</b> ${return.returnDate | simpleDateFormat} </div> </div> <div class=\\\"two fields\\\"> <div class=field> <b>Shipping Method:</b> ${return.shippingMethod.name} </div> <div class=field> <b>Return Shipping Method:</b> ${return.returnShippingMethod.name} </div> </div> <div class=\\\"two fields\\\"> <div class=field> <b>Return Reason:</b> ${return.returnReason.name} </div> <div class=field> <b>Notes:</b> ${return.notes} </div> </div> <h4 class=\\\"ui dividing header\\\">Items</h4> <div class=\\\"ui link cards\\\"> <a class=\\\"ui raised fluid card\\\" repeat.for=\\\"itemLine of return.items\\\" route-href=\\\"route.bind: viewItemRoute; params.bind: {id: itemLine.item.id}\\\"> <div class=content> <div class=description> <form class=\\\"ui form\\\"> <div class=\\\"six fields\\\"> <div class=field> <b>Item:</b> ${itemLine.item.name} </div> <div class=field> <b>Shipped:</b> ${itemLine.shippedQuantity} </div> <div class=field> <b>Returned:</b> ${itemLine.returnedQuantity} </div> <div class=field> <b>To Inventory:</b> ${itemLine.toInventoryQuantity} </div> <div class=field> <b>Reship:</b> ${itemLine.reshipQuantity} </div> <div class=field> <b>Will Call:</b> ${itemLine.willCallQuantity} </div> </div> </form> </div> </div> </a> </div> </form> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, computedFrom } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport { VIEW_TYPES } from \"returns/views/list-returns-view\";\n\n@autoinject\nexport class ReturnsDashboard extends StandardView {\n    alertNotificationsLoading: boolean;\n    kpisLoading: boolean;\n    constructor() {\n        super(ReturnsDashboard.name);\n        this.alertNotificationsLoading = true;\n        this.kpisLoading = true;\n        this.screenViewUtility.viewName = \"\";\n    }\n\n    async attached() {\n        await super.attached();        \n    }\n\n    async activate(params, routeData) {\n        await super.activate(params, routeData);\n        this.screenViewUtility.viewName = \"\";               \n    }\n\n    @computedFrom()\n    get pendingReturnsViewType(){\n        return VIEW_TYPES.PENDING;\n    }\n\n    @computedFrom()\n    get allReturnsViewType(){\n        return VIEW_TYPES.ALL;\n    }\n\n    @computedFrom()\n    get listReturnsRoute(){\n        return ROUTES.LIST_RETURNS.name;\n    }\n}","module.exports = \"<template> <div class=\\\"ui link stackable dashboard cards\\\"> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: listReturnsRoute; params.bind: {listType: pendingReturnsViewType}\\\"> <div class=header>Pending Returns</div> <div class=description>View Returns that need to be reshipped, returned to inventory, or picked up.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: listReturnsRoute; params.bind: {listType: allReturnsViewType}\\\"> <div class=header>All Returns</div> <div class=description>View all Pending and Processed Returns.</div> </a> </div> </div> <style>.dashboard.cards .content{text-align:center;min-height:80px}</style> </template>\";","export class BooleanFormatValueConverter{\n    toView(value: boolean): string {\n        return value ? \"Yes\" : \"No\";\n      }\n}","export class CurrencyFormatValueConverter {\n  toView(value: number): string {\n    if (!value) {\n      return \"$0.00\";\n    }\n    if (typeof value === 'string') {\n      value = parseFloat(value);\n    }\n    return \"$\" + value.toFixed(2);\n  }\n}","export class LowercaseFormatValueConverter{\n    toView(value: string): string {\n        return value ? value.toLowerCase() : \"\";\n      }\n}","import moment from 'moment';\n\nexport class SimpleDateFormatValueConverter {\n  toView(value: Date, format?: string): string{\n    if (!format) format ='M/D/YYYY';\n    if(!value){\n      return '';\n    }    \n    return moment(value).format(format);\n  }\n\n  fromView(value: string, format?: string): Date {\n    if (!format) format ='M/D/YYYY';\n    if(!value){\n      return null;\n    }\n    return moment(value, format).toDate();\n  }\n  \n}\n","import moment from 'moment';\n\nexport class SimpleDateTimeFormatValueConverter {\n  toView(value: Date, format?: string): string{\n    if (!format) format ='M/D/YYYY, h:mm a';\n    if(!value){\n      return '';\n    }    \n    return moment(value).format(format);\n  }\n\n  fromView(value: string, format): Date {\n    if (!format) format ='M/D/YYYY, h:mm a';\n    if(!value){\n      return null;\n    }\n    return moment(value, format).toDate();\n  }\n  \n}\n","import { autoinject } from \"aurelia-framework\";\nimport { ErrorMessageUtility } from \"./error-message-utility\";\nimport { StandardView } from \"shared-ui/views/standard-view\";\nimport { computedFrom } from \"aurelia-binding\";\n\n@autoinject\nexport class ErrorMessageView extends StandardView{\n\n    $errorModal: HTMLElement;\n\n    errorHeaderMessage: string = \"\";\n\n    errorMessage: string = \"\";\n\n    constructor(public errorMessageUtility: ErrorMessageUtility){\n        super(ErrorMessageView.name);\n    }\n\n    async activate(params, routeData) {    \n        await super.activate(params, routeData);        \n    }\n\n    async attached() {\n        await super.attached();\n        this.errorMessageUtility.errorMessageView = this;\n    }\n\n    showError(errorMessage, errorheader){\n        this.errorMessage = errorMessage;\n        this.errorHeaderMessage = errorheader;\n        $(this.$errorModal).modal('show');     \n    }\n\n}","module.exports = \"<template> <div class=\\\"ui modal\\\" ref=$errorModal id=error-message-modal> <i class=\\\"close icon\\\"></i> <div class=\\\"ui icon header\\\"> <i class=\\\"exclamation triangle red icon\\\"></i> ${errorHeaderMessage} </div> <div class=content> <p style=white-space:pre-line>${errorMessage}</p> </div> </div> <style>#error-message-modal .content{text-align:center;font-weight:700;font-size:1.5em}</style> </template>\";","import { SCREEN_SIZE, ScreenSizeUtility } from \"./screen-size-utility\";\nimport { autoinject } from \"aurelia-framework\";\n\n@autoinject\nexport class ScreenSizeView {\n    \n    constructor(private screenSizeUtil: ScreenSizeUtility){\n    }\n\n    async attached() {\n        this.resize();\n        $(window).resize(() => {\n            this.resize();\n        });\n    }\n\n    resize() {\n        if (window.innerWidth >= 2000) {\n            this.screenSizeUtil.currentSize = SCREEN_SIZE.LARGE;\n            return;\n        }\n        if (window.innerWidth >= 1000) {\n            this.screenSizeUtil.currentSize = SCREEN_SIZE.DESKTOP;\n            return;\n        }\n        if (window.innerWidth >= 768) {\n            this.screenSizeUtil.currentSize =  SCREEN_SIZE.IPAD;\n            return;\n        }\n        this.screenSizeUtil.currentSize = SCREEN_SIZE.MOBILE;\n    }\n}","module.exports = \"<template></template>\";","import { autoinject, computedFrom } from \"aurelia-framework\";\nimport { ScreenViewUtility } from \"shared-ui/utility/screen-view-utility\";\n\n@autoinject\nexport class DisableView{\n    constructor(private screenViewUtil: ScreenViewUtility){\n\n    }\n\n    @computedFrom('screenViewUtil.disableView')\n    get isDisabled(): boolean{\n        return this.screenViewUtil.disableView;\n    }\n}","module.exports = \"<template> <div class=\\\"ui ${isDisabled ? 'active' : ''} inverted dimmer\\\"> <div class=\\\"ui centered inline massive primary loader\\\"></div> </div> </template>\";","import { Logger } from \"aurelia-logging\";\nimport { LogManager, Container, computedFrom, autoinject } from \"aurelia-framework\";\nimport { Router } from \"aurelia-router\";\nimport { ScreenViewUtility } from \"shared-ui/utility/screen-view-utility\";\nimport { ErrorMessageUtility } from \"shared-ui/error-message/error-message-utility\";\nimport { UserSession } from \"user/models/user-session\";\n\n@autoinject\nexport class StandardView {\n  protected router: Router;\n  protected screenViewUtility?: ScreenViewUtility\n  protected errorMessageUtil?: ErrorMessageUtility\n  protected userSession?: UserSession\n  logger: Logger;\n\n  constructor(className: string) {\n    this.logger = LogManager.getLogger(className);\n    this.router = Container.instance.get(Router);\n    this.screenViewUtility = Container.instance.get(ScreenViewUtility);\n    this.errorMessageUtil = Container.instance.get(ErrorMessageUtility);\n    this.userSession = Container.instance.get(UserSession);\n    this.logger.info('constructed');\n  }\n\n  async attached() {\n    this.logger.info('attached');\n  }\n\n  async activate(params, routeData) {\n    this.scrollToTop();\n    this.logger.info('activated');\n  }\n\n  async routeToView(routeName: string, properties?: any) {\n    properties = properties || {};\n    this.router.navigateToRoute(\n      routeName,\n      properties,\n      { replace: false, trigger: true }\n    );\n  }\n\n\n  disableView() {\n    this.screenViewUtility.disableView = true;\n  }\n\n  enableView() {\n    this.screenViewUtility.disableView = false;\n  }\n\n  scrollToTop() {\n    window.scrollTo(0,0);\n  }\n\n  scrollToBottom() {\n    window.scrollTo(0,document.body.scrollHeight);\n  }\n\n}","module.exports = \"<template></template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, observable } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport { ShippingAddress } from \"shipping-addresses/models/shipping-address-record\";\nimport { ShippingAddressService } from \"shipping-addresses/services/shipping_address_service\";\nimport { SearchResult } from \"shared-models/search-result\";\nimport parse from \"papaparse\";\n\n@autoinject\nexport class ShippingAddressListView extends StandardView {\n\n    filteredAddresses: ShippingAddress[];\n\n    currentSearchResult: SearchResult;\n\n    currentPage: number = 1;\n\n    addressListDisabled: boolean = false;\n\n    $downloadCSVLink: HTMLElement;\n\n    $exportLink: HTMLElement;\n\n    @observable\n    searchInput: string = \"\";\n\n    constructor(private shippingAddressService: ShippingAddressService) {\n        super(ShippingAddressListView.name);\n    }\n\n    async activate(params, routeData) {\n        try {\n            await this._getAddresses();           \n        } catch (err) {\n            this.errorMessageUtil.showError(err);\n            this.routeToView(ROUTES.DASHBOARD.name);\n        }\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        await super.attached();\n    }\n\n    async _getAddresses() {\n        this.currentSearchResult = await this.shippingAddressService.searchRecords({page: this.currentPage, filter: this.searchInput});\n        this.filteredAddresses = this.currentSearchResult.records as ShippingAddress[];\n    }\n\n    async searchInputChanged(newValue: string, oldValue: string) {\n        this.disableAddressList();\n        this.currentPage = 1;\n        await this._getAddresses();\n        this.enableAddressList();\n    }\n\n    async clickPrevious() {\n        this.disableAddressList();\n        if (this.currentPage > 1) {\n            this.currentPage--;\n        }\n        await this._getAddresses();\n        this.enableAddressList();\n    }\n\n    async clickNext() {\n        this.disableAddressList();\n        if (this.currentPage < this.currentSearchResult.pageCount) {\n            this.currentPage++;\n        }\n        await this._getAddresses();\n        this.enableAddressList();\n    }\n\n    disableAddressList() {\n        this.addressListDisabled = true;\n    }\n\n    enableAddressList() {\n        this.addressListDisabled = false;\n    }\n\n    async exportAddresses() {\n        this.disableView();\n        let addresses = [];\n        if (this.searchInput) {\n            addresses = this.filteredAddresses\n        } else {\n            addresses = await this.shippingAddressService.getAllRecords();\n        }\n        \n        let addressCSV = this.convertAddressesToCsv(addresses);\n        $(this.$exportLink).attr('href', `data:text/csv;charset=utf-8, ${escape(addressCSV)}`);       \n        this.$exportLink.click();\n        this.enableView();\n    }\n\n    convertAddressesToCsv(addresses) {\n        return parse.unparse(addresses.map((address) => {\n            return {\n                \"Label Name\": address.name,\n                \"Is Residential\": address.isResidential,\n                \"Attention\": address.attention,\n                \"Addressee\": address.addressee,\n                \"Address1\": address.street,\n                \"Address2\": address.street2,\n                \"City\": address.city,\n                \"State\": address.stateName,\n                \"Country\": address.countryName,\n                \"Zipcode\": address.zipcode,\n                \"Phone\": address.phone,\n                \"Emails\": address.emails\n            };\n        }));\n    }\n\n    newAddress(){\n        this.routeToView(ROUTES.VIEW_SHIPPING_ADDRESS.name);\n    }\n\n    editAddress(shippingAddress){\n        this.routeToView(ROUTES.VIEW_SHIPPING_ADDRESS.name, {id: shippingAddress.id, e: \"T\"});\n    }\n\n    newOrder(shippingAddress){\n        this.routeToView(ROUTES.CREATE_ORDER.name, { addressid: shippingAddress.id });\n    }\n}","module.exports = \"<template> <require from=shared-ui/converters/simple-date-format></require> <require from=shared-ui/converters/boolean-format></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui centered stackable grid\\\"> <div class=\\\"sixteen wide column\\\"> <h1 class=\\\"ui center aligned header\\\">Address Book</h1> </div> <div class=\\\"five wide column\\\"> <button class=\\\"primary ui button\\\" click.delegate=newAddress()>New</button> <button class=\\\"positive ui button\\\" click.delegate=exportAddresses()>Export</button> <a href=\\\"data:text/csv;charset=utf-8,\\\" hidden download=addresslist.csv ref=$exportLink>Download</a> </div> <div class=\\\"six wide column\\\"> <div class=\\\"ui fluid input\\\"> <input type=text placeholder=Search... value.bind=searchInput> </div> </div> <div class=\\\"five wide column\\\"> <div class=\\\"ui grid\\\"> <div class=\\\"right floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === 1 ? 'disabled' : ''} button\\\" click.delegate=clickPrevious()> <i class=\\\"left arrow icon\\\"></i> </div> </div> <div class=\\\"six wide column\\\"> <span class=\\\"ui blue medium text\\\">Page ${currentPage} of ${currentSearchResult.pageCount || 1}</span> </div> <div class=\\\"left floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === (currentSearchResult.pageCount || 1) ? 'disabled' : ''} button\\\" click.delegate=clickNext()> <i class=\\\"right arrow icon\\\"></i> </div> </div> </div> </div> <div class=\\\"sixteen wide column\\\"> <div class=\\\"ui ${addressListDisabled ? 'active' : ''} inverted dimmer\\\"> <div class=\\\"ui text centered loader\\\">Loading</div> </div> <div class=\\\"ui four doubling stackable cards\\\"> <div class=\\\"ui raised fluid card\\\" repeat.for=\\\"shippingAddress of filteredAddresses\\\"> <div class=content> <div class=header> <div class=\\\"ui grid\\\"> <div class=\\\"sixteen wide column\\\"> <button class=\\\"positive ui compact tiny button\\\" click.delegate=editAddress(shippingAddress)>Edit</button> <button class=\\\"primary ui compact tiny button\\\" click.delegate=newOrder(shippingAddress)>New Order</button> </div> <div class=\\\"sixteen wide column\\\"> ${shippingAddress.name} </div> </div> </div> <div class=description> <p style=white-space:pre-line>${shippingAddress.addressForm}</p> </div> </div> </div> </div> </div> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { bindable, autoinject, computedFrom } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport { ShippingAddress } from \"shipping-addresses/models/shipping-address-record\";\nimport { ShippingAddressService } from \"shipping-addresses/services/shipping_address_service\";\nimport { CountryService } from \"orders/services/country_service\";\nimport { CountryReference, StateReference } from \"orders/models/country-record\";\nimport { observable } from \"aurelia-binding\";\n\n@autoinject\nexport class ShippingAddressView extends StandardView{\n    @bindable\n    shippingAddress: ShippingAddress = null;\n\n    $viewAddressForm: HTMLElement;\n\n    $editAddressForm: HTMLElement;\n\n    $countryDropdown: HTMLElement;\n\n    $stateDropdown: HTMLElement;\n\n    addressId: number;\n\n    editParam: string = \"\";\n    \n    @observable\n    isEditing: boolean = false;\n\n    @observable\n    isCreating: boolean = false;\n\n    @observable\n    isViewing: boolean = false;\n\n    countries: CountryReference[] = [];\n\n    constructor(private shippingAddressService: ShippingAddressService, private countryService: CountryService) {\n        super(ShippingAddressView.name);\n    }\n\n    async activate(params, routeData) {\n        try{\n            this.addressId = params[\"id\"] ? parseInt(params[\"id\"], 10): null;\n            this.editParam = params[\"e\"];\n\n            this.countries = await this.countryService.getAllCountryRecords();\n            if(this.addressId){\n              this.shippingAddress = await this.shippingAddressService.getRecord(this.addressId);\n            } else{\n              this.shippingAddress = new ShippingAddress({});\n            }\n            this.setupViewFields();           \n          } catch(err){\n            this.errorMessageUtil.showError(err);\n            this.routeToView(ROUTES.DASHBOARD.name);\n          }\n        await super.activate(params, routeData);\n    }\n\n    async attached() {        \n        this.setupViewFields();\n        await this._setupFields();\n        await super.attached();\n    }\n\n    setupViewFields(){\n      if(!this.addressId){\n        this._setAsCreate();\n      } else{\n        if(this.editParam === \"T\"){\n          this._setAsEdit();\n        } else{\n          this._setAsView();\n        }             \n      }\n    }\n\n    async _setupFields() {     \n      await Promise.all([        \n        $('.ui.checkbox').checkbox(),  \n  \n        $(this.$countryDropdown).dropdown(\n          {\n            onChange: async (value, text, $selectedItem) => {\n              if(value){\n                this.shippingAddress.country = this.countries.find((country)=> country.id == value);\n              } else{\n                this.shippingAddress.country = null;\n              } \n              await $(this.$stateDropdown).dropdown('clear');         \n            }\n          }),\n\n        $(this.$stateDropdown).dropdown(\n          {\n            onChange: async (value, text, $selectedItem) => {\n              if(value){\n                this.shippingAddress.state = this.currentCountry ? this.currentCountry.states.find((state) => state.id == value) : null;\n              } else{\n                this.shippingAddress.state = null;\n              }     \n            }\n          })\n      ]);\n      if (this.shippingAddress) {\n        if(this.shippingAddress.country){\n          await $(this.$countryDropdown).dropdown('set selected', this.shippingAddress.country.id);\n        } else if(this.isCreating){\n          await $(this.$countryDropdown).dropdown('set selected', this.unitedStates.id);\n        }\n        if(this.shippingAddress.state){\n          await $(this.$stateDropdown).dropdown('set selected', this.shippingAddress.state.id);\n        }        \n      }\n    }\n\n    _setAsView(){\n      this.isViewing = true;\n      this.isEditing = false;      \n      this.isCreating = false;\n      $(this.$editAddressForm).hide();\n      $(this.$viewAddressForm).show();\n    }\n\n    _setAsEdit(){\n      this.isViewing = false;\n      this.isEditing = true;      \n      this.isCreating = false;\n      $(this.$viewAddressForm).hide();\n      $(this.$editAddressForm).show();\n    }\n\n    _setAsCreate(){\n      this.isViewing = false;\n      this.isEditing = false;      \n      this.isCreating = true;\n      $(this.$viewAddressForm).hide();\n      $(this.$editAddressForm).show();\n    }\n\n\n    @computedFrom('currentCountry')\n    get states(): StateReference[] {\n      if (this.currentCountry) {\n        return this.currentCountry.states;\n      }\n      return [];\n    }\n\n    @computedFrom('countries.length')\n    get unitedStates(): CountryReference {\n      if (this.countries && this.countries.length > 0) {\n        return this.countries.find((country) => country.name === \"United States\");\n      }\n      return null;\n    }\n    \n    @computedFrom('shippingAddress.country', 'countries.length')\n    get currentCountry(): CountryReference {\n      if(!this.shippingAddress || !this.shippingAddress.country){\n        return null;\n      }\n      return this.countries.find((country)=> country.id === this.shippingAddress.country.id)\n    }\n\n    async editAddress() {\n      this.disableView();\n      this._setAsEdit();\n      this.enableView();\n    }\n\n    async updateAddress() {\n      this.disableView();\n      try{\n        await this.shippingAddressService.updateRecord(this.shippingAddress.id, this.shippingAddress);      \n        this.routeToView(ROUTES.VIEW_SHIPPING_ADDRESS.name, { id: this.shippingAddress.id }); \n      } catch(err){\n        this.errorMessageUtil.showError(err);\n      }      \n      this.enableView();\n    }\n\n    async cancelUpdate() {\n      this.disableView();\n      this.routeToView(ROUTES.VIEW_SHIPPING_ADDRESS.name, { id: this.shippingAddress.id });\n      this.enableView();\n    }\n\n    async cancelCreate() {\n      this.disableView();\n      this.routeToView(ROUTES.LIST_SHIPPING_ADDRESSES.name);\n      this.enableView();\n    }\n\n    async createAddress() {\n      this.disableView();      \n      try{\n        let addressId = await this.shippingAddressService.createRecord(this.shippingAddress);\n        if(!addressId){\n          throw \"Did not create Address\";\n        }       \n        this.routeToView(ROUTES.VIEW_SHIPPING_ADDRESS.name, { id: addressId });\n      } catch(err){\n        this.errorMessageUtil.showError(err);\n      }    \n      this.enableView();\n    }\n\n    createOrder() {\n      this.disableView();\n      this.routeToView(ROUTES.CREATE_ORDER.name, { addressid: this.shippingAddress.id });\n      this.enableView();\n    }\n    \n}","module.exports = \"<template> <require from=shared-ui/converters/simple-date-format></require> <require from=shared-ui/converters/boolean-format></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui centered stackable grid\\\"> <div class=\\\"five wide column\\\"> <button if.bind=isViewing class=\\\"primary ui button\\\" click.delegate=editAddress()>Edit</button> <button if.bind=isEditing class=\\\"primary ui button\\\" click.delegate=updateAddress()>Save</button> <button if.bind=isCreating class=\\\"primary ui button\\\" click.delegate=createAddress()>Save</button> <button if.bind=isViewing class=\\\"positive ui button\\\" click.delegate=createOrder()>Create Order</button> <button if.bind=isEditing class=\\\"ui button\\\" click.delegate=cancelUpdate()>Cancel</button> <button if.bind=isCreating class=\\\"ui button\\\" click.delegate=cancelCreate()>Cancel</button> </div> <div class=\\\"six wide column\\\"> <h1 class=\\\"ui center aligned header\\\">${shippingAddress.name}</h1> </div> <div class=\\\"five wide column\\\"> </div> <div class=\\\"sixteen wide column\\\"> <form class=\\\"ui form\\\" ref=$viewAddressForm style=display:none> <h4 class=\\\"ui dividing header\\\">Primary Information</h4> <div class=\\\"two fields\\\"> <div class=field> <label>Label (Customer Name)</label> ${shippingAddress.name} </div> <div class=field> <label>Is Residential</label> ${shippingAddress.isResidential} </div> </div> <div class=\\\"two fields\\\"> <div class=field if.bind=shippingAddress.createdByUser> <label>Created By User</label> ${shippingAddress.createdByUser.name} </div> <div class=field if.bind=shippingAddress.lastUpdatedByUser> <label>Last Updated By User</label> ${shippingAddress.lastUpdatedByUser.name} </div> </div> <h4 class=\\\"ui dividing header\\\">Phone/Email</h4> <div class=\\\"two fields\\\"> <div class=field> <label>Email(s)</label> ${shippingAddress.emails} </div> <div class=field> <label>Phone Number</label> ${shippingAddress.phone} </div> </div> <h4 class=\\\"ui dividing header\\\">Address</h4> <p style=white-space:pre-line>${shippingAddress.addressForm}</p> </form> <form class=\\\"ui form\\\" ref=$editAddressForm style=display:none> <h4 class=\\\"ui dividing header\\\">Primary Information</h4> <div class=\\\"two fields\\\"> <div class=field> <label>Label (Customer Name)</label> <input type=text name=label value.bind=shippingAddress.name placeholder=\\\"Customer Name\\\"> </div> <div class=field> <div class=\\\"ui toggle checkbox\\\"> <input type=checkbox name=isresidential tabindex=0 class=hidden checked.bind=shippingAddress.isResidential> <label>Is Residential</label> </div> </div> </div> <h4 class=\\\"ui dividing header\\\">Phone/Email</h4> <div class=\\\"two fields\\\"> <div class=field> <label>Email(s)</label> <input type=text name=email placeholder=Email(s) value.bind=shippingAddress.emails> </div> <div class=field> <label>Phone Number</label> <input type=text name=phone placeholder=\\\"Phone Number\\\" value.bind=shippingAddress.phone> </div> </div> <h4 class=\\\"ui dividing header\\\">Address</h4> <div class=\\\"two fields\\\"> <div class=field> <label>Attention</label> <input type=text name=attention placeholder=attention value.bind=shippingAddress.attention> </div> <div class=field> <label>Addressee</label> <input type=text name=addressee placeholder=\\\"Phone Number\\\" value.bind=shippingAddress.addressee> </div> </div> <div class=\\\"two fields\\\"> <div class=field> <label>Street</label> <input type=text name=street placeholder=Street value.bind=shippingAddress.street> </div> <div class=field> <label>Street2</label> <input type=text name=street2 placeholder=\\\"Street 2\\\" value.bind=shippingAddress.street2> </div> </div> <div class=\\\"two fields\\\"> <div class=field> <label>City</label> <input type=text name=city placeholder=City value.bind=shippingAddress.city> </div> <div class=field> <label>Zipcode</label> <input type=text name=zipcode placeholder=Zipcode value.bind=shippingAddress.zipcode> </div> </div> <div class=\\\"two fields\\\"> <div class=field> <label>Country</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$countryDropdown> <input name=countries type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">Country</div> <div class=menu> <div repeat.for=\\\"country of countries\\\" class=item data-value.bind=country.id> ${country.name}</div> </div> </div> </div> <div class=field> <label>State</label> <div class=\\\"ui search clearable selection dropdown\\\" ref=$stateDropdown> <input name=states type=hidden> <i class=\\\"dropdown icon\\\"></i> <div class=\\\"default text\\\">State</div> <div class=menu> <div repeat.for=\\\"state of states\\\" class=item data-value.bind=state.id> ${state.name}</div> </div> </div> </div> </div> </form> </div> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject, computedFrom } from \"aurelia-framework\";\nimport { ROUTES } from \"routes\";\nimport { VIEW_TYPES } from \"./shipping-list-view\";\n\n@autoinject\nexport class ShippingDashboard extends StandardView {\n    alertNotificationsLoading: boolean;\n    kpisLoading: boolean;\n    constructor() {\n        super(ShippingDashboard.name); \n        this.alertNotificationsLoading = true;\n        this.kpisLoading = true;\n        this.screenViewUtility.viewName = \"\";\n    }\n\n    async attached() {\n        await super.attached();        \n    }\n\n    async activate(params, routeData) {\n        await super.activate(params, routeData);\n        this.screenViewUtility.viewName = \"\";               \n    }\n\n    @computedFrom()\n    get listShipmentsRoute(){\n        return ROUTES.SHIPPING_LIST.name;\n    }\n\n    @computedFrom()\n    get inTransitType(){\n        return VIEW_TYPES.IN_TRANSIT;\n    }\n\n    @computedFrom()\n    get exceptionsType(){\n        return VIEW_TYPES.EXCEPTIONS;\n    }\n\n    @computedFrom()\n    get returnedType(){\n        return VIEW_TYPES.RETURNS;\n    }\n\n    @computedFrom()\n    get deliveredType(){\n        return VIEW_TYPES.DELIVERED;\n    }\n}","module.exports = \"<template> <div class=\\\"ui link stackable dashboard cards\\\"> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: listShipmentsRoute; params.bind: {listType: inTransitType}\\\"> <div class=header>In Transit</div> <div class=description>View shipments that are in Transit.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: listShipmentsRoute; params.bind: {listType: exceptionsType}\\\"> <div class=header>Exceptions</div> <div class=description>View shipments that have an exception.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: listShipmentsRoute; params.bind: {listType: returnedType}\\\"> <div class=header>Returned</div> <div class=description>View shipments that are being returned.</div> </a> </div> <div class=\\\"ui raised card\\\"> <a class=content route-href=\\\"route.bind: listShipmentsRoute; params.bind: {listType: deliveredType}\\\"> <div class=header>Delivered</div> <div class=description>View shipments that were delivered.</div> </a> </div> </div> <style>.dashboard.cards .content{text-align:center;min-height:80px}</style> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { bindable, autoinject, observable } from \"aurelia-framework\";\nimport { OrderReference } from \"orders/models/order\";\nimport { OrderService } from \"orders/services/order_service\";\nimport { ROUTES } from \"routes\";\nimport { SearchResult } from \"shared-models/search-result\";\nimport { SimpleDateFormatValueConverter } from \"shared-ui/converters/simple-date-format\";\nimport { BooleanFormatValueConverter } from \"shared-ui/converters/boolean-format\";\nimport parse from \"papaparse\";\n\nexport enum VIEW_TYPES {\n    ALL = \"all\",\n    IN_TRANSIT = \"in-transit\",\n    EXCEPTIONS = \"exceptions\",\n    RETURNS = \"returns\",\n    DELIVERED = \"delivered\"\n}\n\n@autoinject\nexport class ShippingListViews extends StandardView {\n    @bindable\n    orders: OrderReference[];\n\n    currentSearchResult: SearchResult;\n\n    currentPage: number = 1;\n\n    orderListDisabled: boolean = false;\n\n    $downloadCSVLink: HTMLElement;\n\n    $exportLink: HTMLElement;\n\n    listType: string;\n\n    @observable\n    searchInput: string = \"\";\n\n\n    constructor(\n        private orderService: OrderService, \n        private simpleDateFormat: SimpleDateFormatValueConverter, \n        private booleanFormat: BooleanFormatValueConverter) {\n        super(ShippingListViews.name);\n        this.orders = [];\n    }\n\n    async activate(params, routeData) {\n        try {            \n            this.listType = params[\"listType\"] || VIEW_TYPES.ALL;\n            await this._getOrders();\n            this.logger.info(`this.orders :: ${JSON.stringify(this.orders)}`);            \n        } catch (err) {\n            this.errorMessageUtil.showError(err);\n            this.routeToView(ROUTES.DASHBOARD.name);\n        }\n        await super.activate(params, routeData);\n    }\n\n    async attached() {\n        await super.attached();\n    }\n\n    async _getOrders() {\n        let fieldFilters = [];\n        if(this.listType === VIEW_TYPES.IN_TRANSIT){\n            fieldFilters = this._getInTransitFilters();\n        } else if(this.listType === VIEW_TYPES.EXCEPTIONS){\n            fieldFilters = this._getExceptionsFilters();\n        } else if(this.listType === VIEW_TYPES.RETURNS){\n            fieldFilters = this._getReturnsFilters();\n        } else if(this.listType === VIEW_TYPES.DELIVERED){\n            fieldFilters = this._getDeliveredFilters();\n        }\n        this.logger.info(`fieldFilters :: ${JSON.stringify(fieldFilters)}`);\n        this.currentSearchResult = await this.orderService.searchRecords({page: this.currentPage, filter: this.searchInput, fieldFilters: fieldFilters});\n        this.orders = this.currentSearchResult.records as OrderReference[];\n    }\n\n    _getInTransitFilters(){\n        return [['winery_order_status', '=', ['pending_approval','pending_fulfill']]];\n    }\n\n    _getExceptionsFilters(){      \n        let allFilters = [];  \n        allFilters.push(['weather_hold', '=', true] as string[]);      \n        return allFilters;\n    }\n\n    _getReturnsFilters(){\n        let allFilters = [];  \n        allFilters.push(['order_is_backordered', '=', true] as string[]);      \n        return allFilters;\n    }\n\n    _getDeliveredFilters(){\n        let allFilters = [];  \n        allFilters.push(['is_cold_chain_compatible', '=', true] as string[]);      \n        allFilters.push(['is_cold_chain', '=', false] as string[]);      \n        return allFilters;\n    }\n\n    async searchInputChanged(newValue: string, oldValue: string) {\n        this.disableAddressList();\n        this.currentPage = 1;\n        await this._getOrders();\n        this.enableAddressList();\n    }\n\n    async clickPrevious() {\n        this.disableAddressList();\n        if (this.currentPage > 1) {\n            this.currentPage--;\n        }\n        await this._getOrders();\n        this.enableAddressList();\n    }\n\n    async clickNext() {\n        this.disableAddressList();\n        if (this.currentPage < this.currentSearchResult.pageCount) {\n            this.currentPage++;\n        }\n        await this._getOrders();\n        this.enableAddressList();\n    }\n\n\n    disableAddressList() {\n        this.orderListDisabled = true;\n    }\n\n    enableAddressList() {\n        this.orderListDisabled = false;\n    }\n\n    async exportOrders() {\n        this.disableView();\n        let ordersToExport = [];\n        if (this.searchInput) {\n            ordersToExport = this.orders\n        } else {\n            ordersToExport = await this.orderService.getAllRecords();\n        }\n        let ordersCSV = this.convertOrdersToCsv(ordersToExport);\n        $(this.$exportLink).attr('href', `data:text/csv;charset=utf-8, ${escape(ordersCSV)}`);       \n        this.$exportLink.click();        \n        this.enableView();\n    }\n\n    convertOrdersToCsv(ordersToExport: OrderReference[]) {\n        return parse.unparse(ordersToExport.map((orderToExport) => {\n            return {\n                \"VinFillment Order Number\": orderToExport.vinfillmentOrderNumber,\n                \"Order Number\": orderToExport.wineryOrderNumber,\n                \"Status\": orderToExport.status,\n                \"Future Ship Date\": this.simpleDateFormat.toView(orderToExport.futureShipDate),\n                \"Ship Date\": orderToExport.shipDate,\n                \"Carrier\": orderToExport.carrierName,\n                \"Shipping Method\": orderToExport.shippingMethodName,\n                \"Shipping Instructions\": orderToExport.shippingInstructions,\n                \"Gift Message\": orderToExport.giftMessage,\n                \"Include Ice\": this.booleanFormat.toView(orderToExport.includeIce),\n                \"email\": orderToExport.email,\n                \"declaredValue\": orderToExport.declaredValue,\n                \"Addressee\": orderToExport.shippingAddress.addressee,                \n                \"Attention\": orderToExport.shippingAddress.attention,                \n                \"Address1\": orderToExport.shippingAddress.address1,                \n                \"Address2\": orderToExport.shippingAddress.address2,                \n                \"City\": orderToExport.shippingAddress.city,                \n                \"State\": orderToExport.shippingAddress.stateName,                \n                \"Zip\": orderToExport.shippingAddress.zip,                \n                \"Country\": orderToExport.shippingAddress.countryName,                \n                \"Phone\": orderToExport.shippingAddress.phone          \n            };\n        }));\n    }\n\n    newOrder(){\n        this.routeToView(ROUTES.CREATE_ORDER.name);\n    }\n\n    viewOrder(currentOrder){\n        this.routeToView(ROUTES.VIEW_ORDER.name, {id: currentOrder.id});\n    }\n\n    changeOrder(currentOrder){\n        this.routeToView(ROUTES.CREATE_CHANGE_ORDER.name, {orderid: currentOrder.id});\n    }\n\n\n}","module.exports = \"<template> <require from=shared-ui/converters/simple-date-format></require> <require from=shared-ui/converters/boolean-format></require> <div class=\\\"ui segment\\\"> <div class=\\\"ui centered stackable grid\\\"> <div class=\\\"sixteen wide column\\\"> <h1 class=\\\"ui center aligned header\\\">Shipments</h1> </div> <div class=\\\"five wide column\\\"> <button class=\\\"positive ui button\\\" click.delegate=exportOrders()>Export</button> <a href=\\\"data:text/csv;charset=utf-8,\\\" hidden download=orderlist.csv ref=$exportLink>Download</a> </div> <div class=\\\"six wide column\\\"> <div class=\\\"ui fluid input\\\"> <input type=text placeholder=Search... value.bind=searchInput> </div> </div> <div class=\\\"five wide column\\\"> <div class=\\\"ui grid\\\"> <div class=\\\"right floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === 1 ? 'disabled' : ''} button\\\" click.delegate=clickPrevious()> <i class=\\\"left arrow icon\\\"></i> </div> </div> <div class=\\\"six wide column\\\"> <span class=\\\"ui blue medium text\\\">Page ${currentPage} of ${currentSearchResult.pageCount || 1}</span> </div> <div class=\\\"left floated five wide column\\\"> <div class=\\\"ui icon ${currentPage === currentSearchResult.pageCount ? 'disabled' : ''} button\\\" click.delegate=clickNext()> <i class=\\\"right arrow icon\\\"></i> </div> </div> </div> </div> <div class=\\\"sixteen wide column\\\"> <div class=\\\"ui segment\\\"> <div class=\\\"ui ${orderListDisabled ? 'active' : ''} inverted dimmer\\\"> <div class=\\\"ui text centered loader\\\">Loading</div> </div> <div class=\\\"ui three doubling stackable cards\\\"> <div class=\\\"ui raised fluid card\\\" repeat.for=\\\"order of orders\\\"> <div class=content> <div class=header> <div class=\\\"ui stackable grid\\\"> <div class=\\\"sixteen wide column\\\"> <button class=\\\"positive ui compact tiny button\\\" click.delegate=viewOrder(order)>View</button> <span class=\\\"ui small header\\\">${order.wineryOrderNumber}</span> </div> <div class=\\\"sixteen wide column\\\" style=padding:3px!important> ${order.status} </div> </div> </div> <div class=description> <div class=\\\"ui stackable grid\\\"> <div class=\\\"sixteen wide column\\\" style=padding:3px!important> ${order.shippingMethodName} </div> <div if.bind=!order.shipDate class=\\\"sixteen wide column\\\" style=padding:3px!important> ${order.futureShipDate | simpleDateFormat} </div> <div if.bind=order.shipDate class=\\\"sixteen wide column\\\" style=padding:3px!important> ${order.shipDate | simpleDateFormat} </div> <div class=\\\"sixteen wide column\\\" style=padding:3px!important> <p style=white-space:pre-line>${order.shippingAddress.addressForm}</p> </div> <div class=\\\"sixteen wide column\\\" style=padding:3px!important> <p style=white-space:pre-line>${order.email}</p> </div> <div if.bind=order.trackingNumberList class=\\\"sixteen wide column\\\" style=padding:3px!important> <a href.bind=order.trackingLink target=_blank>${order.trackingNumberList}</a> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </template>\";","import { StandardView } from \"shared-ui/views/standard-view\";\nimport { autoinject } from \"aurelia-framework\";\nimport { ScreenViewUtility } from \"shared-ui/utility/screen-view-utility\";\n\n@autoinject\nexport class UserSessionAlertView extends StandardView {\n    static readonly MINUTES_REMAINING_TO_CHECK = 10;\n    static readonly SECONDS_INTERVAL_TO_CHECK = 60;\n    $alertmodal: any;\n    minutesRemaining: number;\n\n    constructor(private screenViewUtil: ScreenViewUtility) {\n        super(UserSessionAlertView.name);\n        setInterval(this.checkValidSession.bind(this), UserSessionAlertView.SECONDS_INTERVAL_TO_CHECK * 1000);\n    }\n\n    async attached() {\n        $(this.$alertmodal).modal({\n            closable: false,\n            onDeny: () => {\n                this.userSession.logout();\n            },\n            onApprove: () => {\n                this.refreshToken();\n            }\n        });\n        super.attached();\n    }\n\n    async activate(params, routeData) {\n        super.activate(params, routeData);\n    }    \n\n    async checkValidSession() {        \n        this.minutesRemaining = await this.userSession.getTimeLeftInMinutes();\n        if(this.minutesRemaining <= 0){\n            await this.userSession.logout();\n        }\n        else if (this.minutesRemaining <= UserSessionAlertView.MINUTES_REMAINING_TO_CHECK) {\n            $(this.$alertmodal).modal('show');\n        }\n    }\n\n    async refreshToken() {\n        this.screenViewUtil.disableView = true;\n        await this.userSession.refreshToken();\n        this.screenViewUtil.disableView = false;\n    }    \n}","module.exports = \"<template> <div class=\\\"ui basic modal\\\" ref=$alertmodal> <div class=\\\"ui icon header\\\"> <i class=\\\"exclamation triangle icon\\\"></i> You will be logged out in ${minutesRemaining} minutes! </div> <div class=\\\"ui centered grid content\\\"> <p>Click Ok to stay logged in.</p> </div> <div class=\\\"ui center aligned grid actions\\\"> <div class=\\\"ui red deny button\\\"> Logout </div> <div class=\\\"ui green ok button\\\"> Ok </div> </div> </div> </template>\";"],"sourceRoot":""}